Merge "Differentiate build number and release name."
diff --git a/build/tools/package.py b/build/tools/package.py
index 213eb3c..3dc5edf 100755
--- a/build/tools/package.py
+++ b/build/tools/package.py
@@ -18,8 +18,8 @@
from __future__ import print_function
import argparse
-import datetime
import os
+import re
import shutil
import site
import stat
@@ -241,12 +241,28 @@
os.chmod(file_path, mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
-def make_source_properties(out_dir):
+def make_source_properties(out_dir, release, build_number):
+ # Actual releases will have the name "r11" or similar, but
+ # source.properties versions can only be numeric. Strip the leading "r" in
+ # that case.
+ #
+ # The nightly builds will end up using the build number here (which can be
+ # identified both because the release number will be absurdly high, and
+ # because the release number and build number will be the same.
+ #
+ # Local builds will just end up using "dev" as the release name and 0 as
+ # the build number. The SDK manager won't allow these packages since the
+ # version number is bogus, but we don't want to be shipping locally built
+ # things so that's a feature.
+ match = re.match(r'r(\d+)', release)
+ if match is not None:
+ release = match.group(1)
+
path = os.path.join(out_dir, 'source.properties')
with open(path, 'w') as source_properties:
source_properties.write('\n'.join([
'Pkg.Desc = Android NDK',
- 'Pkg.Revision = 11.0.0',
+ 'Pkg.Revision = {}.0.{}'.format(release, build_number),
]))
@@ -255,7 +271,8 @@
shutil.copy2(changelog_path, out_dir)
-def make_package(release, package_dir, packages, host, out_dir, temp_dir):
+def make_package(release, build_number, package_dir, packages, host, out_dir,
+ temp_dir):
release_name = 'android-ndk-{}'.format(release)
extract_dir = os.path.join(temp_dir, release_name)
if os.path.exists(extract_dir):
@@ -263,7 +280,7 @@
extract_all(package_dir, packages, extract_dir)
make_ndk_build_shortcut(extract_dir, host)
- make_source_properties(extract_dir)
+ make_source_properties(extract_dir, release, build_number)
copy_changelog(extract_dir)
host_tag = build_support.host_to_tag(host)
@@ -308,8 +325,8 @@
default=build_support.get_default_host(),
help='Package binaries for given OS (e.g. linux).')
self.add_argument(
- '--release', default=datetime.date.today().strftime('%Y%m%d'),
- help='Release name for the package.')
+ '--build-number', help='Build number for use in version files.')
+ self.add_argument('--release', help='Release name for the package.')
self.add_argument(
'-f', '--force', dest='force', action='store_true',
@@ -335,6 +352,22 @@
if args.arch is not None:
arches = [args.arch]
+ if args.release is not None is args.build_number is None:
+ sys.exit('--release requires --build-number')
+
+ # The package will end up being named android-ndk-$RELEASE-$HOST_TAG.
+ # In order of preference, $RELEASE will be the --release argument, the
+ # build number, or simply "dev".
+ release = args.release
+ if release is None:
+ release = 'dev' if args.build_number is None else args.build_number
+
+ # We need to put a build number in the source.properties file even if we
+ # aren't built on the build server. Default to 0. We do this here rather
+ # than in the arg parser definition because we want to use "dev" as the
+ # release name if --build-number was not passed.
+ build_number = 0 if args.build_number is None else args.build_number
+
if os.path.exists(args.out_dir) and args.unpack:
if args.force:
shutil.rmtree(args.out_dir)
@@ -348,7 +381,7 @@
extract_all(args.dist_dir, packages, args.out_dir)
make_ndk_build_shortcut(args.out_dir, args.host)
else:
- make_package(args.release, args.dist_dir, packages, args.host,
+ make_package(release, build_number, args.dist_dir, packages, args.host,
args.out_dir, build_support.get_out_dir())
diff --git a/checkbuild.py b/checkbuild.py
index 35b64b1..9e2f911 100644
--- a/checkbuild.py
+++ b/checkbuild.py
@@ -23,7 +23,6 @@
import argparse
import collections
-import datetime
import inspect
import os
import shutil
@@ -92,8 +91,12 @@
help='Do not run host tests when finished.')
self.add_argument(
- '--release',
- help='Release name. Package will be named android-ndk-RELEASE.')
+ '--build-number', help='Build number for use in version files.')
+ self.add_argument(
+ '--release', help=textwrap.dedent("""\
+ Release name. Package will be named android-ndk-RELEASE. If not
+ present, will fall back to the build number, and finally to "dev".
+ """))
self.add_argument(
'--system', choices=('darwin', 'linux', 'windows', 'windows64'),
@@ -133,6 +136,9 @@
if args.release is not None:
package_args.append('--release={}'.format(args.release))
+ if args.build_number is not None:
+ package_args.append('--build-number={}'.format(args.build_number))
+
if args.arch is not None:
package_args.append('--arch={}'.format(args.arch))
@@ -140,9 +146,11 @@
def test_ndk(out_dir, args):
+ # Builds will be named with the release name, the build number, or "dev",
+ # in decreasing order of preference.
release = args.release
if args.release is None:
- release = datetime.date.today().strftime('%Y%m%d')
+ release = 'dev' if args.build_number is None else args.build_number
# The packaging step extracts all the modules to a known directory for
# packaging. This directory is not cleaned up after packaging, so we can