Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at netboot-syslinux-multiplatform 132 lines 5.0 kB view raw
1{ lib, stdenv, coqPackages, coq, which, fetchzip }@args: 2let lib = import ./extra-lib.nix {inherit (args) lib;}; in 3with builtins; with lib; 4let 5 isGitHubDomain = d: match "^github.*" d != null; 6 isGitLabDomain = d: match "^gitlab.*" d != null; 7in 8{ pname, 9 version ? null, 10 fetcher ? null, 11 owner ? "coq-community", 12 domain ? "github.com", 13 repo ? pname, 14 defaultVersion ? null, 15 releaseRev ? (v: v), 16 displayVersion ? {}, 17 release ? {}, 18 buildInputs ? [], 19 nativeBuildInputs ? [], 20 extraBuildInputs ? [], 21 extraNativeBuildInputs ? [], 22 overrideBuildInputs ? [], 23 overrideNativeBuildInputs ? [], 24 namePrefix ? [ "coq" ], 25 enableParallelBuilding ? true, 26 extraInstallFlags ? [], 27 setCOQBIN ? true, 28 mlPlugin ? false, 29 useMelquiondRemake ? null, 30 dropAttrs ? [], 31 keepAttrs ? [], 32 dropDerivationAttrs ? [], 33 useDuneifVersion ? (x: false), 34 useDune ? false, 35 opam-name ? (concatStringsSep "-" (namePrefix ++ [ pname ])), 36 ... 37}@args: 38let 39 args-to-remove = foldl (flip remove) ([ 40 "version" "fetcher" "repo" "owner" "domain" "releaseRev" 41 "displayVersion" "defaultVersion" "useMelquiondRemake" 42 "release" 43 "buildInputs" "nativeBuildInputs" 44 "extraBuildInputs" "extraNativeBuildInputs" 45 "overrideBuildInputs" "overrideNativeBuildInputs" 46 "namePrefix" 47 "meta" "useDuneifVersion" "useDune" "opam-name" 48 "extraInstallFlags" "setCOQBIN" "mlPlugin" 49 "dropAttrs" "dropDerivationAttrs" "keepAttrs" ] ++ dropAttrs) keepAttrs; 50 fetch = import ../coq/meta-fetch/default.nix 51 { inherit lib stdenv fetchzip; } ({ 52 inherit release releaseRev; 53 location = { inherit domain owner repo; }; 54 } // optionalAttrs (args?fetcher) {inherit fetcher;}); 55 fetched = fetch (if version != null then version else defaultVersion); 56 display-pkg = n: sep: v: 57 let d = displayVersion.${n} or (if sep == "" then ".." else true); in 58 n + optionalString (v != "" && v != null) (switch d [ 59 { case = true; out = sep + v; } 60 { case = "."; out = sep + versions.major v; } 61 { case = ".."; out = sep + versions.majorMinor v; } 62 { case = "..."; out = sep + versions.majorMinorPatch v; } 63 { case = isFunction; out = optionalString (d v != "") (sep + d v); } 64 { case = isString; out = optionalString (d != "") (sep + d); } 65 ] "") + optionalString (v == null) "-broken"; 66 append-version = p: n: p + display-pkg n "" coqPackages.${n}.version + "-"; 67 prefix-name = foldl append-version "" namePrefix; 68 useDune = args.useDune or (useDuneifVersion fetched.version); 69 coqlib-flags = switch coq.coq-version [ 70 { case = v: versions.isLe "8.6" v && v != "dev" ; 71 out = [ "COQLIB=$(out)/lib/coq/${coq.coq-version}/" ]; } 72 ] [ "COQLIBINSTALL=$(out)/lib/coq/${coq.coq-version}/user-contrib" 73 "COQPLUGININSTALL=$(OCAMLFIND_DESTDIR)" ]; 74 docdir-flags = switch coq.coq-version [ 75 { case = v: versions.isLe "8.6" v && v != "dev"; 76 out = [ "DOCDIR=$(out)/share/coq/${coq.coq-version}/" ]; } 77 ] [ "COQDOCINSTALL=$(out)/share/coq/${coq.coq-version}/user-contrib" ]; 78in 79 80stdenv.mkDerivation (removeAttrs ({ 81 82 name = prefix-name + (display-pkg pname "-" fetched.version); 83 84 inherit (fetched) version src; 85 86 nativeBuildInputs = args.overrideNativeBuildInputs 87 or ([ which ] 88 ++ optional useDune coq.ocamlPackages.dune_3 89 ++ optionals (useDune || mlPlugin) [ coq.ocamlPackages.ocaml coq.ocamlPackages.findlib ] 90 ++ (args.nativeBuildInputs or []) ++ extraNativeBuildInputs); 91 buildInputs = args.overrideBuildInputs 92 or ([ coq ] ++ (args.buildInputs or []) ++ extraBuildInputs); 93 inherit enableParallelBuilding; 94 95 meta = ({ platforms = coq.meta.platforms; } // 96 (switch domain [{ 97 case = pred.union isGitHubDomain isGitLabDomain; 98 out = { homepage = "https://${domain}/${owner}/${repo}"; }; 99 }] {}) // 100 optionalAttrs (fetched.broken or false) { coqFilter = true; broken = true; }) // 101 (args.meta or {}) ; 102 103} 104// (optionalAttrs setCOQBIN { COQBIN = "${coq}/bin/"; }) 105// (optionalAttrs (!args?installPhase && !args?useMelquiondRemake) { 106 installFlags = 107 coqlib-flags ++ docdir-flags ++ 108 extraInstallFlags; 109}) 110// (optionalAttrs useDune { 111 buildPhase = '' 112 runHook preBuild 113 dune build -p ${opam-name} ''${enableParallelBuilding:+-j $NIX_BUILD_CORES} 114 runHook postBuild 115 ''; 116 installPhase = '' 117 runHook preInstall 118 dune install ${opam-name} --prefix=$out 119 mv $out/lib/coq $out/lib/TEMPORARY 120 mkdir $out/lib/coq/ 121 mv $out/lib/TEMPORARY $out/lib/coq/${coq.coq-version} 122 runHook postInstall 123 ''; 124}) 125// (optionalAttrs (args?useMelquiondRemake) rec { 126 COQUSERCONTRIB = "$out/lib/coq/${coq.coq-version}/user-contrib"; 127 preConfigurePhases = "autoconf"; 128 configureFlags = [ "--libdir=${COQUSERCONTRIB}/${useMelquiondRemake.logpath or ""}" ]; 129 buildPhase = "./remake -j$NIX_BUILD_CORES"; 130 installPhase = "./remake install"; 131}) 132// (removeAttrs args args-to-remove)) dropDerivationAttrs)