flutter: 1.22.4 -> 1.22.5

Needs to do a build in 2-pass now since Google stopped shipping all
dependencies needed to build Flutter. This may be an oversight from them
since they used to ship everything, but this makes the whole build
process more robust.

The first step will download all dependencies from pub, and the
second step will build Flutter. Since we need to build repository
first, we also require a new depsSha256 parameter to be passed, that
represents the SHA256 of the resulting derivation of all Flutter
dependencies downloaded from https://pub.dev.

This commit also makes some changes in mkFlutter, allowing the
user to pass src instead of passing version/channel/filename, allowing
for more flexibility (i.e: building from a local fork of Flutter).
This commit is contained in:
Thiago Kenji Okada 2021-01-24 09:10:52 -03:00
parent e19491e24c
commit 5f72a823de
5 changed files with 58 additions and 29 deletions

View file

@ -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";
};
}

View file

@ -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 = ''

View file

@ -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;
}