diff --git a/pkgs/development/compilers/gerbil/build.nix b/pkgs/development/compilers/gerbil/build.nix index 21c2936fa0f..0177e706af1 100644 --- a/pkgs/development/compilers/gerbil/build.nix +++ b/pkgs/development/compilers/gerbil/build.nix @@ -1,34 +1,35 @@ -{ stdenv, makeStaticLibraries, - coreutils, rsync, bash, +{ pkgs, gccStdenv, lib, coreutils, # makeStaticLibraries, openssl, zlib, sqlite, libxml2, libyaml, libmysqlclient, lmdb, leveldb, postgresql, - version, git-version, gambit, src }: + version, git-version, + gambit-support, + gambit ? pkgs.gambit, gambit-params ? pkgs.gambit-support.stable-params, + src, configurePhase, installPhase }: + +# We use Gambit, that works 10x better with GCC than Clang. See ../gambit/build.nix +let stdenv = gccStdenv; in stdenv.mkDerivation rec { pname = "gerbil"; inherit version; inherit src; - # Use makeStaticLibraries to enable creation of statically linked binaries buildInputs_libraries = [ openssl zlib sqlite libxml2 libyaml libmysqlclient lmdb leveldb postgresql ]; - buildInputs_staticLibraries = map makeStaticLibraries buildInputs_libraries; - buildInputs = [ gambit rsync bash ] - ++ buildInputs_libraries ++ buildInputs_staticLibraries; + # TODO: either fix all of Gerbil's dependencies to provide static libraries, + # or give up and delete all tentative support for static libraries. + #buildInputs_staticLibraries = map makeStaticLibraries buildInputs_libraries; + + buildInputs = [ gambit ] + ++ buildInputs_libraries; # ++ buildInputs_staticLibraries; NIX_CFLAGS_COMPILE = "-I${libmysqlclient}/include/mysql -L${libmysqlclient}/lib/mysql"; postPatch = '' - echo '(define (gerbil-version-string) "v${git-version}")' > src/gerbil/runtime/gx-version.scm - - patchShebangs . - + echo '(define (gerbil-version-string) "v${git-version}")' > src/gerbil/runtime/gx-version.scm ; + patchShebangs . ; grep -Fl '#!/usr/bin/env' `find . -type f -executable` | while read f ; do - substituteInPlace "$f" --replace '#!/usr/bin/env' '#!${coreutils}/bin/env' - done - grep -Fl '"gsc"' `find . -type f -name '*.s*'` | while read f ; do - substituteInPlace "$f" --replace '"gsc"' '"${gambit}/bin/gsc"' - done - substituteInPlace "etc/gerbil.el" --replace '"gxc"' "\"$out/bin/gxc\"" + substituteInPlace "$f" --replace '#!/usr/bin/env' '#!${coreutils}/bin/env' ; + done ; ''; ## TODO: make static compilation work. @@ -47,22 +48,20 @@ stdenv.mkDerivation rec { # LEVELDB=${makeStaticLibraries leveldb}/lib/libleveldb.a # EOF + inherit configurePhase installPhase; + buildPhase = '' runHook preBuild - # Enable all optional libraries - substituteInPlace "src/std/build-features.ss" --replace '#f' '#t' - - # Enable autodetection of a default GERBIL_HOME - for i in src/gerbil/boot/gx-init-exe.scm src/gerbil/boot/gx-init.scm ; do - substituteInPlace "$i" --replace '(getenv "GERBIL_HOME" #f)' "(getenv \"GERBIL_HOME\" \"$out\")" - done - for i in src/gerbil/boot/gxi-init.scm src/gerbil/compiler/driver.ss src/gerbil/runtime/gx-gambc.scm src/std/build.ss src/tools/build.ss ; do - substituteInPlace "$i" --replace '(getenv "GERBIL_HOME")' "(getenv \"GERBIL_HOME\" \"$out\")" - done - # gxprof testing uses $HOME/.cache/gerbil/gxc - export HOME=$$PWD + export HOME=$PWD + export GERBIL_BUILD_CORES=$NIX_BUILD_CORES + export GERBIL_GXC=$PWD/bin/gxc + export GERBIL_BASE=$PWD + export GERBIL_HOME=$PWD + export GERBIL_PATH=$PWD/lib + export PATH=$PWD/bin:$PATH + ${gambit-support.export-gambopt gambit-params} # Build, replacing make by build.sh ( cd src && sh build.sh ) @@ -70,33 +69,15 @@ stdenv.mkDerivation rec { runHook postBuild ''; - installPhase = '' - runHook preInstall - mkdir -p $out/ - cp -fa bin lib etc doc $out/ - - cat > $out/bin/gxi < $out/gerbil/bin/gxi < "${version-path}" + fi + patchShebangs . ; + ''; + + postConfigure = '' + export GERBIL_BUILD_CORES=$NIX_BUILD_CORES + export GERBIL_PATH=$PWD/.build + export GERBIL_LOADPATH=${gerbilLoadPath gerbilInputs} + ${pkgs.gambit-support.export-gambopt gambit-params} + ''; + + buildPhase = '' + runHook preBuild + ./build.ss + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/gerbil/lib + cp -fa .build/lib $out/gerbil/ + bins=(.build/bin/*) + if [ 0 -lt ''${#bins} ] ; then + cp -fa .build/bin $out/gerbil/ + mkdir $out/bin + cd $out/bin + ln -s ../gerbil/bin/* . + fi + runHook postInstall + ''; + + dontFixup = true; + }; +} diff --git a/pkgs/development/compilers/gerbil/unstable.nix b/pkgs/development/compilers/gerbil/unstable.nix index eb78eed35ee..d14b4f7d349 100644 --- a/pkgs/development/compilers/gerbil/unstable.nix +++ b/pkgs/development/compilers/gerbil/unstable.nix @@ -1,15 +1,34 @@ -{ stdenv, callPackage, fetchFromGitHub, gambit, gambit-unstable }: +{ callPackage, fetchFromGitHub, gambit-unstable, gambit-support, coreutils, bash }: callPackage ./build.nix { version = "unstable-2020-02-27"; git-version = "0.16-DEV-493-g1ffb74db"; - #gambit = gambit-unstable; - gambit = gambit; src = fetchFromGitHub { owner = "vyzo"; repo = "gerbil"; rev = "1ffb74db5ffd49b4bad751586cef5e619c891d41"; sha256 = "1szmdp8lvy5gpcwn5bpa7x383m6vywl35xa7hz9a5vs1rq4w2097"; }; - inherit stdenv; + inherit gambit-support; + gambit = gambit-unstable; + gambit-params = gambit-support.unstable-params; + configurePhase = '' + (cd src && ./configure \ + --prefix=$out/gerbil \ + --with-gambit=${gambit}/gambit \ + --enable-libxml \ + --enable-libyaml \ + --enable-zlib \ + --enable-sqlite \ + --enable-mysql \ + --enable-lmdb \ + --enable-leveldb) + ''; + installPhase = '' + runHook preInstall + mkdir -p $out/gerbil $out/bin + (cd src; ./install) + (cd $out/bin ; ln -s ../gerbil/bin/* .) + runHook postInstall + ''; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8a26aea2beb..05a2f3ec5a2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8202,11 +8202,13 @@ in fpc = callPackage ../development/compilers/fpc { }; - gambit = callPackage ../development/compilers/gambit { stdenv = gccStdenv; }; + gambit = callPackage ../development/compilers/gambit { }; gambit-unstable = callPackage ../development/compilers/gambit/unstable.nix { }; gambit-support = callPackage ../development/compilers/gambit/gambit-support.nix { }; - gerbil = callPackage ../development/compilers/gerbil { stdenv = gccStdenv; }; - gerbil-unstable = callPackage ../development/compilers/gerbil/unstable.nix { stdenv = gccStdenv; }; + gerbil = callPackage ../development/compilers/gerbil { }; + gerbil-unstable = callPackage ../development/compilers/gerbil/unstable.nix { }; + gerbil-support = callPackage ../development/compilers/gerbil/gerbil-support.nix { }; + gerbilPackages-unstable = gerbil-support.gerbilPackages-unstable; # NB: don't recurseIntoAttrs for (unstable!) libraries gccFun = callPackage (if stdenv.targetPlatform.isVc4 then ../development/compilers/gcc/6 else ../development/compilers/gcc/9); gcc = if stdenv.targetPlatform.isVc4 then gcc6 else gcc9;