diff options
Diffstat (limited to 'pkgs/development/compilers/gerbil')
-rw-r--r-- | pkgs/development/compilers/gerbil/build.nix | 89 | ||||
-rw-r--r-- | pkgs/development/compilers/gerbil/default.nix | 10 | ||||
-rw-r--r-- | pkgs/development/compilers/gerbil/gerbil-support.nix | 64 | ||||
-rw-r--r-- | pkgs/development/compilers/gerbil/gerbil-utils.nix | 24 | ||||
-rw-r--r-- | pkgs/development/compilers/gerbil/unstable.nix | 18 |
5 files changed, 145 insertions, 60 deletions
diff --git a/pkgs/development/compilers/gerbil/build.nix b/pkgs/development/compilers/gerbil/build.nix index 21c2936fa0f8..8297dafff8e2 100644 --- a/pkgs/development/compilers/gerbil/build.nix +++ b/pkgs/development/compilers/gerbil/build.nix @@ -1,34 +1,34 @@ -{ stdenv, makeStaticLibraries, - coreutils, rsync, bash, +{ pkgs, gccStdenv, lib, coreutils, bash, # 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 }: + +# 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 +47,31 @@ stdenv.mkDerivation rec { # LEVELDB=${makeStaticLibraries leveldb}/lib/libleveldb.a # EOF + 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) + ''; + 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 ) @@ -72,19 +81,9 @@ stdenv.mkDerivation rec { installPhase = '' runHook preInstall - mkdir -p $out/ - cp -fa bin lib etc doc $out/ - - cat > $out/bin/gxi <<EOF -#!${bash}/bin/bash -e -export GERBIL_HOME=$out -case "\$1" in -:*) GSIOPTIONS=\$1 ; shift ;; esac -if [[ \$# = 0 ]] ; then - exec ${gambit}/bin/gsi \$GSIOPTIONS \$GERBIL_HOME/lib/gxi-init \$GERBIL_HOME/lib/gxi-interactive - -else - exec ${gambit}/bin/gsi \$GSIOPTIONS \$GERBIL_HOME/lib/gxi-init "\$@" -fi -EOF + mkdir -p $out/gerbil $out/bin + (cd src; ./install) + (cd $out/bin ; ln -s ../gerbil/bin/* .) runHook postInstall ''; @@ -93,10 +92,10 @@ EOF meta = { description = "Gerbil Scheme"; homepage = "https://github.com/vyzo/gerbil"; - license = stdenv.lib.licenses.lgpl2; + license = lib.licenses.lgpl21; # also asl20, like Gambit # NB regarding platforms: regularly tested on Linux, only occasionally on macOS. # Please report success and/or failure to fare. - platforms = stdenv.lib.platforms.unix; - maintainers = with stdenv.lib.maintainers; [ fare ]; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ fare ]; }; } diff --git a/pkgs/development/compilers/gerbil/default.nix b/pkgs/development/compilers/gerbil/default.nix index 8c6b1a87cd37..3367ae581b2e 100644 --- a/pkgs/development/compilers/gerbil/default.nix +++ b/pkgs/development/compilers/gerbil/default.nix @@ -1,14 +1,12 @@ -{ stdenv, callPackage, fetchFromGitHub, gambit }: +{ callPackage, fetchFromGitHub }: callPackage ./build.nix rec { - version = "0.15.1"; - git-version = "0.15.1"; - inherit gambit; + version = "0.16"; + git-version = version; src = fetchFromGitHub { owner = "vyzo"; repo = "gerbil"; rev = "v${version}"; - sha256 = "0qpqms66hz41wwhxb1z0fnzj96ivkm7qi9h9d7lhlr3fsxm1kp1n"; + sha256 = "0vng0kxpnwsg8jbjdpyn4sdww36jz7zfpfbzayg9sdpz6bjxjy0f"; }; - inherit stdenv; } diff --git a/pkgs/development/compilers/gerbil/gerbil-support.nix b/pkgs/development/compilers/gerbil/gerbil-support.nix new file mode 100644 index 000000000000..4e94b6e65de1 --- /dev/null +++ b/pkgs/development/compilers/gerbil/gerbil-support.nix @@ -0,0 +1,64 @@ +{ pkgs, gccStdenv, callPackage, fetchFromGitHub }: +# See ../gambit/build.nix regarding gccStdenv + +rec { + # Gerbil libraries + gerbilPackages-unstable = { + gerbil-utils = callPackage ./gerbil-utils.nix { }; + }; + + # Use this function in any package that uses Gerbil libraries, to define the GERBIL_LOADPATH. + gerbilLoadPath = + gerbilInputs : builtins.concatStringsSep ":" (map (x : x + "/gerbil/lib") gerbilInputs); + + # Use this function to create a Gerbil library. See gerbil-utils as an example. + gerbilPackage = { + pname, version, src, meta, package, + git-version ? "", version-path ? "config/version.ss", + gerbil ? pkgs.gerbil-unstable, + gambit-params ? pkgs.gambit-support.stable-params, + gerbilInputs ? [], + buildInputs ? [], + softwareName ? "" } : + let buildInputs_ = buildInputs; in + gccStdenv.mkDerivation rec { + inherit src meta pname version; + buildInputs = [ gerbil ] ++ gerbilInputs ++ buildInputs_; + postPatch = '' + set -e ; + if [ -n "${version-path}" ] ; then + echo '(import :clan/utils/version)\n(register-software "${softwareName}" "${git-version}")\n' > "${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/gerbil-utils.nix b/pkgs/development/compilers/gerbil/gerbil-utils.nix new file mode 100644 index 000000000000..075a63d7bf4c --- /dev/null +++ b/pkgs/development/compilers/gerbil/gerbil-utils.nix @@ -0,0 +1,24 @@ +{ lib, fetchFromGitHub, gerbil-unstable, gerbil-support, gambit-support }: + +gerbil-support.gerbilPackage { + pname = "gerbil-utils"; + version = "unstable-2020-05-17"; + git-version = "33ef720"; + package = "clan"; + gerbil = gerbil-unstable; + gambit-params = gambit-support.unstable-params; + version-path = ""; + src = fetchFromGitHub { + owner = "fare"; + repo = "gerbil-utils"; + rev = "33ef720799ba98dc9eec773c662f070af4bac016"; + sha256 = "0dsb97magbxzjqqfzwq4qwf7i80llv0s1dsy9nkzkvkq8drxlmqf"; + }; + meta = { + description = "Gerbil Clan: Community curated Collection of Common Utilities"; + homepage = "https://github.com/fare/gerbil-utils"; + license = lib.licenses.lgpl21; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ fare ]; + }; +} diff --git a/pkgs/development/compilers/gerbil/unstable.nix b/pkgs/development/compilers/gerbil/unstable.nix index eb78eed35ee9..9de6dc42907a 100644 --- a/pkgs/development/compilers/gerbil/unstable.nix +++ b/pkgs/development/compilers/gerbil/unstable.nix @@ -1,15 +1,15 @@ -{ stdenv, callPackage, fetchFromGitHub, gambit, gambit-unstable }: +{ callPackage, fetchFromGitHub, gambit-unstable, gambit-support }: -callPackage ./build.nix { - version = "unstable-2020-02-27"; - git-version = "0.16-DEV-493-g1ffb74db"; - #gambit = gambit-unstable; - gambit = gambit; +callPackage ./build.nix rec { + version = "unstable-2020-05-17"; + git-version = "0.16-1-g36a31050"; src = fetchFromGitHub { owner = "vyzo"; repo = "gerbil"; - rev = "1ffb74db5ffd49b4bad751586cef5e619c891d41"; - sha256 = "1szmdp8lvy5gpcwn5bpa7x383m6vywl35xa7hz9a5vs1rq4w2097"; + rev = "36a31050f6c80e7e1a49dfae96a57b2ad0260698"; + sha256 = "0k3fypam9qx110sjxgzxa1mdf5b631w16s9p5v37cb8ll26vqfiv"; }; - inherit stdenv; + inherit gambit-support; + gambit = gambit-unstable; + gambit-params = gambit-support.unstable-params; } |