diff --git a/pkgs/development/compilers/flutter/default.nix b/pkgs/development/compilers/flutter/default.nix index 61641e95960..8572040cb0c 100644 --- a/pkgs/development/compilers/flutter/default.nix +++ b/pkgs/development/compilers/flutter/default.nix @@ -1,17 +1,24 @@ -{ callPackage, dart }: +{ callPackage, fetchurl, dart }: + let mkFlutter = opts: callPackage (import ./flutter.nix opts) { }; getPatches = dir: let files = builtins.attrNames (builtins.readDir dir); in map (f: dir + ("/" + f)) files; + version = "1.22.5"; + channel = "stable"; + filename = "flutter_linux_${version}-${channel}.tar.xz"; in { mkFlutter = mkFlutter; stable = mkFlutter rec { - inherit dart; + inherit dart version; pname = "flutter"; - version = "1.22.4"; - sha256Hash = "0qalgav9drqddcj8lfvl9ddf3325n953pvkmgha47lslg9sa88zw"; - patches = getPatches ./patches/stable; + patches = getPatches ./patches; + src = fetchurl { + url = "https://storage.googleapis.com/flutter_infra/releases/${channel}/linux/${filename}"; + sha256 = "1dv5kczcj9npf7xxlanmpc9ijnxa3ap46521cxn14c0i3y9295ja"; + }; + depsSha256 = "0d7vhk6axgqajy2d9ia9lc6awcnz6cc3n04r7hnh7bx4hb0jv0l1"; }; } diff --git a/pkgs/development/compilers/flutter/flutter.nix b/pkgs/development/compilers/flutter/flutter.nix index bb955ba2b80..230add2a320 100644 --- a/pkgs/development/compilers/flutter/flutter.nix +++ b/pkgs/development/compilers/flutter/flutter.nix @@ -1,10 +1,9 @@ { pname , version -, sha256Hash , patches , dart -, channel ? "stable" -, filename ? "flutter_linux_${version}-${channel}.tar.xz" +, src +, depsSha256 }: { bash @@ -31,21 +30,20 @@ , nspr , nss , systemd +, callPackage }: let - drvName = "flutter-${channel}-${version}"; + repository = callPackage ./repository.nix { + inherit src pname version dart depsSha256; + }; + drvName = "flutter-${version}"; + flutter = stdenv.mkDerivation { name = "${drvName}-unwrapped"; - src = fetchurl { - url = - "https://storage.googleapis.com/flutter_infra/releases/${channel}/linux/${filename}"; - sha256 = sha256Hash; - }; + buildInputs = [ git repository ]; - buildInputs = [ git ]; - - inherit patches; + inherit src patches; postPatch = '' patchShebangs --build ./bin/ @@ -53,25 +51,25 @@ let ''; buildPhase = '' - FLUTTER_ROOT=$(pwd) - FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools" - SNAPSHOT_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.snapshot" - STAMP_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.stamp" - SCRIPT_PATH="$FLUTTER_TOOLS_DIR/bin/flutter_tools.dart" - DART_SDK_PATH="${dart}" + export FLUTTER_ROOT="$(pwd)" + export FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools" + export SCRIPT_PATH="$FLUTTER_TOOLS_DIR/bin/flutter_tools.dart" - HOME=../.. # required for pub upgrade --offline, ~/.pub-cache - # path is relative otherwise it's replaced by /build/flutter + mkdir -p "$out/bin/cache" + export SNAPSHOT_PATH="$out/bin/cache/flutter_tools.snapshot" + export STAMP_PATH="$out/bin/cache/flutter_tools.stamp" - (cd "$FLUTTER_TOOLS_DIR" && ${dart}/bin/pub upgrade --offline) + export DART_SDK_PATH="${dart}" + export PUB_CACHE="${repository}" + + pushd "$FLUTTER_TOOLS_DIR" + ${dart}/bin/pub get --offline + popd local revision="$(cd "$FLUTTER_ROOT"; git rev-parse HEAD)" ${dart}/bin/dart --snapshot="$SNAPSHOT_PATH" --packages="$FLUTTER_TOOLS_DIR/.packages" "$SCRIPT_PATH" echo "$revision" > "$STAMP_PATH" echo -n "${version}" > version - - rm -rf bin/cache/{artifacts,dart-sdk,downloads} - rm -f bin/cache/*.stamp ''; installPhase = '' diff --git a/pkgs/development/compilers/flutter/patches/stable/disable-auto-update.patch b/pkgs/development/compilers/flutter/patches/disable-auto-update.patch similarity index 100% rename from pkgs/development/compilers/flutter/patches/stable/disable-auto-update.patch rename to pkgs/development/compilers/flutter/patches/disable-auto-update.patch diff --git a/pkgs/development/compilers/flutter/patches/stable/move-cache.patch b/pkgs/development/compilers/flutter/patches/move-cache.patch similarity index 100% rename from pkgs/development/compilers/flutter/patches/stable/move-cache.patch rename to pkgs/development/compilers/flutter/patches/move-cache.patch diff --git a/pkgs/development/compilers/flutter/repository.nix b/pkgs/development/compilers/flutter/repository.nix new file mode 100644 index 00000000000..0f8de0a912f --- /dev/null +++ b/pkgs/development/compilers/flutter/repository.nix @@ -0,0 +1,24 @@ +{ lib, stdenv, dart, fetchurl, src, pname, version, depsSha256 }: + +stdenv.mkDerivation { + inherit src version; + + pname = "${pname}-deps"; + buildInputs = [ dart ]; + + buildPhase = '' + export PUB_CACHE="$out" + export FLUTTER_ROOT="$(pwd)" + export FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools" + + pushd "$FLUTTER_TOOLS_DIR" + ${dart}/bin/pub get + ''; + + dontInstall = true; + dontFixup = true; + + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = depsSha256; +}