diff --git a/pkgs/development/interpreters/tinyscheme/01-remove-macOS-main.patch b/pkgs/development/interpreters/tinyscheme/01-remove-macOS-main.patch new file mode 100644 index 000000000000..3fedec98f383 --- /dev/null +++ b/pkgs/development/interpreters/tinyscheme/01-remove-macOS-main.patch @@ -0,0 +1,24 @@ +diff --git a/scheme.c b/scheme.c +index 6186ef0..5a43592 100644 +--- a/scheme.c ++++ b/scheme.c +@@ -4949,19 +4949,7 @@ pointer scheme_eval(scheme *sc, pointer obj) + + #if STANDALONE + +-#if defined(__APPLE__) && !defined (OSX) +-int main() +-{ +- extern MacTS_main(int argc, char **argv); +- char** argv; +- int argc = ccommand(&argv); +- MacTS_main(argc,argv); +- return 0; +-} +-int MacTS_main(int argc, char **argv) { +-#else + int main(int argc, char **argv) { +-#endif + scheme sc; + FILE *fin; + char *file_name=InitFile; diff --git a/pkgs/development/interpreters/tinyscheme/02-use-toolchain-env-vars.patch b/pkgs/development/interpreters/tinyscheme/02-use-toolchain-env-vars.patch new file mode 100644 index 000000000000..f23ad8d02ef5 --- /dev/null +++ b/pkgs/development/interpreters/tinyscheme/02-use-toolchain-env-vars.patch @@ -0,0 +1,26 @@ +diff --git a/makefile b/makefile +index aeb2fcd..4c111a1 100644 +--- a/makefile ++++ b/makefile +@@ -18,7 +18,7 @@ + #AR= echo + + # Unix, generally +-CC = gcc -fpic -pedantic ++CC := $(CC) -fpic -pedantic + DEBUG=-g -Wall -Wno-char-subscripts -O + Osuf=o + SOsuf=so +@@ -27,10 +27,10 @@ EXE_EXT= + LIBPREFIX=lib + OUT = -o $@ + RM= -rm -f +-AR= ar crs ++AR := $(AR) crs + + # Linux +-LD = gcc ++LD := $(CC) + LDFLAGS = -shared + DEBUG=-g -Wno-char-subscripts -O + SYS_LIBS= -ldl -lm diff --git a/pkgs/development/interpreters/tinyscheme/03-macOS-SOsuf.patch b/pkgs/development/interpreters/tinyscheme/03-macOS-SOsuf.patch new file mode 100644 index 000000000000..479ff369b80b --- /dev/null +++ b/pkgs/development/interpreters/tinyscheme/03-macOS-SOsuf.patch @@ -0,0 +1,13 @@ +diff --git a/makefile b/makefile +index 4c111a1..8d9e02e 100644 +--- a/makefile ++++ b/makefile +@@ -21,7 +21,7 @@ + CC := $(CC) -fpic -pedantic + DEBUG=-g -Wall -Wno-char-subscripts -O + Osuf=o +-SOsuf=so ++SOsuf=dylib + LIBsuf=a + EXE_EXT= + LIBPREFIX=lib 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 < $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" ]; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 53fdb51f360a..b05a4e5fbf33 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14779,9 +14779,7 @@ with pkgs; wasi-libc = pkgsCross.wasi32.wasilibc; }; - tinyscheme = callPackage ../development/interpreters/tinyscheme { - stdenv = gccStdenv; - }; + tinyscheme = callPackage ../development/interpreters/tinyscheme { }; bupc = callPackage ../development/compilers/bupc { };