about summary refs log tree commit diff
path: root/pkgs/applications/window-managers/icewm
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/window-managers/icewm')
-rw-r--r--pkgs/applications/window-managers/icewm/default.nix44
-rw-r--r--pkgs/applications/window-managers/icewm/fix-strlcat_strlcpy.patch236
-rw-r--r--pkgs/applications/window-managers/icewm/musl.patch23
3 files changed, 24 insertions, 279 deletions
diff --git a/pkgs/applications/window-managers/icewm/default.nix b/pkgs/applications/window-managers/icewm/default.nix
index 71a4ec3549a7c..f388c2d99db20 100644
--- a/pkgs/applications/window-managers/icewm/default.nix
+++ b/pkgs/applications/window-managers/icewm/default.nix
@@ -1,36 +1,40 @@
-{ stdenv, fetchurl, cmake, gettext
+{ stdenv, fetchFromGitHub, cmake, gettext, perl, asciidoc
 , libjpeg, libtiff, libungif, libpng, imlib, expat
 , freetype, fontconfig, pkgconfig, gdk-pixbuf
 , mkfontdir, libX11, libXft, libXext, libXinerama
 , libXrandr, libICE, libSM, libXpm, libXdmcp, libxcb
-, libpthreadstubs, pcre }:
+, libpthreadstubs, pcre, libXdamage, libXcomposite, libXfixes
+, libsndfile, fribidi }:
 
