androidenv: Replace deploy-androidpackage.nix with deploy-androidpackages.nix

This commit is contained in:
Hadi 2022-12-26 12:07:48 -05:00
parent 74be9234a2
commit bceccb7f70
3 changed files with 70 additions and 47 deletions

View file

@ -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;

View file

@ -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)

View file

@ -0,0 +1,58 @@
{stdenv, lib, unzip, mkLicenses}:
{packages, os ? null, buildInputs ? [], patchesInstructions ? {}, meta ? {}, ...}@args:
let
extraParams = removeAttrs args [ "packages" "os" "buildInputs" "patchesInstructions" ];
sortedPackages = builtins.sort (x: y: builtins.lessThan x.name y.name) packages;
in
stdenv.mkDerivation ({
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;
buildInputs = [ unzip ] ++ buildInputs;
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);
# 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 = lib.concatMapStringsSep "\n" (package: package.displayName) packages;
} // meta;
} // extraParams)