Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{
2 fetchurl,
3 frink,
4 jdk,
5 lib,
6 rlwrap,
7 stdenv,
8 testers,
9}:
10stdenv.mkDerivation rec {
11 pname = "frink";
12 version = "2024-05-09";
13
14 src = fetchurl {
15 # Upstream does not provide versioned download links
16 url = "https://web.archive.org/web/20240605193919/https://frinklang.org/frinkjar/frink-tng.jar";
17 sha256 = "sha256-ceV1p9wsXprcNLhol79evswVZ1SpH5IzfSbl8st4cmU=";
18 };
19
20 dontUnpack = true;
21
22 nativeBuildInputs = [ jdk ];
23
24 buildInputs = [
25 jdk
26 rlwrap
27 ];
28
29 installPhase = ''
30 runHook preInstall
31
32 mkdir -p $out/bin $out/lib
33
34 cp ${src} $out/lib/frink-tng.jar
35
36 # Generate rlwrap helper files.
37 # See https://frinklang.org/fsp/colorize.fsp?f=listUnits.frink
38 # and https://frinklang.org/fsp/colorize.fsp?f=listFunctions.frink
39 java -classpath "$out/lib/frink-tng.jar" frink.gui.FrinkStarter -e 'joinln[lexicalSort[units[]]]' > $out/lib/unitnames.txt
40 java -classpath "$out/lib/frink-tng.jar" frink.gui.FrinkStarter -e 'joinln[map[{|f|
41 f =~ %s/\s+//g
42 return "$f$"
43 }, lexicalSort[functions[]]]]' > $out/lib/functionnames.txt
44
45 cat > "$out/bin/frink" << EOF
46 #!${stdenv.shell}
47 exec ${rlwrap}/bin/rlwrap -f $out/lib/unitnames.txt -b '$' -f $out/lib/functionnames.txt ${jdk}/bin/java -classpath "$out/lib/frink-tng.jar" frink.gui.FrinkStarter "\$@"
48 EOF
49
50 chmod a+x "$out/bin/frink"
51
52 runHook postInstall
53 '';
54
55 meta = with lib; {
56 description = "Practical calculating tool and programming language";
57 homepage = "https://frinklang.org/";
58 license = licenses.unfree;
59 sourceProvenance = [ sourceTypes.binaryBytecode ];
60 maintainers = [ maintainers.stefanfehrenbach ];
61 };
62
63 passthru.tests = {
64 callFrinkVersion = testers.testVersion {
65 package = frink;
66 command = "frink -e 'FrinkVersion[]'";
67 };
68 };
69}