From 5a13d561ff7e03873f59f4e8047c7ef21003ddb0 Mon Sep 17 00:00:00 2001 From: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Tue, 16 Feb 2021 12:17:47 +0100 Subject: [PATCH] sbcl: refactor nix expression for all versions The sbcl version specific nix expressions were an exact copy of each other with the version and hash swapped out, leading to unnecessary code duplication. This has been resolved by moving the common expression to common.nix and only tracking version and hash in the version specific expressions. Since the expression is unchanged, this should cause 0 rebuilds. --- pkgs/development/compilers/sbcl/2.0.9.nix | 114 +------------------ pkgs/development/compilers/sbcl/2.1.1.nix | 114 +------------------ pkgs/development/compilers/sbcl/common.nix | 116 ++++++++++++++++++++ pkgs/development/compilers/sbcl/default.nix | 114 +------------------ 4 files changed, 122 insertions(+), 336 deletions(-) create mode 100644 pkgs/development/compilers/sbcl/common.nix diff --git a/pkgs/development/compilers/sbcl/2.0.9.nix b/pkgs/development/compilers/sbcl/2.0.9.nix index ada098ec1829..80b30ec87f48 100644 --- a/pkgs/development/compilers/sbcl/2.0.9.nix +++ b/pkgs/development/compilers/sbcl/2.0.9.nix @@ -1,114 +1,4 @@ -{ lib, stdenv, fetchurl, writeText, sbclBootstrap -, sbclBootstrapHost ? "${sbclBootstrap}/bin/sbcl --disable-debugger --no-userinit --no-sysinit" -, threadSupport ? (stdenv.isi686 || stdenv.isx86_64 || "aarch64-linux" == stdenv.hostPlatform.system) -, disableImmobileSpace ? false - # Meant for sbcl used for creating binaries portable to non-NixOS via save-lisp-and-die. - # Note that the created binaries still need `patchelf --set-interpreter ...` - # to get rid of ${glibc} dependency. -, purgeNixReferences ? false -, texinfo -}: - -stdenv.mkDerivation rec { - pname = "sbcl"; +import ./common.nix { version = "2.0.9"; - - src = fetchurl { - url = "mirror://sourceforge/project/sbcl/sbcl/${version}/${pname}-${version}-source.tar.bz2"; - sha256 = "sha256:17wvrcwgp45z9b6arik31fjnz7908qhr5ackxq1y0gqi1hsh1xy4"; - }; - - buildInputs = [texinfo]; - - patchPhase = '' - echo '"${version}.nixos"' > version.lisp-expr - - pwd - - # SBCL checks whether files are up-to-date in many places.. - # Unfortunately, same timestamp is not good enough - sed -e 's@> x y@>= x y@' -i contrib/sb-aclrepl/repl.lisp - #sed -e '/(date)/i((= date 2208988801) 2208988800)' -i contrib/asdf/asdf.lisp - sed -i src/cold/slam.lisp -e \ - '/file-write-date input/a)' - sed -i src/cold/slam.lisp -e \ - '/file-write-date output/i(or (and (= 2208988801 (file-write-date output)) (= 2208988801 (file-write-date input)))' - sed -i src/code/target-load.lisp -e \ - '/date defaulted-fasl/a)' - sed -i src/code/target-load.lisp -e \ - '/date defaulted-source/i(or (and (= 2208988801 (file-write-date defaulted-source-truename)) (= 2208988801 (file-write-date defaulted-fasl-truename)))' - - # Fix the tests - sed -e '5,$d' -i contrib/sb-bsd-sockets/tests.lisp - sed -e '5,$d' -i contrib/sb-simple-streams/*test*.lisp - - # Use whatever `cc` the stdenv provides - substituteInPlace src/runtime/Config.x86-64-darwin --replace gcc cc - - substituteInPlace src/runtime/Config.x86-64-darwin \ - --replace mmacosx-version-min=10.4 mmacosx-version-min=10.5 - '' - + (if purgeNixReferences - then - # This is the default location to look for the core; by default in $out/lib/sbcl - '' - sed 's@^\(#define SBCL_HOME\) .*$@\1 "/no-such-path"@' \ - -i src/runtime/runtime.c - '' - else - # Fix software version retrieval - '' - sed -e "s@/bin/uname@$(command -v uname)@g" -i src/code/*-os.lisp \ - src/code/run-program.lisp - '' - ); - - - preBuild = '' - export INSTALL_ROOT=$out - mkdir -p test-home - export HOME=$PWD/test-home - ''; - - enableFeatures = with lib; - optional threadSupport "sb-thread" ++ - optional stdenv.isAarch32 "arm"; - - disableFeatures = with lib; - optional (!threadSupport) "sb-thread" ++ - optionals disableImmobileSpace [ "immobile-space" "immobile-code" "compact-instance-header" ]; - - buildPhase = '' - sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${ - lib.concatStringsSep " " - (builtins.map (x: "--with-${x}") enableFeatures ++ - builtins.map (x: "--without-${x}") disableFeatures) - } - (cd doc/manual ; make info) - ''; - - installPhase = '' - INSTALL_ROOT=$out sh install.sh - '' - + lib.optionalString (!purgeNixReferences) '' - cp -r src $out/lib/sbcl - cp -r contrib $out/lib/sbcl - cat >$out/lib/sbcl/sbclrc < version.lisp-expr - - pwd - - # SBCL checks whether files are up-to-date in many places.. - # Unfortunately, same timestamp is not good enough - sed -e 's@> x y@>= x y@' -i contrib/sb-aclrepl/repl.lisp - #sed -e '/(date)/i((= date 2208988801) 2208988800)' -i contrib/asdf/asdf.lisp - sed -i src/cold/slam.lisp -e \ - '/file-write-date input/a)' - sed -i src/cold/slam.lisp -e \ - '/file-write-date output/i(or (and (= 2208988801 (file-write-date output)) (= 2208988801 (file-write-date input)))' - sed -i src/code/target-load.lisp -e \ - '/date defaulted-fasl/a)' - sed -i src/code/target-load.lisp -e \ - '/date defaulted-source/i(or (and (= 2208988801 (file-write-date defaulted-source-truename)) (= 2208988801 (file-write-date defaulted-fasl-truename)))' - - # Fix the tests - sed -e '5,$d' -i contrib/sb-bsd-sockets/tests.lisp - sed -e '5,$d' -i contrib/sb-simple-streams/*test*.lisp - - # Use whatever `cc` the stdenv provides - substituteInPlace src/runtime/Config.x86-64-darwin --replace gcc cc - - substituteInPlace src/runtime/Config.x86-64-darwin \ - --replace mmacosx-version-min=10.4 mmacosx-version-min=10.5 - '' - + (if purgeNixReferences - then - # This is the default location to look for the core; by default in $out/lib/sbcl - '' - sed 's@^\(#define SBCL_HOME\) .*$@\1 "/no-such-path"@' \ - -i src/runtime/runtime.c - '' - else - # Fix software version retrieval - '' - sed -e "s@/bin/uname@$(command -v uname)@g" -i src/code/*-os.lisp \ - src/code/run-program.lisp - '' - ); - - - preBuild = '' - export INSTALL_ROOT=$out - mkdir -p test-home - export HOME=$PWD/test-home - ''; - - enableFeatures = with lib; - optional threadSupport "sb-thread" ++ - optional stdenv.isAarch32 "arm"; - - disableFeatures = with lib; - optional (!threadSupport) "sb-thread" ++ - optionals disableImmobileSpace [ "immobile-space" "immobile-code" "compact-instance-header" ]; - - buildPhase = '' - sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${ - lib.concatStringsSep " " - (builtins.map (x: "--with-${x}") enableFeatures ++ - builtins.map (x: "--without-${x}") disableFeatures) - } - (cd doc/manual ; make info) - ''; - - installPhase = '' - INSTALL_ROOT=$out sh install.sh - '' - + lib.optionalString (!purgeNixReferences) '' - cp -r src $out/lib/sbcl - cp -r contrib $out/lib/sbcl - cat >$out/lib/sbcl/sbclrc < version.lisp-expr + + pwd + + # SBCL checks whether files are up-to-date in many places.. + # Unfortunately, same timestamp is not good enough + sed -e 's@> x y@>= x y@' -i contrib/sb-aclrepl/repl.lisp + #sed -e '/(date)/i((= date 2208988801) 2208988800)' -i contrib/asdf/asdf.lisp + sed -i src/cold/slam.lisp -e \ + '/file-write-date input/a)' + sed -i src/cold/slam.lisp -e \ + '/file-write-date output/i(or (and (= 2208988801 (file-write-date output)) (= 2208988801 (file-write-date input)))' + sed -i src/code/target-load.lisp -e \ + '/date defaulted-fasl/a)' + sed -i src/code/target-load.lisp -e \ + '/date defaulted-source/i(or (and (= 2208988801 (file-write-date defaulted-source-truename)) (= 2208988801 (file-write-date defaulted-fasl-truename)))' + + # Fix the tests + sed -e '5,$d' -i contrib/sb-bsd-sockets/tests.lisp + sed -e '5,$d' -i contrib/sb-simple-streams/*test*.lisp + + # Use whatever `cc` the stdenv provides + substituteInPlace src/runtime/Config.x86-64-darwin --replace gcc cc + + substituteInPlace src/runtime/Config.x86-64-darwin \ + --replace mmacosx-version-min=10.4 mmacosx-version-min=10.5 + '' + + (if purgeNixReferences + then + # This is the default location to look for the core; by default in $out/lib/sbcl + '' + sed 's@^\(#define SBCL_HOME\) .*$@\1 "/no-such-path"@' \ + -i src/runtime/runtime.c + '' + else + # Fix software version retrieval + '' + sed -e "s@/bin/uname@$(command -v uname)@g" -i src/code/*-os.lisp \ + src/code/run-program.lisp + '' + ); + + + preBuild = '' + export INSTALL_ROOT=$out + mkdir -p test-home + export HOME=$PWD/test-home + ''; + + enableFeatures = with lib; + optional threadSupport "sb-thread" ++ + optional stdenv.isAarch32 "arm"; + + disableFeatures = with lib; + optional (!threadSupport) "sb-thread" ++ + optionals disableImmobileSpace [ "immobile-space" "immobile-code" "compact-instance-header" ]; + + buildPhase = '' + sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${ + lib.concatStringsSep " " + (builtins.map (x: "--with-${x}") enableFeatures ++ + builtins.map (x: "--without-${x}") disableFeatures) + } + (cd doc/manual ; make info) + ''; + + installPhase = '' + INSTALL_ROOT=$out sh install.sh + '' + + lib.optionalString (!purgeNixReferences) '' + cp -r src $out/lib/sbcl + cp -r contrib $out/lib/sbcl + cat >$out/lib/sbcl/sbclrc < version.lisp-expr - - pwd - - # SBCL checks whether files are up-to-date in many places.. - # Unfortunately, same timestamp is not good enough - sed -e 's@> x y@>= x y@' -i contrib/sb-aclrepl/repl.lisp - #sed -e '/(date)/i((= date 2208988801) 2208988800)' -i contrib/asdf/asdf.lisp - sed -i src/cold/slam.lisp -e \ - '/file-write-date input/a)' - sed -i src/cold/slam.lisp -e \ - '/file-write-date output/i(or (and (= 2208988801 (file-write-date output)) (= 2208988801 (file-write-date input)))' - sed -i src/code/target-load.lisp -e \ - '/date defaulted-fasl/a)' - sed -i src/code/target-load.lisp -e \ - '/date defaulted-source/i(or (and (= 2208988801 (file-write-date defaulted-source-truename)) (= 2208988801 (file-write-date defaulted-fasl-truename)))' - - # Fix the tests - sed -e '5,$d' -i contrib/sb-bsd-sockets/tests.lisp - sed -e '5,$d' -i contrib/sb-simple-streams/*test*.lisp - - # Use whatever `cc` the stdenv provides - substituteInPlace src/runtime/Config.x86-64-darwin --replace gcc cc - - substituteInPlace src/runtime/Config.x86-64-darwin \ - --replace mmacosx-version-min=10.4 mmacosx-version-min=10.5 - '' - + (if purgeNixReferences - then - # This is the default location to look for the core; by default in $out/lib/sbcl - '' - sed 's@^\(#define SBCL_HOME\) .*$@\1 "/no-such-path"@' \ - -i src/runtime/runtime.c - '' - else - # Fix software version retrieval - '' - sed -e "s@/bin/uname@$(command -v uname)@g" -i src/code/*-os.lisp \ - src/code/run-program.lisp - '' - ); - - - preBuild = '' - export INSTALL_ROOT=$out - mkdir -p test-home - export HOME=$PWD/test-home - ''; - - enableFeatures = with lib; - optional threadSupport "sb-thread" ++ - optional stdenv.isAarch32 "arm"; - - disableFeatures = with lib; - optional (!threadSupport) "sb-thread" ++ - optionals disableImmobileSpace [ "immobile-space" "immobile-code" "compact-instance-header" ]; - - buildPhase = '' - sh make.sh --prefix=$out --xc-host="${sbclBootstrapHost}" ${ - lib.concatStringsSep " " - (builtins.map (x: "--with-${x}") enableFeatures ++ - builtins.map (x: "--without-${x}") disableFeatures) - } - (cd doc/manual ; make info) - ''; - - installPhase = '' - INSTALL_ROOT=$out sh install.sh - '' - + lib.optionalString (!purgeNixReferences) '' - cp -r src $out/lib/sbcl - cp -r contrib $out/lib/sbcl - cat >$out/lib/sbcl/sbclrc <