33afbf39f6
checkInputs used to be added to nativeBuildInputs. Now we have nativeCheckInputs to do that instead. Doing this treewide change allows to keep hashes identical to before the introduction of nativeCheckInputs.
190 lines
4.1 KiB
Nix
190 lines
4.1 KiB
Nix
{ pname
|
||
, version
|
||
, patches
|
||
, dart
|
||
, src
|
||
}:
|
||
|
||
{ bash
|
||
, buildFHSUserEnv
|
||
, cacert
|
||
, git
|
||
, runCommand
|
||
, stdenv
|
||
, lib
|
||
, alsa-lib
|
||
, dbus
|
||
, expat
|
||
, libpulseaudio
|
||
, libuuid
|
||
, libX11
|
||
, libxcb
|
||
, libXcomposite
|
||
, libXcursor
|
||
, libXdamage
|
||
, libXfixes
|
||
, libXrender
|
||
, libXtst
|
||
, libXi
|
||
, libXext
|
||
, libGL
|
||
, nspr
|
||
, nss
|
||
, systemd
|
||
, which
|
||
, callPackage
|
||
}:
|
||
let
|
||
drvName = "flutter-${version}";
|
||
flutter = stdenv.mkDerivation {
|
||
name = "${drvName}-unwrapped";
|
||
|
||
buildInputs = [ git ];
|
||
|
||
inherit src patches version;
|
||
|
||
postPatch = ''
|
||
patchShebangs --build ./bin/
|
||
'';
|
||
|
||
buildPhase = ''
|
||
export FLUTTER_ROOT="$(pwd)"
|
||
export FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools"
|
||
export SCRIPT_PATH="$FLUTTER_TOOLS_DIR/bin/flutter_tools.dart"
|
||
|
||
export SNAPSHOT_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.snapshot"
|
||
export STAMP_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.stamp"
|
||
|
||
export DART_SDK_PATH="${dart}"
|
||
|
||
HOME=../.. # required for pub upgrade --offline, ~/.pub-cache
|
||
# path is relative otherwise it's replaced by /build/flutter
|
||
|
||
pushd "$FLUTTER_TOOLS_DIR"
|
||
${dart}/bin/dart pub get --offline
|
||
popd
|
||
|
||
local revision="$(cd "$FLUTTER_ROOT"; git rev-parse HEAD)"
|
||
${dart}/bin/dart --snapshot="$SNAPSHOT_PATH" --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" "$SCRIPT_PATH"
|
||
echo "$revision" > "$STAMP_PATH"
|
||
echo -n "${version}" > version
|
||
|
||
rm -r bin/cache/{artifacts,dart-sdk,downloads}
|
||
rm bin/cache/*.stamp
|
||
'';
|
||
|
||
installPhase = ''
|
||
runHook preInstall
|
||
|
||
mkdir -p $out
|
||
cp -r . $out
|
||
mkdir -p $out/bin/cache/
|
||
ln -sf ${dart} $out/bin/cache/dart-sdk
|
||
|
||
runHook postInstall
|
||
'';
|
||
|
||
doInstallCheck = true;
|
||
nativeInstallCheckInputs = [ which ];
|
||
installCheckPhase = ''
|
||
runHook preInstallCheck
|
||
|
||
export HOME="$(mktemp -d)"
|
||
$out/bin/flutter config --android-studio-dir $HOME
|
||
$out/bin/flutter config --android-sdk $HOME
|
||
$out/bin/flutter --version | fgrep -q '${version}'
|
||
|
||
runHook postInstallCheck
|
||
'';
|
||
};
|
||
|
||
# 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
|
||
alsa-lib
|
||
dbus
|
||
expat
|
||
libpulseaudio
|
||
libuuid
|
||
libX11
|
||
libxcb
|
||
libXcomposite
|
||
libXcursor
|
||
libXdamage
|
||
libXext
|
||
libXfixes
|
||
libXi
|
||
libXrender
|
||
libXtst
|
||
libGL
|
||
nspr
|
||
nss
|
||
systemd
|
||
];
|
||
};
|
||
|
||
in
|
||
let
|
||
self = (self:
|
||
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;
|
||
inherit dart;
|
||
mkFlutterApp = callPackage ../../../build-support/flutter {
|
||
flutter = self;
|
||
};
|
||
};
|
||
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" "aarch64-linux" ];
|
||
maintainers = with maintainers; [ babariviere ericdallo h7x4 ];
|
||
};
|
||
} ''
|
||
mkdir -p $out/bin
|
||
|
||
mkdir -p $out/bin/cache/
|
||
ln -sf ${dart} $out/bin/cache/dart-sdk
|
||
|
||
echo -n "$startScript" > $out/bin/${pname}
|
||
chmod +x $out/bin/${pname}
|
||
'') self;
|
||
in
|
||
self
|