Files
build.tools.nix/mkClojureLib.nix
T
2022-06-01 13:59:31 -07:00

59 lines
1.4 KiB
Nix

{ lib, stdenv, callPackage, clojure, jre, writeText, writeShellScript, toEDN }:
{ src, name, group, version, deps-edn, clj-deps, src-paths, build-tools-jar, ...
}:
with lib;
let
build-tools-deps = toEDN {
aliases.build = {
extra-deps."'io.github.clojure/tools.build"."local/root" =
''\"${build-tools-jar}\"'';
};
};
classpath = clj-deps.makeClasspaths { };
build-deps = callPackage ./deps.nix { };
build-classpath = build-deps.makeClasspaths { };
full-name = "${name}-${version}-standalone.jar";
target = "$TEMP/target";
build-script = writeShellScript "create-uberjar.sh" ''
HOME=$TEMP/home
mkdir -p $HOME
mkdir -p ${target}
clojure \
-Scp ${build-classpath}:${classpath}:${build-tools-jar}:. \
-Sdeps "${build-tools-deps}" \
-X:build \
build/lib-uberjar \
:project ${group}/${name} \
:version ${version} \
:src-dirs ${concatStringsSep "," src-paths} \
:target '"${target}"' \
:deps-edn '"${deps-edn}"'
[ $? -eq 0 ] || cat /tmp/*.edn
'';
pthru = o: builtins.trace o o;
in stdenv.mkDerivation {
name = full-name;
src = src;
nativeBuildInputs = [ clojure jre ];
buildInputs = (map (x: x.paths) clj-deps.packages)
++ (map (x: x.paths) build-deps.packages);
buildPhase = pthru "${build-script}";
installPhase = ''
mv ${target}/${name}-${version}-standalone.jar $out
'';
}