-with stdenv.lib;
 stdenv.mkDerivation rec {
   pname = "icewm";
-  version = "1.4.2";
+  version = "1.6.0";
 
-  buildInputs =
-  [ cmake gettext libjpeg libtiff libungif libpng imlib expat
-    freetype fontconfig pkgconfig gdk-pixbuf mkfontdir libX11
-    libXft libXext libXinerama libXrandr libICE libSM libXpm
-    libXdmcp libxcb libpthreadstubs pcre ];
-
-  src = fetchurl {
-    url = "https://github.com/bbidulock/icewm/archive/${version}.tar.gz";
-    sha256 = "05chzjjnb4n4j05ld2gmhhr07c887qb4j9inwg9izhvml51af1bw";
+  src = fetchFromGitHub {
+    owner  = "bbidulock";
+    repo   = "icewm";
+    rev    = version;
+    sha256 = "1l8hjmb19d7ds7z21cx207h86wkjcmmmamcnalgkwh4alvbawc2p";
   };
 
-  preConfigure = ''
-    export cmakeFlags="-DPREFIX=$out -DCFGDIR=/etc/icewm"
-  '';
+  nativeBuildInputs = [ cmake pkgconfig perl asciidoc ];
 
-  patches = [ ./fix-strlcat_strlcpy.patch ] ++
-    stdenv.lib.optional stdenv.hostPlatform.isMusl ./musl.patch;
+  buildInputs = [
+    gettext libjpeg libtiff libungif libpng imlib expat
+    freetype fontconfig gdk-pixbuf mkfontdir libX11
+    libXft libXext libXinerama libXrandr libICE libSM libXpm
+    libXdmcp libxcb libpthreadstubs pcre libsndfile fribidi
+    libXdamage libXcomposite libXfixes
+  ];
+
+  cmakeFlags = [ "-DPREFIX=$out" "-DCFGDIR=/etc/icewm" ];
 
-  patchFlags = [ "-p0" ];
+  # install legacy themes
+  postInstall = ''
+    cp -r ../lib/themes/{gtk2,Natural,nice,nice2,warp3,warp4,yellowmotif} $out/share/icewm/themes/
+  '';
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "A simple, lightweight X window manager";
     longDescription = ''
       IceWM is a window manager for the X Window System. The goal of
diff --git a/pkgs/applications/window-managers/icewm/fix-strlcat_strlcpy.patch b/pkgs/applications/window-managers/icewm/fix-strlcat_strlcpy.patch
deleted file mode 100644
index 9721e125b0511..0000000000000
--- a/pkgs/applications/window-managers/icewm/fix-strlcat_strlcpy.patch
+++ /dev/null
@@ -1,236 +0,0 @@
---- src/apppstatus.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/apppstatus.cc	2017-08-09 09:12:54.332052762 +0200
-@@ -366,7 +366,7 @@
-             sscanf(p, "%s %s %s %s %s", val[0], val[1], val[2], val[3], val[4]);
-             for (i = 0; i < 4; i++) {
-                 if (strncmp(val[i+1], "?", 1) != 0)
--                    strlcpy(phoneNumber, val[i+1], sizeof phoneNumber);
-+                    my_strlcpy(phoneNumber, val[i+1], sizeof phoneNumber);
-             }
-         }
- 
---- src/base.h	2017-07-30 10:59:06.000000000 +0200
-+++ src/base.h	2017-08-09 09:11:13.082025484 +0200
-@@ -44,9 +44,9 @@
- /*** String Functions *********************************************************/
- 
- /* Prefer this as a safer alternative over strcpy. Return strlen(from). */
--size_t strlcpy(char *dest, const char *from, size_t dest_size);
-+size_t my_strlcpy(char *dest, const char *from, size_t dest_size);
- /* Prefer this over strcat. Return strlen(dest) + strlen(from). */
--size_t strlcat(char *dest, const char *from, size_t dest_size);
-+size_t my_strlcat(char *dest, const char *from, size_t dest_size);
- 
- char *newstr(char const *str);
- char *newstr(char const *str, int len);
---- src/gnome2.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/gnome2.cc	2017-08-09 09:11:21.819027846 +0200
-@@ -158,8 +158,8 @@
-     const int plen = strlen(fPath);
- 
-     char tmp[256];
--    strlcpy(tmp, fPath, sizeof tmp);
--    strlcat(tmp, "/.directory", sizeof tmp);
-+    my_strlcpy(tmp, fPath, sizeof tmp);
-+    my_strlcat(tmp, "/.directory", sizeof tmp);
- 
-     if (isDir && !stat(tmp, &sb)) { // looks like kde/gnome1 style
- 
-@@ -279,8 +279,8 @@
- 
-             while ((file = readdir(dir)) != NULL) {
-                 char fullpath[256];
--                strlcpy(fullpath, dirname, sizeof fullpath);
--                strlcat(fullpath, file->d_name, sizeof fullpath);
-+                my_strlcpy(fullpath, dirname, sizeof fullpath);
-+                my_strlcat(fullpath, file->d_name, sizeof fullpath);
-                 GnomeDesktopItem *ditem =
-                     gnome_desktop_item_new_from_file(fullpath,
-                                                      (GnomeDesktopItemLoadFlags)0,
---- src/icehelp.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/icehelp.cc	2017-08-09 09:11:31.490030459 +0200
-@@ -1790,8 +1790,8 @@
-     const size_t size = 9 + strlen(cfmt) + strlen(cstr) + strlen(crea);
-     char *cbuf = (char *)malloc(size);
-     snprintf(cbuf, size, cfmt, cstr);
--    strlcat(cbuf, ":\n ", size);
--    strlcat(cbuf, crea, size);
-+    my_strlcat(cbuf, ":\n ", size);
-+    my_strlcat(cbuf, crea, size);
- 
-     node *root = new node(node::div);
-     flist<node> nodes(root);
---- src/icesm.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/icesm.cc	2017-08-09 09:13:12.946057758 +0200
-@@ -28,10 +28,10 @@
-         wordexp_t w;
-         if (wordexp(trim(buf), &w, 0) != 0 || w.we_wordc == 0)
-             return false;
--        size_t len = strlcpy(buf, trim(w.we_wordv[0]), bufsiz);
-+        size_t len = my_strlcpy(buf, trim(w.we_wordv[0]), bufsiz);
-         for (size_t k = 1; k < w.we_wordc && len < bufsiz; ++k) {
--            strlcat(buf, " ", bufsiz);
--            len = strlcat(buf, trim(w.we_wordv[k]), bufsiz);
-+            my_strlcat(buf, " ", bufsiz);
-+            len = my_strlcat(buf, trim(w.we_wordv[k]), bufsiz);
-         }
-         wordfree(&w);
-         if (len >= bufsiz)
-@@ -39,7 +39,7 @@
- #else
-         char *str = trim(buf);
-         if (str > buf)
--            strlcpy(buf, str, bufsiz);
-+            my_strlcpy(buf, str, bufsiz);
- #endif
-         if (buf[0] == '#' || buf[0] == '=')
-             buf[0] = 0;
---- src/icesound.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/icesound.cc	2017-08-09 09:11:26.686029161 +0200
-@@ -145,8 +145,8 @@
-     char * findSample(int sid)  {
-         char basefname[1024];
- 
--        strlcpy(basefname, gui_events[sid].name, sizeof basefname);
--        strlcat(basefname, ".wav", sizeof basefname);
-+        my_strlcpy(basefname, gui_events[sid].name, sizeof basefname);
-+        my_strlcat(basefname, ".wav", sizeof basefname);
- 
-         return findSample(basefname);
-     }
---- src/misc.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/misc.cc	2017-08-09 09:13:39.372064834 +0200
-@@ -448,7 +448,7 @@
- #endif
- 
- /* Prefer this as a safer alternative over strcpy. Return strlen(from). */
--size_t strlcpy(char *dest, const char *from, size_t dest_size)
-+size_t my_strlcpy(char *dest, const char *from, size_t dest_size)
- {
-     const char *in = from;
-     if (dest_size > 0) {
-@@ -463,12 +463,12 @@
- }
- 
- /* Prefer this over strcat. Return strlen(dest) + strlen(from). */
--size_t strlcat(char *dest, const char *from, size_t dest_size)
-+size_t my_strlcat(char *dest, const char *from, size_t dest_size)
- {
-     char *to = dest;
-     char *const stop = to + dest_size - 1;
-     while (to < stop && *to) ++to;
--    return to - dest + strlcpy(to, from, dest_size - (to - dest));
-+    return to - dest + my_strlcpy(to, from, dest_size - (to - dest));
- }
- 
- char *newstr(char const *str) {
---- src/strtest.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/strtest.cc	2017-08-09 09:13:24.395060823 +0200
-@@ -286,63 +286,63 @@
-     strtest tester("strlc");
-     char d[10] = "@";
-     size_t n;
--    n = strlcpy(d, "", 0);
-+    n = my_strlcpy(d, "", 0);
-     sequal(d, "@");
-     assert(d, n == 0);
- 
--    n = strlcpy(d, "a", 0);
-+    n = my_strlcpy(d, "a", 0);
-     sequal(d, "@");
-     assert(d, n == 1);
- 
--    n = strlcpy(d, "", 1);
-+    n = my_strlcpy(d, "", 1);
-     sequal(d, "");
-     assert(d, n == 0);
- 
--    n = strlcpy(d, "a", 1);
-+    n = my_strlcpy(d, "a", 1);
-     sequal(d, "");
-     assert(d, n == 1);
- 
--    n = strlcpy(d, "a", 2);
-+    n = my_strlcpy(d, "a", 2);
-     sequal(d, "a");
-     assert(d, n == 1);
- 
--    n = strlcpy(d, "ab", 2);
-+    n = my_strlcpy(d, "ab", 2);
-     sequal(d, "a");
-     assert(d, n == 2);
- 
--    n = strlcpy(d, "ab", 3);
-+    n = my_strlcpy(d, "ab", 3);
-     sequal(d, "ab");
-     assert(d, n == 2);
- 
--    n = strlcpy(d, "abc", sizeof d);
-+    n = my_strlcpy(d, "abc", sizeof d);
-     sequal(d, "abc");
-     assert(d, n == 3);
- 
--    n = strlcat(d, "def", 4);
-+    n = my_strlcat(d, "def", 4);
-     sequal(d, "abc");
-     assert(d, n == 6);
- 
--    n = strlcat(d, "def", sizeof d);
-+    n = my_strlcat(d, "def", sizeof d);
-     sequal(d, "abcdef");
-     assert(d, n == 6);
- 
--    n = strlcat(d, "ghijkl", sizeof d);
-+    n = my_strlcat(d, "ghijkl", sizeof d);
-     sequal(d, "abcdefghi");
-     assert(d, n == 12);
- 
--    n = strlcpy(d, "123", sizeof d);
-+    n = my_strlcpy(d, "123", sizeof d);
-     sequal(d, "123");
-     assert(d, n == 3);
- 
--    n = strlcpy(d, d + 1, sizeof d);
-+    n = my_strlcpy(d, d + 1, sizeof d);
-     sequal(d, "23");
-     assert(d, n == 2);
- 
--    n = strlcpy(d, d + 1, sizeof d);
-+    n = my_strlcpy(d, d + 1, sizeof d);
-     sequal(d, "3");
-     assert(d, n == 1);
- 
--    n = strlcpy(d, d + 1, sizeof d);
-+    n = my_strlcpy(d, d + 1, sizeof d);
-     sequal(d, "");
-     assert(d, n == 0);
- }
-@@ -418,7 +418,7 @@
-         while (a.next()) {
-             const char *e = a.entry();
-             assert(e, strcoll(buf, e) < 0);
--            strlcpy(buf, e, sizeof buf);
-+            my_strlcpy(buf, e, sizeof buf);
-         }
-         assert(buf, strcoll(buf, "~~~~~~~~~") < 0);
-     }
-@@ -437,7 +437,7 @@
-             cstring c(s.entry());
-             const char *e = c.c_str();
-             assert(e, strcoll(buf, e) < 0);
--            strlcpy(buf, e, sizeof buf);
-+            my_strlcpy(buf, e, sizeof buf);
-         }
-         assert(buf, strcoll(buf, "~~~~~~~~~") < 0);
-     }
---- src/udir.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/udir.cc	2017-08-09 09:13:28.346061883 +0200
-@@ -66,7 +66,7 @@
-     if (impl) {
-         DirPtr dirp(impl);
-         if (dirp.next()) {
--            strlcpy(fEntry, dirp.name(), sizeof fEntry);
-+            my_strlcpy(fEntry, dirp.name(), sizeof fEntry);
-             return true;
-         }
-     }
diff --git a/pkgs/applications/window-managers/icewm/musl.patch b/pkgs/applications/window-managers/icewm/musl.patch
deleted file mode 100644
index e7d18e3128742..0000000000000
--- a/pkgs/applications/window-managers/icewm/musl.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- src/ylocale.cc	2017-07-30 10:59:06.000000000 +0200
-+++ src/ylocale.cc	2017-08-09 08:15:50.938841549 +0200
-@@ -55,6 +55,8 @@
-     int const codesetItems[] = {
- #ifdef CONFIG_NL_CODESETS
- 	CONFIG_NL_CODESETS
-+#elif !defined(__GLIBC__)
-+	CODESET, 0
- #else
- 	CODESET, _NL_CTYPE_CODESET_NAME, 0
- #endif
---- src/globit.c	2017-07-30 10:59:06.000000000 +0200
-+++ src/globit.c	2017-08-09 08:17:18.691824584 +0200
-@@ -143,7 +143,9 @@
- 	} else if (*pattern == '~') {
- 		/* yes, tilde */
- 		is_absolute = 2;
-+#if defined(__GLIBC__)
- 		glob_flags |= GLOB_TILDE;
-+#endif
- 		/* any slash in the pattern? */
- 		while (*cp && *cp != '/')
- 			++cp;