M default.nix => default.nix +3 -7
@@ 48,19 48,15 @@ rec {
export CHICKEN_REPOSITORY_PATH=$TMPDIR/build/${repositoryPath}:$CHICKEN_REPOSITORY_PATH
export CHICKEN_INCLUDE_PATH=$TMPDIR/build/share:$CHICKEN_INCLUDE_PATH
'';
- offlineChickenInstall = writeShellScriptBin "chicken-install" ''
+ localChickenInstall = writeShellScriptBin "chicken-install" ''
test -d $TMPDIR/eggs || cp -R -L ${eggCache} $TMPDIR/eggs
- test -f $TMPDIR/setup.defaults || cat > $TMPDIR/setup.defaults <<EOF
- (version 2)
- (location "$TMPDIR/eggs")
- (map (srfi-4 ->))
- EOF
+ test -f $TMPDIR/setup.defaults || ${chicken}/bin/csi -s ${./setup-defaults.scm} $TMPDIR/eggs > $TMPDIR/setup.defaults
exec ${chicken}/bin/chicken-install -defaults $TMPDIR/setup.defaults "$@"
'';
in stdenv.mkDerivation (args // {
inherit name setupEnvironmentPhase;
- buildInputs = [ offlineChickenInstall chicken makeWrapper ] ++ buildInputs;
+ buildInputs = [ localChickenInstall chicken makeWrapper ] ++ buildInputs;
shellHook = setupEnvironmentPhase + shellHook;
M nix.md => nix.md +2 -2
@@ 248,8 248,8 @@ shell that causes CHICKEN to use an isolated build environment.
In this shell, environment variables are set so that CHICKEN will install all
files under a temporary build root, and the `chicken-install` program will
-work in offline mode, fetching dependencies only from the given `eggCache`
-and not from any network locations.
+attempt to fetch dependencies from the given `eggCache` before any network
+locations (which will fail during sandboxed builds).
=== Examples
A setup-defaults.scm => setup-defaults.scm +15 -0
@@ 0,0 1,15 @@
+;;;
+;;; Generate a setup.defaults file that will make chicken-install fetch
+;;; eggs from the local directories given as command line arguments.
+;;;
+
+(import (chicken pathname)
+ (chicken process-context)
+ (chicken io))
+
+(define +install-prefix+ (normalize-pathname (make-pathname (executable-pathname) "../..")))
+(define +setup-defaults+ (make-pathname +install-prefix+ "share/chicken/setup.defaults"))
+
+(for-each (lambda (x) (write x) (newline))
+ (append (call-with-input-file +setup-defaults+ read-list)
+ (map (lambda (l) (list 'location l)) (command-line-arguments))))