forked from lix-project/lix
Move <nix/fetchurl.nix> into the nix binary
This makes the statically linked nix binary just work, without needing any additional files.
This commit is contained in:
parent
5373f4be3b
commit
75efa42134
1
Makefile
1
Makefile
|
@ -10,7 +10,6 @@ makefiles = \
|
||||||
src/nix/local.mk \
|
src/nix/local.mk \
|
||||||
src/resolve-system-dependencies/local.mk \
|
src/resolve-system-dependencies/local.mk \
|
||||||
scripts/local.mk \
|
scripts/local.mk \
|
||||||
corepkgs/local.mk \
|
|
||||||
misc/bash/local.mk \
|
misc/bash/local.mk \
|
||||||
misc/systemd/local.mk \
|
misc/systemd/local.mk \
|
||||||
misc/launchd/local.mk \
|
misc/launchd/local.mk \
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
corepkgs_FILES = \
|
|
||||||
fetchurl.nix
|
|
||||||
|
|
||||||
$(foreach file,$(corepkgs_FILES),$(eval $(call install-data-in,$(d)/$(file),$(datadir)/nix/corepkgs)))
|
|
|
@ -402,11 +402,6 @@ EvalState::EvalState(const Strings & _searchPath, ref<Store> store)
|
||||||
for (auto & i : evalSettings.nixPath.get()) addToSearchPath(i);
|
for (auto & i : evalSettings.nixPath.get()) addToSearchPath(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
addToSearchPath("nix=" + canonPath(settings.nixDataDir + "/nix/corepkgs", true));
|
|
||||||
} catch (Error &) {
|
|
||||||
}
|
|
||||||
|
|
||||||
if (evalSettings.restrictEval || evalSettings.pureEval) {
|
if (evalSettings.restrictEval || evalSettings.pureEval) {
|
||||||
allowedPaths = PathSet();
|
allowedPaths = PathSet();
|
||||||
|
|
||||||
|
@ -457,6 +452,8 @@ Path EvalState::checkSourcePath(const Path & path_)
|
||||||
*/
|
*/
|
||||||
Path abspath = canonPath(path_);
|
Path abspath = canonPath(path_);
|
||||||
|
|
||||||
|
if (hasPrefix(abspath, corepkgsPrefix)) return abspath;
|
||||||
|
|
||||||
for (auto & i : *allowedPaths) {
|
for (auto & i : *allowedPaths) {
|
||||||
if (isDirOrInDir(abspath, i)) {
|
if (isDirOrInDir(abspath, i)) {
|
||||||
found = true;
|
found = true;
|
||||||
|
|
|
@ -432,4 +432,6 @@ struct EvalSettings : Config
|
||||||
|
|
||||||
extern EvalSettings evalSettings;
|
extern EvalSettings evalSettings;
|
||||||
|
|
||||||
|
static const std::string corepkgsPrefix{"/__corepkgs__/"};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,6 @@ $(eval $(call install-file-in, $(d)/nix-expr.pc, $(prefix)/lib/pkgconfig, 0644))
|
||||||
$(foreach i, $(wildcard src/libexpr/flake/*.hh), \
|
$(foreach i, $(wildcard src/libexpr/flake/*.hh), \
|
||||||
$(eval $(call install-file-in, $(i), $(includedir)/nix/flake, 0644)))
|
$(eval $(call install-file-in, $(i), $(includedir)/nix/flake, 0644)))
|
||||||
|
|
||||||
$(d)/primops.cc: $(d)/imported-drv-to-derivation.nix.gen.hh $(d)/primops/derivation.nix.gen.hh
|
$(d)/primops.cc: $(d)/imported-drv-to-derivation.nix.gen.hh $(d)/primops/derivation.nix.gen.hh $(d)/fetchurl.nix.gen.hh
|
||||||
|
|
||||||
$(d)/flake/flake.cc: $(d)/flake/call-flake.nix.gen.hh
|
$(d)/flake/flake.cc: $(d)/flake/call-flake.nix.gen.hh
|
||||||
|
|
|
@ -698,6 +698,10 @@ Path EvalState::findFile(SearchPath & searchPath, const string & path, const Pos
|
||||||
Path res = r.second + suffix;
|
Path res = r.second + suffix;
|
||||||
if (pathExists(res)) return canonPath(res);
|
if (pathExists(res)) return canonPath(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasPrefix(path, "nix/"))
|
||||||
|
return corepkgsPrefix + path.substr(4);
|
||||||
|
|
||||||
throw ThrownError({
|
throw ThrownError({
|
||||||
.hint = hintfmt(evalSettings.pureEval
|
.hint = hintfmt(evalSettings.pureEval
|
||||||
? "cannot look up '<%s>' in pure evaluation mode (use '--impure' to override)"
|
? "cannot look up '<%s>' in pure evaluation mode (use '--impure' to override)"
|
||||||
|
|
|
@ -164,7 +164,15 @@ static void import(EvalState & state, const Pos & pos, Value & vPath, Value * vS
|
||||||
state.forceFunction(**fun, pos);
|
state.forceFunction(**fun, pos);
|
||||||
mkApp(v, **fun, w);
|
mkApp(v, **fun, w);
|
||||||
state.forceAttrs(v, pos);
|
state.forceAttrs(v, pos);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
else if (path == corepkgsPrefix + "fetchurl.nix") {
|
||||||
|
state.eval(state.parseExprFromString(
|
||||||
|
#include "fetchurl.nix.gen.hh"
|
||||||
|
, "/"), v);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
if (!vScope)
|
if (!vScope)
|
||||||
state.evalFile(realPath, v);
|
state.evalFile(realPath, v);
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -5,7 +5,7 @@ clearStore
|
||||||
# Test fetching a flat file.
|
# Test fetching a flat file.
|
||||||
hash=$(nix-hash --flat --type sha256 ./fetchurl.sh)
|
hash=$(nix-hash --flat --type sha256 ./fetchurl.sh)
|
||||||
|
|
||||||
outPath=$(nix-build '<nix/fetchurl.nix>' --argstr url file://$(pwd)/fetchurl.sh --argstr sha256 $hash --no-out-link)
|
outPath=$(nix-build --expr 'import <nix/fetchurl.nix>' --argstr url file://$(pwd)/fetchurl.sh --argstr sha256 $hash --no-out-link)
|
||||||
|
|
||||||
cmp $outPath fetchurl.sh
|
cmp $outPath fetchurl.sh
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ clearStore
|
||||||
|
|
||||||
hash=$(nix hash file --type sha512 --base64 ./fetchurl.sh)
|
hash=$(nix hash file --type sha512 --base64 ./fetchurl.sh)
|
||||||
|
|
||||||
outPath=$(nix-build '<nix/fetchurl.nix>' --argstr url file://$(pwd)/fetchurl.sh --argstr sha512 $hash --no-out-link)
|
outPath=$(nix-build --expr 'import <nix/fetchurl.nix>' --argstr url file://$(pwd)/fetchurl.sh --argstr sha512 $hash --no-out-link)
|
||||||
|
|
||||||
cmp $outPath fetchurl.sh
|
cmp $outPath fetchurl.sh
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ hash=$(nix hash file ./fetchurl.sh)
|
||||||
|
|
||||||
[[ $hash =~ ^sha256- ]]
|
[[ $hash =~ ^sha256- ]]
|
||||||
|
|
||||||
outPath=$(nix-build '<nix/fetchurl.nix>' --argstr url file://$(pwd)/fetchurl.sh --argstr hash $hash --no-out-link)
|
outPath=$(nix-build --expr 'import <nix/fetchurl.nix>' --argstr url file://$(pwd)/fetchurl.sh --argstr hash $hash --no-out-link)
|
||||||
|
|
||||||
cmp $outPath fetchurl.sh
|
cmp $outPath fetchurl.sh
|
||||||
|
|
||||||
|
@ -38,10 +38,10 @@ hash=$(nix hash file --type sha256 --base16 ./fetchurl.sh)
|
||||||
|
|
||||||
storePath=$(nix --store $other_store store add-file ./fetchurl.sh)
|
storePath=$(nix --store $other_store store add-file ./fetchurl.sh)
|
||||||
|
|
||||||
outPath=$(nix-build '<nix/fetchurl.nix>' --argstr url file:///no-such-dir/fetchurl.sh --argstr sha256 $hash --no-out-link --substituters $other_store)
|
outPath=$(nix-build --expr 'import <nix/fetchurl.nix>' --argstr url file:///no-such-dir/fetchurl.sh --argstr sha256 $hash --no-out-link --substituters $other_store)
|
||||||
|
|
||||||
# Test hashed mirrors with an SRI hash.
|
# Test hashed mirrors with an SRI hash.
|
||||||
nix-build '<nix/fetchurl.nix>' --argstr url file:///no-such-dir/fetchurl.sh --argstr hash $(nix hash to-sri --type sha256 $hash) \
|
nix-build --expr 'import <nix/fetchurl.nix>' --argstr url file:///no-such-dir/fetchurl.sh --argstr hash $(nix hash to-sri --type sha256 $hash) \
|
||||||
--no-out-link --substituters $other_store
|
--no-out-link --substituters $other_store
|
||||||
|
|
||||||
# Test unpacking a NAR.
|
# Test unpacking a NAR.
|
||||||
|
@ -55,7 +55,7 @@ nix-store --dump $TEST_ROOT/archive > $nar
|
||||||
|
|
||||||
hash=$(nix-hash --flat --type sha256 $nar)
|
hash=$(nix-hash --flat --type sha256 $nar)
|
||||||
|
|
||||||
outPath=$(nix-build '<nix/fetchurl.nix>' --argstr url file://$nar --argstr sha256 $hash \
|
outPath=$(nix-build --expr 'import <nix/fetchurl.nix>' --argstr url file://$nar --argstr sha256 $hash \
|
||||||
--arg unpack true --argstr name xyzzy --no-out-link)
|
--arg unpack true --argstr name xyzzy --no-out-link)
|
||||||
|
|
||||||
echo $outPath | grep -q 'xyzzy'
|
echo $outPath | grep -q 'xyzzy'
|
||||||
|
@ -69,7 +69,7 @@ nix-store --delete $outPath
|
||||||
narxz=$TEST_ROOT/archive.nar.xz
|
narxz=$TEST_ROOT/archive.nar.xz
|
||||||
rm -f $narxz
|
rm -f $narxz
|
||||||
xz --keep $nar
|
xz --keep $nar
|
||||||
outPath=$(nix-build '<nix/fetchurl.nix>' --argstr url file://$narxz --argstr sha256 $hash \
|
outPath=$(nix-build --expr 'import <nix/fetchurl.nix>' --argstr url file://$narxz --argstr sha256 $hash \
|
||||||
--arg unpack true --argstr name xyzzy --no-out-link)
|
--arg unpack true --argstr name xyzzy --no-out-link)
|
||||||
|
|
||||||
test -x $outPath/fetchurl.sh
|
test -x $outPath/fetchurl.sh
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
with import ./lib.nix;
|
with import ./lib.nix;
|
||||||
with builtins;
|
with builtins;
|
||||||
|
|
||||||
assert pathExists <nix/fetchurl.nix>;
|
assert isFunction (import <nix/fetchurl.nix>);
|
||||||
|
|
||||||
assert length __nixPath == 6;
|
assert length __nixPath == 5;
|
||||||
assert length (filter (x: x.prefix == "nix") __nixPath) == 1;
|
|
||||||
assert length (filter (x: baseNameOf x.path == "dir4") __nixPath) == 1;
|
assert length (filter (x: baseNameOf x.path == "dir4") __nixPath) == 1;
|
||||||
|
|
||||||
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>
|
||||||
|
|
Loading…
Reference in a new issue