forked from lix-project/lix
* 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.
This commit is contained in:
parent
93e71e6ab6
commit
48cea0d01e
|
@ -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
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
|
with import <nix/config.nix>;
|
||||||
|
|
||||||
{ system, derivations, manifest }:
|
{ system, derivations, manifest }:
|
||||||
|
|
||||||
derivation {
|
derivation {
|
||||||
name = "user-environment";
|
name = "user-environment";
|
||||||
system = system;
|
system = system;
|
||||||
builder = ./builder.pl;
|
builder = perl;
|
||||||
|
args = [ "-w" ./buildenv.pl ];
|
||||||
|
|
||||||
manifest = manifest;
|
manifest = manifest;
|
||||||
|
|
2
corepkgs/buildenv/builder.pl.in → corepkgs/buildenv.pl
Executable file → Normal file
2
corepkgs/buildenv/builder.pl.in → corepkgs/buildenv.pl
Executable file → Normal file
|
@ -1,5 +1,3 @@
|
||||||
#! @perl@ -w
|
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use Cwd;
|
use Cwd;
|
||||||
use IO::Handle;
|
use IO::Handle;
|
|
@ -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
|
|
30
corepkgs/nar.nix
Normal file
30
corepkgs/nar.nix
Normal file
|
@ -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;
|
||||||
|
}
|
|
@ -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
|
|
|
@ -1,7 +0,0 @@
|
||||||
{ system, storePath, hashAlgo }:
|
|
||||||
|
|
||||||
derivation {
|
|
||||||
name = "nar";
|
|
||||||
builder = ./nar.sh;
|
|
||||||
inherit system storePath hashAlgo;
|
|
||||||
}
|
|
|
@ -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
|
|
|
@ -20,9 +20,6 @@ $curl = "$curl $extraCurlFlags" if defined $extraCurlFlags;
|
||||||
|
|
||||||
my $binDir = $ENV{"NIX_BIN_DIR"} || "@bindir@";
|
my $binDir = $ENV{"NIX_BIN_DIR"} || "@bindir@";
|
||||||
|
|
||||||
my $dataDir = $ENV{"NIX_DATA_DIR"};
|
|
||||||
$dataDir = "@datadir@" unless defined $dataDir;
|
|
||||||
|
|
||||||
|
|
||||||
# Parse the command line.
|
# Parse the command line.
|
||||||
my $localCopy;
|
my $localCopy;
|
||||||
|
@ -107,7 +104,7 @@ foreach my $storePath (@storePaths) {
|
||||||
|
|
||||||
# Construct a Nix expression that creates a Nix archive.
|
# Construct a Nix expression that creates a Nix archive.
|
||||||
my $nixexpr =
|
my $nixexpr =
|
||||||
"((import $dataDir/nix/corepkgs/nar/nar.nix) " .
|
"(import <nix/nar.nix> " .
|
||||||
"{ storePath = builtins.storePath \"$storePath\"; system = \"@system@\"; hashAlgo = \"$hashAlgo\"; }) ";
|
"{ storePath = builtins.storePath \"$storePath\"; system = \"@system@\"; hashAlgo = \"$hashAlgo\"; }) ";
|
||||||
|
|
||||||
print NIX $nixexpr;
|
print NIX $nixexpr;
|
||||||
|
|
|
@ -112,7 +112,7 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
|
||||||
|
|
||||||
/* Get the environment builder expression. */
|
/* Get the environment builder expression. */
|
||||||
Value envBuilder;
|
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
|
/* Construct a Nix expression that calls the user environment
|
||||||
builder with the manifest as argument. */
|
builder with the manifest as argument. */
|
||||||
|
|
|
@ -9,7 +9,6 @@ if ! NIX_STORE_DIR=$(readlink -f $TEST_ROOT/store 2> /dev/null); then
|
||||||
export NIX_IGNORE_SYMLINK_STORE=1
|
export NIX_IGNORE_SYMLINK_STORE=1
|
||||||
NIX_STORE_DIR=$TEST_ROOT/store
|
NIX_STORE_DIR=$TEST_ROOT/store
|
||||||
fi
|
fi
|
||||||
export NIX_DATA_DIR=$TEST_ROOT/data
|
|
||||||
export NIX_LOCALSTATE_DIR=$TEST_ROOT/var
|
export NIX_LOCALSTATE_DIR=$TEST_ROOT/var
|
||||||
export NIX_LOG_DIR=$TEST_ROOT/var/log/nix
|
export NIX_LOG_DIR=$TEST_ROOT/var/log/nix
|
||||||
export NIX_STATE_DIR=$TEST_ROOT/var/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_LIBEXEC_DIR=$TEST_ROOT/bin
|
||||||
export NIX_MANIFESTS_DIR=$TEST_ROOT/var/nix/manifests
|
export NIX_MANIFESTS_DIR=$TEST_ROOT/var/nix/manifests
|
||||||
export NIX_ROOT_FINDER=
|
export NIX_ROOT_FINDER=
|
||||||
|
export NIX_PATH=nix=$TOP/corepkgs
|
||||||
export SHARED=$TEST_ROOT/shared
|
export SHARED=$TEST_ROOT/shared
|
||||||
|
|
||||||
export PATH=$NIX_BIN_DIR:$TOP/scripts:$PATH
|
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 NIX_BUILD_HOOK=
|
||||||
export PERL=perl
|
export PERL=perl
|
||||||
export PERL5LIB=$TOP/perl/lib:$PERL5LIB
|
export PERL5LIB=$TOP/perl/lib:$PERL5LIB
|
||||||
|
|
|
@ -10,7 +10,6 @@ fi
|
||||||
mkdir "$TEST_ROOT"
|
mkdir "$TEST_ROOT"
|
||||||
|
|
||||||
mkdir "$NIX_STORE_DIR"
|
mkdir "$NIX_STORE_DIR"
|
||||||
mkdir "$NIX_DATA_DIR"
|
|
||||||
mkdir "$NIX_LOCALSTATE_DIR"
|
mkdir "$NIX_LOCALSTATE_DIR"
|
||||||
mkdir -p "$NIX_LOG_DIR"/drvs
|
mkdir -p "$NIX_LOG_DIR"/drvs
|
||||||
mkdir "$NIX_STATE_DIR"
|
mkdir "$NIX_STATE_DIR"
|
||||||
|
@ -39,29 +38,6 @@ env-keep-derivations = false
|
||||||
fsync-metadata = false
|
fsync-metadata = false
|
||||||
EOF
|
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,
|
# 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
|
# and Perl links against Darwin's libutil.dylib (in /usr/lib), but
|
||||||
# when running "make check", the libtool wrapper script around the Nix
|
# when running "make check", the libtool wrapper script around the Nix
|
||||||
|
|
|
@ -40,7 +40,7 @@ for i in lang/eval-okay-*.nix; do
|
||||||
if test -e lang/$i.flags; then
|
if test -e lang/$i.flags; then
|
||||||
flags=$(cat lang/$i.flags)
|
flags=$(cat lang/$i.flags)
|
||||||
fi
|
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"
|
echo "FAIL: $i should evaluate"
|
||||||
fail=1
|
fail=1
|
||||||
elif ! diff lang/$i.out lang/$i.exp; then
|
elif ! diff lang/$i.out lang/$i.exp; then
|
||||||
|
|
|
@ -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>
|
import <a.nix> + import <b.nix> + import <c.nix> + import <dir5/c.nix>
|
||||||
|
|
|
@ -36,7 +36,7 @@ nix-env -p $profiles/test -q '*' | grep -q foo-2.0pre1
|
||||||
test "$($profiles/test/bin/foo)" = "foo-2.0pre1"
|
test "$($profiles/test/bin/foo)" = "foo-2.0pre1"
|
||||||
|
|
||||||
# Upgrade "foo": should install foo-2.0.
|
# 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.
|
# Query installed: should contain foo-2.0 now.
|
||||||
test "$(nix-env -p $profiles/test -q '*' | wc -l)" -eq 1
|
test "$(nix-env -p $profiles/test -q '*' | wc -l)" -eq 1
|
||||||
|
|
Loading…
Reference in a new issue