nixpkgs-suyu/pkgs/development/mobile/androidenv/deploy-androidpackage.nix
Jamey Sharp 5d1c9cebd6 deployAndroidPackage: prefer local builds
These derivations just unzip something and maybe do a little patching,
so there's no benefit to sending the zip file off to a build server and
then downloading the unzipped results again.
2019-11-16 14:37:47 +01:00

45 lines
1.5 KiB
Nix

{stdenv, unzip}:
{package, os ? null, buildInputs ? [], patchInstructions ? "", meta ? {}, ...}@args:
let
extraParams = removeAttrs args [ "package" "os" "buildInputs" "patchInstructions" ];
in
stdenv.mkDerivation ({
name = package.name + "-" + 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 -av $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)