From 714eca6967a0017b3228966871a9a3803ab3effb Mon Sep 17 00:00:00 2001 From: taku0 Date: Sun, 20 Dec 2020 15:22:31 +0900 Subject: [PATCH 1/5] adoptopenjdk-bin: add support for GTK+ Look and Feel --- .../adoptopenjdk-bin/jdk-linux-base.nix | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/pkgs/development/compilers/adoptopenjdk-bin/jdk-linux-base.nix b/pkgs/development/compilers/adoptopenjdk-bin/jdk-linux-base.nix index 0fcad6c333f8..1c5fd67f2d95 100644 --- a/pkgs/development/compilers/adoptopenjdk-bin/jdk-linux-base.nix +++ b/pkgs/development/compilers/adoptopenjdk-bin/jdk-linux-base.nix @@ -4,16 +4,31 @@ sourcePerArch: , lib , fetchurl , autoPatchelfHook +, makeWrapper +# minimum dependencies , alsaLib -, freetype , fontconfig -, zlib -, xorg +, freetype , libffi +, xorg +, zlib +# runtime dependencies +, cups +# runtime dependencies for GTK+ Look and Feel +, gtkSupport ? true +, cairo +, glib +, gtk3 }: let cpuName = stdenv.hostPlatform.parsed.cpu.name; + runtimeDependencies = [ + cups + ] ++ lib.optionals gtkSupport [ + cairo glib gtk3 + ]; + runtimeLibraryPath = lib.makeLibraryPath runtimeDependencies; in let result = stdenv.mkDerivation rec { @@ -28,11 +43,19 @@ let result = stdenv.mkDerivation rec { }; buildInputs = [ - alsaLib freetype fontconfig zlib xorg.libX11 xorg.libXext xorg.libXtst - xorg.libXi xorg.libXrender stdenv.cc.cc.lib + alsaLib # libasound.so wanted by lib/libjsound.so + fontconfig + freetype + stdenv.cc.cc.lib # libstdc++.so.6 + xorg.libX11 + xorg.libXext + xorg.libXi + xorg.libXrender + xorg.libXtst + zlib ] ++ lib.optional stdenv.isAarch32 libffi; - nativeBuildInputs = [ autoPatchelfHook ]; + nativeBuildInputs = [ autoPatchelfHook makeWrapper ]; # See: https://github.com/NixOS/patchelf/issues/10 dontStrip = 1; @@ -57,6 +80,13 @@ let result = stdenv.mkDerivation rec { cat <> "$out/nix-support/setup-hook" if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi EOF + + # We cannot use -exec since wrapProgram is a function but not a command. + for bin in $( find "$out" -executable -type f ); do + if patchelf --print-interpreter "$bin" &> /dev/null; then + wrapProgram "$bin" --prefix LD_LIBRARY_PATH : "${runtimeLibraryPath}" + fi + done ''; preFixup = '' From 6e3d7fbb7cec2fd23699d676dce4096b229eded9 Mon Sep 17 00:00:00 2001 From: taku0 Date: Sat, 26 Dec 2020 16:29:15 +0900 Subject: [PATCH 2/5] zulu: add support for GTK+ Look and Feel --- pkgs/development/compilers/zulu/default.nix | 80 ++++++++++++++------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/pkgs/development/compilers/zulu/default.nix b/pkgs/development/compilers/zulu/default.nix index cbfa9997b8db..000530e66a74 100644 --- a/pkgs/development/compilers/zulu/default.nix +++ b/pkgs/development/compilers/zulu/default.nix @@ -1,7 +1,25 @@ -{ stdenv, lib, fetchurl, unzip, makeWrapper, setJavaClassPath -, zulu, glib, libxml2, ffmpeg_3, libxslt, libGL, alsaLib -, fontconfig, freetype, pango, gtk2, cairo, gdk-pixbuf, atk, xorg, zlib -, swingSupport ? true }: +{ stdenv +, lib +, fetchurl +, autoPatchelfHook +, unzip +, makeWrapper +, setJavaClassPath +, zulu +# minimum dependencies +, alsaLib +, fontconfig +, freetype +, zlib +, xorg +# runtime dependencies +, cups +# runtime dependencies for GTK+ Look and Feel +, gtkSupport ? stdenv.isLinux +, cairo +, glib +, gtk3 +}: let version = "11.41.23"; @@ -14,14 +32,12 @@ let hash = if stdenv.isDarwin then sha256_darwin else sha256_linux; extension = if stdenv.isDarwin then "zip" else "tar.gz"; - libraries = [ - stdenv.cc.libc glib libxml2 ffmpeg_3 libxslt libGL - xorg.libXxf86vm alsaLib fontconfig freetype pango - gtk2 cairo gdk-pixbuf atk zlib - ] ++ (lib.optionals swingSupport (with xorg; [ - xorg.libX11 xorg.libXext xorg.libXtst xorg.libXi xorg.libXp - xorg.libXt xorg.libXrender stdenv.cc.cc - ])); + runtimeDependencies = [ + cups + ] ++ lib.optionals gtkSupport [ + cairo glib gtk3 + ]; + runtimeLibraryPath = lib.makeLibraryPath runtimeDependencies; in stdenv.mkDerivation { inherit version openjdk platform hash extension; @@ -33,23 +49,29 @@ in stdenv.mkDerivation { sha256 = hash; }; - buildInputs = [ makeWrapper ] ++ lib.optional stdenv.isDarwin unzip; + buildInputs = lib.optionals stdenv.isLinux [ + alsaLib # libasound.so wanted by lib/libjsound.so + fontconfig + freetype + stdenv.cc.cc # libstdc++.so.6 + xorg.libX11 + xorg.libXext + xorg.libXi + xorg.libXrender + xorg.libXtst + zlib + ]; + + nativeBuildInputs = [ + autoPatchelfHook makeWrapper + ] ++ lib.optionals stdenv.isDarwin [ + unzip + ]; installPhase = '' mkdir -p $out cp -r ./* "$out/" - rpath=$rpath''${rpath:+:}$out/lib/jli - rpath=$rpath''${rpath:+:}$out/lib/server - rpath=$rpath''${rpath:+:}$out/lib - - # set all the dynamic linkers - find $out -type f -perm -0100 \ - -exec patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - --set-rpath "$rpath" {} \; - - find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; - mkdir -p $out/nix-support printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs @@ -57,9 +79,17 @@ in stdenv.mkDerivation { cat <> $out/nix-support/setup-hook if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi EOF + '' + lib.optionalString stdenv.isLinux '' + # We cannot use -exec since wrapProgram is a function but not a command. + for bin in $( find "$out" -executable -type f ); do + wrapProgram "$bin" --prefix LD_LIBRARY_PATH : "${runtimeLibraryPath}" + done ''; - rpath = lib.strings.makeLibraryPath libraries; + preFixup = '' + find "$out" -name libfontmanager.so -exec \ + patchelf --add-needed libfontconfig.so {} \; + ''; passthru = { home = zulu; From 20b4ec51515d3d86b70b81bda6d51395943c11b1 Mon Sep 17 00:00:00 2001 From: taku0 Date: Mon, 28 Dec 2020 16:47:49 +0900 Subject: [PATCH 3/5] zulu8: add support for GTK+ Look and Feel --- pkgs/development/compilers/zulu/8.nix | 83 ++++++++++++++++++--------- 1 file changed, 55 insertions(+), 28 deletions(-) diff --git a/pkgs/development/compilers/zulu/8.nix b/pkgs/development/compilers/zulu/8.nix index 2bc90539be1e..dd1660d9fec7 100644 --- a/pkgs/development/compilers/zulu/8.nix +++ b/pkgs/development/compilers/zulu/8.nix @@ -1,7 +1,24 @@ -{ stdenv, lib, fetchurl, unzip, makeWrapper, setJavaClassPath -, zulu, glib, libxml2, ffmpeg_3, libxslt, libGL, alsaLib -, fontconfig, freetype, pango, gtk2, cairo, gdk-pixbuf, atk, xorg -, swingSupport ? true }: +{ stdenv +, lib +, fetchurl +, autoPatchelfHook +, unzip +, makeWrapper +, setJavaClassPath +, zulu +# minimum dependencies +, alsaLib +, fontconfig +, freetype +, xorg +# runtime dependencies +, cups +# runtime dependencies for GTK+ Look and Feel +, gtkSupport ? stdenv.isLinux +, cairo +, glib +, gtk3 +}: let version = "8.48.0.53"; @@ -14,14 +31,12 @@ let hash = if stdenv.isDarwin then sha256_darwin else sha256_linux; extension = if stdenv.isDarwin then "zip" else "tar.gz"; - libraries = [ - stdenv.cc.libc glib libxml2 ffmpeg_3 libxslt libGL - xorg.libXxf86vm alsaLib fontconfig freetype pango - gtk2 cairo gdk-pixbuf atk - ] ++ (lib.optionals swingSupport (with xorg; [ - xorg.libX11 xorg.libXext xorg.libXtst xorg.libXi xorg.libXp - xorg.libXt xorg.libXrender stdenv.cc.cc - ])); + runtimeDependencies = [ + cups + ] ++ lib.optionals gtkSupport [ + cairo glib gtk3 + ]; + runtimeLibraryPath = lib.makeLibraryPath runtimeDependencies; in stdenv.mkDerivation { inherit version openjdk platform hash extension; @@ -33,26 +48,28 @@ in stdenv.mkDerivation { sha256 = hash; }; - buildInputs = [ makeWrapper ] ++ lib.optional stdenv.isDarwin unzip; + buildInputs = lib.optionals stdenv.isLinux [ + alsaLib # libasound.so wanted by lib/libjsound.so + fontconfig + freetype + stdenv.cc.cc # libstdc++.so.6 + xorg.libX11 + xorg.libXext + xorg.libXi + xorg.libXrender + xorg.libXtst + ]; + + nativeBuildInputs = [ + autoPatchelfHook makeWrapper + ] ++ lib.optionals stdenv.isDarwin [ + unzip + ]; installPhase = '' mkdir -p $out cp -r ./* "$out/" - jrePath="$out/jre" - - rpath=$rpath''${rpath:+:}$jrePath/lib/amd64/jli - rpath=$rpath''${rpath:+:}$jrePath/lib/amd64/server - rpath=$rpath''${rpath:+:}$jrePath/lib/amd64/xawt - rpath=$rpath''${rpath:+:}$jrePath/lib/amd64 - - # set all the dynamic linkers - find $out -type f -perm -0100 \ - -exec patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - --set-rpath "$rpath" {} \; - - find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \; - mkdir -p $out/nix-support printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs @@ -60,9 +77,19 @@ in stdenv.mkDerivation { cat <> $out/nix-support/setup-hook if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi EOF + '' + lib.optionalString stdenv.isLinux '' + # We cannot use -exec since wrapProgram is a function but not a command. + for bin in $( find "$out" -executable -type f ); do + if patchelf --print-interpreter "$bin" &> /dev/null; then + wrapProgram "$bin" --prefix LD_LIBRARY_PATH : "${runtimeLibraryPath}" + fi + done ''; - rpath = lib.strings.makeLibraryPath libraries; + preFixup = '' + find "$out" -name libfontmanager.so -exec \ + patchelf --add-needed libfontconfig.so {} \; + ''; passthru = { home = zulu; From 032b5cd15640a4e33e6e80ed4988ad2d78886931 Mon Sep 17 00:00:00 2001 From: taku0 Date: Sun, 20 Dec 2020 15:23:34 +0900 Subject: [PATCH 4/5] graalvm11-ce, graalvm8-ce: add support for Swing apps Adds needed libraries with `autoPatchelfHook`. This ensures required libraries are linked for future. --- .../compilers/graalvm/community-edition.nix | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/pkgs/development/compilers/graalvm/community-edition.nix b/pkgs/development/compilers/graalvm/community-edition.nix index 96ba9afc2379..b4a0528611c8 100644 --- a/pkgs/development/compilers/graalvm/community-edition.nix +++ b/pkgs/development/compilers/graalvm/community-edition.nix @@ -1,4 +1,19 @@ -{ lib, stdenv, fetchurl, perl, unzip, glibc, zlib, setJavaClassPath, Foundation, openssl }: +{ stdenv +, lib +, fetchurl +, autoPatchelfHook +, Foundation +, setJavaClassPath +, alsaLib +, fontconfig +, freetype +, glibc +, openssl +, perl +, unzip +, xorg +, zlib +}: let platform = if stdenv.isDarwin then "darwin-amd64" else "linux-amd64"; @@ -50,7 +65,27 @@ let url = "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${version}/wasm-installable-svm-java${javaVersionPlatform}-${version}.jar"; }) ]; - nativeBuildInputs = [ unzip perl ]; + + buildInputs = lib.optionals stdenv.isLinux [ + zlib + fontconfig + freetype + xorg.libX11 + xorg.libXi + xorg.libXrender + xorg.libXext + xorg.libXtst + stdenv.cc.cc.lib # libstdc++.so.6 + alsaLib # libasound.so wanted by lib/libjsound.so + openssl # libssl.so wanted by languages/ruby/lib/mri/openssl.so + ]; + + # Workaround for libssl.so.10 wanted by TruffleRuby + # Resulting TruffleRuby cannot use `openssl` library. + autoPatchelfIgnoreMissingDeps = true; + + nativeBuildInputs = [ unzip perl autoPatchelfHook ]; + unpackPhase = '' unpack_jar() { jar=$1 @@ -143,25 +178,9 @@ let cat < $out/nix-support/setup-hook if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi EOF - ''; - postFixup = '' - rpath="${ { "8" = "$out/jre/lib/amd64/jli:$out/jre/lib/amd64/server:$out/jre/lib/amd64:$out/jre/languages/ruby/lib/cext"; - "11" = "$out/lib/jli:$out/lib/server:$out/lib:$out/languages/ruby/lib/cext"; - }.${javaVersion} - }:${ - lib.makeLibraryPath [ - stdenv.cc.cc.lib # libstdc++.so.6 - zlib # libz.so.1 - ]}" - - ${lib.optionalString stdenv.isLinux '' - for f in $(find $out -type f -perm -0100); do - patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$f" || true - patchelf --set-rpath "$rpath" "$f" || true - if ldd "$f" | fgrep 'not found'; then echo "in file $f"; fi - done - ''} + find "$out" -name libfontmanager.so -exec \ + patchelf --add-needed libfontconfig.so {} \; ''; # $out/bin/native-image needs zlib to build native executables. From 26fb8f91106d63810c21f820c5bee2103da0995b Mon Sep 17 00:00:00 2001 From: taku0 Date: Sun, 20 Dec 2020 17:52:16 +0900 Subject: [PATCH 5/5] graalvm11-ce, graalvm8-ce: add support for GTK+ Look and Feel --- .../compilers/graalvm/community-edition.nix | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/pkgs/development/compilers/graalvm/community-edition.nix b/pkgs/development/compilers/graalvm/community-edition.nix index b4a0528611c8..ea18be562503 100644 --- a/pkgs/development/compilers/graalvm/community-edition.nix +++ b/pkgs/development/compilers/graalvm/community-edition.nix @@ -2,8 +2,10 @@ , lib , fetchurl , autoPatchelfHook -, Foundation , setJavaClassPath +, makeWrapper +# minimum dependencies +, Foundation , alsaLib , fontconfig , freetype @@ -13,10 +15,23 @@ , unzip , xorg , zlib +# runtime dependencies +, cups +# runtime dependencies for GTK+ Look and Feel +, gtkSupport ? true +, cairo +, glib +, gtk3 }: let platform = if stdenv.isDarwin then "darwin-amd64" else "linux-amd64"; + runtimeDependencies = [ + cups + ] ++ lib.optionals gtkSupport [ + cairo glib gtk3 + ]; + runtimeLibraryPath = lib.makeLibraryPath runtimeDependencies; common = javaVersion: let javaVersionPlatform = "${javaVersion}-${platform}"; @@ -67,24 +82,24 @@ let ]; buildInputs = lib.optionals stdenv.isLinux [ - zlib + alsaLib # libasound.so wanted by lib/libjsound.so fontconfig freetype + openssl # libssl.so wanted by languages/ruby/lib/mri/openssl.so + stdenv.cc.cc.lib # libstdc++.so.6 xorg.libX11 + xorg.libXext xorg.libXi xorg.libXrender - xorg.libXext xorg.libXtst - stdenv.cc.cc.lib # libstdc++.so.6 - alsaLib # libasound.so wanted by lib/libjsound.so - openssl # libssl.so wanted by languages/ruby/lib/mri/openssl.so + zlib ]; # Workaround for libssl.so.10 wanted by TruffleRuby # Resulting TruffleRuby cannot use `openssl` library. autoPatchelfIgnoreMissingDeps = true; - nativeBuildInputs = [ unzip perl autoPatchelfHook ]; + nativeBuildInputs = [ unzip perl autoPatchelfHook makeWrapper ]; unpackPhase = '' unpack_jar() { @@ -171,8 +186,17 @@ let dontStrip = true; - # copy-paste openjdk's preFixup preFixup = '' + # We cannot use -exec since wrapProgram is a function but not a + # command. + for bin in $( find "$out" -executable -type f -not -path '*/languages/ruby/lib/gems/*' ); do + if patchelf --print-interpreter "$bin" &> /dev/null || head -n 1 "$bin" | grep '^#!' -q; then + wrapProgram "$bin" \ + --prefix LD_LIBRARY_PATH : "${runtimeLibraryPath}" + fi + done + + # copy-paste openjdk's preFixup # Set JAVA_HOME automatically. mkdir -p $out/nix-support cat < $out/nix-support/setup-hook