swt: clean up

Should be easier to customize now.
This commit is contained in:
Dusk Banks 2024-07-04 02:33:13 -07:00
parent e7999c7acc
commit d20703baf6

View File

@ -1,60 +1,60 @@
{ lib
, stdenv
, stripJavaArchivesHook
, fetchzip
, pkg-config
, atk
, glib
, gtk2
, jdk
, libGL
, libGLU
, libXt
, libXtst
{
atk,
fetchzip,
glib,
gtk2,
jdk,
lib,
libGL,
libGLU,
libXt,
libXtst,
pkg-config,
stdenv,
stripJavaArchivesHook,
}:
let
platformMap = {
x86_64-linux =
{ platform = "gtk-linux-x86_64";
sha256 = "17frac2nsx22hfa72264as31rn35hfh9gfgy0n6wvc3knl5d2716"; };
i686-linux =
{ platform = "gtk-linux-x86";
sha256 = "13ca17rga9yvdshqvh0sfzarmdcl4wv4pid0ls7v35v4844zbc8b"; };
x86_64-darwin =
{ platform = "cocoa-macosx-x86_64";
sha256 = "0wjyxlw7i9zd2m8syd6k1q85fj8pzhxlfsrl8fpgsj37p698bd0a"; };
};
metadata = assert platformMap ? ${stdenv.hostPlatform.system};
platformMap.${stdenv.hostPlatform.system};
in stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "swt";
version = "4.5";
fullVersion = "${version}-201506032000";
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 = fetchzip {
url = "https://archive.eclipse.org/eclipse/downloads/drops4/" +
"R-${fullVersion}/${pname}-${version}-${metadata.platform}.zip";
inherit (metadata) sha256;
stripRoot = false;
postFetch = ''
mkdir "$unpackDir"
cd "$unpackDir"
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"
renamed="$TMPDIR/src.zip"
mv -- "$out/src.zip" "$renamed"
unpackFile "$renamed"
rm -r -- "$out"
mv "$unpackDir" "$out"
'';
};
mv -- "$unpackDir" "$out"
'';
};
nativeBuildInputs = [
stripJavaArchivesHook
@ -67,49 +67,51 @@ in stdenv.mkDerivation rec {
libGL
libGLU
libXtst
] ++ lib.optionals (lib.hasPrefix "8u" jdk.version) [
libXt
];
] ++ lib.optionals (lib.hasPrefix "8u" jdk.version) [ libXt ];
patches = [ ./awt-libs.patch ./gtk-libs.patch ];
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`'' +
"/\n" + ''
}
# 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[@]}"
'';
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
@ -127,28 +129,27 @@ in stdenv.mkDerivation rec {
installPhase = ''
runHook preInstall
if [ -n "$prefix" ]; then
mkdir -p "$prefix"
if [[ -n "$prefix" ]]; then
install -d -- "$prefix"
fi
mkdir -p "$out/lib"
cp -t "$out/lib" ./*.so
install -Dm 644 -t "$out/lib" -- *.so
mkdir -p "$out/jars"
cp -t out/ version.txt
install -d -- "$out/jars"
install -m 644 -t out -- version.txt
(cd out && jar -c *) > "$out/jars/swt.jar"
runHook postInstall
'';
meta = with lib; {
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 = licenses.epl10;
maintainers = with maintainers; [ bb010g ];
platforms = platforms.linux;
license = lib.licenses.epl10;
maintainers = [ lib.maintainers.bb010g ];
platforms = lib.platforms.linux;
};
}
})