140 lines
3 KiB
Nix
140 lines
3 KiB
Nix
|
{ 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 = "0.2.0";
|
||
|
|
||
|
src = fetchFromSourcehut {
|
||
|
name = "muon-src";
|
||
|
owner = "~lattis";
|
||
|
repo = "muon";
|
||
|
rev = finalAttrs.version;
|
||
|
hash = "sha256-ZHWyUV/BqM3ihauXDqDVkZURDDbBiRcEzptyGQmw94I=";
|
||
|
};
|
||
|
|
||
|
outputs = [ "out" ] ++ lib.optionals buildDocs [ "man" ];
|
||
|
|
||
|
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-1.0.1-19-gdd8d4ee22.tar.gz";
|
||
|
hash = "sha256-jHSPdLFR5jUeds4e+hLZ6JOblor5iuCV5cIwoc4K9gI=";
|
||
|
};
|
||
|
|
||
|
samurai-wrap = fetchurl {
|
||
|
name = "samurai-wrap";
|
||
|
url = "https://mochiro.moe/wrap/samurai-1.2-32-g81cef5d.tar.gz";
|
||
|
hash = "sha256-aPMAtScqweGljvOLaTuR6B0A0GQQQrVbRviXY4dpCoc=";
|
||
|
};
|
||
|
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
|
||
|
muonBool = lib.mesonBool;
|
||
|
muonEnable = lib.mesonEnable;
|
||
|
|
||
|
cmdlineForMuon = lib.concatStringsSep " " [
|
||
|
(muonBool "static" stdenv.targetPlatform.isStatic)
|
||
|
(muonEnable "docs" buildDocs)
|
||
|
(muonEnable "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 = "Implementation of Meson build system in C99";
|
||
|
license = licenses.gpl3Only;
|
||
|
maintainers = with maintainers; [ AndersonTorres ];
|
||
|
platforms = platforms.unix;
|
||
|
broken = stdenv.hostPlatform.isDarwin; # typical `ar failure`
|
||
|
mainProgram = "muon";
|
||
|
};
|
||
|
})
|
||
|
# TODO LIST:
|
||
|
# 1. automate sources acquisition (especially wraps)
|
||
|
# 2. setup hook
|
||
|
# 3. tests
|