about summary refs log tree commit diff
path: root/pkgs/development/interpreters/tinyscheme/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/interpreters/tinyscheme/default.nix')
-rw-r--r--pkgs/development/interpreters/tinyscheme/default.nix55
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" ];
   };
 }