aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2012-01-03 00:16:29 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2012-01-03 00:16:29 +0000
commit48cea0d01ef48733ab38a73a20611f63aeb1b5cc (patch)
treefec81ee5b47b14d6a58ee0b0e86458072efbda4a
parent93e71e6ab68d9662441289a02448c47069beeb2a (diff)
* Refactoring: Get rid of a few subdirectories in corepkgs/, and some
other simplifications. * Use <nix/...> to locate the corepkgs. This allows them to be overriden through $NIX_PATH. * Use bash's pipefail option in the NAR builder so that we don't need to create a temporary file.
-rw-r--r--corepkgs/Makefile.am12
-rw-r--r--corepkgs/buildenv.nix (renamed from corepkgs/buildenv/default.nix)7
-rw-r--r--[-rwxr-xr-x]corepkgs/buildenv.pl (renamed from corepkgs/buildenv/builder.pl.in)2
-rw-r--r--corepkgs/buildenv/Makefile.am11
-rw-r--r--corepkgs/nar.nix30
-rw-r--r--corepkgs/nar/Makefile.am11
-rw-r--r--corepkgs/nar/nar.nix7
-rw-r--r--corepkgs/nar/nar.sh.in12
-rwxr-xr-xscripts/nix-push.in5
-rw-r--r--src/nix-env/user-env.cc2
-rw-r--r--tests/common.sh.in7
-rw-r--r--tests/init.sh24
-rw-r--r--tests/lang.sh2
-rw-r--r--tests/lang/eval-okay-search-path.nix2
-rw-r--r--tests/user-envs.sh2
15 files changed, 52 insertions, 84 deletions
diff --git a/corepkgs/Makefile.am b/corepkgs/Makefile.am
index b303a30eb..7f43a700e 100644
--- a/corepkgs/Makefile.am
+++ b/corepkgs/Makefile.am
@@ -1 +1,11 @@
-SUBDIRS = nar buildenv channels
+SUBDIRS = channels
+
+all-local: config.nix
+
+install-exec-local:
+ $(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs
+ $(INSTALL_DATA) config.nix $(srcdir)/nar.nix $(srcdir)/buildenv.nix $(srcdir)/buildenv.pl $(DESTDIR)$(datadir)/nix/corepkgs
+
+include ../substitute.mk
+
+EXTRA_DIST = config.nix.in nar.nix buildenv.nix buildenv.pl
diff --git a/corepkgs/buildenv/default.nix b/corepkgs/buildenv.nix
index d76f52740..6e2bee10b 100644
--- a/corepkgs/buildenv/default.nix
+++ b/corepkgs/buildenv.nix
@@ -1,9 +1,12 @@
-{system, derivations, manifest}:
+with import <nix/config.nix>;
+
+{ system, derivations, manifest }:
derivation {
name = "user-environment";
system = system;
- builder = ./builder.pl;
+ builder = perl;
+ args = [ "-w" ./buildenv.pl ];
manifest = manifest;
diff --git a/corepkgs/buildenv/builder.pl.in b/corepkgs/buildenv.pl
index 86abe0ca1..52a703c06 100755..100644
--- a/corepkgs/buildenv/builder.pl.in
+++ b/corepkgs/buildenv.pl
@@ -1,5 +1,3 @@
-#! @perl@ -w
-
use strict;
use Cwd;
use IO::Handle;
diff --git a/corepkgs/buildenv/Makefile.am b/corepkgs/buildenv/Makefile.am
deleted file mode 100644
index eeab538ab..000000000
--- a/corepkgs/buildenv/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-all-local: builder.pl
-
-install-exec-local:
- $(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs
- $(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs/buildenv
- $(INSTALL_DATA) $(srcdir)/default.nix $(DESTDIR)$(datadir)/nix/corepkgs/buildenv
- $(INSTALL_PROGRAM) builder.pl $(DESTDIR)$(datadir)/nix/corepkgs/buildenv
-
-include ../../substitute.mk
-
-EXTRA_DIST = default.nix builder.pl.in
diff --git a/corepkgs/nar.nix b/corepkgs/nar.nix
new file mode 100644
index 000000000..70a4af2f9
--- /dev/null
+++ b/corepkgs/nar.nix
@@ -0,0 +1,30 @@
+with import <nix/config.nix>;
+
+let
+
+ builder = builtins.toFile "nar.sh"
+ ''
+ export PATH=${nixBinDir}:${coreutils}
+
+ echo "packing ‘$storePath’..."
+ mkdir $out
+ dst=$out/tmp.nar.bz2
+
+ set -o pipefail
+ nix-store --dump "$storePath" | ${bzip2} > $dst
+
+ nix-hash --flat --type $hashAlgo --base32 $dst > $out/narbz2-hash
+
+ mv $out/tmp.nar.bz2 $out/$(cat $out/narbz2-hash).nar.bz2
+ '';
+
+in
+
+{ system, storePath, hashAlgo }:
+
+derivation {
+ name = "nar";
+ builder = shell;
+ args = [ "-e" builder ];
+ inherit system storePath hashAlgo;
+}
diff --git a/corepkgs/nar/Makefile.am b/corepkgs/nar/Makefile.am
deleted file mode 100644
index 103051e22..000000000
--- a/corepkgs/nar/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-all-local: nar.sh
-
-install-exec-local:
- $(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs
- $(INSTALL) -d $(DESTDIR)$(datadir)/nix/corepkgs/nar
- $(INSTALL_DATA) $(srcdir)/nar.nix $(DESTDIR)$(datadir)/nix/corepkgs/nar
- $(INSTALL_PROGRAM) nar.sh $(DESTDIR)$(datadir)/nix/corepkgs/nar
-
-include ../../substitute.mk
-
-EXTRA_DIST = nar.nix nar.sh.in
diff --git a/corepkgs/nar/nar.nix b/corepkgs/nar/nar.nix
deleted file mode 100644
index d3d799998..000000000
--- a/corepkgs/nar/nar.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-{ system, storePath, hashAlgo }:
-
-derivation {
- name = "nar";
- builder = ./nar.sh;
- inherit system storePath hashAlgo;
-}
diff --git a/corepkgs/nar/nar.sh.in b/corepkgs/nar/nar.sh.in
deleted file mode 100644
index 1369d3a21..000000000
--- a/corepkgs/nar/nar.sh.in
+++ /dev/null
@@ -1,12 +0,0 @@
-#! @shell@ -e
-
-echo "packing $storePath into $out..."
-@coreutils@/mkdir $out
-dst=$out/tmp.nar.bz2
-@bindir@/nix-store --dump "$storePath" > tmp
-
-@bzip2@ < tmp > $dst
-
-@bindir@/nix-hash --flat --type $hashAlgo --base32 $dst > $out/narbz2-hash
-
-@coreutils@/mv $out/tmp.nar.bz2 $out/$(@coreutils@/cat $out/narbz2-hash).nar.bz2
diff --git a/scripts/nix-push.in b/scripts/nix-push.in
index cf46d00df..cb7a478ba 100755
--- a/scripts/nix-push.in
+++ b/scripts/nix-push.in
@@ -20,9 +20,6 @@ $curl = "$curl $extraCurlFlags" if defined $extraCurlFlags;
my $binDir = $ENV{"NIX_BIN_DIR"} || "@bindir@";
-my $dataDir = $ENV{"NIX_DATA_DIR"};
-$dataDir = "@datadir@" unless defined $dataDir;
-
# Parse the command line.
my $localCopy;
@@ -107,7 +104,7 @@ foreach my $storePath (@storePaths) {
# Construct a Nix expression that creates a Nix archive.
my $nixexpr =
- "((import $dataDir/nix/corepkgs/nar/nar.nix) " .
+ "(import <nix/nar.nix> " .
"{ storePath = builtins.storePath \"$storePath\"; system = \"@system@\"; hashAlgo = \"$hashAlgo\"; }) ";
print NIX $nixexpr;
diff --git a/src/nix-env/user-env.cc b/src/nix-env/user-env.cc
index 670052bcb..0dcdcc0d1 100644
--- a/src/nix-env/user-env.cc
+++ b/src/nix-env/user-env.cc
@@ -112,7 +112,7 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
/* Get the environment builder expression. */
Value envBuilder;
- state.evalFile(nixDataDir + "/nix/corepkgs/buildenv", envBuilder);
+ state.evalFile(state.findFile("nix/buildenv.nix"), envBuilder);
/* Construct a Nix expression that calls the user environment
builder with the manifest as argument. */
diff --git a/tests/common.sh.in b/tests/common.sh.in
index 4ab490a62..7504dc059 100644
--- a/tests/common.sh.in
+++ b/tests/common.sh.in
@@ -9,7 +9,6 @@ if ! NIX_STORE_DIR=$(readlink -f $TEST_ROOT/store 2> /dev/null); then
export NIX_IGNORE_SYMLINK_STORE=1
NIX_STORE_DIR=$TEST_ROOT/store
fi
-export NIX_DATA_DIR=$TEST_ROOT/data
export NIX_LOCALSTATE_DIR=$TEST_ROOT/var
export NIX_LOG_DIR=$TEST_ROOT/var/log/nix
export NIX_STATE_DIR=$TEST_ROOT/var/nix
@@ -19,15 +18,11 @@ export NIX_BIN_DIR=$TEST_ROOT/bin
export NIX_LIBEXEC_DIR=$TEST_ROOT/bin
export NIX_MANIFESTS_DIR=$TEST_ROOT/var/nix/manifests
export NIX_ROOT_FINDER=
+export NIX_PATH=nix=$TOP/corepkgs
export SHARED=$TEST_ROOT/shared
export PATH=$NIX_BIN_DIR:$TOP/scripts:$PATH
-export REAL_BIN_DIR=@bindir@
-export REAL_LIBEXEC_DIR=@libexecdir@
-export REAL_LOCALSTATE_DIR=@localstatedir@
-export REAL_DATA_DIR=@datadir@
-export REAL_STORE_DIR=@storedir@
export NIX_BUILD_HOOK=
export PERL=perl
export PERL5LIB=$TOP/perl/lib:$PERL5LIB
diff --git a/tests/init.sh b/tests/init.sh
index 63e939dff..9ce7985d7 100644
--- a/tests/init.sh
+++ b/tests/init.sh
@@ -10,7 +10,6 @@ fi
mkdir "$TEST_ROOT"
mkdir "$NIX_STORE_DIR"
-mkdir "$NIX_DATA_DIR"
mkdir "$NIX_LOCALSTATE_DIR"
mkdir -p "$NIX_LOG_DIR"/drvs
mkdir "$NIX_STATE_DIR"
@@ -39,29 +38,6 @@ env-keep-derivations = false
fsync-metadata = false
EOF
-mkdir $NIX_DATA_DIR/nix
-cp -pr $TOP/corepkgs $NIX_DATA_DIR/nix/
-# Bah, scripts have the prefix hard-coded. This is really messy stuff
-# (and likely to fail).
-for i in \
- $NIX_DATA_DIR/nix/corepkgs/nar/nar.sh \
- ; do
- sed < $i > $i.tmp \
- -e "s^$REAL_BIN_DIR/nix-store^$NIX_BIN_DIR/nix-store^" \
- -e "s^$REAL_BIN_DIR/nix-hash^$NIX_BIN_DIR/nix-hash^" \
- -e "s^$REAL_LIBEXEC_DIR^$NIX_LIBEXEC_DIR^" \
- -e "s^$REAL_LOCALSTATE_DIR^$NIX_LOCALSTATE_DIR^" \
- -e "s^$REAL_DATA_DIR^$NIX_DATA_DIR^" \
- -e "s^$REAL_STORE_DIR\([^/]\)^$NIX_STORE_DIR\1^"
- mv $i.tmp $i
- chmod +x $i
-done
-
-# Another ugly hack.
-sed "s|^$|PATH='$PATH'|" < $NIX_DATA_DIR/nix/corepkgs/nar/nar.sh > tmp
-chmod +x tmp
-mv tmp $NIX_DATA_DIR/nix/corepkgs/nar/nar.sh
-
# An uberhack for Mac OS X 10.5: download-using-manifests uses Perl,
# and Perl links against Darwin's libutil.dylib (in /usr/lib), but
# when running "make check", the libtool wrapper script around the Nix
diff --git a/tests/lang.sh b/tests/lang.sh
index c9fc65e6a..cab1cfd9b 100644
--- a/tests/lang.sh
+++ b/tests/lang.sh
@@ -40,7 +40,7 @@ for i in lang/eval-okay-*.nix; do
if test -e lang/$i.flags; then
flags=$(cat lang/$i.flags)
fi
- if ! NIX_PATH=lang/dir3:lang/dir4 nix-instantiate $flags --eval-only --strict lang/$i.nix > lang/$i.out; then
+ if ! NIX_PATH=lang/dir3:lang/dir4:$NIX_PATH nix-instantiate $flags --eval-only --strict lang/$i.nix > lang/$i.out; then
echo "FAIL: $i should evaluate"
fail=1
elif ! diff lang/$i.out lang/$i.exp; then
diff --git a/tests/lang/eval-okay-search-path.nix b/tests/lang/eval-okay-search-path.nix
index 21485dbbf..9b7115023 100644
--- a/tests/lang/eval-okay-search-path.nix
+++ b/tests/lang/eval-okay-search-path.nix
@@ -1,3 +1,3 @@
-assert builtins.pathExists <nix/buildenv>;
+assert builtins.pathExists <nix/buildenv.nix>;
import <a.nix> + import <b.nix> + import <c.nix> + import <dir5/c.nix>
diff --git a/tests/user-envs.sh b/tests/user-envs.sh
index 5037e28b9..2bc9bee50 100644
--- a/tests/user-envs.sh
+++ b/tests/user-envs.sh
@@ -36,7 +36,7 @@ nix-env -p $profiles/test -q '*' | grep -q foo-2.0pre1
test "$($profiles/test/bin/foo)" = "foo-2.0pre1"
# Upgrade "foo": should install foo-2.0.
-NIX_PATH=nixpkgs=./user-envs.nix nix-env -p $profiles/test -f '<nixpkgs>' -u foo
+NIX_PATH=nixpkgs=./user-envs.nix:$NIX_PATH nix-env -p $profiles/test -f '<nixpkgs>' -u foo
# Query installed: should contain foo-2.0 now.
test "$(nix-env -p $profiles/test -q '*' | wc -l)" -eq 1