diff options
Diffstat (limited to 'pkgs/development/compilers/gerbil/build.nix')
-rw-r--r-- | pkgs/development/compilers/gerbil/build.nix | 83 |
1 files changed, 58 insertions, 25 deletions
diff --git a/pkgs/development/compilers/gerbil/build.nix b/pkgs/development/compilers/gerbil/build.nix index 227f11b7c58..9ce26d0b21b 100644 --- a/pkgs/development/compilers/gerbil/build.nix +++ b/pkgs/development/compilers/gerbil/build.nix @@ -1,8 +1,11 @@ { pkgs, gccStdenv, lib, coreutils, - openssl, zlib, sqlite, libxml2, libyaml, libmysqlclient, lmdb, leveldb, postgresql, - version, git-version, + openssl, zlib, sqlite, + version, git-version, src, gambit-support, - gambit ? pkgs.gambit, gambit-params ? pkgs.gambit-support.stable-params, src }: + gambit-git-version, + gambit-stampYmd, + gambit-stampHms, + gambit-params }: # We use Gambit, that works 10x better with GCC than Clang. See ../gambit/build.nix let stdenv = gccStdenv; in @@ -12,16 +15,13 @@ stdenv.mkDerivation rec { inherit version; inherit src; - buildInputs_libraries = [ openssl zlib sqlite libxml2 libyaml libmysqlclient lmdb leveldb postgresql ]; + buildInputs_libraries = [ openssl zlib sqlite ]; # 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; - - env.NIX_CFLAGS_COMPILE = "-I${libmysqlclient}/include/mysql -L${libmysqlclient}/lib/mysql"; + buildInputs = buildInputs_libraries; postPatch = '' echo '(define (gerbil-version-string) "v${git-version}")' > src/gerbil/runtime/gx-version.scm ; @@ -29,6 +29,17 @@ stdenv.mkDerivation rec { grep -Fl '#!/usr/bin/env' `find . -type f -executable` | while read f ; do substituteInPlace "$f" --replace '#!/usr/bin/env' '#!${coreutils}/bin/env' ; done ; + substituteInPlace ./configure --replace 'set -e' 'set -e ; git () { echo "v${git-version}" ;}' ; + substituteInPlace ./src/build/build-version.scm --replace "with-exception-catcher" '(lambda _ "v${git-version}")' ; + #rmdir src/gambit + #cp -a ${pkgs.gambit-unstable.src} ./src/gambit + chmod -R u+w ./src/gambit + ( cd src/gambit ; ${gambit-params.fixStamp gambit-git-version gambit-stampYmd gambit-stampHms} ) + for f in src/bootstrap/gerbil/compiler/driver__0.scm \ + src/build/build-libgerbil.ss \ + src/gerbil/compiler/driver.ss ; do + substituteInPlace "$f" --replace '"gcc"' '"${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}gcc"' ; + done ''; ## TODO: make static compilation work. @@ -40,26 +51,42 @@ stdenv.mkDerivation rec { # OPENSSL_LIBSSL=${makeStaticLibraries openssl}/lib/libssl.a # MISSING! # ZLIB=${makeStaticLibraries zlib}/lib/libz.a # SQLITE=${makeStaticLibraries sqlite}/lib/sqlite.a # MISSING! -# LIBXML2=${makeStaticLibraries libxml2}/lib/libxml2.a # MISSING! -# YAML=${makeStaticLibraries libyaml}/lib/libyaml.a # MISSING! -# MYSQL=${makeStaticLibraries libmysqlclient}/lib/mariadb/libmariadb.a -# LMDB=${makeStaticLibraries lmdb}/lib/mysql/libmysqlclient_r.a # MISSING! -# LEVELDB=${makeStaticLibraries leveldb}/lib/libleveldb.a # EOF + configureFlags = [ + "--prefix=$out/gerbil" + "--enable-zlib" + "--enable-sqlite" + "--enable-shared" + "--disable-deprecated" + "--enable-march=" # Avoid non-portable invalid instructions + ]; + 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) + export CC=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}gcc \ + CXX=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}g++ \ + CPP=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}cpp \ + CXXCPP=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}cpp \ + LD=${gccStdenv.cc}/bin/${gccStdenv.cc.targetPrefix}ld \ + XMKMF=${coreutils}/bin/false + unset CFLAGS LDFLAGS LIBS CPPFLAGS CXXFLAGS + (cd src/gambit ; ${gambit-params.fixStamp gambit-git-version gambit-stampYmd gambit-stampHms}) + ./configure ${builtins.concatStringsSep " " configureFlags} + (cd src/gambit ; + substituteInPlace config.status \ + ${lib.optionalString (gccStdenv.isDarwin && !gambit-params.stable) + ''--replace "/usr/local/opt/openssl@1.1" "${lib.getLib openssl}"''} \ + --replace "/usr/local/opt/openssl" "${lib.getLib openssl}" + ./config.status + ) ''; + extraLdOptions = [ + "-L${zlib}/lib" + "-L${openssl.out}/lib" + "-L${sqlite.out}/lib" + ]; + buildPhase = '' runHook preBuild @@ -68,7 +95,7 @@ stdenv.mkDerivation rec { export GERBIL_BUILD_CORES=$NIX_BUILD_CORES export GERBIL_GXC=$PWD/bin/gxc export GERBIL_BASE=$PWD - export GERBIL_HOME=$PWD + export GERBIL_PREFIX=$PWD export GERBIL_PATH=$PWD/lib export PATH=$PWD/bin:$PATH ${gambit-support.export-gambopt gambit-params} @@ -76,13 +103,17 @@ stdenv.mkDerivation rec { # Build, replacing make by build.sh ( cd src && sh build.sh ) + f=build/lib/libgerbil.so.ldd ; [ -f $f ] && : + substituteInPlace "$f" --replace '(' \ + '(${lib.strings.concatStrings (map (x: "\"${x}\" " ) extraLdOptions)}' + runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/gerbil $out/bin - (cd src; ./install) + ./install.sh (cd $out/bin ; ln -s ../gerbil/bin/* .) runHook postInstall ''; @@ -98,4 +129,6 @@ stdenv.mkDerivation rec { platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ fare ]; }; + + outputsToInstall = [ "out" ]; } |