about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/mobile/androidenv/deploy-androidpackage.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/mobile/androidenv/deploy-androidpackage.nix')
-rw-r--r--nixpkgs/pkgs/development/mobile/androidenv/deploy-androidpackage.nix44
1 files changed, 44 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/mobile/androidenv/deploy-androidpackage.nix b/nixpkgs/pkgs/development/mobile/androidenv/deploy-androidpackage.nix
new file mode 100644
index 000000000000..97fd197cb7d0
--- /dev/null
+++ b/nixpkgs/pkgs/development/mobile/androidenv/deploy-androidpackage.nix
@@ -0,0 +1,44 @@
+{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;
+
+  # 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)