summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtturi <Artturin@artturin.com>2023-01-11 05:57:24 +0200
committerGitHub <noreply@github.com>2023-01-11 05:57:24 +0200
commita6c9e5105948f14c2e9cd978e44cef83a3cfecb6 (patch)
treea70ef6a8912d47796cfe2a36dbe437fcc6792c3f
parent66626be382de530ef1cbaa693073a532a3d4ff37 (diff)
parent8ca4470a5e72131b3687856cd60848dd46dda4a7 (diff)
Merge pull request #208380 from hadilq/androidenv/support-deplying-multiple-packages-in-one-derivation
androidenv: Support deploying multiple packages in one derivation
-rw-r--r--pkgs/development/mobile/androidenv/compose-android-packages.nix13
-rw-r--r--pkgs/development/mobile/androidenv/deploy-androidpackage.nix46
-rw-r--r--pkgs/development/mobile/androidenv/deploy-androidpackages.nix57
-rw-r--r--pkgs/development/mobile/androidenv/examples/shell.nix4
4 files changed, 71 insertions, 49 deletions
diff --git a/pkgs/development/mobile/androidenv/compose-android-packages.nix b/pkgs/development/mobile/androidenv/compose-android-packages.nix
index 78635dce7f8f..a862aef1f3c1 100644
--- a/pkgs/development/mobile/androidenv/compose-android-packages.nix
+++ b/pkgs/development/mobile/androidenv/compose-android-packages.nix
@@ -112,8 +112,19 @@ let
] ++ extraLicenses);
in
rec {
- deployAndroidPackage = callPackage ./deploy-androidpackage.nix {
+ deployAndroidPackages = callPackage ./deploy-androidpackages.nix {
+ inherit stdenv lib mkLicenses;
};
+ deployAndroidPackage = ({package, os ? null, buildInputs ? [], patchInstructions ? "", meta ? {}, ...}@args:
+ let
+ extraParams = removeAttrs args [ "package" "os" "buildInputs" "patchInstructions" ];
+ in
+ deployAndroidPackages ({
+ inherit os buildInputs meta;
+ packages = [ package ];
+ patchesInstructions = { "${package.name}" = patchInstructions; };
+ } // extraParams
+ ));
platform-tools = callPackage ./platform-tools.nix {
inherit deployAndroidPackage;
diff --git a/pkgs/development/mobile/androidenv/deploy-androidpackage.nix b/pkgs/development/mobile/androidenv/deploy-androidpackage.nix
deleted file mode 100644
index f23558ebc5c4..000000000000
--- a/pkgs/development/mobile/androidenv/deploy-androidpackage.nix
+++ /dev/null
@@ -1,46 +0,0 @@
-{stdenv, unzip}:
-{package, os ? null, buildInputs ? [], patchInstructions ? "", meta ? {}, ...}@args:
-
-let
- extraParams = removeAttrs args [ "package" "os" "buildInputs" "patchInstructions" ];
-in
-stdenv.mkDerivation ({
- pname = package.name;
- version = package.revision;
- src = if os != null && builtins.hasAttr os package.archives then package.archives.${os} else package.archives.all;
- buildInputs = [ unzip ] ++ buildInputs;
- preferLocalBuild = true;
-
- # Most Android Zip packages have a root folder, but some don't. We unpack
- # the zip file in a folder and we try to discover whether it has a single root
- # folder. If this is the case, we adjust the current working folder.
- unpackPhase = ''
- mkdir extractedzip
- cd extractedzip
- unpackFile "$src"
- if [ "$(find . -mindepth 1 -maxdepth 1 -type d | wc -l)" -eq 1 ]
- then
- cd "$(find . -mindepth 1 -maxdepth 1 -type d)"
- fi
- sourceRoot="$PWD"
- '';
-
- installPhase = ''
- packageBaseDir=$out/libexec/android-sdk/${package.path}
- mkdir -p $packageBaseDir
- cd $packageBaseDir
- cp -a $sourceRoot/* .
- ${patchInstructions}
- '';
-
- # We never attempt to strip. This is not required since we're doing binary
- # deployments. Moreover, some executables that have been patched with patchelf
- # may not work any longer after they have been stripped.
- dontStrip = true;
- dontPatchELF = true;
- dontAutoPatchelf = true;
-
- meta = {
- description = package.displayName;
- } // meta;
-} // extraParams)
diff --git a/pkgs/development/mobile/androidenv/deploy-androidpackages.nix b/pkgs/development/mobile/androidenv/deploy-androidpackages.nix
new file mode 100644
index 000000000000..d495f2afd466
--- /dev/null
+++ b/pkgs/development/mobile/androidenv/deploy-androidpackages.nix
@@ -0,0 +1,57 @@
+{stdenv, lib, unzip, mkLicenses}:
+{packages, os ? null, nativeBuildInputs ? [], buildInputs ? [], patchesInstructions ? {}, meta ? {}, ...}@args:
+
+let
+ extraParams = removeAttrs args [ "packages" "os" "buildInputs" "nativeBuildInputs" "patchesInstructions" ];
+ sortedPackages = builtins.sort (x: y: builtins.lessThan x.name y.name) packages;
+in
+stdenv.mkDerivation ({
+ inherit buildInputs;
+ pname = lib.concatMapStringsSep "-" (package: package.name) sortedPackages;
+ version = lib.concatMapStringsSep "-" (package: package.revision) sortedPackages;
+ src = map (package:
+ if os != null && builtins.hasAttr os package.archives then package.archives.${os} else package.archives.all
+ ) packages;
+ nativeBuildInputs = [ unzip ] ++ nativeBuildInputs;
+ preferLocalBuild = true;
+
+ unpackPhase = ''
+ buildDir=$PWD
+ i=0
+ for srcArchive in $src; do
+ extractedZip="extractedzip-$i"
+ i=$((i+1))
+ cd "$buildDir"
+ mkdir "$extractedZip"
+ cd "$extractedZip"
+ unpackFile "$srcArchive"
+ done
+ '';
+
+ installPhase = lib.concatStrings (lib.imap0 (i: package: ''
+ cd $buildDir/extractedzip-${toString i}
+
+ # Most Android Zip packages have a root folder, but some don't. We unpack
+ # the zip file in a folder and we try to discover whether it has a single root
+ # folder. If this is the case, we adjust the current working folder.
+ if [ "$(find . -mindepth 1 -maxdepth 1 -type d | wc -l)" -eq 1 ]; then
+ cd "$(find . -mindepth 1 -maxdepth 1 -type d)"
+ fi
+ extractedZip="$PWD"
+
+ packageBaseDir=$out/libexec/android-sdk/${package.path}
+ mkdir -p $packageBaseDir
+ cd $packageBaseDir
+ cp -a $extractedZip/* .
+ ${patchesInstructions.${package.name}}
+ '') packages);
+
+ # Some executables that have been patched with patchelf may not work any longer after they have been stripped.
+ dontStrip = true;
+ dontPatchELF = true;
+ dontAutoPatchelf = true;
+
+ meta = {
+ description = lib.concatMapStringsSep "\n" (package: package.displayName) packages;
+ } // meta;
+} // extraParams)
diff --git a/pkgs/development/mobile/androidenv/examples/shell.nix b/pkgs/development/mobile/androidenv/examples/shell.nix
index 44db11375ff8..36c3d4da0c8e 100644
--- a/pkgs/development/mobile/androidenv/examples/shell.nix
+++ b/pkgs/development/mobile/androidenv/examples/shell.nix
@@ -7,13 +7,13 @@
sha256 = "1wg61h4gndm3vcprdcg7rc4s1v3jkm5xd7lw8r2f67w502y94gcy";
}),
pkgs ? import nixpkgsSource {
- config.allowUnfree = true;
+ config.allowUnfree = true;
},
*/
# If you want to use the in-tree version of nixpkgs:
pkgs ? import ../../../../.. {
- config.allowUnfree = true;
+ config.allowUnfree = true;
},
config ? pkgs.config