diff options
author | hacker1024 <hacker1024@users.sourceforge.net> | 2023-10-25 22:29:28 +1100 |
---|---|---|
committer | FlafyDev <flafyarazi@gmail.com> | 2023-12-26 17:05:20 +0200 |
commit | 3081228cc4a2e345880cba80ff11544a466b1285 (patch) | |
tree | 545628c83535578df538c27ff393cc27da38c5a8 /pkgs/build-support/flutter | |
parent | a07ba135b0ec74f6411b4bb07d24850b7c060a04 (diff) |
dart: Use Nix instead of Pub
Diffstat (limited to 'pkgs/build-support/flutter')
-rw-r--r-- | pkgs/build-support/flutter/default.nix | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/pkgs/build-support/flutter/default.nix b/pkgs/build-support/flutter/default.nix index bcee31506df1e..dcf14438cb642 100644 --- a/pkgs/build-support/flutter/default.nix +++ b/pkgs/build-support/flutter/default.nix @@ -3,11 +3,13 @@ , runCommand , makeWrapper , wrapGAppsHook -, fetchDartDeps , buildDartApplication , cacert , glib , flutter +, jq +, yq +, moreutils }: # absolutely no mac support for now @@ -20,7 +22,6 @@ (buildDartApplication.override { dart = flutter; - fetchDartDeps = fetchDartDeps.override { dart = flutter; }; }) (args // { sdkSetupScript = '' # Pub needs SSL certificates. Dart normally looks in a hardcoded path. @@ -50,7 +51,24 @@ inherit pubGetScript; - nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ wrapGAppsHook ]; + sdkSourceBuilders = { + # https://github.com/dart-lang/pub/blob/68dc2f547d0a264955c1fa551fa0a0e158046494/lib/src/sdk/flutter.dart#L81 + "flutter" = name: runCommand "flutter-sdk-${name}" { } '' + for path in '${flutter}/packages/${name}' '${flutter}/bin/cache/pkg/${name}'; do + if [ -d "$path" ]; then + ln -s "$path" "$out" + break + fi + done + + if [ ! -e "$out" ]; then + echo 1>&2 'The Flutter SDK does not contain the requested package: ${name}!' + exit 1 + fi + ''; + }; + + nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ wrapGAppsHook jq yq moreutils ]; buildInputs = (args.buildInputs or [ ]) ++ [ glib ]; dontDartBuild = true; @@ -59,7 +77,15 @@ mkdir -p build/flutter_assets/fonts - doPubGet flutter pub get --offline -v + # https://github.com/flutter/flutter/blob/3.13.8/packages/flutter_tools/lib/src/dart/pub.dart#L755 + if [ "$(yq '.flutter.generate // false' pubspec.yaml)" = "true" ]; then + jq '.packages |= . + [{ + name: "flutter_gen", + rootUri: "flutter_gen", + languageVersion: "2.12", + }]' .dart_tool/package_config.json | sponge .dart_tool/package_config.json + fi + flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") flutterBuildFlags)} runHook postBuild @@ -94,6 +120,11 @@ fi done + # Install the package_config.json file. + # This is normally done by dartInstallHook, but we disable it. + mkdir -p "$pubcache" + cp .dart_tool/package_config.json "$pubcache/package_config.json" + runHook postInstall ''; |