summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/muon/default.nix
diff options
context:
space:
mode:
authorAndersonTorres <torres.anderson.85@protonmail.com>2022-04-23 11:28:20 -0300
committerAndersonTorres <torres.anderson.85@protonmail.com>2022-09-24 19:59:41 -0300
commit954d07720abcf28ef7cd9152d380ddfb7992db1c (patch)
tree65519a504f8d2459f7ea58180972da126ce51a66 /pkgs/development/tools/build-managers/muon/default.nix
parentf2ea9a9fcd41b65651fd89c1b9198798f4362f66 (diff)
downloadnixpkgs-954d07720abcf28ef7cd9152d380ddfb7992db1c.tar
nixpkgs-954d07720abcf28ef7cd9152d380ddfb7992db1c.tar.gz
nixpkgs-954d07720abcf28ef7cd9152d380ddfb7992db1c.tar.bz2
nixpkgs-954d07720abcf28ef7cd9152d380ddfb7992db1c.tar.lz
nixpkgs-954d07720abcf28ef7cd9152d380ddfb7992db1c.tar.xz
nixpkgs-954d07720abcf28ef7cd9152d380ddfb7992db1c.tar.zst
nixpkgs-954d07720abcf28ef7cd9152d380ddfb7992db1c.zip
muon: init at unstable-2022-09-24
Diffstat (limited to 'pkgs/development/tools/build-managers/muon/default.nix')
-rw-r--r--pkgs/development/tools/build-managers/muon/default.nix138
1 files changed, 138 insertions, 0 deletions
diff --git a/pkgs/development/tools/build-managers/muon/default.nix b/pkgs/development/tools/build-managers/muon/default.nix
new file mode 100644
index 00000000000..937b53dac29
--- /dev/null
+++ b/pkgs/development/tools/build-managers/muon/default.nix
@@ -0,0 +1,138 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, fetchurl
+, curl
+, libarchive
+, libpkgconf
+, pkgconf
+, python3
+, samurai
+, scdoc
+, zlib
+, embedSamurai ? false
+, buildDocs ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "muon"
+          + lib.optionalString embedSamurai "-embedded-samurai";
+  version = "unstable-2022-09-24";
+
+  src = fetchFromSourcehut {
+    name = "muon-src";
+    owner = "~lattis";
+    repo = "muon";
+    rev = "f385c82a6104ea3341ca34756e2812d700bc43d8";
+    hash = "sha256-Cr1r/sp6iVotU+n4bTzQiQl8Y+ShaqnnaWjL6gRW8p0=";
+  };
+
+  nativeBuildInputs = [
+    pkgconf
+    samurai
+  ]
+  ++ lib.optionals buildDocs [
+    (python3.withPackages (ps: [ ps.pyyaml ]))
+    scdoc
+  ];
+
+  buildInputs = [
+    curl
+    libarchive
+    libpkgconf
+    samurai
+    zlib
+  ];
+
+  strictDeps = true;
+
+  postUnpack = let
+    # URLs manually extracted from subprojects directory
+    meson-docs-wrap = fetchurl {
+      name = "meson-docs-wrap";
+      url = "https://mochiro.moe/wrap/meson-docs-0.63.0-116-g8a45c81cf.tar.gz";
+      hash = "sha256-fsXdhfBEXvw1mvqnPp2TgZnO5FaeHTNW3Nfd5qfTfxg=";
+    };
+
+    samurai-wrap = fetchurl {
+      name = "samurai-wrap";
+      url = "https://mochiro.moe/wrap/samurai-1.2-28-g4e3a595.tar.gz";
+      hash = "sha256-TZAEwndVgoWr/zhykfr0wcz9wM96yG44GfzM5p9TpBo=";
+  };
+  in ''
+    pushd $sourceRoot/subprojects
+    ${lib.optionalString buildDocs "tar xvf ${meson-docs-wrap}"}
+    ${lib.optionalString embedSamurai "tar xvf ${samurai-wrap}"}
+    popd
+  '';
+
+  postPatch = ''
+    patchShebangs bootstrap.sh
+  ''
+  + lib.optionalString buildDocs ''
+    patchShebangs subprojects/meson-docs/docs/genrefman.py
+  '';
+
+  # tests try to access "~"
+  postConfigure = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  buildPhase = let
+    featureFlag = feature: flag:
+      "-D${feature}=${if flag then "enabled" else "disabled"}";
+    conditionFlag = condition: flag:
+      "-D${condition}=${lib.boolToString flag}";
+    cmdlineForMuon = lib.concatStringsSep " " [
+      (conditionFlag "static" stdenv.targetPlatform.isStatic)
+      (featureFlag "docs" buildDocs)
+      (featureFlag "samurai" embedSamurai)
+    ];
+    cmdlineForSamu = "-j$NIX_BUILD_CORES";
+  in ''
+    runHook preBuild
+
+    ./bootstrap.sh stage-1
+
+    ./stage-1/muon setup ${cmdlineForMuon} stage-2
+    samu ${cmdlineForSamu} -C stage-2
+
+    stage-2/muon setup -Dprefix=$out ${cmdlineForMuon} stage-3
+    samu ${cmdlineForSamu} -C stage-3
+
+    runHook postBuild
+  '';
+
+  # tests are failing because they don't find Python
+  doCheck = false;
+
+  checkPhase = ''
+    runHook preCheck
+
+    ./stage-3/muon -C stage-3 test
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    stage-3/muon -C stage-3 install
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://muon.build/";
+    description = "An implementation of Meson build system in C99";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin; # typical `ar failure`
+  };
+})
+# TODO LIST:
+# 1. setup hook
+# 2. multiple outputs
+# 3. automate sources acquisition (especially wraps)
+# 4. tests