summary refs log tree commit diff
path: root/pkgs/development/compilers/flutter/wrapper.nix
diff options
context:
space:
mode:
authorhacker1024 <hacker1024@users.sourceforge.net>2023-04-16 19:52:42 +1000
committerhacker1024 <hacker1024@users.sourceforge.net>2023-04-16 21:20:25 +1000
commit17cb291df1d84b89e4aba1fc085333038c9736c3 (patch)
treefbf0eb8f752ea2f95fa384652151238cb9f1ed07 /pkgs/development/compilers/flutter/wrapper.nix
parentbbfc7911d3e5bbc1a4abb59fbc73b3059df4a705 (diff)
downloadnixpkgs-17cb291df1d84b89e4aba1fc085333038c9736c3.tar
nixpkgs-17cb291df1d84b89e4aba1fc085333038c9736c3.tar.gz
nixpkgs-17cb291df1d84b89e4aba1fc085333038c9736c3.tar.bz2
nixpkgs-17cb291df1d84b89e4aba1fc085333038c9736c3.tar.lz
nixpkgs-17cb291df1d84b89e4aba1fc085333038c9736c3.tar.xz
nixpkgs-17cb291df1d84b89e4aba1fc085333038c9736c3.tar.zst
nixpkgs-17cb291df1d84b89e4aba1fc085333038c9736c3.zip
flutter: Allow adding extra dependencies to the wrapper
Flutter application derivations can add dependencies and build flags, but it's not as easy during development.

As an alternative to nix-shell, a custom Flutter wrapper can be built with dependencies required by projects.

This feature builds on the existing build environment setup techniques required for Linux desktop support, so is fairly cheap to maintain.
Diffstat (limited to 'pkgs/development/compilers/flutter/wrapper.nix')
-rw-r--r--pkgs/development/compilers/flutter/wrapper.nix17
1 files changed, 12 insertions, 5 deletions
diff --git a/pkgs/development/compilers/flutter/wrapper.nix b/pkgs/development/compilers/flutter/wrapper.nix
index fe7d95b6180..114465fd0ef 100644
--- a/pkgs/development/compilers/flutter/wrapper.nix
+++ b/pkgs/development/compilers/flutter/wrapper.nix
@@ -3,6 +3,12 @@
 , callPackage
 , flutter
 , supportsLinuxDesktop ? stdenv.isLinux
+, extraPkgConfigPackages ? [ ]
+, extraLibraries ? [ ]
+, extraIncludes ? [ ]
+, extraCxxFlags ? [ ]
+, extraCFlags ? [ ]
+, extraLinkerFlags ? [ ]
 , makeWrapper
 , runCommandLocal
 , writeShellScript
@@ -62,7 +68,7 @@ let
 
   # Some header files and libraries are not properly located by the Flutter SDK.
   # They must be manually included.
-  appStaticBuildDeps = lib.optionals supportsLinuxDesktop [ libX11 xorgproto zlib ];
+  appStaticBuildDeps = (lib.optionals supportsLinuxDesktop [ libX11 xorgproto zlib ]) ++ extraLibraries;
 
   # Tools used by the Flutter SDK to compile applications.
   buildTools = lib.optionals supportsLinuxDesktop [
@@ -73,9 +79,9 @@ let
   ];
 
   # Nix-specific compiler configuration.
-  pkgConfigDirectories = builtins.filter builtins.pathExists (builtins.concatMap (pkg: map (dir: "${lib.getOutput "dev" pkg}/${dir}/pkgconfig") [ "lib" "share" ]) appBuildDeps);
-  cppFlags = map (pkg: "-isystem ${lib.getOutput "dev" pkg}/include") appStaticBuildDeps;
-  linkerFlags = map (pkg: "-rpath,${lib.getOutput "lib" pkg}/lib") appRuntimeDeps;
+  pkgConfigDirectories = builtins.filter builtins.pathExists (builtins.concatMap (pkg: map (dir: "${lib.getOutput "dev" pkg}/${dir}/pkgconfig") [ "lib" "share" ]) (appBuildDeps ++ extraPkgConfigPackages));
+  includeFlags = map (pkg: "-isystem ${lib.getOutput "dev" pkg}/include") (appStaticBuildDeps ++ extraIncludes);
+  linkerFlags = (map (pkg: "-rpath,${lib.getOutput "lib" pkg}/lib") appRuntimeDeps) ++ extraLinkerFlags;
 in
 (callPackage ./sdk-symlink.nix { }) (runCommandLocal "flutter-wrapped"
 {
@@ -94,6 +100,7 @@ in
     --prefix PATH : '${lib.makeBinPath (tools ++ buildTools)}' \
     --prefix PKG_CONFIG_PATH : '${builtins.concatStringsSep ":" pkgConfigDirectories}' \
     --prefix LIBRARY_PATH : '${lib.makeLibraryPath appStaticBuildDeps}' \
-    --prefix CXXFLAGS "''\t" '${builtins.concatStringsSep " " cppFlags}' \
+    --prefix CXXFLAGS "''\t" '${builtins.concatStringsSep " " (includeFlags ++ extraCxxFlags)}' \
+    --prefix CFLAGS "''\t" '${builtins.concatStringsSep " " (includeFlags ++ extraCFlags)}' \
     --prefix LDFLAGS "''\t" '${builtins.concatStringsSep " " (map (flag: "-Wl,${flag}") linkerFlags)}'
 '')