Bug 1515004 - Move --with-android-sdk to moz.configure. r=nalexander

Since ./mach bootstrap installs Android SDK into ~/.mozbuild, we should detect
this location as default SDK install path.

Also, --with-android-max-sdk and --with-android-min-sdk are still in android.m4
because confvars.sh sets MOZ_ANDROID_MIN_SDK_VERSION.

Differential Revision: https://phabricator.services.mozilla.com/D15463

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Makoto Kato 2019-02-01 21:12:51 +00:00
parent 033a88aff9
commit b93b9a8c45
5 changed files with 118 additions and 79 deletions

View File

@ -91,86 +91,9 @@ AC_SUBST_LIST([STLPORT_LIBS])
dnl Configure an Android SDK.
dnl Arg 1: target SDK version, like 23.
dnl Arg 2: list of build-tools versions, like "23.0.3 23.0.1".
AC_DEFUN([MOZ_ANDROID_SDK],
[
MOZ_ARG_WITH_STRING(android-sdk,
[ --with-android-sdk=DIR
location where the Android SDK can be found (like ~/.mozbuild/android-sdk-linux)],
android_sdk_root=$withval)
android_sdk_root=${withval%/platforms/android-*}
case "$target" in
*-android*|*-linuxandroid*)
if test -z "$android_sdk_root" ; then
AC_MSG_ERROR([You must specify --with-android-sdk=/path/to/sdk when targeting Android.])
fi
# We were given an old-style
# --with-android-sdk=/path/to/sdk/platforms/android-*. We could warn, but
# we'll get compliance by forcing the issue.
if test -e "$withval"/source.properties ; then
AC_MSG_ERROR([Including platforms/android-* in --with-android-sdk arguments is deprecated. Use --with-android-sdk=$android_sdk_root.])
fi
android_target_sdk=$1
AC_MSG_CHECKING([for Android build-tools])
android_build_tools_base="$android_sdk_root"/build-tools
for version in $2; do
android_build_tools="$android_build_tools_base"/$version
if test -d "$android_build_tools" -a -f "$android_build_tools/zipalign"; then
AC_MSG_RESULT([$android_build_tools])
break
fi
done
MOZ_PATH_PROG(ZIPALIGN, zipalign, :, [$android_build_tools])
if test -z "$ZIPALIGN" -o "$ZIPALIGN" = ":"; then
AC_MSG_ERROR([The program zipalign was not found. Try |mach bootstrap|.])
fi
android_platform_tools="$android_sdk_root"/platform-tools
AC_MSG_CHECKING([for Android platform-tools])
if test -d "$android_platform_tools" -a -f "$android_platform_tools/adb"; then
AC_MSG_RESULT([$android_platform_tools])
else
AC_MSG_ERROR([You must install the Android platform-tools. Try |mach bootstrap|. (Looked for $android_platform_tools)])
fi
MOZ_PATH_PROG(ADB, adb, :, [$android_platform_tools])
if test -z "$ADB" -o "$ADB" = ":"; then
AC_MSG_ERROR([The program adb was not found. Try |mach bootstrap|.])
fi
android_tools="$android_sdk_root"/tools
AC_MSG_CHECKING([for Android tools])
if test -d "$android_tools" -a -f "$android_tools/emulator"; then
AC_MSG_RESULT([$android_tools])
else
AC_MSG_ERROR([You must install the Android tools. Try |mach bootstrap|. (Looked for $android_tools)])
fi
dnl Android Tools 26 changes emulator path.
dnl Although android_sdk_root/tools still has emulator command,
dnl it doesn't work correctly
MOZ_PATH_PROG(EMULATOR, emulator, :, [$android_sdk_root/emulator:$android_tools])
if test -z "$EMULATOR" -o "$EMULATOR" = ":"; then
AC_MSG_ERROR([The program emulator was not found. Try |mach bootstrap|.])
fi
ANDROID_TARGET_SDK="${android_target_sdk}"
ANDROID_SDK_ROOT="${android_sdk_root}"
ANDROID_TOOLS="${android_tools}"
AC_SUBST(ANDROID_TARGET_SDK)
AC_SUBST(ANDROID_SDK_ROOT)
AC_SUBST(ANDROID_TOOLS)
;;
esac
MOZ_ARG_WITH_STRING(android-min-sdk,
[ --with-android-min-sdk=[VER] Impose a minimum Firefox for Android SDK version],
[ MOZ_ANDROID_MIN_SDK_VERSION=$withval ])

View File

@ -0,0 +1,116 @@
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Ensure Android SDK and build-tools versions depending on mobile target.
@depends(host, '--help')
@imports('os')
def default_android_sdk_root(host, _):
mozbuild_state_dir = os.environ.get('MOZBUILD_STATE_PATH',
os.path.expanduser(os.path.join('~', '.mozbuild')))
sdk_basename = {
'Darwin': 'android-sdk-macosx',
'Linux': 'android-sdk-linux',
'WINNT': 'android-sdk-windows',
}.get(host.kernel)
if sdk_basename is None:
log.warning("%s is unsupported host" % host.kernel)
return None
return os.path.join(mozbuild_state_dir, sdk_basename)
option('--with-android-sdk', nargs=1,
default=default_android_sdk_root,
help='location where the Android SDK can be found (like ~/.mozbuild/android-sdk-linux){|}')
@depends('--with-android-sdk')
@imports(_from='os.path', _import='isdir')
def android_sdk_root(value):
if value and isdir(value[0]):
return value[0]
die("You must specify --with-android-sdk=/path/to/sdk when targeting Android, "
"or try |mach bootstrap|.")
@depends('--help')
def android_sdk_version(_):
return namespace(build_tools_versions=['27.0.3'], target_sdk_version='28')
@depends(android_sdk_root, android_sdk_version)
@checking('for Android build-tools')
@imports(_from='os.path', _import='exists')
@imports(_from='os.path', _import='isdir')
def android_build_tools(sdk_root, sdk_version):
android_build_tools_base = os.path.join(sdk_root, 'build-tools')
for version in sdk_version.build_tools_versions:
if isdir(os.path.join(android_build_tools_base, version)):
tools = os.path.join(android_build_tools_base, version)
for zipalign in ('zipalign', 'zipalign.exe'):
if exists(os.path.join(tools, zipalign)):
return [tools]
die("You must install the Android build-tools version %s. "
"Try |mach bootstrap|. (Looked for %s/%s)" %
(versions[0], android_build_tools_base, versions[0]))
@depends(android_sdk_root)
@checking('for Android tools')
@imports(_from='os.path', _import='isdir')
def android_tools(sdk_root):
tools = os.path.join(sdk_root, 'tools')
if isdir(tools):
return tools
die("You must install the Android tools. Try |mach bootstrap|")
@depends(android_sdk_root)
@checking('for Android platform-tools')
@imports(_from='os.path', _import='exists')
@imports(_from='os.path', _import='isdir')
def android_platform_tools(sdk_root):
tools = os.path.join(sdk_root, 'platform-tools')
for adb in ('adb', 'adb.exe'):
if exists(os.path.join(tools, adb)):
return [tools]
die("You must install the Android platform-tools. Try |mach bootstrap|. (Looked for %s)" %
tools)
@depends(android_sdk_root)
def android_emulator_path(sdk_root):
return [os.path.join(sdk_root, 'emulator')]
@template
def check_android_tools(tool, tool_dir):
check = check_prog(tool.upper(), (tool, tool + '.exe'), paths=tool_dir,
allow_missing=True)
@depends(check)
def require_tool(result):
if result is None:
die('The program %s was not found. Try |mach bootstrap|' % tool)
return result
return require_tool
check_android_tools('zipalign', android_build_tools)
check_android_tools('adb', android_platform_tools)
check_android_tools('emulator', android_emulator_path)
set_config('ANDROID_SDK_ROOT', android_sdk_root)
set_config('ANDROID_TOOLS', android_tools)
set_config('ANDROID_TARGET_SDK', android_sdk_version.target_sdk_version)
add_old_configure_assignment('ANDROID_TARGET_SDK', android_sdk_version.target_sdk_version)

View File

@ -229,7 +229,6 @@ def old_configure_options(*options):
'--with-android-distribution-directory',
'--with-android-max-sdk',
'--with-android-min-sdk',
'--with-android-sdk',
'--with-app-basename',
'--with-app-name',
'--with-arch',

View File

@ -122,6 +122,7 @@ def check_target(target):
'for more information about the necessary options.')
include('../../toolkit/moz.configure')
include('../../build/moz.configure/android-sdk.configure')
include('../../build/moz.configure/java.configure')
include('gradle.configure')

View File

@ -1796,7 +1796,7 @@ dnl ========================================================
case "$MOZ_BUILD_APP" in
mobile/android)
MOZ_ANDROID_SDK(28, 27.0.3)
MOZ_ANDROID_SDK
;;
esac