From 07f413b38a325f3bf5c60c05e2083d7003d2d7e0 Mon Sep 17 00:00:00 2001 From: Daniel Stonier <d.stonier@gmail.com> Date: Tue, 24 Sep 2013 00:37:20 +0900 Subject: [PATCH] update the android create scripts (untested). --- ... => catkin_create_android_library_project} | 4 +- scripts/catkin_create_android_pkg | 6 +- ...oid_repo => catkin_create_android_project} | 6 +- setup.py | 6 +- src/rosjava_build_tools/__init__.py | 4 +- src/rosjava_build_tools/create_package.py | 241 +++++++++--------- src/rosjava_build_tools/create_project.py | 179 +++++++++++++ src/rosjava_build_tools/init_repo.py | 166 ------------ .../build.gradle.in | 9 +- .../templates/init_repo/CMakeLists.txt.in | 3 +- .../templates/init_repo/build.gradle.in | 62 ++--- 11 files changed, 338 insertions(+), 348 deletions(-) rename scripts/{catkin_create_android_library_pkg => catkin_create_android_library_project} (85%) rename scripts/{catkin_create_android_repo => catkin_create_android_project} (77%) create mode 100644 src/rosjava_build_tools/create_project.py delete mode 100644 src/rosjava_build_tools/init_repo.py rename src/rosjava_build_tools/templates/{android_package => android_project}/build.gradle.in (72%) diff --git a/scripts/catkin_create_android_library_pkg b/scripts/catkin_create_android_library_project similarity index 85% rename from scripts/catkin_create_android_library_pkg rename to scripts/catkin_create_android_library_project index 2be3963..9fa2cb7 100755 --- a/scripts/catkin_create_android_library_pkg +++ b/scripts/catkin_create_android_library_project @@ -11,7 +11,7 @@ import argparse import os import sys -from rosjava_build_tools import create_android_package +from rosjava_build_tools import create_android_project import rosjava_build_tools.console as console ############################################################################## @@ -20,7 +20,7 @@ import rosjava_build_tools.console as console if __name__ == "__main__": try: - sys.exit(create_android_package(is_library=True)) + sys.exit(create_android_project(is_library=True)) except Exception as e: console.logerror("%s : %s" % (str(e), type(e))) sys.exit(1) diff --git a/scripts/catkin_create_android_pkg b/scripts/catkin_create_android_pkg index 8abff13..5356e28 100755 --- a/scripts/catkin_create_android_pkg +++ b/scripts/catkin_create_android_pkg @@ -1,6 +1,6 @@ #!/usr/bin/env python -"""This script creates the skeleton of an android library package""" +"""This script creates the skeleton of an android repo""" ############################################################################## # Imports @@ -11,7 +11,7 @@ import argparse import os import sys -from rosjava_build_tools import create_android_package +from rosjava_build_tools import init_android_repo import rosjava_build_tools.console as console ############################################################################## @@ -20,7 +20,7 @@ import rosjava_build_tools.console as console if __name__ == "__main__": try: - sys.exit(create_android_package(is_library=False)) + sys.exit(init_android_repo()) except Exception as e: console.logerror("%s : %s" % (str(e), type(e))) sys.exit(1) diff --git a/scripts/catkin_create_android_repo b/scripts/catkin_create_android_project similarity index 77% rename from scripts/catkin_create_android_repo rename to scripts/catkin_create_android_project index 5356e28..81e5274 100755 --- a/scripts/catkin_create_android_repo +++ b/scripts/catkin_create_android_project @@ -1,6 +1,6 @@ #!/usr/bin/env python -"""This script creates the skeleton of an android repo""" +"""This script creates the skeleton of an android library package""" ############################################################################## # Imports @@ -11,7 +11,7 @@ import argparse import os import sys -from rosjava_build_tools import init_android_repo +from rosjava_build_tools import create_android_project import rosjava_build_tools.console as console ############################################################################## @@ -20,7 +20,7 @@ import rosjava_build_tools.console as console if __name__ == "__main__": try: - sys.exit(init_android_repo()) + sys.exit(create_android_project(is_library=False)) except Exception as e: console.logerror("%s : %s" % (str(e), type(e))) sys.exit(1) diff --git a/setup.py b/setup.py index a6581ce..f7c844c 100644 --- a/setup.py +++ b/setup.py @@ -6,9 +6,9 @@ from catkin_pkg.python_setup import generate_distutils_setup d = generate_distutils_setup( packages=['rosjava_build_tools'], package_dir={'': 'src'}, - scripts=['scripts/catkin_create_android_repo', - 'scripts/catkin_create_android_pkg', - 'scripts/catkin_create_android_library_pkg', + scripts=['scripts/catkin_create_android_pkg', + 'scripts/catkin_create_android_project', + 'scripts/catkin_create_android_library_project', ], package_data = {'rosjava_build_tools': [ 'templates/android_package/*', diff --git a/src/rosjava_build_tools/__init__.py b/src/rosjava_build_tools/__init__.py index 5fc1662..f13fffb 100644 --- a/src/rosjava_build_tools/__init__.py +++ b/src/rosjava_build_tools/__init__.py @@ -9,7 +9,7 @@ ############################################################################## import console -from init_repo import init_android_repo -from create_package import create_android_package +from create_package import init_android_repo +from create_project import create_android_project from utils import which from release import scrape_for_release_message_packages diff --git a/src/rosjava_build_tools/create_package.py b/src/rosjava_build_tools/create_package.py index 1b14a4a..1db9315 100644 --- a/src/rosjava_build_tools/create_package.py +++ b/src/rosjava_build_tools/create_package.py @@ -8,13 +8,12 @@ # Imports ############################################################################## -from __future__ import print_function - import os import sys import argparse import subprocess -import shutil +import catkin_pkg +from catkin_pkg.package_templates import create_package_xml, PackageTemplate # local imports import utils @@ -28,152 +27,140 @@ import console def parse_arguments(): argv = sys.argv[1:] parser = argparse.ArgumentParser( - description='Creates a new android package based on catkin and gradle. \n') - parser.add_argument('name', - nargs=1, - help='The name for the package') - parser.add_argument('-s', '--sdk-version', - action='store', - default='17', - help='Android sdk version [17]') - parser.add_argument('-p', '--android-package-name', - action='store', - default='com.github.rosjava.android.pkg_name', - help='Android package name (e.g. com.github.rosjava.android.pkg_name)') + description='Creates a new android repository based on catkin and gradle. \n\nNote that the path you provide will become the maven group for your repo.\n') + parser.add_argument('path', nargs='?', default=os.getcwd(), help='path to the repository you wish to create (must not exist beforehand).') + parser.add_argument('dependencies', + nargs='*', + help='Dependency list') + parser.add_argument('-l', '--license', + action='append', + default=["Apache 2.0"], + help='Name for License, (e.g. BSD, MIT, GPLv3...)[BSD]') parser.add_argument('-a', '--author', - action='store', - default=utils.author_name(), + action='append', help='A single author, may be used multiple times') + parser.add_argument('-m', '--maintainer', + action='append', + help='A single maintainer, may be used multiple times') + parser.add_argument('-V', '--pkg_version', + action='store', + default="0.1.0", + help='Initial Package version [0.1.0]') + parser.add_argument('-D', '--description', + action='store', + help='Description') args = parser.parse_args(argv) - if args.android_package_name == "com.github.rosjava.android.pkg_name": - args.android_package_name = "com.github.rosjava.android.%s" % args.name[0].lower() +# if not args.author: +# args.author = [] +# args.author.append(utils.author_name) +# if not args.maintainer: +# args.maintainer = [] +# args.maintainer.append(catkin_pkg.package.Person(utils.author_name)) +# else: +# args.maintainer = [] +# args.maintainer.append(catkin_pkg.package.Person(utils.author_name)) return args -def create_android_project(package_name, sdk_version, java_package_name, is_library): - path = os.path.join(os.getcwd(), package_name.lower()) - console.pretty_println("\nCreating android project ", console.bold) - console.pretty_print(" Name : ", console.cyan) - console.pretty_println("%s" % package_name, console.yellow) - console.pretty_print(" Sdk Ver : ", console.cyan) - console.pretty_println("%s" % sdk_version, console.yellow) - console.pretty_print(" Java Name : ", console.cyan) - console.pretty_println("%s" % java_package_name, console.yellow) - if is_library: - console.pretty_print(" Library : ", console.cyan) - console.pretty_println("yes\n", console.yellow) - cmd = ['android', 'create', 'lib-project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, ] - else: - activity_name = utils.camel_case(package_name) - console.pretty_print(" Activity : ", console.cyan) - console.pretty_println("%s\n" % activity_name, console.yellow) - cmd = ['android', 'create', 'project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, '-a', activity_name] +# Finds and reads one of the templates. +def read_template(tmplf): + f = open(tmplf, 'r') try: - subprocess.check_call(cmd) - except subprocess.CalledProcessError: - raise subprocess.CalledProcessError("failed to create android project.") - # This is in the old form, let's shovel the shit around to the new form - utils.mkdir_p(os.path.join(path, 'src', 'main', 'java')) - os.remove(os.path.join(path, 'local.properties')) - os.remove(os.path.join(path, 'project.properties')) - os.remove(os.path.join(path, 'ant.properties')) - os.remove(os.path.join(path, 'proguard-project.txt')) - os.remove(os.path.join(path, 'build.xml')) - os.rmdir(os.path.join(path, 'bin')) - os.rmdir(os.path.join(path, 'libs')) - shutil.move(os.path.join(path, 'AndroidManifest.xml'), os.path.join(path, 'src', 'main')) - shutil.move(os.path.join(path, 'res'), os.path.join(path, 'src', 'main')) - if not is_library: - shutil.move(os.path.join(path, 'src', java_package_name.split('.')[0]), os.path.join(path, 'src', 'main', 'java')) - -############################################################################## -# Methods acting on classes -############################################################################## + t = f.read() + finally: + f.close() + return t # This inserts the labelled variables into the template wherever the corresponding # %package, %brief, %description and %depends is found. -def instantiate_template(template, package_name, author, plugin_name, sdk_version): +def instantiate_template(template, repo_name, author): return template % locals() -def create_gradle_package_files(args, author, is_library, sdk_version): +def get_templates(): + template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'init_repo') + templates = {} + templates['CMakeLists.txt'] = read_template(os.path.join(template_dir, 'CMakeLists.txt.in')) + templates['build.gradle'] = read_template(os.path.join(template_dir, 'build.gradle.in')) + templates['settings.gradle'] = read_template(os.path.join(template_dir, 'settings.gradle')) + return templates + + +def populate_repo(repo_path): + author = utils.author_name() + repo_name = os.path.basename(repo_path) + templates = get_templates() + for filename, template in templates.iteritems(): + contents = instantiate_template(template, repo_name, author) + try: + p = os.path.abspath(os.path.join(repo_path, filename)) + f = open(p, 'w') + f.write(contents) + console.pretty_print("Created repo file: ", console.cyan) + console.pretty_println("%s" % p, console.yellow) + finally: + f.close() + + +def create_gradle_wrapper(repo_path): + gradle_binary = os.path.join(os.path.dirname(__file__), 'gradle', 'gradlew') + cmd = [gradle_binary, '-p', repo_path, 'wrapper'] + console.pretty_print("Creating gradle wrapper: ", console.cyan) + console.pretty_println("%s" % ' '.join(cmd), console.yellow) + try: + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + raise subprocess.CalledProcessError("failed to create the gradle wrapper.") + + +def create_catkin_package_files(package_name, package_path, args): ''' This is almost a direct copy from catkin_create_pkg. ''' - plugin_name = "android-library" if is_library else "android" try: - package_name = args.name[0].lower() - package_path = os.path.abspath(os.path.join(os.getcwd(), package_name)) - console.pretty_println("\nCreating gradle files", console.bold) - for template_name in ['build.gradle']: # 'CMakeLists.txt']: - filename = os.path.join(package_path, template_name) - template = read_template_file(template_name) - contents = instantiate_template(template, package_name, author, plugin_name, sdk_version) - if is_library: - contents += extra_gradle_library_text() - try: - f = open(filename, 'w') - f.write(contents) - console.pretty_print(' File: ', console.cyan) - console.pretty_println(template_name, console.yellow) - finally: - f.close() + build_depends = [] + if 'rosjava_build_tools' not in args.dependencies: + build_depends.append(catkin_pkg.package.Dependency('rosjava_build_tools')) + for depend_name in args.dependencies: + build_depends.append(catkin_pkg.package.Dependency(depend_name)) + package_template = PackageTemplate._create_package_template( + package_name=package_name, + description=args.description, + licenses=args.license or [], + maintainer_names=args.maintainer, + author_names=args.author, + version=args.pkg_version, + catkin_deps=[], + system_deps=[], + boost_comps=None) + package_template.exports = [] + package_template.build_depends = build_depends + distro_version = utils.distro_version() + package_xml = create_package_xml(package_template=package_template, rosdistro=distro_version) + try: + filename = os.path.join(package_path, 'package.xml') + f = open(filename, 'w') + f.write(package_xml) + console.pretty_print('Created repo file: ', console.cyan) + console.pretty_println('%s' % filename, console.yellow) + finally: + f.close() except Exception: raise - -def add_to_root_gradle_settings(name): - ''' - Adds project name to the root level settings.gradle file. - ''' - for rel_path in ['.', '..']: - settings_gradle_path = os.path.join(os.getcwd(), rel_path, 'settings.gradle') - if os.path.isfile(settings_gradle_path): - break - else: - settings_gradle_path = None - if settings_gradle_path is None: - console.pretty_println("\nCouldn't find the root level settings.gradle file - not adding to the superproject.") - return - with open(settings_gradle_path, 'a') as settings_gradle: - console.pretty_println("\nIncluding '%s' in the root gradle project configuration (settings.gradle).\n" % name, console.bold) - settings_gradle.write("include '%s'\n" % name) - - -def extra_gradle_library_text(): - text = "\n" - text += "/* http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds */\n" - text += "android.libraryVariants\n" - text += "publishing {\n" - text += " publications {\n" - text += " maven(MavenPublication) {\n" - text += " /* artifact bundleDebug */\n" - text += " artifact bundleRelease\n" - text += " }\n" - text += " }\n" - text += "}\n" - return text - - -def create_android_package(is_library=False): - args = parse_arguments() - create_android_project(args.name[0], args.sdk_version, args.android_package_name, is_library) - create_gradle_package_files(args, args.author, is_library, args.sdk_version) - add_to_root_gradle_settings(args.name[0]) - ############################################################################## -# Borrowed from catkin_pkg.package_templates +# Methods acting on classes ############################################################################## -def read_template_file(filename): - template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'android_package') - template = os.path.join(template_dir, '%s.in' % filename) - if not os.path.isfile(template): - raise IOError( - "Could not read template [%s]" % template - ) - with open(template, 'r') as fhand: - template_contents = fhand.read() - return template_contents +def init_android_repo(): + args = parse_arguments() + try: + repo_path = utils.validate_path(args.path) + repo_name = os.path.basename(os.path.normpath(repo_path)).lower() + populate_repo(repo_path) + create_catkin_package_files(repo_name, repo_path, args) + create_gradle_wrapper(repo_path) + except Exception: + raise diff --git a/src/rosjava_build_tools/create_project.py b/src/rosjava_build_tools/create_project.py new file mode 100644 index 0000000..216b4ee --- /dev/null +++ b/src/rosjava_build_tools/create_project.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +# +# License: Apache 2.0 +# https://raw.github.com/rosjava/rosjava_build_tools/license/LICENSE +# + +############################################################################## +# Imports +############################################################################## + +from __future__ import print_function + +import os +import sys +import argparse +import subprocess +import shutil + +# local imports +import utils +import console + +############################################################################## +# Methods +############################################################################## + + +def parse_arguments(): + argv = sys.argv[1:] + parser = argparse.ArgumentParser( + description='Creates a new android package based on catkin and gradle. \n') + parser.add_argument('name', + nargs=1, + help='The name for the package') + parser.add_argument('-s', '--sdk-version', + action='store', + default='17', + help='Android sdk version [17]') + parser.add_argument('-p', '--android-package-name', + action='store', + default='com.github.rosjava.android.pkg_name', + help='Android package name (e.g. com.github.rosjava.android.pkg_name)') + parser.add_argument('-a', '--author', + action='store', + default=utils.author_name(), + help='A single author, may be used multiple times') + args = parser.parse_args(argv) + if args.android_package_name == "com.github.rosjava.android.pkg_name": + args.android_package_name = "com.github.rosjava.android.%s" % args.name[0].lower() + return args + + +def create_android_project(package_name, sdk_version, java_package_name, is_library): + path = os.path.join(os.getcwd(), package_name.lower()) + console.pretty_println("\nCreating android project ", console.bold) + console.pretty_print(" Name : ", console.cyan) + console.pretty_println("%s" % package_name, console.yellow) + console.pretty_print(" Sdk Ver : ", console.cyan) + console.pretty_println("%s" % sdk_version, console.yellow) + console.pretty_print(" Java Name : ", console.cyan) + console.pretty_println("%s" % java_package_name, console.yellow) + if is_library: + console.pretty_print(" Library : ", console.cyan) + console.pretty_println("yes\n", console.yellow) + cmd = ['android', 'create', 'lib-project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, ] + else: + activity_name = utils.camel_case(package_name) + console.pretty_print(" Activity : ", console.cyan) + console.pretty_println("%s\n" % activity_name, console.yellow) + cmd = ['android', 'create', 'project', '-n', package_name, '-p', path, '-k', java_package_name, '-t', 'android-' + sdk_version, '-a', activity_name] + try: + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + raise subprocess.CalledProcessError("failed to create android project.") + # This is in the old form, let's shovel the shit around to the new form + utils.mkdir_p(os.path.join(path, 'src', 'main', 'java')) + os.remove(os.path.join(path, 'local.properties')) + os.remove(os.path.join(path, 'project.properties')) + os.remove(os.path.join(path, 'ant.properties')) + os.remove(os.path.join(path, 'proguard-project.txt')) + os.remove(os.path.join(path, 'build.xml')) + os.rmdir(os.path.join(path, 'bin')) + os.rmdir(os.path.join(path, 'libs')) + shutil.move(os.path.join(path, 'AndroidManifest.xml'), os.path.join(path, 'src', 'main')) + shutil.move(os.path.join(path, 'res'), os.path.join(path, 'src', 'main')) + if not is_library: + shutil.move(os.path.join(path, 'src', java_package_name.split('.')[0]), os.path.join(path, 'src', 'main', 'java')) + +############################################################################## +# Methods acting on classes +############################################################################## + + +# This inserts the labelled variables into the template wherever the corresponding +# %package, %brief, %description and %depends is found. +def instantiate_template(template, package_name, author, plugin_name, sdk_version): + return template % locals() + + +def create_gradle_package_files(args, author, is_library, sdk_version): + ''' + This is almost a direct copy from catkin_create_pkg. + ''' + plugin_name = "android-library" if is_library else "android" + try: + package_name = args.name[0].lower() + package_path = os.path.abspath(os.path.join(os.getcwd(), package_name)) + console.pretty_println("\nCreating gradle files", console.bold) + for template_name in ['build.gradle']: # 'CMakeLists.txt']: + filename = os.path.join(package_path, template_name) + template = read_template_file(template_name) + contents = instantiate_template(template, package_name, author, plugin_name, sdk_version) + if is_library: + contents += extra_gradle_library_text() + try: + f = open(filename, 'w') + f.write(contents) + console.pretty_print(' File: ', console.cyan) + console.pretty_println(template_name, console.yellow) + finally: + f.close() + except Exception: + raise + + +def add_to_root_gradle_settings(name): + ''' + Adds project name to the root level settings.gradle file. + ''' + for rel_path in ['.', '..']: + settings_gradle_path = os.path.join(os.getcwd(), rel_path, 'settings.gradle') + if os.path.isfile(settings_gradle_path): + break + else: + settings_gradle_path = None + if settings_gradle_path is None: + console.pretty_println("\nCouldn't find the root level settings.gradle file - not adding to the superproject.") + return + with open(settings_gradle_path, 'a') as settings_gradle: + console.pretty_println("\nIncluding '%s' in the root gradle project configuration (settings.gradle).\n" % name, console.bold) + settings_gradle.write("include '%s'\n" % name) + + +def extra_gradle_library_text(): + text = "\n" + text += "/* http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds */\n" + text += "android.libraryVariants\n" + text += "publishing {\n" + text += " publications {\n" + text += " maven(MavenPublication) {\n" + text += " /* artifact bundleDebug */\n" + text += " artifact bundleRelease\n" + text += " }\n" + text += " }\n" + text += "}\n" + return text + + +def create_android_project(is_library=False): + args = parse_arguments() + create_android_project(args.name[0], args.sdk_version, args.android_package_name, is_library) + create_gradle_package_files(args, args.author, is_library, args.sdk_version) + add_to_root_gradle_settings(args.name[0]) + +############################################################################## +# Borrowed from catkin_pkg.package_templates +############################################################################## + + +def read_template_file(filename): + template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'android_project') + template = os.path.join(template_dir, '%s.in' % filename) + if not os.path.isfile(template): + raise IOError( + "Could not read template [%s]" % template + ) + with open(template, 'r') as fhand: + template_contents = fhand.read() + return template_contents diff --git a/src/rosjava_build_tools/init_repo.py b/src/rosjava_build_tools/init_repo.py deleted file mode 100644 index 1db9315..0000000 --- a/src/rosjava_build_tools/init_repo.py +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/env python -# -# License: Apache 2.0 -# https://raw.github.com/rosjava/rosjava_build_tools/license/LICENSE -# - -############################################################################## -# Imports -############################################################################## - -import os -import sys -import argparse -import subprocess -import catkin_pkg -from catkin_pkg.package_templates import create_package_xml, PackageTemplate - -# local imports -import utils -import console - -############################################################################## -# Methods -############################################################################## - - -def parse_arguments(): - argv = sys.argv[1:] - parser = argparse.ArgumentParser( - description='Creates a new android repository based on catkin and gradle. \n\nNote that the path you provide will become the maven group for your repo.\n') - parser.add_argument('path', nargs='?', default=os.getcwd(), help='path to the repository you wish to create (must not exist beforehand).') - parser.add_argument('dependencies', - nargs='*', - help='Dependency list') - parser.add_argument('-l', '--license', - action='append', - default=["Apache 2.0"], - help='Name for License, (e.g. BSD, MIT, GPLv3...)[BSD]') - parser.add_argument('-a', '--author', - action='append', - help='A single author, may be used multiple times') - parser.add_argument('-m', '--maintainer', - action='append', - help='A single maintainer, may be used multiple times') - parser.add_argument('-V', '--pkg_version', - action='store', - default="0.1.0", - help='Initial Package version [0.1.0]') - parser.add_argument('-D', '--description', - action='store', - help='Description') - args = parser.parse_args(argv) -# if not args.author: -# args.author = [] -# args.author.append(utils.author_name) -# if not args.maintainer: -# args.maintainer = [] -# args.maintainer.append(catkin_pkg.package.Person(utils.author_name)) -# else: -# args.maintainer = [] -# args.maintainer.append(catkin_pkg.package.Person(utils.author_name)) - return args - - -# Finds and reads one of the templates. -def read_template(tmplf): - f = open(tmplf, 'r') - try: - t = f.read() - finally: - f.close() - return t - - -# This inserts the labelled variables into the template wherever the corresponding -# %package, %brief, %description and %depends is found. -def instantiate_template(template, repo_name, author): - return template % locals() - - -def get_templates(): - template_dir = os.path.join(os.path.dirname(__file__), 'templates', 'init_repo') - templates = {} - templates['CMakeLists.txt'] = read_template(os.path.join(template_dir, 'CMakeLists.txt.in')) - templates['build.gradle'] = read_template(os.path.join(template_dir, 'build.gradle.in')) - templates['settings.gradle'] = read_template(os.path.join(template_dir, 'settings.gradle')) - return templates - - -def populate_repo(repo_path): - author = utils.author_name() - repo_name = os.path.basename(repo_path) - templates = get_templates() - for filename, template in templates.iteritems(): - contents = instantiate_template(template, repo_name, author) - try: - p = os.path.abspath(os.path.join(repo_path, filename)) - f = open(p, 'w') - f.write(contents) - console.pretty_print("Created repo file: ", console.cyan) - console.pretty_println("%s" % p, console.yellow) - finally: - f.close() - - -def create_gradle_wrapper(repo_path): - gradle_binary = os.path.join(os.path.dirname(__file__), 'gradle', 'gradlew') - cmd = [gradle_binary, '-p', repo_path, 'wrapper'] - console.pretty_print("Creating gradle wrapper: ", console.cyan) - console.pretty_println("%s" % ' '.join(cmd), console.yellow) - try: - subprocess.check_call(cmd) - except subprocess.CalledProcessError: - raise subprocess.CalledProcessError("failed to create the gradle wrapper.") - - -def create_catkin_package_files(package_name, package_path, args): - ''' - This is almost a direct copy from catkin_create_pkg. - ''' - try: - build_depends = [] - if 'rosjava_build_tools' not in args.dependencies: - build_depends.append(catkin_pkg.package.Dependency('rosjava_build_tools')) - for depend_name in args.dependencies: - build_depends.append(catkin_pkg.package.Dependency(depend_name)) - package_template = PackageTemplate._create_package_template( - package_name=package_name, - description=args.description, - licenses=args.license or [], - maintainer_names=args.maintainer, - author_names=args.author, - version=args.pkg_version, - catkin_deps=[], - system_deps=[], - boost_comps=None) - package_template.exports = [] - package_template.build_depends = build_depends - distro_version = utils.distro_version() - package_xml = create_package_xml(package_template=package_template, rosdistro=distro_version) - try: - filename = os.path.join(package_path, 'package.xml') - f = open(filename, 'w') - f.write(package_xml) - console.pretty_print('Created repo file: ', console.cyan) - console.pretty_println('%s' % filename, console.yellow) - finally: - f.close() - except Exception: - raise - -############################################################################## -# Methods acting on classes -############################################################################## - - -def init_android_repo(): - args = parse_arguments() - try: - repo_path = utils.validate_path(args.path) - repo_name = os.path.basename(os.path.normpath(repo_path)).lower() - populate_repo(repo_path) - create_catkin_package_files(repo_name, repo_path, args) - create_gradle_wrapper(repo_path) - except Exception: - raise diff --git a/src/rosjava_build_tools/templates/android_package/build.gradle.in b/src/rosjava_build_tools/templates/android_project/build.gradle.in similarity index 72% rename from src/rosjava_build_tools/templates/android_package/build.gradle.in rename to src/rosjava_build_tools/templates/android_project/build.gradle.in index 307847c..fa93846 100644 --- a/src/rosjava_build_tools/templates/android_package/build.gradle.in +++ b/src/rosjava_build_tools/templates/android_project/build.gradle.in @@ -18,12 +18,16 @@ Examples of 1) dependencies from another project in this gradle stack. 2,3) dependency from a maven repository. + + It's a good idea to use + on the patch version dependency to + save continually updating these references, but avoid applying + the same principle to api breaking minor changes in the version. */ /* dependencies { compile project(':local_android_library_dependency') - compile 'ros.android_core:android_gingerbread_mr1:0.0.0-SNAPSHOT' - compile 'com.github.ros_java.android_extras:gingerbread:0.1.0' + compile 'org.ros.android_core:android_gingerbread_mr1:0.1.+' + compile 'com.github.ros_java.android_extras:gingerbread:0.1.+' } */ @@ -31,6 +35,5 @@ apply plugin: '%(plugin_name)s' android { compileSdkVersion %(sdk_version)s - buildToolsVersion androidBuildToolsVersion } diff --git a/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in b/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in index 0b6c4e8..b71f2fb 100644 --- a/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in +++ b/src/rosjava_build_tools/templates/init_repo/CMakeLists.txt.in @@ -10,5 +10,6 @@ project(%(repo_name)s) ############################################################################## find_package(catkin REQUIRED rosjava_build_tools) -catkin_android_setup() +# Set the gradle targets you want catkin's make to run by default +catkin_android_setup(assembleRelease uploadArchives) catkin_package() diff --git a/src/rosjava_build_tools/templates/init_repo/build.gradle.in b/src/rosjava_build_tools/templates/init_repo/build.gradle.in index 7e72422..b111f43 100644 --- a/src/rosjava_build_tools/templates/init_repo/build.gradle.in +++ b/src/rosjava_build_tools/templates/init_repo/build.gradle.in @@ -15,52 +15,38 @@ */ task wrapper(type: Wrapper) { - gradleVersion = '1.6' + gradleVersion = '1.7' } -allprojects { - group 'ros.%(repo_name)s' - version = '0.1.0' -} - -ext.androidBuildToolsVersion = "17" - -subprojects { - buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:0.5.0' - } - } - - apply plugin: 'maven' - +buildscript { + def rosMavenPath = "$System.env.ROS_MAVEN_PATH".split(':').collect { 'file://' + it } repositories { + rosMavenPath.each { p -> + maven { + url p + } + } mavenLocal() maven { url 'https://github.com/rosjava/rosjava_mvn_repo/raw/master' } } - configurations.add('compile') { - exclude group: 'junit' - exclude group: 'xml-apis' + dependencies { + classpath group: 'org.ros.rosjava_bootstrap', name: 'gradle_plugins', version: '0.1.+' } +} - uploadArchives { - repositories { - mavenDeployer { - repository url: 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath - } - } - } - task publishToMavenLocal() << { - description = 'installs .aar files to the local maven repository.' - } - afterEvaluate { Project project -> - if (plugins.findPlugin('android-library')) { - publishToMavenLocal.dependsOn('uploadArchives') - } - } +apply plugin: 'catkin' + + +allprojects { + /* A github url provides a good standard unique name for your project */ + group 'com.github.rosjava.%(repo_name)s' + version = project.catkin.pkg.version +} + +subprojects { + /* See https://github.com/rosjava/rosjava_bootstrap (look for gradle_plugins) + to see what is going on under the hood. */ + apply plugin: 'ros-android' } -- GitLab