{ pkgs, gccStdenv, callPackage, fetchFromGitHub }: # See ../gambit/build.nix regarding gccStdenv rec { # Gerbil libraries gerbilPackages-unstable = { gerbil-utils = callPackage ./gerbil-utils.nix { }; gerbil-crypto = callPackage ./gerbil-crypto.nix { }; gerbil-poo = callPackage ./gerbil-poo.nix { }; gerbil-persist = callPackage ./gerbil-persist.nix { }; gerbil-ethereum = callPackage ./gerbil-ethereum.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, gerbil-package, git-version ? "", version-path ? "", 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; passthru = { inherit gerbil-package version-path ;}; buildInputs = [ gerbil ] ++ gerbilInputs ++ buildInputs_; postPatch = '' set -e ; if [ -n "${version-path}.ss" ] ; then echo -e '(import :clan/versioning${builtins.concatStringsSep "" (map (x : if x.passthru.version-path != "" then " :${x.passthru.gerbil-package}/${x.passthru.version-path}" else "") gerbilInputs) })\n(register-software "${softwareName}" "v${git-version}")\n' > "${passthru.version-path}.ss" 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; }; }