about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/tk
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/tk')
-rw-r--r--nixpkgs/pkgs/development/libraries/tk/8.5.nix28
-rw-r--r--nixpkgs/pkgs/development/libraries/tk/8.6.nix29
-rw-r--r--nixpkgs/pkgs/development/libraries/tk/Fix-bad-install_name-for-libtk8.6.dylib.patch29
-rw-r--r--nixpkgs/pkgs/development/libraries/tk/different-prefix-with-tcl.patch25
-rw-r--r--nixpkgs/pkgs/development/libraries/tk/generic.nix63
5 files changed, 174 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/tk/8.5.nix b/nixpkgs/pkgs/development/libraries/tk/8.5.nix
new file mode 100644
index 000000000000..c5d5c478c670
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/tk/8.5.nix
@@ -0,0 +1,28 @@
+{ lib
+, stdenv
+, callPackage
+, fetchurl
+, fetchpatch
+, tcl
+, ...
+} @ args:
+
+callPackage ./generic.nix (args // {
+
+  src = fetchurl {
+    url = "mirror://sourceforge/tcl/tk${tcl.version}-src.tar.gz";
+    sha256 = "0an3wqkjzlyyq6l9l3nawz76axsrsppbyylx0zk9lkv7llrala03";
+  };
+
+  patches = lib.optionals stdenv.isDarwin [
+    # Define MODULE_SCOPE before including tkPort.h
+    # https://core.tcl-lang.org/tk/info/dba9f5ce3b
+    (fetchpatch {
+      name = "module_scope.patch";
+      url = "https://core.tcl-lang.org/tk/vpatch?from=ef6c6960c53ea30c&to=9b8aa74eebed509a";
+      extraPrefix = "";
+      sha256 = "0crhf4zrzdpc1jdgyv6l6mxqgmny12r3i39y1i0j8q3pbqkd04bv";
+    })
+  ];
+
+})
diff --git a/nixpkgs/pkgs/development/libraries/tk/8.6.nix b/nixpkgs/pkgs/development/libraries/tk/8.6.nix
new file mode 100644
index 000000000000..c4825d2ccf9d
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/tk/8.6.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, callPackage
+, fetchurl
+, fetchpatch
+, tcl
+, ...
+} @ args:
+
+callPackage ./generic.nix (args // {
+
+  src = fetchurl {
+    url = "mirror://sourceforge/tcl/tk${tcl.version}.1-src.tar.gz"; # TODO: remove '.1' for v8.6.10 or v8.7.x
+    sha256 = "1gh9k7l76qg9l0sb78ijw9xz4xl1af47aqbdifb6mjpf3cbsnv00";
+  };
+
+  patches = [ ./different-prefix-with-tcl.patch ] ++ lib.optionals stdenv.isDarwin [
+    ./Fix-bad-install_name-for-libtk8.6.dylib.patch
+    # Define MODULE_SCOPE before including tkPort.h
+    # https://core.tcl-lang.org/tk/info/dba9f5ce3b
+    (fetchpatch {
+      name = "module_scope.patch";
+      url = "https://core.tcl-lang.org/tk/vpatch?from=ef6c6960c53ea30c&to=9b8aa74eebed509a";
+      extraPrefix = "";
+      sha256 = "0crhf4zrzdpc1jdgyv6l6mxqgmny12r3i39y1i0j8q3pbqkd04bv";
+    })
+  ];
+
+})
diff --git a/nixpkgs/pkgs/development/libraries/tk/Fix-bad-install_name-for-libtk8.6.dylib.patch b/nixpkgs/pkgs/development/libraries/tk/Fix-bad-install_name-for-libtk8.6.dylib.patch
new file mode 100644
index 000000000000..528a75e1c91f
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/tk/Fix-bad-install_name-for-libtk8.6.dylib.patch
@@ -0,0 +1,29 @@
+From f90278dac42135acd55200b7d2153f44d72fec53 Mon Sep 17 00:00:00 2001
+From: Josef Knedl <josef.kemetmueller@aon.at>
+Date: Wed, 24 Feb 2016 00:37:40 +0100
+Subject: [PATCH] Fix bad install_name for libtk8.6.dylib
+
+This follows: https://trac.macports.org/ticket/37395
+and https://trac.macports.org/changeset/100816
+Alternative would be to use Quartz build instead:
+https://sourceforge.net/p/tktoolkit/bugs/3048/
+---
+ unix/Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/unix/Makefile.in b/unix/Makefile.in
+index f21fdbb..1b89256 100644
+--- a/unix/Makefile.in
++++ b/unix/Makefile.in
+@@ -283,7 +283,7 @@ CC_SEARCH_FLAGS	= @CC_SEARCH_FLAGS@
+ LD_SEARCH_FLAGS	= @LD_SEARCH_FLAGS@
+ 
+ # support for embedded libraries on Darwin / Mac OS X
+-DYLIB_INSTALL_DIR	= ${LIB_RUNTIME_DIR}
++DYLIB_INSTALL_DIR	= $(libdir)
+ 
+ # support for building the Aqua resource file
+ TK_RSRC_FILE		= @TK_RSRC_FILE@
+-- 
+2.7.1
+
diff --git a/nixpkgs/pkgs/development/libraries/tk/different-prefix-with-tcl.patch b/nixpkgs/pkgs/development/libraries/tk/different-prefix-with-tcl.patch
new file mode 100644
index 000000000000..aee46e149b1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/tk/different-prefix-with-tcl.patch
@@ -0,0 +1,25 @@
+diff --git a/generic/tkWindow.c b/generic/tkWindow.c
+index b5cbbab..96b5501 100644
+--- a/generic/tkWindow.c
++++ b/generic/tkWindow.c
+@@ -988,6 +988,7 @@ TkCreateMainWindow(
+ 
+     Tcl_SetVar2(interp, "tk_patchLevel", NULL, TK_PATCH_LEVEL, TCL_GLOBAL_ONLY);
+     Tcl_SetVar2(interp, "tk_version",    NULL, TK_VERSION,     TCL_GLOBAL_ONLY);
++    Tcl_SetVar2(interp, "tk_library",    NULL, TK_LIBRARY,     TCL_GLOBAL_ONLY);
+ 
+     tsdPtr->numMainWindows++;
+     return tkwin;
+diff --git a/unix/Makefile.in b/unix/Makefile.in
+index f21fdbb..c61b0df 100644
+--- a/unix/Makefile.in
++++ b/unix/Makefile.in
+@@ -1029,7 +1029,7 @@ tkVisual.o: $(GENERIC_DIR)/tkVisual.c
+ 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkVisual.c
+ 
+ tkWindow.o: $(GENERIC_DIR)/tkWindow.c
+-	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkWindow.c
++	$(CC) -c $(CC_SWITCHES) -DTK_LIBRARY=\"${TK_LIBRARY}\" $(GENERIC_DIR)/tkWindow.c
+ 
+ tkButton.o: $(GENERIC_DIR)/tkButton.c
+ 	$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tkButton.c
diff --git a/nixpkgs/pkgs/development/libraries/tk/generic.nix b/nixpkgs/pkgs/development/libraries/tk/generic.nix
new file mode 100644
index 000000000000..6aa67bf274de
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/tk/generic.nix
@@ -0,0 +1,63 @@
+{ stdenv, lib, src, pkg-config, tcl, libXft, patches ? []
+, enableAqua ? stdenv.isDarwin, darwin
+, ... }:
+
+tcl.mkTclDerivation {
+  name = "tk-${tcl.version}";
+
+  inherit src patches;
+
+  outputs = [ "out" "man" "dev" ];
+
+  setOutputFlags = false;
+
+  preConfigure = ''
+    configureFlagsArray+=(--mandir=$man/share/man --enable-man-symlinks)
+    cd unix
+  '';
+
+  postPatch = ''
+    for file in $(find library/demos/. -type f ! -name "*.*"); do
+      substituteInPlace $file --replace "exec wish" "exec $out/bin/wish"
+    done
+  '';
+
+  postInstall = ''
+    ln -s $out/bin/wish* $out/bin/wish
+    cp ../{unix,generic}/*.h $out/include
+    ln -s $out/lib/libtk${tcl.release}${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libtk${stdenv.hostPlatform.extensions.sharedLibrary}
+  ''
+  + lib.optionalString (stdenv.isDarwin) ''
+    cp ../macosx/*.h $out/include
+  '';
+
+  configureFlags = [
+    "--enable-threads"
+  ] ++ lib.optional stdenv.is64bit "--enable-64bit"
+    ++ lib.optional enableAqua "--enable-aqua";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = lib.optional enableAqua (with darwin.apple_sdk.frameworks; [ Cocoa ]);
+
+  propagatedBuildInputs = [ libXft ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # fails. can't find itself
+
+  inherit tcl;
+
+  passthru = rec {
+    inherit (tcl) release version;
+    libPrefix = "tk${tcl.release}";
+    libdir = "lib/${libPrefix}";
+  };
+
+  meta = with lib; {
+    description = "A widget toolkit that provides a library of basic elements for building a GUI in many different programming languages";
+    homepage = "https://www.tcl.tk/";
+    license = licenses.tcltk;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ lovek323 vrthra ];
+  };
+}