aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/build-support/fetchmavenartifact/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/build-support/fetchmavenartifact/default.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/build-support/fetchmavenartifact/default.nix77
1 files changed, 77 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/build-support/fetchmavenartifact/default.nix b/infra/libkookie/nixpkgs/pkgs/build-support/fetchmavenartifact/default.nix
new file mode 100644
index 000000000000..42ad7603a8f7
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/build-support/fetchmavenartifact/default.nix
@@ -0,0 +1,77 @@
+# Adaptation of the MIT-licensed work on `sbt2nix` done by Charles O'Farrell
+
+{ fetchurl, stdenv }:
+let
+ defaultRepos = [
+ "http://repo1.maven.org/maven2"
+ "http://oss.sonatype.org/content/repositories/releases"
+ "http://oss.sonatype.org/content/repositories/public"
+ "http://repo.typesafe.com/typesafe/releases"
+ ];
+in
+
+args@
+{ # Example: "org.apache.httpcomponents"
+ groupId
+, # Example: "httpclient"
+ artifactId
+, # Example: "4.3.6"
+ version
+, # Example: "jdk11"
+ classifier ? null
+, # List of maven repositories from where to fetch the artifact.
+ # Example: [ http://oss.sonatype.org/content/repositories/public ].
+ repos ? defaultRepos
+ # The `url` and `urls` parameters, if specified should point to the JAR
+ # file and will take precedence over the `repos` parameter. Only one of `url`
+ # and `urls` can be specified, not both.
+, url ? ""
+, urls ? []
+, # The rest of the arguments are just forwarded to `fetchurl`.
+ ...
+}:
+
+# only one of url and urls can be specified at a time.
+assert (url == "") || (urls == []);
+# if repos is empty, then url or urls must be specified.
+assert (repos != []) || (url != "") || (urls != []);
+
+
+let
+ name_ =
+ with stdenv.lib; concatStrings [
+ (replaceChars ["."] ["_"] groupId) "_"
+ (replaceChars ["."] ["_"] artifactId) "-"
+ version
+ ];
+ mkJarUrl = repoUrl:
+ with stdenv.lib; concatStringsSep "/" [
+ (removeSuffix "/" repoUrl)
+ (replaceChars ["."] ["/"] groupId)
+ artifactId
+ version
+ "${artifactId}-${version}-${optionalString (!isNull classifier) "-${classifier}"}.jar"
+ ];
+ urls_ =
+ if url != "" then [url]
+ else if urls != [] then urls
+ else map mkJarUrl repos;
+ jar =
+ fetchurl (
+ builtins.removeAttrs args ["groupId" "artifactId" "version" "classifier" "repos" "url" ]
+ // { urls = urls_; name = "${name_}.jar"; }
+ );
+in
+ stdenv.mkDerivation {
+ name = name_;
+ phases = "installPhase fixupPhase";
+ # By moving the jar to $out/share/java we make it discoverable by java
+ # packages packages that mention this derivation in their buildInputs.
+ installPhase = ''
+ mkdir -p $out/share/java
+ ln -s ${jar} $out/share/java/${artifactId}-${version}.jar
+ '';
+ # We also add a `jar` attribute that can be used to easily obtain the path
+ # to the downloaded jar file.
+ passthru.jar = jar;
+ }