diff --git a/pkgs/build-support/flutter/default.nix b/pkgs/build-support/flutter/default.nix index a0ed1211ed81..3e136211655b 100644 --- a/pkgs/build-support/flutter/default.nix +++ b/pkgs/build-support/flutter/default.nix @@ -1,34 +1,28 @@ { lib , callPackage -, stdenvNoCC , runCommand , makeWrapper , wrapGAppsHook -, llvmPackages_13 +, fetchDartDeps +, buildDartApplication , cacert , glib , flutter -, jq }: # absolutely no mac support for now { pubGetScript ? "flutter pub get" , flutterBuildFlags ? [ ] -, runtimeDependencies ? [ ] -, customPackageOverrides ? { } -, autoDepsList ? false -, depsListFile ? null -, vendorHash ? "" -, pubspecLockFile ? null -, nativeBuildInputs ? [ ] -, preUnpack ? "" -, postFixup ? "" , extraWrapProgramArgs ? "" , ... }@args: -let - flutterSetupScript = '' + +(buildDartApplication.override { + dart = flutter; + fetchDartDeps = fetchDartDeps.override { dart = flutter; }; +}) (args // { + sdkSetupScript = '' # Pub needs SSL certificates. Dart normally looks in a hardcoded path. # https://github.com/dart-lang/sdk/blob/3.1.0/runtime/bin/security_context_linux.cc#L48 # @@ -54,136 +48,56 @@ let flutter config --enable-linux-desktop >/dev/null ''; - deps = callPackage ../dart/fetch-dart-deps { dart = flutter; } { - sdkSetupScript = flutterSetupScript; - inherit pubGetScript vendorHash pubspecLockFile; - buildDrvArgs = args; - }; + nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ wrapGAppsHook ]; + buildInputs = (args.buildInputs or [ ]) ++ [ glib ]; - baseDerivation = llvmPackages_13.stdenv.mkDerivation (finalAttrs: args // { - inherit flutterBuildFlags runtimeDependencies; + dontDartBuild = true; + buildPhase = args.buildPhase or '' + runHook preBuild - outputs = [ "out" "debug" ]; + mkdir -p build/flutter_assets/fonts - nativeBuildInputs = [ - makeWrapper - deps - flutter - jq - glib - wrapGAppsHook - ] ++ nativeBuildInputs; + doPubGet flutter pub get --offline -v + flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") flutterBuildFlags)} - dontWrapGApps = true; + runHook postBuild + ''; - preUnpack = '' - ${lib.optionalString (!autoDepsList) '' - if ! { [ '${lib.boolToString (depsListFile != null)}' = 'true' ] ${lib.optionalString (depsListFile != null) "&& cmp -s <(jq -Sc . '${depsListFile}') <(jq -Sc . '${finalAttrs.passthru.depsListFile}')"}; }; then - echo 1>&2 -e '\nThe dependency list file was either not given or differs from the expected result.' \ - '\nPlease choose one of the following solutions:' \ - '\n - Duplicate the following file and pass it to the depsListFile argument.' \ - '\n ${finalAttrs.passthru.depsListFile}' \ - '\n - Set autoDepsList to true (not supported by Hydra or permitted in Nixpkgs)'. - exit 1 - fi - ''} + dontDartInstall = true; + installPhase = args.installPhase or '' + runHook preInstall - ${preUnpack} - ''; + built=build/linux/*/release/bundle - configurePhase = '' - runHook preConfigure + mkdir -p $out/bin + mv $built $out/app - ${flutterSetupScript} + for f in $(find $out/app -iname "*.desktop" -type f); do + install -D $f $out/share/applications/$(basename $f) + done - runHook postConfigure - ''; + for f in $(find $out/app -maxdepth 1 -type f); do + ln -s $f $out/bin/$(basename $f) + done - buildPhase = '' - runHook preBuild + # make *.so executable + find $out/app -iname "*.so" -type f -exec chmod +x {} + - mkdir -p build/flutter_assets/fonts + # remove stuff like /build/source/packages/ubuntu_desktop_installer/linux/flutter/ephemeral + for f in $(find $out/app -executable -type f); do + if patchelf --print-rpath "$f" | grep /build; then # this ignores static libs (e,g. libapp.so) also + echo "strip RPath of $f" + newrp=$(patchelf --print-rpath $f | sed -r "s|/build.*ephemeral:||g" | sed -r "s|/build.*profile:||g") + patchelf --set-rpath "$newrp" "$f" + fi + done - doPubGet flutter pub get --offline -v - flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") finalAttrs.flutterBuildFlags)} + runHook postInstall + ''; - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - - built=build/linux/*/release/bundle - - mkdir -p $out/bin - mv $built $out/app - - for f in $(find $out/app -iname "*.desktop" -type f); do - install -D $f $out/share/applications/$(basename $f) - done - - for f in $(find $out/app -maxdepth 1 -type f); do - ln -s $f $out/bin/$(basename $f) - done - - # make *.so executable - find $out/app -iname "*.so" -type f -exec chmod +x {} + - - # remove stuff like /build/source/packages/ubuntu_desktop_installer/linux/flutter/ephemeral - for f in $(find $out/app -executable -type f); do - if patchelf --print-rpath "$f" | grep /build; then # this ignores static libs (e,g. libapp.so) also - echo "strip RPath of $f" - newrp=$(patchelf --print-rpath $f | sed -r "s|/build.*ephemeral:||g" | sed -r "s|/build.*profile:||g") - patchelf --set-rpath "$newrp" "$f" - fi - done - - runHook postInstall - ''; - - postFixup = '' - # Add runtime library dependencies to the LD_LIBRARY_PATH. - # For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open(). - # - # This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately, - # which is not what application authors expect. - for f in "$out"/bin/*; do - wrapProgram "$f" \ - --suffix LD_LIBRARY_PATH : '${lib.makeLibraryPath finalAttrs.runtimeDependencies}' \ - ''${gappsWrapperArgs[@]} \ - ${extraWrapProgramArgs} - done - - ${postFixup} - ''; - - passthru = (args.passthru or {}) // { - inherit (deps) depsListFile; - }; - }); - - packageOverrideRepository = (callPackage ../../development/compilers/flutter/package-overrides { }) // customPackageOverrides; - productPackages = builtins.filter (package: package.kind != "dev") - (if autoDepsList - then lib.importJSON deps.depsListFile - else - if depsListFile == null - then [ ] - else lib.importJSON depsListFile); -in -builtins.foldl' - (prev: package: - if packageOverrideRepository ? ${package.name} - then - prev.overrideAttrs - (packageOverrideRepository.${package.name} { - inherit (package) - name - version - kind - source - dependencies; - }) - else prev) - baseDerivation - productPackages + dontWrapGApps = true; + extraWrapProgramArgs = '' + ''${gappsWrapperArgs[@]} \ + ${extraWrapProgramArgs} + ''; +}) diff --git a/pkgs/development/compilers/dart/package-overrides/default.nix b/pkgs/development/compilers/dart/package-overrides/default.nix index a7237fe1cfa1..c162929e336a 100644 --- a/pkgs/development/compilers/dart/package-overrides/default.nix +++ b/pkgs/development/compilers/dart/package-overrides/default.nix @@ -1,3 +1,8 @@ { callPackage }: -{ } +{ + flutter_secure_storage_linux = callPackage ./flutter-secure-storage-linux { }; + handy_window = callPackage ./handy-window { }; + matrix = callPackage ./matrix { }; + olm = callPackage ./olm { }; +} diff --git a/pkgs/development/compilers/flutter/package-overrides/flutter-secure-storage-linux/default.nix b/pkgs/development/compilers/dart/package-overrides/flutter-secure-storage-linux/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/flutter-secure-storage-linux/default.nix rename to pkgs/development/compilers/dart/package-overrides/flutter-secure-storage-linux/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/handy-window/default.nix b/pkgs/development/compilers/dart/package-overrides/handy-window/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/handy-window/default.nix rename to pkgs/development/compilers/dart/package-overrides/handy-window/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/matrix/default.nix b/pkgs/development/compilers/dart/package-overrides/matrix/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/matrix/default.nix rename to pkgs/development/compilers/dart/package-overrides/matrix/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/olm/default.nix b/pkgs/development/compilers/dart/package-overrides/olm/default.nix similarity index 100% rename from pkgs/development/compilers/flutter/package-overrides/olm/default.nix rename to pkgs/development/compilers/dart/package-overrides/olm/default.nix diff --git a/pkgs/development/compilers/flutter/package-overrides/default.nix b/pkgs/development/compilers/flutter/package-overrides/default.nix deleted file mode 100644 index c162929e336a..000000000000 --- a/pkgs/development/compilers/flutter/package-overrides/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ callPackage }: - -{ - flutter_secure_storage_linux = callPackage ./flutter-secure-storage-linux { }; - handy_window = callPackage ./handy-window { }; - matrix = callPackage ./matrix { }; - olm = callPackage ./olm { }; -}