100 lines
2.7 KiB
Nix
100 lines
2.7 KiB
Nix
{
|
|
lib,
|
|
stdenvNoCC,
|
|
dart,
|
|
dartHooks,
|
|
jq,
|
|
yq,
|
|
cacert,
|
|
}:
|
|
|
|
{
|
|
# Arguments used in the derivation that builds the Dart package.
|
|
# Passing these is recommended to ensure that the same steps are made to
|
|
# prepare the sources in both this derivation and the one that builds the Dart
|
|
# package.
|
|
buildDrvArgs ? { },
|
|
...
|
|
}@args:
|
|
|
|
# This is a derivation and setup hook that can be used to fetch dependencies for Dart projects.
|
|
# It is designed to be placed in the nativeBuildInputs of a derivation that builds a Dart package.
|
|
# Providing the buildDrvArgs argument is highly recommended.
|
|
let
|
|
buildDrvInheritArgNames = [
|
|
"name"
|
|
"pname"
|
|
"version"
|
|
"src"
|
|
"sourceRoot"
|
|
"setSourceRoot"
|
|
"preUnpack"
|
|
"unpackPhase"
|
|
"unpackCmd"
|
|
"postUnpack"
|
|
"prePatch"
|
|
"patchPhase"
|
|
"patches"
|
|
"patchFlags"
|
|
"postPatch"
|
|
];
|
|
|
|
buildDrvInheritArgs = builtins.foldl' (
|
|
attrs: arg: if buildDrvArgs ? ${arg} then attrs // { ${arg} = buildDrvArgs.${arg}; } else attrs
|
|
) { } buildDrvInheritArgNames;
|
|
|
|
drvArgs = buildDrvInheritArgs // (removeAttrs args [ "buildDrvArgs" ]);
|
|
name = (if drvArgs ? name then drvArgs.name else "${drvArgs.pname}-${drvArgs.version}");
|
|
|
|
# Adds the root package to a dependency package_config.json file from pub2nix.
|
|
linkPackageConfig =
|
|
{
|
|
pubspecLock,
|
|
packageConfig,
|
|
extraSetupCommands ? "",
|
|
}:
|
|
stdenvNoCC.mkDerivation (
|
|
drvArgs
|
|
// {
|
|
name = "${name}-package-config-with-root.json";
|
|
|
|
nativeBuildInputs =
|
|
drvArgs.nativeBuildInputs or [ ]
|
|
++ args.nativeBuildInputs or [ ]
|
|
++ [
|
|
jq
|
|
yq
|
|
];
|
|
|
|
dontBuild = true;
|
|
|
|
installPhase =
|
|
let
|
|
m = builtins.match "^[[:space:]]*(\\^|>=|>)?[[:space:]]*([0-9]+\\.[0-9]+)\\.[0-9]+.*$" pubspecLock.sdks.dart;
|
|
languageVersion =
|
|
if m != null then
|
|
(builtins.elemAt m 1)
|
|
else if pubspecLock.sdks.dart == "any" then
|
|
"null"
|
|
else
|
|
# https://github.com/dart-lang/pub/blob/15b96589066884300a30bdc356566f3398794857/lib/src/language_version.dart#L109
|
|
"2.7";
|
|
in
|
|
''
|
|
runHook preInstall
|
|
|
|
packageName="$(yq --raw-output .name pubspec.yaml)"
|
|
jq --arg name "$packageName" --arg languageVersion ${languageVersion} '.packages |= . + [{ name: $name, rootUri: "../", packageUri: "lib/", languageVersion: (if $languageVersion == "null" then null else $languageVersion end) }]' '${packageConfig}' > "$out"
|
|
${extraSetupCommands}
|
|
|
|
runHook postInstall
|
|
'';
|
|
}
|
|
);
|
|
in
|
|
{
|
|
inherit
|
|
linkPackageConfig
|
|
;
|
|
}
|