jnv: 0.4.2 -> 0.5.0 (#371655)
[NixPkgs.git] / pkgs / os-specific / darwin / apple-source-releases / mkAppleDerivation.nix
bloba200a11799b37da5e83a1e27bb159724e8bfbf2b
1 let
2   versions = builtins.fromJSON (builtins.readFile ./versions.json);
3 in
6   lib,
7   bootstrapStdenv,
8   fetchFromGitHub,
9   meson,
10   ninja,
11   stdenv,
12   stdenvNoCC,
13   xcodeProjectCheckHook,
16 let
17   hasBasenamePrefix = prefix: file: lib.hasPrefix prefix (baseNameOf file);
19 lib.makeOverridable (
20   attrs:
21   let
22     attrs' = if lib.isFunction attrs then attrs else _: attrs;
23     attrsFixed = lib.fix attrs';
24     stdenv' =
25       if attrsFixed.noCC or false then
26         stdenvNoCC
27       else if attrsFixed.noBootstrap or false then
28         stdenv
29       else
30         bootstrapStdenv;
31   in
32   stdenv'.mkDerivation (
33     lib.extends (
34       self: super:
35       assert super ? releaseName;
36       let
37         inherit (super) releaseName;
38         info = versions.${releaseName};
39         files = lib.filesystem.listFilesRecursive (lib.path.append ./. releaseName);
40         mesonFiles = lib.filter (hasBasenamePrefix "meson") files;
41       in
42       # You have to have at least `meson.build.in` when using xcodeHash to trigger the Meson
43       # build support in `mkAppleDerivation`.
44       assert super ? xcodeHash -> lib.length mesonFiles > 0;
45       {
46         pname = super.pname or releaseName;
47         inherit (info) version;
49         src = super.src or fetchFromGitHub {
50           owner = "apple-oss-distributions";
51           repo = releaseName;
52           rev = info.rev or "${releaseName}-${info.version}";
53           inherit (info) hash;
54         };
56         strictDeps = true;
57         __structuredAttrs = true;
59         meta = {
60           homepage = "https://opensource.apple.com/releases/";
61           license = lib.licenses.apple-psl20;
62           maintainers = lib.teams.darwin.members;
63           platforms = lib.platforms.darwin;
64         } // super.meta or { };
65       }
66       // lib.optionalAttrs (super ? xcodeHash) {
67         postUnpack =
68           super.postUnpack or ""
69           + lib.concatMapStrings (
70             file:
71             if baseNameOf file == "meson.build.in" then
72               "substitute ${lib.escapeShellArg "${file}"} \"$sourceRoot/meson.build\" --subst-var version\n"
73             else
74               "cp ${lib.escapeShellArg "${file}"} \"$sourceRoot/\"${lib.escapeShellArg (baseNameOf file)}\n"
75           ) mesonFiles;
77         xcodeProject = super.xcodeProject or "${releaseName}.xcodeproj";
79         nativeBuildInputs = super.nativeBuildInputs or [ ] ++ [
80           meson
81           ninja
82           xcodeProjectCheckHook
83         ];
85         mesonBuildType = "release";
86       }
87     ) attrs'
88   )