| #!/usr/bin/env python |
| # |
| # Copyright 2016 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| |
| """Create the asset.""" |
| |
| |
| import argparse |
| import os |
| import platform |
| import shutil |
| import subprocess |
| import sys |
| |
| |
| NDK_VER = "android-ndk-r26b" |
| NDK_URL = \ |
| "https://dl.google.com/android/repository/%s-darwin.dmg" % NDK_VER |
| DMG = "ndk.dmg" |
| MOUNTED_NAME_START = '/Volumes/Android NDK' |
| |
| def find_ndk(volume): |
| """Find the NDK within the mounted volume.""" |
| for f in os.listdir(volume): |
| if f.endswith('.app'): |
| return os.path.join(volume, f, 'Contents/NDK') |
| |
| def create_asset(target_dir): |
| """Create the asset.""" |
| if platform.system() != 'Darwin': |
| print("This script can only be run on a Mac!") |
| sys.exit(1) |
| |
| subprocess.check_call(["curl", NDK_URL, "-o", DMG]) |
| output = subprocess.check_output(['hdiutil', 'attach', DMG]) |
| |
| # hdiutil mounted the DMG somewhere - find where it was mounted. |
| lines = output.decode('utf-8').split('\n') |
| found = False |
| for line in lines: |
| words = line.split('\t') |
| if len(words) == 3: |
| if words[2].startswith(MOUNTED_NAME_START): |
| found = True |
| |
| # copytree (in python2, and by default in python3) requires that the |
| # dst does not exist. Remove it so that is the case. |
| if os.path.isdir(target_dir): |
| os.rmdir(target_dir) |
| |
| shutil.copytree(find_ndk(words[2]), target_dir) |
| |
| # Unmount the volume, now that we're done with it. |
| subprocess.check_call(['hdiutil', 'detach', words[0].strip()]) |
| |
| subprocess.check_call(["rm", DMG]) |
| break |
| |
| if not found: |
| print("Could not find mount point! Output from hdiutil attach:") |
| for line in lines: |
| print(line) |
| sys.exit(2) |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--target_dir', '-t', required=True) |
| args = parser.parse_args() |
| create_asset(args.target_dir) |
| |
| |
| if __name__ == '__main__': |
| main() |