mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-15 02:03:01 +00:00
109 lines
2.7 KiB
Nix
109 lines
2.7 KiB
Nix
{ lib
|
|
, stdenv
|
|
, autoPatchelfHook
|
|
, graalvm-ce
|
|
, makeWrapper
|
|
, perl
|
|
, unzip
|
|
, zlib
|
|
, libxcrypt-legacy
|
|
# extra params
|
|
, product
|
|
, javaVersion
|
|
, extraBuildInputs ? [ ]
|
|
, extraNativeBuildInputs ? [ ]
|
|
, graalvmPhases ? { }
|
|
, meta ? { }
|
|
, passthru ? { }
|
|
, ...
|
|
} @ args:
|
|
|
|
let
|
|
extraArgs = builtins.removeAttrs args [
|
|
"lib"
|
|
"stdenv"
|
|
"autoPatchelfHook"
|
|
"graalvm-ce"
|
|
"makeWrapper"
|
|
"perl"
|
|
"unzip"
|
|
"zlib"
|
|
"product"
|
|
"javaVersion"
|
|
"extraBuildInputs"
|
|
"extraNativeBuildInputs"
|
|
"graalvmPhases"
|
|
"meta"
|
|
"passthru"
|
|
];
|
|
in
|
|
stdenv.mkDerivation ({
|
|
pname = "${product}-java${javaVersion}";
|
|
|
|
nativeBuildInputs = [ perl unzip makeWrapper ]
|
|
++ lib.optional stdenv.isLinux autoPatchelfHook
|
|
++ extraNativeBuildInputs;
|
|
|
|
buildInputs = [
|
|
stdenv.cc.cc.lib # libstdc++.so.6
|
|
zlib
|
|
libxcrypt-legacy # libcrypt.so.1 (default is .2 now)
|
|
] ++ extraBuildInputs;
|
|
|
|
unpackPhase = ''
|
|
runHook preUnpack
|
|
|
|
unpack_jar() {
|
|
local jar="$1"
|
|
unzip -q -o "$jar" -d "$out"
|
|
perl -ne 'use File::Path qw(make_path);
|
|
use File::Basename qw(dirname);
|
|
if (/^(.+) = (.+)$/) {
|
|
make_path dirname("$ENV{out}/$1");
|
|
symlink $2, "$ENV{out}/$1";
|
|
}' "$out/META-INF/symlinks"
|
|
perl -ne 'if (/^(.+) = ([r-])([w-])([x-])([r-])([w-])([x-])([r-])([w-])([x-])$/) {
|
|
my $mode = ($2 eq 'r' ? 0400 : 0) + ($3 eq 'w' ? 0200 : 0) + ($4 eq 'x' ? 0100 : 0) +
|
|
($5 eq 'r' ? 0040 : 0) + ($6 eq 'w' ? 0020 : 0) + ($7 eq 'x' ? 0010 : 0) +
|
|
($8 eq 'r' ? 0004 : 0) + ($9 eq 'w' ? 0002 : 0) + ($10 eq 'x' ? 0001 : 0);
|
|
chmod $mode, "$ENV{out}/$1";
|
|
}' "$out/META-INF/permissions"
|
|
rm -rf "$out/META-INF"
|
|
}
|
|
|
|
unpack_jar "$src"
|
|
|
|
runHook postUnpack
|
|
'';
|
|
|
|
# Allow autoPatchelf to automatically fix lib references between products
|
|
fixupPhase = ''
|
|
runHook preFixup
|
|
|
|
mkdir -p $out/lib
|
|
shopt -s globstar
|
|
ln -s $out/languages/**/lib/*.so $out/lib
|
|
|
|
runHook postFixup
|
|
'';
|
|
|
|
dontInstall = true;
|
|
dontBuild = true;
|
|
dontStrip = true;
|
|
|
|
passthru = {
|
|
inherit product javaVersion;
|
|
# build phases that are going to run during GraalVM derivation build,
|
|
# since they depend in having the fully setup GraalVM environment
|
|
# e.g.: graalvmPhases.installCheckPhase will run the checks only after
|
|
# GraalVM+products is build
|
|
# see buildGraalvm.nix file for the available phases
|
|
inherit graalvmPhases;
|
|
} // passthru;
|
|
|
|
meta = with lib; ({
|
|
inherit (graalvm-ce.meta) homepage license sourceProvenance maintainers platforms;
|
|
description = "High-Performance Polyglot VM (Product: ${product})";
|
|
} // meta);
|
|
} // extraArgs)
|