~evhan/beaker

2db700f8e5829b29574fbf6d5fb6c1171601011f — Evan Hanson 8 months ago af70013
Allow chicken-install to try remote sources if not found in local paths
3 files changed, 20 insertions(+), 9 deletions(-)

M default.nix
M nix.md
A setup-defaults.scm
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))))