def create_manifest2(name, description="", buildtool_depends=["catkin"], build_depends=[], depends=[], buildtool_export_depends=[], build_export_depends=[], exec_depends=[], test_depends=[], meta=False): package = Package( name=name, version="0.0.0", package_format=2, description=description, maintainers=[Person("John Foo", "*****@*****.**")], depends=[Dependency(d) for d in depends], buildtool_depends=[Dependency(d) for d in buildtool_depends], build_depends=[Dependency(d) for d in build_depends], buildtool_export_depends=[ Dependency(d) for d in buildtool_export_depends ], build_export_depends=[Dependency(d) for d in build_export_depends], exec_depends=[Dependency(d) for d in exec_depends], test_depends=[Dependency(d) for d in test_depends], exports=[Export("metapackage")] if meta else []) if hasattr(package, "evaluate_conditions"): package.evaluate_conditions({}) return package
def test_init(self): maint = self.get_maintainer() pack = Package(name='foo', version='0.0.0', maintainers=[maint], licenses=['BSD']) self.assertEqual(None, pack.filename) self.assertEqual('0.0.0', pack.version) self.assertEqual(None, pack.version_compatibility) self.assertEqual([], pack.urls) self.assertEqual([], pack.authors) self.assertEqual([maint], pack.maintainers) self.assertEqual(['BSD'], pack.licenses) self.assertEqual([], pack.build_depends) self.assertEqual([], pack.buildtool_depends) self.assertEqual([], pack.run_depends) self.assertEqual([], pack.test_depends) self.assertEqual([], pack.conflicts) self.assertEqual([], pack.replaces) self.assertEqual([], pack.exports) self.assertEqual([], pack.group_depends) self.assertEqual([], pack.member_of_groups) pack = Package('foo', name='bar', version='0.0.0', licenses=['BSD'], maintainers=[self.get_maintainer()]) self.assertEqual('foo', pack.filename) self.assertRaises(TypeError, Package, unknownattribute=42)
def parse_package(path): if not package_exists_at(path): return None cmakelists = os.path.join(path, 'CMakeLists.txt') data = extract_data(cmakelists) pkg = Package(filename=cmakelists, **data) pkg.exports = [Export('build_type', content='cmake')] return pkg
def parse_package(path): if not package_exists_at(path): return None setuppy = os.path.join(path, 'setup.py') kwargs = get_setup_arguments(setuppy) data = extract_data(**kwargs) pkg = Package(filename=setuppy, **data) pkg.exports = [Export('build_type', content='ament_python')] return pkg
def create_manifest(name, description="", buildtool_depends=[ "catkin" ], build_depends=[], run_depends=[], test_depends=[], meta=False): return Package( name=name, version="0.0.0", package_format=1, description=description, maintainers=[ Person("John Foo", "*****@*****.**") ], buildtool_depends=[ Dependency(d) for d in buildtool_depends ], build_depends=[ Dependency(d) for d in build_depends ], run_depends=[ Dependency(d) for d in run_depends ], test_depends=[ Dependency(d) for d in test_depends ], exports=[ Export("metapackage") ] if meta else [] )
def test_init_kwargs_object(self): mmain = [self.get_maintainer(), self.get_maintainer()] mlis = ['MIT', License('BSD', 'LICENSE')] mauth = [self.get_maintainer(), self.get_maintainer()] murl = [Mock(), Mock()] mbuilddep = [Mock(), Mock()] mbuildtooldep = [Mock(), Mock()] mrundep = [Mock(), Mock()] mtestdep = [Mock(), Mock()] mconf = [Mock(), Mock()] mrepl = [Mock(), Mock()] mexp = [Mock(), Mock()] mgroup = [ self.get_group_dependency('group1'), self.get_group_dependency('group2') ] mmember = ['member1', 'member2'] pack = Package(package_format='3', name='bar', version='0.0.0', maintainers=mmain, licenses=mlis, urls=murl, authors=mauth, build_depends=mbuilddep, buildtool_depends=mbuildtooldep, run_depends=mrundep, test_depends=mtestdep, conflicts=mconf, replaces=mrepl, group_depends=mgroup, member_of_groups=mmember, exports=mexp) self.assertEqual(mmain, pack.maintainers) self.assertEqual(mlis, pack.licenses) self.assertEqual([None, 'LICENSE'], [license_.file for license_ in pack.licenses]) self.assertEqual(murl, pack.urls) self.assertEqual(mauth, pack.authors) self.assertEqual(mbuilddep, pack.build_depends) self.assertEqual(mbuildtooldep, pack.buildtool_depends) # since run_depends are getting stores as build_export_depends as well as exec_depends # and the dependency objects are being cloned only the double count can be checked for self.assertEqual(2 * len(mrundep), len(pack.run_depends)) self.assertEqual(mtestdep, pack.test_depends) self.assertEqual(mconf, pack.conflicts) self.assertEqual(mrepl, pack.replaces) self.assertEqual(mexp, pack.exports) self.assertEqual(mgroup, pack.group_depends) self.assertEqual(mmember, pack.member_of_groups)
def test_init_kwargs_string(self): pack = Package('foo', name='bar', package_format='1', version='0.0.1', version_compatibility='0.0.0', description='pdesc', licenses=['BSD'], maintainers=[self.get_maintainer()]) self.assertEqual('foo', pack.filename) self.assertEqual('bar', pack.name) self.assertEqual('1', pack.package_format) self.assertEqual('0.0.0', pack.version_compatibility) self.assertEqual('0.0.1', pack.version) self.assertEqual('pdesc', pack.description)
def test_init_kwargs_object(self): mmain = [self.get_maintainer(), self.get_maintainer()] mlis = ['MIT', 'BSD'] mauth = [self.get_maintainer(), self.get_maintainer()] murl = [Mock(), Mock()] mbuilddep = [Mock(), Mock()] mbuildtooldep = [Mock(), Mock()] mrundep = [Mock(), Mock()] mtestdep = [Mock(), Mock()] mconf = [Mock(), Mock()] mrepl = [Mock(), Mock()] mexp = [Mock(), Mock()] pack = Package(name='bar', version='0.0.0', maintainers=mmain, licenses=mlis, urls=murl, authors=mauth, build_depends=mbuilddep, buildtool_depends=mbuildtooldep, run_depends=mrundep, test_depends=mtestdep, conflicts=mconf, replaces=mrepl, exports=mexp) self.assertEqual(mmain, pack.maintainers) self.assertEqual(mlis, pack.licenses) self.assertEqual(murl, pack.urls) self.assertEqual(mauth, pack.authors) self.assertEqual(mbuilddep, pack.build_depends) self.assertEqual(mbuildtooldep, pack.buildtool_depends) # since run_depends are getting stores as build_export_depends as well as exec_depends # and the dependency objects are being cloned only the double count can be checked for self.assertEqual(2 * len(mrundep), len(pack.run_depends)) self.assertEqual(mtestdep, pack.test_depends) self.assertEqual(mconf, pack.conflicts) self.assertEqual(mrepl, pack.replaces) self.assertEqual(mexp, pack.exports)
def test_init_kwargs_object(self): mmain = [self.get_maintainer(), self.get_maintainer()] mlis = ['MIT', 'BSD'] mauth = [self.get_maintainer(), self.get_maintainer()] murl = [Mock(), Mock()] mbuilddep = [Mock(), Mock()] mbuildtooldep = [Mock(), Mock()] mrundep = [Mock(), Mock()] mtestdep = [Mock(), Mock()] mconf = [Mock(), Mock()] mrepl = [Mock(), Mock()] mexp = [Mock(), Mock()] pack = Package(name='bar', version='0.0.0', maintainers=mmain, licenses=mlis, urls=murl, authors=mauth, build_depends=mbuilddep, buildtool_depends=mbuildtooldep, run_depends=mrundep, test_depends=mtestdep, conflicts=mconf, replaces=mrepl, exports=mexp) self.assertEqual(mmain, pack.maintainers) self.assertEqual(mlis, pack.licenses) self.assertEqual(murl, pack.urls) self.assertEqual(mauth, pack.authors) self.assertEqual(mbuilddep, pack.build_depends) self.assertEqual(mbuildtooldep, pack.buildtool_depends) self.assertEqual(mrundep, pack.run_depends) self.assertEqual(mtestdep, pack.test_depends) self.assertEqual(mconf, pack.conflicts) self.assertEqual(mrepl, pack.replaces) self.assertEqual(mexp, pack.exports)
def test_evaluate_conditions(self): """Test if dependency conditions are properly evaluated""" env = create_env(system_pkgs=['python-yaml']) pkg = Package( name="mock", package_format=3, exec_depends=[ Dependency('python-yaml', condition='$ROS_PYTHON_VERSION == 2'), Dependency('python3-yaml', condition='$ROS_PYTHON_VERSION == 3') ], ) pkg.evaluate_conditions({'ROS_PYTHON_VERSION': 2}) result = mock_lint(env, pkg, "", checks=cc.depends) self.assertEqual([], result) pkg.evaluate_conditions({'ROS_PYTHON_VERSION': 3}) result = mock_lint(env, pkg, "", checks=cc.depends) self.assertEqual(["UNKNOWN_PACKAGE"], result)
def test_validate_package(self): maint = self.get_maintainer() pack = Package('foo', name='bar_2go', package_format='1', version='0.0.1', description='pdesc', licenses=['BSD'], maintainers=[maint]) pack.validate() # names that should error pack.name = 'bar bza' self.assertRaises(InvalidPackage, Package.validate, pack) pack.name = 'foo%' self.assertRaises(InvalidPackage, Package.validate, pack) # names that should throw warnings pack.name = '2bar' warnings = [] pack.validate(warnings=warnings) self.assertIn('naming conventions', warnings[0]) pack.name = 'bar-bza' warnings = [] pack.validate(warnings=warnings) self.assertEquals(warnings, []) pack.name = 'BAR' warnings = [] pack.validate(warnings=warnings) self.assertIn('naming conventions', warnings[0]) # dashes are permitted for a non-catkin package pack.exports.append(Export('build_type', 'other')) pack.name = 'bar-bza' warnings = [] pack.validate(warnings=warnings) self.assertEquals(warnings, []) pack.exports.pop() # check authors emails pack.name = 'bar' auth1 = Mock() auth2 = Mock() auth2.validate.side_effect = InvalidPackage('foo') pack.authors = [auth1, auth2] self.assertRaises(InvalidPackage, Package.validate, pack) pack.authors = [] pack.validate() # check maintainer required with email pack.maintainers = [] self.assertRaises(InvalidPackage, Package.validate, pack) pack.maintainers = [maint] maint.email = None self.assertRaises(InvalidPackage, Package.validate, pack) maint.email = '*****@*****.**' for dep_type in [ pack.build_depends, pack.buildtool_depends, pack.build_export_depends, pack.buildtool_export_depends, pack.exec_depends, pack.test_depends, pack.doc_depends ]: pack.validate() depend = Dependency(pack.name) dep_type.append(depend) self.assertRaises(InvalidPackage, Package.validate, pack) dep_type.remove(depend)
def main(self, *, args): available_licenses = {} for shortname, entry in ament_copyright.get_licenses().items(): available_licenses[entry.spdx] = entry.license_files if args.license == '?': print('Supported licenses:\n%s' % ('\n'.join(available_licenses))) sys.exit(0) maintainer = Person(args.maintainer_name) if args.maintainer_email: maintainer.email = args.maintainer_email else: # try getting the email from the global git config git = shutil.which('git') if git is not None: p = subprocess.Popen([git, 'config', 'user.email'], stdout=subprocess.PIPE) resp = p.communicate() email = resp[0].decode().rstrip() if email: maintainer.email = email if not maintainer.email: maintainer.email = maintainer.name + '@todo.todo' node_name = None library_name = None if args.library_name: library_name = args.library_name if args.node_name: node_name = args.node_name if args.node_name == args.library_name: node_name = args.node_name + '_node' print( '[WARNING] node name can not be equal to the library name', file=sys.stderr) print('[WARNING] renaming node to %s' % node_name, file=sys.stderr) buildtool_depends = [] if args.build_type == 'ament_cmake': if args.library_name: buildtool_depends = ['ament_cmake_ros'] else: buildtool_depends = ['ament_cmake'] test_dependencies = [] if args.build_type == 'ament_cmake': test_dependencies = ['ament_lint_auto', 'ament_lint_common'] if args.build_type == 'ament_python': test_dependencies = [ 'ament_copyright', 'ament_flake8', 'ament_pep257', 'python3-pytest' ] if args.build_type == 'ament_python' and args.package_name == 'test': # If the package name is 'test', there will be a conflict between # the directory the source code for the package goes in and the # directory the tests for the package go in. return "Aborted since 'ament_python' packages can't be named 'test'. Please " + \ 'choose a different package name.' package = Package( package_format=args.package_format, name=args.package_name, version='0.0.0', description=args.description, maintainers=[maintainer], licenses=[args.license], buildtool_depends=[Dependency(dep) for dep in buildtool_depends], build_depends=[Dependency(dep) for dep in args.dependencies], test_depends=[Dependency(dep) for dep in test_dependencies], exports=[Export('build_type', content=args.build_type)]) package_path = os.path.join(args.destination_directory, package.name) if os.path.exists(package_path): return '\nAborted!\nThe directory already exists: ' + package_path + '\nEither ' + \ 'remove the directory or choose a different destination directory or package name' print('going to create a new package') print('package name:', package.name) print('destination directory:', os.path.abspath(args.destination_directory)) print('package format:', package.package_format) print('version:', package.version) print('description:', package.description) print('maintainer:', [str(maintainer) for maintainer in package.maintainers]) print('licenses:', package.licenses) print('build type:', package.get_build_type()) print('dependencies:', [str(dependency) for dependency in package.build_depends]) if node_name: print('node_name:', node_name) if library_name: print('library_name:', library_name) package_directory, source_directory, include_directory = \ create_package_environment(package, args.destination_directory) if not package_directory: return 'unable to create folder: ' + args.destination_directory if args.build_type == 'cmake': populate_cmake(package, package_directory, node_name, library_name) if args.build_type == 'ament_cmake': populate_ament_cmake(package, package_directory, node_name, library_name) if args.build_type == 'ament_python': if not source_directory: return 'unable to create source folder in ' + args.destination_directory populate_ament_python(package, package_directory, source_directory, node_name) if node_name: populate_python_node(package, source_directory, node_name) if library_name: populate_python_libary(package, source_directory, library_name) if args.build_type == 'ament_cmake' or args.build_type == 'cmake': if node_name: if not source_directory: return 'unable to create source folder in ' + args.destination_directory populate_cpp_node(package, source_directory, node_name) if library_name: if not source_directory or not include_directory: return 'unable to create source or include folder in ' + \ args.destination_directory populate_cpp_library(package, source_directory, include_directory, library_name) if args.license in available_licenses: with open(os.path.join(package_directory, 'LICENSE'), 'w') as outfp: for lic in available_licenses[args.license]: outfp.write(lic) else: print( "\n[WARNING]: Unknown license '%s'. This has been set in the package.xml, but " 'no LICENSE file has been created.\nIt is recommended to use one of the ament ' 'license identitifers:\n%s' % (args.license, '\n'.join(available_licenses)))
def test_validate_package(self): maint = self.get_maintainer() pack = Package('foo', name='bar_2go', package_format='1', version='0.0.0', version_abi='pabi', description='pdesc', licenses=['BSD'], maintainers=[maint]) pack.validate() # check invalid names pack.name = '2bar' pack.validate() pack.name = 'bar bza' self.assertRaises(InvalidPackage, Package.validate, pack) pack.name = 'bar-bza' # valid for now because for backward compatibility only #self.assertRaises(InvalidPackage, Package.validate, pack) pack.name = 'BAR' pack.validate() # check authors emails pack.name = 'bar' auth1 = Mock() auth2 = Mock() auth2.validate.side_effect = InvalidPackage('foo') pack.authors = [auth1, auth2] self.assertRaises(InvalidPackage, Package.validate, pack) pack.authors = [] pack.validate() # check maintainer required with email pack.maintainers = [] self.assertRaises(InvalidPackage, Package.validate, pack) pack.maintainers = [maint] maint.email = None self.assertRaises(InvalidPackage, Package.validate, pack) maint.email = '*****@*****.**' for dep_type in [pack.build_depends, pack.buildtool_depends, pack.run_depends, pack.test_depends]: pack.validate() depend = Dependency(pack.name) dep_type.append(depend) self.assertRaises(InvalidPackage, Package.validate, pack) dep_type.remove(depend)
def test_validate_package(self): maint = self.get_maintainer() pack = Package('foo', name='bar_2go', package_format='1', version='0.0.0', version_abi='pabi', description='pdesc', licenses=['BSD'], maintainers=[maint]) pack.validate() # check invalid names pack.name = '2bar' pack.validate() pack.name = 'bar bza' self.assertRaises(InvalidPackage, Package.validate, pack) pack.name = 'bar-bza' # valid for now because for backward compatibility only #self.assertRaises(InvalidPackage, Package.validate, pack) pack.name = 'BAR' pack.validate() # check authors emails pack.name = 'bar' auth1 = Mock() auth2 = Mock() auth2.validate.side_effect = InvalidPackage('foo') pack.authors = [auth1, auth2] self.assertRaises(InvalidPackage, Package.validate, pack) pack.authors = [] pack.validate() # check maintainer required with email pack.maintainers = [] self.assertRaises(InvalidPackage, Package.validate, pack) pack.maintainers = [maint] maint.email = None self.assertRaises(InvalidPackage, Package.validate, pack) maint.email = '*****@*****.**' for dep_type in [ pack.build_depends, pack.buildtool_depends, pack.build_export_depends, pack.buildtool_export_depends, pack.exec_depends, pack.test_depends, pack.doc_depends ]: pack.validate() depend = Dependency(pack.name) dep_type.append(depend) self.assertRaises(InvalidPackage, Package.validate, pack) dep_type.remove(depend)
def main(self, *, args): # when a package-type extension exists, delegate package creation to it. extension = get_package_type_extension(args.build_type) if extension: return extension.create_package(args) maintainer = Person(args.maintainer_name) if args.maintainer_email: maintainer.email = args.maintainer_email else: # try getting the email from the global git config git = shutil.which('git') if git is not None: p = subprocess.Popen([git, 'config', '--global', 'user.email'], stdout=subprocess.PIPE) resp = p.communicate() email = resp[0].decode().rstrip() if email: maintainer.email = email if not maintainer.email: maintainer.email = maintainer.name + '@todo.todo' node_name = None library_name = None if args.library_name: library_name = args.library_name if args.node_name: node_name = args.node_name if args.node_name == args.library_name: node_name = args.node_name + '_node' print( '[WARNING] node name can not be equal to the library name', file=sys.stderr) print('[WARNING] renaming node to %s' % node_name, file=sys.stderr) buildtool_depends = [] if args.build_type == 'ament_cmake': if args.library_name: buildtool_depends = ['ament_cmake_ros'] else: buildtool_depends = ['ament_cmake'] test_dependencies = [] if args.build_type == 'ament_cmake': test_dependencies = ['ament_lint_auto', 'ament_lint_common'] if args.build_type == 'ament_python': test_dependencies = [ 'ament_copyright', 'ament_flake8', 'ament_pep257', 'python3-pytest' ] if args.build_type == 'ament_python' and args.package_name == 'test': # If the package name is 'test', there will be a conflict between # the directory the source code for the package goes in and the # directory the tests for the package go in. return "Aborted since 'ament_python' packages can't be named 'test'. Please " + \ 'choose a different package name.' package = Package( package_format=args.package_format, name=args.package_name, version='0.0.0', description=args.description, maintainers=[maintainer], licenses=[args.license], buildtool_depends=[Dependency(dep) for dep in buildtool_depends], build_depends=[Dependency(dep) for dep in args.dependencies], test_depends=[Dependency(dep) for dep in test_dependencies], exports=[Export('build_type', content=args.build_type)]) package_path = os.path.join(args.destination_directory, package.name) if os.path.exists(package_path): return '\nAborted!\nThe directory already exists: ' + package_path + '\nEither ' + \ 'remove the directory or choose a different destination directory or package name' print('going to create a new package') print('package name:', package.name) print('destination directory:', os.path.abspath(args.destination_directory)) print('package format:', package.package_format) print('version:', package.version) print('description:', package.description) print('maintainer:', [str(maintainer) for maintainer in package.maintainers]) print('licenses:', package.licenses) print('build type:', package.get_build_type()) print('dependencies:', [str(dependency) for dependency in package.build_depends]) if node_name: print('node_name:', node_name) if library_name: print('library_name:', library_name) package_directory, source_directory, include_directory = \ create_package_environment(package, args.destination_directory) if not package_directory: return 'unable to create folder: ' + args.destination_directory if args.build_type == 'cmake': populate_cmake(package, package_directory, node_name, library_name) if args.build_type == 'ament_cmake': populate_ament_cmake(package, package_directory, node_name, library_name) if args.build_type == 'ament_python': if not source_directory: return 'unable to create source folder in ' + args.destination_directory populate_ament_python(package, package_directory, source_directory, node_name) if node_name: populate_python_node(package, source_directory, node_name) if library_name: populate_python_libary(package, source_directory, library_name) if args.build_type == 'ament_cmake' or args.build_type == 'cmake': if node_name: if not source_directory: return 'unable to create source folder in ' + args.destination_directory populate_cpp_node(package, source_directory, node_name) if library_name: if not source_directory or not include_directory: return 'unable to create source or include folder in ' + \ args.destination_directory populate_cpp_library(package, source_directory, include_directory, library_name)
def test_validate_package(self): maint = self.get_maintainer() pack = Package('foo', name='bar_2go', package_format='1', version='0.0.1', description='pdesc', licenses=['BSD'], maintainers=[maint]) pack.validate() # names that should error pack.name = 'bar bza' self.assertRaises(InvalidPackage, Package.validate, pack) pack.name = 'foo%' self.assertRaises(InvalidPackage, Package.validate, pack) # names that should throw warnings pack.name = '2bar' warnings = [] pack.validate(warnings=warnings) self.assertIn('naming conventions', warnings[0]) pack.name = 'bar-bza' warnings = [] pack.validate(warnings=warnings) self.assertEqual(warnings, []) pack.name = 'BAR' warnings = [] pack.validate(warnings=warnings) self.assertIn('naming conventions', warnings[0]) # dashes are permitted for a non-catkin package pack.exports.append(Export('build_type', 'other')) pack.name = 'bar-bza' warnings = [] pack.validate(warnings=warnings) self.assertEqual(warnings, []) pack.exports.pop() # check authors emails pack.name = 'bar' auth1 = Mock() auth2 = Mock() auth2.validate.side_effect = InvalidPackage('foo') pack.authors = [auth1, auth2] self.assertRaises(InvalidPackage, Package.validate, pack) pack.authors = [] pack.validate() # check maintainer required with email pack.maintainers = [] self.assertRaises(InvalidPackage, Package.validate, pack) pack.maintainers = [maint] maint.email = None self.assertRaises(InvalidPackage, Package.validate, pack) maint.email = '*****@*****.**' for dep_type in [pack.build_depends, pack.buildtool_depends, pack.build_export_depends, pack.buildtool_export_depends, pack.exec_depends, pack.test_depends, pack.doc_depends]: pack.validate() depend = Dependency(pack.name) dep_type.append(depend) self.assertRaises(InvalidPackage, Package.validate, pack) dep_type.remove(depend)
def main(self, *, args): maintainer = Person(args.maintainer_name) if args.maintainer_email: maintainer.email = args.maintainer_email else: # try getting the email from the global git config git = shutil.which('git') if git is not None: p = subprocess.Popen([git, 'config', '--global', 'user.email'], stdout=subprocess.PIPE) resp = p.communicate() email = resp[0].decode().rstrip() if email: maintainer.email = email if not maintainer.email: maintainer.email = maintainer.name + '@todo.todo' cpp_node_name = None if args.cpp_node_name: cpp_node_name = args.cpp_node_name if args.cpp_node_name == args.cpp_library_name: cpp_node_name = args.cpp_node_name + '_node' print( '[WARNING] node name can not be equal to the library name', file=sys.stderr) print('[WARNING] renaming node to %s' % cpp_node_name, file=sys.stderr) buildtool_depends = args.build_type if args.build_type == 'ament_cmake' and args.cpp_library_name: buildtool_depends = 'ament_cmake_ros' test_dependencies = [] if args.build_type == 'ament_cmake': test_dependencies = ['ament_lint_auto', 'ament_lint_common'] package = Package( package_format=args.package_format, name=args.package_name, version='0.0.0', description=args.description, maintainers=[maintainer], licenses=[args.license], buildtool_depends=[Dependency(buildtool_depends)], build_depends=[Dependency(dep) for dep in args.dependencies], test_depends=[Dependency(dep) for dep in test_dependencies], exports=[Export('build_type', content=args.build_type)]) package_path = os.path.join(args.destination_directory, package.name) if os.path.exists(package_path): return '\nAborted!\nThe directory already exists: ' + package_path + '\nEither ' + \ 'remove the directory or choose a different destination directory or package name' print('going to create a new package') print('package name:', package.name) print('destination directory:', os.path.abspath(args.destination_directory)) print('package format:', package.package_format) print('version:', package.version) print('description:', package.description) print('maintainer:', [str(maintainer) for maintainer in package.maintainers]) print('licenses:', [license_ for license_ in package.licenses]) print('build type:', package.get_build_type()) print('dependencies:', [str(dependency) for dependency in package.build_depends]) if args.cpp_node_name: print('cpp_node_name:', cpp_node_name) if args.cpp_library_name: print('cpp_library_name:', args.cpp_library_name) package_directory, source_directory, include_directory = \ create_package_environment(package, args.destination_directory) if not package_directory: return 'unable to create folder: ' + args.destination_directory if args.build_type == 'cmake': populate_cmake(package, package_directory, cpp_node_name, args.cpp_library_name) if args.build_type == 'ament_cmake': populate_ament_cmake(package, package_directory, cpp_node_name, args.cpp_library_name) if cpp_node_name: if not source_directory: return 'unable to create source folder in ' + args.destination_directory populate_cpp_node(package, source_directory, cpp_node_name) if args.cpp_library_name: if not source_directory or not include_directory: return 'unable to create source or include folder in ' + args.destination_directory populate_cpp_library(package, source_directory, include_directory, args.cpp_library_name)