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
def create_gradle_package_files(args, author, is_library, sdk_version): ''' This is almost a direct copy from catkin_create_pkg. ''' plugin_name = "com.android.library" if is_library else "com.android.application" 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 create_rosjava_project_common(args, template_directory): project_name = args.name[0] console.pretty_println("\nCreating rosjava project ", console.bold) console.pretty_print(" Name : ", console.cyan) console.pretty_println("%s" % project_name, console.yellow) utils.mkdir_p(os.path.join(os.getcwd(), project_name.lower())) # This is in the old form, let's shovel the shit around to the new form create_gradle_package_files(args, template_directory) add_to_root_gradle_settings(args.name[0])
def create_gradle_wrapper(repo_path): gradle_binary = os.path.join(os.path.dirname(__file__),'..', '..', '..', 'share', 'rosjava_build_tools', '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 populate_repo(repo_path, package_type): author = utils.author_name() repo_name = os.path.basename(repo_path) templates = get_templates(package_type) for filename, template in templates.items(): 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_dummy_java_class(project_name): path = os.path.join(os.getcwd(), project_name.lower()) package_name = os.path.basename(os.getcwd()) java_package_path = os.path.join(path, 'src', 'main', 'java', 'com', 'github', package_name, project_name) utils.mkdir_p(java_package_path) filename = os.path.join(java_package_path, 'Dude.java') java_class = "package com.github.%s.%s;\n" % (package_name, project_name) java_class += "\n" java_class += "public class Dude {\n" java_class += "}\n" console.pretty_print(' File : ', console.cyan) console.pretty_println('Dude.class', console.yellow) with open(filename, 'w') as dude_class: dude_class.write(java_class)
def ros_package_name(): for rel_path in ['.', '..']: package_xml_path = os.path.join(os.getcwd(), rel_path, 'package.xml') if os.path.isfile(package_xml_path): break else: package_xml_path = None if package_xml_path is None: console.pretty_println( "\nCouldn't find the root level package.xml file - not adding to the superproject." ) return tree = ElementTree.parse(package_xml_path) root = tree.getroot() name = root.find('name').text return name
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 add_catkin_generate_tree_command(): for rel_path in ['.', '..']: build_gradle_path = os.path.join(os.getcwd(), rel_path, 'build.gradle') if os.path.isfile(build_gradle_path): break else: build_gradle_path = None if build_gradle_path is None: console.pretty_println( "\nCouldn't find the root level build.gradle file - not adding to the superproject." ) return with open(build_gradle_path, 'r') as build_gradle: console.pretty_print(' File : ', console.cyan) console.pretty_println('build.gradle (catkin_generate_tree update)', console.yellow) new_contents = build_gradle.read().replace( "apply plugin: 'catkin'", "apply plugin: 'catkin'\nproject.catkin.tree.generate()\n") with open(build_gradle_path, 'w') as build_gradle: build_gradle.write(new_contents)
def create_talker_listener_classes(project_name, template_directory, author): path = os.path.join(os.getcwd(), project_name.lower()) package_name = os.path.basename(os.getcwd()) java_package_path = os.path.join(path, 'src', 'main', 'java', 'com', 'github', package_name, project_name) utils.mkdir_p(java_package_path) try: for template_name in ['Talker.java', 'Listener.java']: filename = os.path.join(java_package_path, template_name) template = utils.read_template_file(template_directory, template_name) contents = instantiate_code_template(template, package_name, project_name, author) 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 create_gradle_package_files(args, template_directory): ''' This is almost a direct copy from catkin_create_pkg. ''' try: project_name = args.name[0].lower() package_path = os.path.abspath(os.path.join(os.getcwd(), project_name)) for template_name in ['build.gradle']: # 'CMakeLists.txt']: filename = os.path.join(package_path, template_name) template = utils.read_template_file(template_directory, template_name) contents = instantiate_template(template, project_name, args.author) 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_package_xml(name): ''' Adds project name to build_depends in package.xml (should be same name as the ros msg package name). ''' for rel_path in ['.', '..']: package_xml_path = os.path.join(os.getcwd(), rel_path, 'package.xml') if os.path.isfile(package_xml_path): break else: package_xml_path = None if package_xml_path is None: console.pretty_println( "\nCouldn't find the root level package.xml file - not adding to the superproject." ) return with open(package_xml_path, 'r') as package_xml: console.pretty_print(' File : ', console.cyan) console.pretty_println('package.xml (dependency update)', console.yellow) new_contents = package_xml.read().replace( "</package>", "<build_depend>%s</build_depend>\n</package>" % name) with open(package_xml_path, 'w') as package_xml: package_xml.write(new_contents)
def add_tasks_to_cmake_setup(tasks): ''' Adds project name to build_depends in package.xml (should be same name as the ros msg package name). ''' for rel_path in ['.', '..']: cmakelists_txt_path = os.path.join(os.getcwd(), rel_path, 'CMakeLists.txt') if os.path.isfile(cmakelists_txt_path): break else: cmakelists_txt_path = None if cmakelists_txt_path is None: console.pretty_println( "\nCouldn't find the root level CMakeLists.txt - not adding to the superproject." ) return with open(cmakelists_txt_path, 'r') as cmakelists_txt: old_contents = cmakelists_txt.read() result = re.search('^catkin_rosjava_setup\(.*\)', old_contents, re.MULTILINE) if result is None: console.pretty_println( "\nCouldn't find a catkin_rosjava_setup entry in the CMakeLists.txt - not adding tasks." ) return rosjava_setup_string = result.group(0) gradle_tasks = set([]) if rosjava_setup_string.find("publish") == -1: gradle_tasks.add("publish") if rosjava_setup_string.find("install") == -1: gradle_tasks.add("install") gradle_tasks |= set(tasks) console.pretty_print(' File : ', console.cyan) console.pretty_println('CMakeLists.txt (gradle task update)', console.yellow) old_text = rosjava_setup_string new_text = 'catkin_rosjava_setup(' + ' '.join(gradle_tasks) + ')' new_contents = old_contents.replace(old_text, new_text) with open(cmakelists_txt_path, 'w') as cmakelists_txt: cmakelists_txt.write(new_contents)
def actually_create_android_project(package_name, target_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(" Target Ver: ", console.cyan) console.pretty_println("%s" % target_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-' + target_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-' + target_version, '-a', activity_name ] print("Command: %s" % cmd) try: subprocess.check_call(cmd) print("Command: %s" % cmd) except subprocess.CalledProcessError: print("Error") 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'))