From 5d3f02782f216ef4f3431c459b5c9c1aaa3f77e8 Mon Sep 17 00:00:00 2001 From: Duncan Steele Date: Wed, 5 Nov 2025 13:26:50 +0000 Subject: [PATCH] microhs: init at 0.14.21.0 --- pkgs/by-name/mi/microhs/package.nix | 43 ++++++++++++++++++++ pkgs/by-name/mi/microhs/test-hello-world.nix | 34 ++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 pkgs/by-name/mi/microhs/package.nix create mode 100644 pkgs/by-name/mi/microhs/test-hello-world.nix diff --git a/pkgs/by-name/mi/microhs/package.nix b/pkgs/by-name/mi/microhs/package.nix new file mode 100644 index 000000000000..509ca3cc99d5 --- /dev/null +++ b/pkgs/by-name/mi/microhs/package.nix @@ -0,0 +1,43 @@ +{ + callPackage, + stdenv, + fetchFromGitHub, + lib, + writableTmpDirAsHomeHook, + writeTextDir, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "microhs"; + version = "0.14.21.0"; + + src = fetchFromGitHub { + owner = "augustss"; + repo = "MicroHs"; + tag = "v${finalAttrs.version}"; + hash = "sha256-Tq8fjI3LCP4NWrmbMP0xyhY2fjRmsMCEvgfDQ/SB5Bo="; + }; + + # mcabal doesn't seem to respect the make flag and fails with /homeless-shelter + # This works around the issue + nativeBuildInputs = [ writableTmpDirAsHomeHook ]; + + makeFlags = [ "MCABAL=$(out)" ]; + buildFlags = [ "bootstrap" ]; + + # MicroCabal is a separate repository, which should be packaged separately + # The MicroCabal that is installed by `make install` is pregenerated, does not respect MCABAL above, and so is not useable + postInstall = "rm $out/bin/mcabal"; + + passthru.tests = { + hello-world = callPackage ./test-hello-world.nix { microhs = finalAttrs.finalPackage; }; + }; + + meta = { + description = "Haskell implemented with combinators"; + homepage = "https://github.com/augustss/MicroHs"; + license = lib.licenses.asl20; + maintainers = [ lib.maintainers.steeleduncan ]; + platforms = lib.platforms.all; + }; +}) diff --git a/pkgs/by-name/mi/microhs/test-hello-world.nix b/pkgs/by-name/mi/microhs/test-hello-world.nix new file mode 100644 index 000000000000..8b1f1603cb79 --- /dev/null +++ b/pkgs/by-name/mi/microhs/test-hello-world.nix @@ -0,0 +1,34 @@ +{ + stdenv, + microhs, + writeTextDir, +}: + +stdenv.mkDerivation { + name = "microhs-hello-world"; + buildInputs = [ microhs ]; + + src = writeTextDir "helloworld.hs" '' + main :: IO () + main = putStrLn "Hello World" + ''; + + buildPhase = '' + runHook preBuild + mhs helloworld.hs -oExe + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + ./Exe | grep "Hello World" + runHook postCheck + ''; + doCheck = true; + + installPhase = '' + runHook preInstall + touch $out + runHook postInstall + ''; +}