Merge pull request #329823 from ExpidusOS/fix/pkgsllvm/elfutils
[NixPkgs.git] / pkgs / by-name / sw / swt / package.nix
blob49f2d4ce0f8874d7d93f886f0df4353d96f08cde
2   atk,
3   fetchzip,
4   gtk2,
5   jdk,
6   lib,
7   libGL,
8   libGLU,
9   libXt,
10   libXtst,
11   pkg-config,
12   stdenv,
13   stripJavaArchivesHook,
16 stdenv.mkDerivation (finalAttrs: {
17   pname = "swt";
18   version = "4.5";
19   fullVersion = "${finalAttrs.version}-201506032000";
21   hardeningDisable = [ "format" ];
23   passthru.srcMetadataByPlatform = {
24     x86_64-linux.platform = "gtk-linux-x86_64";
25     x86_64-linux.sha256 = "17frac2nsx22hfa72264as31rn35hfh9gfgy0n6wvc3knl5d2716";
26     i686-linux.platform = "gtk-linux-x86";
27     i686-linux.sha256 = "13ca17rga9yvdshqvh0sfzarmdcl4wv4pid0ls7v35v4844zbc8b";
28     x86_64-darwin.platform = "cocoa-macosx-x86_64";
29     x86_64-darwin.sha256 = "0wjyxlw7i9zd2m8syd6k1q85fj8pzhxlfsrl8fpgsj37p698bd0a";
30   };
31   passthru.srcMetadata =
32     finalAttrs.passthru.srcMetadataByPlatform.${stdenv.hostPlatform.system} or null;
33   # Alas, the Eclipse Project apparently doesn't produce source-only
34   # releases of SWT.  So we just grab a binary release and extract
35   # "src.zip" from that.
36   src =
37     let
38       inherit (finalAttrs.passthru) srcMetadata;
39     in
40     assert srcMetadata != null;
41     fetchzip {
42       url = "https://archive.eclipse.org/eclipse/downloads/drops4/R-${finalAttrs.fullVersion}/swt-${finalAttrs.version}-${srcMetadata.platform}.zip";
43       inherit (srcMetadata) sha256;
44       stripRoot = false;
45       postFetch = ''
46         mkdir "$unpackDir"
47         cd "$unpackDir"
49         renamed="$TMPDIR/src.zip"
50         mv -- "$out/src.zip" "$renamed"
51         unpackFile "$renamed"
52         rm -r -- "$out"
54         mv -- "$unpackDir" "$out"
55       '';
56     };
58   nativeBuildInputs = [
59     stripJavaArchivesHook
60     pkg-config
61   ];
62   buildInputs = [
63     atk
64     gtk2
65     jdk
66     libGL
67     libGLU
68     libXtst
69   ] ++ lib.optionals (lib.hasPrefix "8u" jdk.version) [ libXt ];
71   patches = [
72     ./awt-libs.patch
73     ./gtk-libs.patch
74   ];
76   prePatch = ''
77     # clear whitespace from makefiles (since we match on EOL later)
78     sed -i 's/ \+$//' ./*.mak
79   '';
81   postPatch =
82     let
83       makefile-sed = builtins.toFile "swt-makefile.sed" ''
84         # fix pkg-config invocations in CFLAGS/LIBS pairs.
85         #
86         # change:
87         #     FOOCFLAGS = `pkg-config --cflags `foo bar`
88         #     FOOLIBS = `pkg-config --libs-only-L foo` -lbaz
89         # into:
90         #     FOOCFLAGS = `pkg-config --cflags foo bar`
91         #     FOOLIBS = `pkg-config --libs foo bar`
92         #
93         # the latter works more consistently.
94         /^[A-Z0-9_]\+CFLAGS = `pkg-config --cflags [^`]\+`$/ {
95           N
96           s/${''
97             ^\([A-Z0-9_]\+\)CFLAGS = `pkg-config --cflags \(.\+\)`\
98             \1LIBS = `pkg-config --libs-only-L .\+$''}/${''
99             \1CFLAGS = `pkg-config --cflags \2`\
100             \1LIBS = `pkg-config --libs \2`''}/
101         }
102         # fix WebKit libs not being there
103         s/\$(WEBKIT_LIB) \$(WEBKIT_OBJECTS)$/\0 `pkg-config --libs glib-2.0`/g
104       '';
105     in
106     ''
107       declare -a makefiles=(./*.mak)
108       sed -i -f ${makefile-sed} "''${makefiles[@]}"
109       # assign Makefile variables eagerly & change backticks to `$(shell …)`
110       sed -i -e 's/ = `\([^`]\+\)`/ := $(shell \1)/' \
111         -e 's/`\([^`]\+\)`/$(shell \1)/' \
112         "''${makefiles[@]}"
113     '';
115   buildPhase = ''
116     runHook preBuild
118     export JAVA_HOME=${jdk}
120     ./build.sh
122     mkdir out
123     find org/ -name '*.java' -type f -exec javac -d out/ {} +
125     runHook postBuild
126   '';
128   installPhase = ''
129     runHook preInstall
131     if [[ -n "$prefix" ]]; then
132       install -d -- "$prefix"
133     fi
135     install -Dm 644 -t "$out/lib" -- *.so
137     install -d -- "$out/jars"
138     install -m 644 -t out -- version.txt
139     (cd out && jar -c *) > "$out/jars/swt.jar"
141     runHook postInstall
142   '';
144   meta = {
145     homepage = "https://www.eclipse.org/swt/";
146     description = ''
147       A widget toolkit for Java to access the user-interface facilities of
148       the operating systems on which it is implemented.
149     '';
150     license = lib.licenses.epl10;
151     maintainers = [ ];
152     platforms = lib.platforms.linux;
153   };