2022-06-01 13:59:31 -07:00
|
|
|
{ lib, stdenv, callPackage, clojure, jre, writeText, writeShellScript, toEDN }:
|
|
|
|
{ src, name, group, version, deps-edn, clj-deps, src-paths, build-tools-jar, ...
|
2022-05-31 13:07:35 -07:00
|
|
|
}:
|
2022-05-29 09:34:32 -07:00
|
|
|
|
|
|
|
with lib;
|
|
|
|
let
|
2022-06-01 13:59:31 -07:00
|
|
|
build-tools-deps = toEDN {
|
2022-05-30 16:09:14 -07:00
|
|
|
aliases.build = {
|
2022-05-31 13:07:35 -07:00
|
|
|
extra-deps."'io.github.clojure/tools.build"."local/root" =
|
2022-06-01 13:59:31 -07:00
|
|
|
''\"${build-tools-jar}\"'';
|
2022-05-30 16:09:14 -07:00
|
|
|
};
|
2022-06-01 13:59:31 -07:00
|
|
|
};
|
2022-05-30 17:39:48 -07:00
|
|
|
|
2022-05-29 10:42:17 -07:00
|
|
|
classpath = clj-deps.makeClasspaths { };
|
2022-05-29 09:34:32 -07:00
|
|
|
|
2022-06-01 13:59:31 -07:00
|
|
|
build-deps = callPackage ./deps.nix { };
|
|
|
|
build-classpath = build-deps.makeClasspaths { };
|
|
|
|
|
2022-05-31 13:07:35 -07:00
|
|
|
full-name = "${name}-${version}-standalone.jar";
|
2022-05-29 09:34:32 -07:00
|
|
|
|
|
|
|
target = "$TEMP/target";
|
|
|
|
|
2022-05-30 17:36:27 -07:00
|
|
|
build-script = writeShellScript "create-uberjar.sh" ''
|
|
|
|
HOME=$TEMP/home
|
|
|
|
mkdir -p $HOME
|
|
|
|
mkdir -p ${target}
|
|
|
|
|
2022-05-31 13:07:35 -07:00
|
|
|
clojure \
|
2022-06-01 13:59:31 -07:00
|
|
|
-Scp ${build-classpath}:${classpath}:${build-tools-jar}:. \
|
|
|
|
-Sdeps "${build-tools-deps}" \
|
2022-05-31 13:07:35 -07:00
|
|
|
-X:build \
|
2022-06-01 13:59:31 -07:00
|
|
|
build/lib-uberjar \
|
2022-05-31 13:07:35 -07:00
|
|
|
:project ${group}/${name} \
|
|
|
|
:version ${version} \
|
|
|
|
:src-dirs ${concatStringsSep "," src-paths} \
|
2022-06-01 13:59:31 -07:00
|
|
|
:target '"${target}"' \
|
|
|
|
:deps-edn '"${deps-edn}"'
|
|
|
|
|
|
|
|
[ $? -eq 0 ] || cat /tmp/*.edn
|
2022-05-30 17:36:27 -07:00
|
|
|
'';
|
|
|
|
|
2022-06-01 13:59:31 -07:00
|
|
|
pthru = o: builtins.trace o o;
|
|
|
|
|
2022-05-29 09:45:16 -07:00
|
|
|
in stdenv.mkDerivation {
|
2022-05-31 13:07:35 -07:00
|
|
|
name = full-name;
|
2022-05-29 09:34:32 -07:00
|
|
|
|
|
|
|
src = src;
|
|
|
|
|
2022-05-30 16:54:45 -07:00
|
|
|
nativeBuildInputs = [ clojure jre ];
|
2022-06-01 13:59:31 -07:00
|
|
|
buildInputs = (map (x: x.paths) clj-deps.packages)
|
|
|
|
++ (map (x: x.paths) build-deps.packages);
|
2022-05-29 09:34:32 -07:00
|
|
|
|
2022-06-01 13:59:31 -07:00
|
|
|
buildPhase = pthru "${build-script}";
|
2022-05-29 09:34:32 -07:00
|
|
|
|
|
|
|
installPhase = ''
|
|
|
|
mv ${target}/${name}-${version}-standalone.jar $out
|
|
|
|
'';
|
|
|
|
}
|