
Related issue #108606. Nowadays we have multiple outdated versions of Flutter in nixpkgs. Instead, let's focus in having in having stable versions of Flutter working. Users needing to use beta or dev versions of Flutter can use mkFlutter function, that still exists.
158 lines
3.7 KiB
Nix
158 lines
3.7 KiB
Nix
{ channel
|
||
, pname
|
||
, version
|
||
, sha256Hash
|
||
, patches
|
||
, dart
|
||
, filename ? "flutter_linux_${version}-${channel}.tar.xz"
|
||
}:
|
||
|
||
{ bash
|
||
, buildFHSUserEnv
|
||
, cacert
|
||
, coreutils
|
||
, git
|
||
, runCommand
|
||
, stdenv
|
||
, lib
|
||
, fetchurl
|
||
, alsaLib
|
||
, dbus
|
||
, expat
|
||
, libpulseaudio
|
||
, libuuid
|
||
, libX11
|
||
, libxcb
|
||
, libXcomposite
|
||
, libXcursor
|
||
, libXdamage
|
||
, libXfixes
|
||
, libGL
|
||
, nspr
|
||
, nss
|
||
, systemd
|
||
}:
|
||
let
|
||
drvName = "flutter-${channel}-${version}";
|
||
flutter = stdenv.mkDerivation {
|
||
name = "${drvName}-unwrapped";
|
||
|
||
src = fetchurl {
|
||
url =
|
||
"https://storage.googleapis.com/flutter_infra/releases/${channel}/linux/${filename}";
|
||
sha256 = sha256Hash;
|
||
};
|
||
|
||
buildInputs = [ git ];
|
||
|
||
inherit patches;
|
||
|
||
postPatch = ''
|
||
patchShebangs --build ./bin/
|
||
find ./bin/ -executable -type f -exec patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) {} \;
|
||
'';
|
||
|
||
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}"
|
||
|
||
HOME=../.. # required for pub upgrade --offline, ~/.pub-cache
|
||
# path is relative otherwise it's replaced by /build/flutter
|
||
|
||
(cd "$FLUTTER_TOOLS_DIR" && ${dart}/bin/pub upgrade --offline)
|
||
|
||
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 = ''
|
||
mkdir -p $out
|
||
cp -r . $out
|
||
mkdir -p $out/bin/cache/
|
||
ln -sf ${dart} $out/bin/cache/dart-sdk
|
||
'';
|
||
};
|
||
|
||
# Wrap flutter inside an fhs user env to allow execution of binary,
|
||
# like adb from $ANDROID_HOME or java from android-studio.
|
||
fhsEnv = buildFHSUserEnv {
|
||
name = "${drvName}-fhs-env";
|
||
multiPkgs = pkgs: [
|
||
# Flutter only use these certificates
|
||
(runCommand "fedoracert" { } ''
|
||
mkdir -p $out/etc/pki/tls/
|
||
ln -s ${cacert}/etc/ssl/certs $out/etc/pki/tls/certs
|
||
'')
|
||
pkgs.zlib
|
||
];
|
||
targetPkgs = pkgs:
|
||
with pkgs; [
|
||
bash
|
||
curl
|
||
dart
|
||
git
|
||
unzip
|
||
which
|
||
xz
|
||
|
||
# flutter test requires this lib
|
||
libGLU
|
||
|
||
# for android emulator
|
||
alsaLib
|
||
dbus
|
||
expat
|
||
libpulseaudio
|
||
libuuid
|
||
libX11
|
||
libxcb
|
||
libXcomposite
|
||
libXcursor
|
||
libXdamage
|
||
libXfixes
|
||
libGL
|
||
nspr
|
||
nss
|
||
systemd
|
||
];
|
||
};
|
||
|
||
in
|
||
runCommand drvName
|
||
{
|
||
startScript = ''
|
||
#!${bash}/bin/bash
|
||
export PUB_CACHE=''${PUB_CACHE:-"$HOME/.pub-cache"}
|
||
export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
|
||
${fhsEnv}/bin/${drvName}-fhs-env ${flutter}/bin/flutter --no-version-check "$@"
|
||
'';
|
||
preferLocalBuild = true;
|
||
allowSubstitutes = false;
|
||
passthru = { unwrapped = flutter; };
|
||
meta = with lib; {
|
||
description = "Flutter is Google's SDK for building mobile, web and desktop with Dart";
|
||
longDescription = ''
|
||
Flutter is Google’s UI toolkit for building beautiful,
|
||
natively compiled applications for mobile, web, and desktop from a single codebase.
|
||
'';
|
||
homepage = "https://flutter.dev";
|
||
license = licenses.bsd3;
|
||
platforms = [ "x86_64-linux" ];
|
||
maintainers = with maintainers; [ babariviere ericdallo ];
|
||
};
|
||
} ''
|
||
mkdir -p $out/bin
|
||
|
||
echo -n "$startScript" > $out/bin/${pname}
|
||
chmod +x $out/bin/${pname}
|
||
''
|