about summary refs log tree commit diff
path: root/pkgs/by-name/sw/swt/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/sw/swt/package.nix')
-rw-r--r--pkgs/by-name/sw/swt/package.nix154
1 files changed, 154 insertions, 0 deletions
diff --git a/pkgs/by-name/sw/swt/package.nix b/pkgs/by-name/sw/swt/package.nix
new file mode 100644
index 0000000000000..49f2d4ce0f887
--- /dev/null
+++ b/pkgs/by-name/sw/swt/package.nix
@@ -0,0 +1,154 @@
+{
+  atk,
+  fetchzip,
+  gtk2,
+  jdk,
+  lib,
+  libGL,
+  libGLU,
+  libXt,
+  libXtst,
+  pkg-config,
+  stdenv,
+  stripJavaArchivesHook,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "swt";
+  version = "4.5";
+  fullVersion = "${finalAttrs.version}-201506032000";
+
+  hardeningDisable = [ "format" ];
+
+  passthru.srcMetadataByPlatform = {
+    x86_64-linux.platform = "gtk-linux-x86_64";
+    x86_64-linux.sha256 = "17frac2nsx22hfa72264as31rn35hfh9gfgy0n6wvc3knl5d2716";
+    i686-linux.platform = "gtk-linux-x86";
+    i686-linux.sha256 = "13ca17rga9yvdshqvh0sfzarmdcl4wv4pid0ls7v35v4844zbc8b";
+    x86_64-darwin.platform = "cocoa-macosx-x86_64";
+    x86_64-darwin.sha256 = "0wjyxlw7i9zd2m8syd6k1q85fj8pzhxlfsrl8fpgsj37p698bd0a";
+  };
+  passthru.srcMetadata =
+    finalAttrs.passthru.srcMetadataByPlatform.${stdenv.hostPlatform.system} or null;
+  # Alas, the Eclipse Project apparently doesn't produce source-only
+  # releases of SWT.  So we just grab a binary release and extract
+  # "src.zip" from that.
+  src =
+    let
+      inherit (finalAttrs.passthru) srcMetadata;
+    in
+    assert srcMetadata != null;
+    fetchzip {
+      url = "https://archive.eclipse.org/eclipse/downloads/drops4/R-${finalAttrs.fullVersion}/swt-${finalAttrs.version}-${srcMetadata.platform}.zip";
+      inherit (srcMetadata) sha256;
+      stripRoot = false;
+      postFetch = ''
+        mkdir "$unpackDir"
+        cd "$unpackDir"
+
+        renamed="$TMPDIR/src.zip"
+        mv -- "$out/src.zip" "$renamed"
+        unpackFile "$renamed"
+        rm -r -- "$out"
+
+        mv -- "$unpackDir" "$out"
+      '';
+    };
+
+  nativeBuildInputs = [
+    stripJavaArchivesHook
+    pkg-config
+  ];
+  buildInputs = [
+    atk
+    gtk2
+    jdk
+    libGL
+    libGLU
+    libXtst
+  ] ++ lib.optionals (lib.hasPrefix "8u" jdk.version) [ libXt ];
+
+  patches = [
+    ./awt-libs.patch
+    ./gtk-libs.patch
+  ];
+
+  prePatch = ''
+    # clear whitespace from makefiles (since we match on EOL later)
+    sed -i 's/ \+$//' ./*.mak
+  '';
+
+  postPatch =
+    let
+      makefile-sed = builtins.toFile "swt-makefile.sed" ''
+        # fix pkg-config invocations in CFLAGS/LIBS pairs.
+        #
+        # change:
+        #     FOOCFLAGS = `pkg-config --cflags `foo bar`
+        #     FOOLIBS = `pkg-config --libs-only-L foo` -lbaz
+        # into:
+        #     FOOCFLAGS = `pkg-config --cflags foo bar`
+        #     FOOLIBS = `pkg-config --libs foo bar`
+        #
+        # the latter works more consistently.
+        /^[A-Z0-9_]\+CFLAGS = `pkg-config --cflags [^`]\+`$/ {
+          N
+          s/${''
+            ^\([A-Z0-9_]\+\)CFLAGS = `pkg-config --cflags \(.\+\)`\
+            \1LIBS = `pkg-config --libs-only-L .\+$''}/${''
+            \1CFLAGS = `pkg-config --cflags \2`\
+            \1LIBS = `pkg-config --libs \2`''}/
+        }
+        # fix WebKit libs not being there
+        s/\$(WEBKIT_LIB) \$(WEBKIT_OBJECTS)$/\0 `pkg-config --libs glib-2.0`/g
+      '';
+    in
+    ''
+      declare -a makefiles=(./*.mak)
+      sed -i -f ${makefile-sed} "''${makefiles[@]}"
+      # assign Makefile variables eagerly & change backticks to `$(shell …)`
+      sed -i -e 's/ = `\([^`]\+\)`/ := $(shell \1)/' \
+        -e 's/`\([^`]\+\)`/$(shell \1)/' \
+        "''${makefiles[@]}"
+    '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    export JAVA_HOME=${jdk}
+
+    ./build.sh
+
+    mkdir out
+    find org/ -name '*.java' -type f -exec javac -d out/ {} +
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    if [[ -n "$prefix" ]]; then
+      install -d -- "$prefix"
+    fi
+
+    install -Dm 644 -t "$out/lib" -- *.so
+
+    install -d -- "$out/jars"
+    install -m 644 -t out -- version.txt
+    (cd out && jar -c *) > "$out/jars/swt.jar"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://www.eclipse.org/swt/";
+    description = ''
+      A widget toolkit for Java to access the user-interface facilities of
+      the operating systems on which it is implemented.
+    '';
+    license = lib.licenses.epl10;
+    maintainers = [ ];
+    platforms = lib.platforms.linux;
+  };
+})