Hey, I'm interested in getting a program I wrote into nixpkgs.
The program is Leiningen, which is the main build tool for the Clojure
programming language: https://github.com/technomancy/leiningen
My approach packaging for nix is pretty simplistic: it takes the
official shell script and applies a patch and then downloads a single
jar file that contains Leiningen along with all its JVM-level
dependencies.
I helped package Leiningen for Debian, which ended up being much more
complicated since their policy requires that each dependency of
Leiningen is packaged independently. Is my the approach I've taken
here acceptable for nix or does it need to be broken up more?
Also, I'm a bit confused about how I should declare a dependency upon
OpenJDK inside my package. I tried adding this to default.nix:
propagatedBuildInputs = [ openjdk ];
But this caused Oracle's JDK6 to be downloaded when performing
"nix-build -A leiningen": https://refheap.com/paste/229
As it is, my package works as long as you do "nix-env -i openjdk"
first, but obviously this is not desirable. How do I depend on openjdk
without depending on Oracle's?
thanks,
Phil
>From 22205361d654f8f0d8951d9ea3fe0c3c3c540138 Mon Sep 17 00:00:00 2001
From: Phil Hagelberg <[email protected]>
Date: Tue, 10 Jan 2012 14:10:38 -0800
Subject: [PATCH] leiningen: added package version 1.6.2
---
.../tools/build-managers/leiningen/builder.sh | 20 ++++++++++
.../tools/build-managers/leiningen/default.nix | 40 ++++++++++++++++++++
.../tools/build-managers/leiningen/lein.patch | 36 ++++++++++++++++++
pkgs/top-level/all-packages.nix | 2 +
4 files changed, 98 insertions(+), 0 deletions(-)
create mode 100644 pkgs/development/tools/build-managers/leiningen/builder.sh
create mode 100644 pkgs/development/tools/build-managers/leiningen/default.nix
create mode 100644 pkgs/development/tools/build-managers/leiningen/lein.patch
diff --git a/pkgs/development/tools/build-managers/leiningen/builder.sh b/pkgs/development/tools/build-managers/leiningen/builder.sh
new file mode 100644
index 0000000..9e6d94d
--- /dev/null
+++ b/pkgs/development/tools/build-managers/leiningen/builder.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -e
+
+source $stdenv/setup
+
+mkdir -p $out/bin $out/lib
+
+out_bin=$out/bin/lein
+
+cp $src $out_bin
+cp $jarsrc $out/lib
+cp $clojuresrc $out/lib
+
+# patchPhase seems to assume you have a tarball, not a single file
+patch $out_bin -p0 < $patches
+chmod 755 $out_bin
+
+echo "Testing out \"lein version\"..."
+$out_bin version
diff --git a/pkgs/development/tools/build-managers/leiningen/default.nix b/pkgs/development/tools/build-managers/leiningen/default.nix
new file mode 100644
index 0000000..518f942
--- /dev/null
+++ b/pkgs/development/tools/build-managers/leiningen/default.nix
@@ -0,0 +1,40 @@
+{stdenv, fetchurl, openjdk}:
+
+stdenv.mkDerivation rec {
+ pname = "leiningen";
+ version = "1.6.2";
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "https://raw.github.com/technomancy/leiningen/stable/bin/lein-pkg";
+ sha256 = "e177a493ed0c4a7874f1391d5cc72cc1e541e55ed3d6e075feec87b5da6f8277";
+ };
+
+ jarsrc = fetchurl {
+ url = "https://github.com/downloads/technomancy/leiningen/leiningen-1.6.2-standalone.jar";
+ sha256 = "e35272556ece82d9a6a54b86266626da1b5f990ff556639dd7dd1025d6ed4226";
+ };
+
+ clojuresrc = fetchurl {
+ url = "http://build.clojure.org/releases/org/clojure/clojure/1.2.1/clojure-1.2.1.jar";
+ sha256 = "b38853254a2df9138b2e2c12be0dca3600fa7e2a951fed05fc3ba2d9141a3fb0";
+ };
+
+ patches = [ ./lein.patch ];
+
+ builder = ./builder.sh;
+
+ # This causes the build to try to download ant and (non-open) jdk 1.6
+ # inherit openjdk;
+
+ # So does this:
+ # propagatedBuildInputs = [ openjdk ];
+
+ meta = {
+ homepage = https://github.com/technomancy/leiningen;
+ description = "Project automation for Clojure";
+ # license = stdenv.lib.licenses.free-copyleft;
+
+ platforms = stdenv.lib.platforms.unix;
+ };
+}
\ No newline at end of file
diff --git a/pkgs/development/tools/build-managers/leiningen/lein.patch b/pkgs/development/tools/build-managers/leiningen/lein.patch
new file mode 100644
index 0000000..1a71575
--- /dev/null
+++ b/pkgs/development/tools/build-managers/leiningen/lein.patch
@@ -0,0 +1,36 @@
+--- lein-pkg 2012-01-09 20:47:44.000000000 -0800
++++ lein-pkg-nix 2012-01-09 20:45:01.000000000 -0800
+@@ -70,7 +70,7 @@
+ LEIN_PLUGIN_PATH="$(echo "$DEV_PLUGINS" | tr \\n :)"
+ LEIN_USER_PLUGIN_PATH="$(echo "$(unique_user_plugins)" | tr \\n :)"
+ CLASSPATH="$CLASSPATH:$LEIN_PLUGIN_PATH:$LEIN_USER_PLUGIN_PATH:test/:src/:resources/"
+-CLOJURE_JAR="/usr/share/java/clojure-1.2.jar:/usr/share/java/asm3.jar:/usr/share/java/asm3-commons.jar"
++CLOJURE_JAR="$(dirname $0)/../lib/*clojure-1.2.1.jar"
+ NULL_DEVICE=/dev/null
+
+ # apply context specific CLASSPATH entries
+@@ -78,23 +78,7 @@
+ CLASSPATH="`cat .lein-classpath`:$CLASSPATH"
+ fi
+
+-SHARE_JARS="ant ant-launcher classworlds clojure-1.2 clojure-contrib \
+-lucene-memory maven-ant-tasks maven-artifact maven-artifact-manager \
+-maven-error-diagnostics maven-model maven-settings maven-project maven-profile \
+-maven-repository-metadata plexus-container-default-alpha plexus-interpolation \
+-plexus-utils wagon-file wagon-http-lightweight wagon-http-shared wagon-provider-api \
+-xml-apis lucene-core lucene-highlighter clucy robert-hooke lancet \
+-backport-util-concurrent" # NFI why that last one is necessary
+-for JAR in $SHARE_JARS; do
+- CLASSPATH="$CLASSPATH":"/usr/share/java/$JAR.jar"
+-done
+-
+-# Do not use installed leiningen jar during self-compilation
+-if ! { [ "$1" = "compile" ] &&
+- grep -qsE 'defproject leiningen[[:space:]]+"[[:digit:].]+"' \
+- project.clj ;}; then
+- CLASSPATH="$CLASSPATH":/usr/share/java/leiningen-$LEIN_VERSION.jar
+-fi
++CLASSPATH="$CLASSPATH:$(dirname $0)/../lib/*"
+
+ if [ $DEBUG ]; then
+ echo $CLASSPATH
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 0c9e92e..2183602 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -2974,6 +2974,8 @@ let
lcov = callPackage ../development/tools/analysis/lcov { };
+ leiningen = callPackage ../development/tools/build-managers/leiningen { };
+
libtool = libtool_2;
libtool_1_5 = callPackage ../development/tools/misc/libtool { };
--
1.7.2.5
_______________________________________________
nix-dev mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-dev