flutter: move flutter-tools' Gradle build files out of Nix Store
This commit is contained in:
parent
b06025f153
commit
fdab275c08
|
@ -82,6 +82,10 @@ let
|
||||||
"dartSdkVersion": "${dart.version}"
|
"dartSdkVersion": "${dart.version}"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Suppress a small error now that `.gradle`'s location changed.
|
||||||
|
# Location changed because of the patch "gradle-flutter-tools-wrapper.patch".
|
||||||
|
mkdir -p "$out/packages/flutter_tools/gradle/.gradle"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
This patch introduces an intermediate Gradle build step to alter the behavior
|
||||||
|
of flutter_tools' Gradle project, specifically moving the creation of `build`
|
||||||
|
and `.gradle` directories from within the Nix Store to somewhere in `$HOME/.cache/flutter/nix-flutter-tools-gradle/$engineShortRev`.
|
||||||
|
|
||||||
|
Without this patch, flutter_tools' Gradle project tries to generate `build` and `.gradle`
|
||||||
|
directories within the Nix Store. Resulting in read-only errors when trying to build a
|
||||||
|
Flutter Android app at runtime.
|
||||||
|
|
||||||
|
This patch takes advantage of the fact settings.gradle takes priority over settings.gradle.kts to build the intermediate Gradle project
|
||||||
|
when a Flutter app runs `includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")`
|
||||||
|
|
||||||
|
`rootProject.buildFileName = "/dev/null"` so that the intermediate project doesn't use `build.gradle.kts` that's in the same directory.
|
||||||
|
|
||||||
|
The intermediate project makes a `settings.gradle` file in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` and `includeBuild`s it.
|
||||||
|
This Gradle project will build the actual `packages/flutter_tools/gradle` project by setting
|
||||||
|
`rootProject.projectDir = new File("$settingsDir")` and `apply from: new File("$settingsDir/settings.gradle.kts")`.
|
||||||
|
|
||||||
|
Now the `.gradle` will be built in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/`, but `build` doesn't.
|
||||||
|
To move `build` to `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` as well, we need to set `buildDirectory`.
|
||||||
|
diff --git a/packages/flutter_tools/gradle/settings.gradle b/packages/flutter_tools/gradle/settings.gradle
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..b2485c94b4
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/packages/flutter_tools/gradle/settings.gradle
|
||||||
|
@@ -0,0 +1,19 @@
|
||||||
|
+rootProject.buildFileName = "/dev/null"
|
||||||
|
+
|
||||||
|
+def engineShortRev = (new File("$settingsDir/../../../bin/internal/engine.version")).text.take(10)
|
||||||
|
+def dir = new File("$System.env.HOME/.cache/flutter/nix-flutter-tools-gradle/$engineShortRev")
|
||||||
|
+dir.mkdirs()
|
||||||
|
+def file = new File(dir, "settings.gradle")
|
||||||
|
+
|
||||||
|
+file.text = """
|
||||||
|
+rootProject.projectDir = new File("$settingsDir")
|
||||||
|
+apply from: new File("$settingsDir/settings.gradle.kts")
|
||||||
|
+
|
||||||
|
+gradle.allprojects { project ->
|
||||||
|
+ project.beforeEvaluate {
|
||||||
|
+ project.layout.buildDirectory = new File("$dir/build")
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+"""
|
||||||
|
+
|
||||||
|
+includeBuild(dir)
|
Loading…
Reference in New Issue
Block a user