diff options
Diffstat (limited to 'pkgs/development/interpreters/tinyscheme/default.nix')
-rw-r--r-- | pkgs/development/interpreters/tinyscheme/default.nix | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/pkgs/development/interpreters/tinyscheme/default.nix b/pkgs/development/interpreters/tinyscheme/default.nix index 5c7ed9d27ead..000b0534a104 100644 --- a/pkgs/development/interpreters/tinyscheme/default.nix +++ b/pkgs/development/interpreters/tinyscheme/default.nix @@ -1,4 +1,10 @@ -{ lib, stdenv, fetchurl }: +{ lib +, stdenv +, fetchurl +, dos2unix +, runCommand +, tinyscheme +}: stdenv.mkDerivation rec { pname = "tinyscheme"; @@ -9,27 +15,68 @@ stdenv.mkDerivation rec { sha256 = "sha256-F7Cxv/0i89SdWDPiKhILM5A50s/aC0bW/FHdLwG0B60="; }; - patchPhase = '' + nativeBuildInputs = [ dos2unix ]; + + prePatch = "dos2unix makefile"; + patches = [ + # The alternate macOS main makes use of `ccommand` which seems to be + # `MetroWerks CodeWarrier` specific: + # https://ptgmedia.pearsoncmg.com/imprint_downloads/informit/downloads/9780201703535/macfix.html + # + # In any case, this is not needed to build on macOS. + ./01-remove-macOS-main.patch + + # We want to have the makefile pick up $CC, etc. so that we don't have + # to unnecessarily tie this package to the GCC stdenv. + ./02-use-toolchain-env-vars.patch + ] ++ lib.optionals stdenv.targetPlatform.isDarwin [ + # On macOS the library suffix is .dylib: + ./03-macOS-SOsuf.patch + ]; + postPatch = '' substituteInPlace scheme.c --replace "init.scm" "$out/lib/init.scm" ''; installPhase = '' mkdir -p $out/bin $out/lib cp init.scm $out/lib + cp libtinyscheme* $out/lib cp scheme $out/bin/tinyscheme ''; + passthru.tests = { + # Checks that the program can run and exit: + simple = runCommand "${pname}-simple-test" {} '' + ${tinyscheme}/bin/tinyscheme <<<"(quit 0)" + echo "success" > $out + ''; + fileIo = runCommand "${pname}-file-io-test" {} '' + ${tinyscheme}/bin/tinyscheme <<EOF + (call-with-output-file "$out" + (lambda (p) + (begin + (write "success!" p) + (newline p) + ))) + EOF + ''; + helpText = runCommand "${pname}-help-text-test" {} '' + ${tinyscheme}/bin/tinyscheme '-?' | tee > $out || : + [[ "$(cat $out)" =~ ^Usage: ]] + ''; + }; + meta = with lib; { - broken = stdenv.isDarwin; description = "Lightweight Scheme implementation"; longDescription = '' TinyScheme is a lightweight Scheme interpreter that implements as large a subset of R5RS as was possible without getting very large and complicated. ''; homepage = "http://tinyscheme.sourceforge.net/"; + changelog = "http://tinyscheme.sourceforge.net/CHANGES"; license = licenses.bsdOriginal; + mainProgram = pname; maintainers = [ maintainers.ebzzry ]; platforms = platforms.unix; - badPlatforms = [ "aarch64-darwin" ]; }; } |