def _gen_recipe_for_package(distro, pkg_name, pkg, repo, ros_pkg, pkg_rosinstall, tar_dir, md5_cache, sha256_cache, patches, incs): pkg_dep_walker = DependencyWalker(distro) pkg_buildtool_deps = pkg_dep_walker.get_depends(pkg_name, "buildtool") pkg_build_deps = pkg_dep_walker.get_depends(pkg_name, "build") pkg_run_deps = pkg_dep_walker.get_depends(pkg_name, "run") src_uri = pkg_rosinstall[0]['tar']['uri'] pkg_recipe = yoctoRecipe(pkg_name, distro, src_uri, tar_dir, md5_cache, sha256_cache, patches, incs) # add run dependencies for rdep in pkg_run_deps: pkg_recipe.add_depend(rdep) # add build dependencies for bdep in pkg_build_deps: pkg_recipe.add_depend(bdep) # add build tool dependencies for tdep in pkg_buildtool_deps: pkg_recipe.add_depend(tdep) # parse throught package xml try: pkg_xml = ros_pkg.get_package_xml(distro.name) except Exception as e: warn("fetch metadata for package {}".format(pkg_name)) return pkg_recipe pkg_fields = PackageMetadata(pkg_xml) pkg_recipe.pkg_xml = pkg_xml pkg_recipe.license = pkg_fields.upstream_license pkg_recipe.description = pkg_fields.description pkg_recipe.homepage = pkg_fields.homepage return pkg_recipe
def _gen_recipe_for_package(distro, pkg_name, pkg, repo, ros_pkg, pkg_rosinstall, tar_dir, md5_cache, sha256_cache, skip_keys): pkg_names = get_package_names(distro) pkg_dep_walker = DependencyWalker(distro, evaluate_condition_context=os.environ) pkg_buildtool_deps = pkg_dep_walker.get_depends(pkg_name, "buildtool") pkg_build_deps = pkg_dep_walker.get_depends(pkg_name, "build") pkg_build_export_deps = pkg_dep_walker.get_depends(pkg_name, "build_export") pkg_buildtool_export_deps = pkg_dep_walker.get_depends( pkg_name, "buildtool_export") pkg_exec_deps = pkg_dep_walker.get_depends(pkg_name, "exec") pkg_test_deps = pkg_dep_walker.get_depends(pkg_name, "test") src_uri = pkg_rosinstall[0]['tar']['uri'] # parse through package xml err_msg = 'Failed to fetch metadata for package {}'.format(pkg_name) pkg_xml = retry_on_exception(ros_pkg.get_package_xml, distro.name, retry_msg='Could not get package xml!', error_msg=err_msg) pkg_recipe = yoctoRecipe( pkg.repository_name, len(ros_pkg.repository.package_names), pkg_name, pkg_xml, distro, src_uri, tar_dir, md5_cache, sha256_cache, skip_keys, ) # add build dependencies for bdep in pkg_build_deps: pkg_recipe.add_build_depend(bdep, bdep in pkg_names[0]) # add build tool dependencies for btdep in pkg_buildtool_deps: pkg_recipe.add_buildtool_depend(btdep, btdep in pkg_names[0]) # add export dependencies for edep in pkg_build_export_deps: pkg_recipe.add_export_depend(edep, edep in pkg_names[0]) # add buildtool export dependencies for btedep in pkg_buildtool_export_deps: pkg_recipe.add_buildtool_export_depend(btedep, btedep in pkg_names[0]) # add exec dependencies for xdep in pkg_exec_deps: pkg_recipe.add_run_depend(xdep, xdep in pkg_names[0]) # add test dependencies for tdep in pkg_test_deps: pkg_recipe.add_test_depend(tdep, tdep in pkg_names[0]) return pkg_recipe
def _gen_ebuild_for_package(distro, pkg_name, pkg, repo, ros_pkg, pkg_rosinstall): pkg_ebuild = Ebuild() pkg_ebuild.distro = distro.name pkg_ebuild.src_uri = pkg_rosinstall[0]['tar']['uri'] pkg_names = get_package_names(distro) pkg_dep_walker = DependencyWalker(distro) pkg_buildtool_deps = pkg_dep_walker.get_depends(pkg_name, "buildtool") pkg_build_deps = pkg_dep_walker.get_depends(pkg_name, "build") pkg_run_deps = pkg_dep_walker.get_depends(pkg_name, "run") pkg_keywords = ['x86', 'amd64', 'arm', 'arm64'] # add run dependencies for rdep in pkg_run_deps: pkg_ebuild.add_run_depend(rdep, rdep in pkg_names[0]) # add build dependencies for bdep in pkg_build_deps: pkg_ebuild.add_build_depend(bdep, bdep in pkg_names[0]) # add build tool dependencies for tdep in pkg_buildtool_deps: pkg_ebuild.add_build_depend(tdep, tdep in pkg_names[0]) # add keywords for key in pkg_keywords: pkg_ebuild.add_keyword(key) # parse throught package xml try: pkg_xml = ros_pkg.get_package_xml(distro.name) except Exception as e: warn("fetch metadata for package {}".format(pkg_name)) return pkg_ebuild pkg_fields = xmltodict.parse(pkg_xml) pkg_ebuild.upstream_license = pkg_fields['package']['license'] pkg_ebuild.description = pkg_fields['package']['description'] if isinstance(pkg_ebuild.description, str): pkg_ebuild.description = pkg_ebuild.description.replace('`', "") if len(pkg_ebuild.description) > 80: pkg_ebuild.description = pkg_ebuild.description[:80] try: if 'url' not in pkg_fields['package']: warn("no website field for package {}".format(pkg_name)) elif isinstance(pkg_fields['package']['url'], str): pkg_ebuild.homepage = pkg_fields['package']['url'] elif '@type' in pkg_fields['package']['url']: if pkg_fields['package']['url']['@type'] == 'website': if '#text' in pkg_fields['package']['url']: pkg_ebuild.homepage = pkg_fields['package']['url']['#text'] else: warn("failed to parse website for package {}".format(pkg_name)) except TypeError as e: warn("failed to parse website package {}: {}".format(pkg_name, e)) return pkg_ebuild
def _gen_recipe_for_package(distro, pkg_name, pkg, repo, ros_pkg, pkg_rosinstall, tar_dir): pkg_dep_walker = DependencyWalker(distro) pkg_buildtool_deps = pkg_dep_walker.get_depends(pkg_name, "buildtool") pkg_build_deps = pkg_dep_walker.get_depends(pkg_name, "build") pkg_run_deps = pkg_dep_walker.get_depends(pkg_name, "run") src_uri = pkg_rosinstall[0]['tar']['uri'] pkg_recipe = yoctoRecipe(pkg_name, distro, src_uri, tar_dir) # add run dependencies for rdep in pkg_run_deps: pkg_recipe.add_depend(rdep) # add build dependencies for bdep in pkg_build_deps: pkg_recipe.add_depend(bdep) # add build tool dependencies for tdep in pkg_buildtool_deps: pkg_recipe.add_depend(tdep) # parse throught package xml try: pkg_xml = ros_pkg.get_package_xml(distro.name) except Exception as e: warn("fetch metadata for package {}".format(pkg_name)) return pkg_recipe pkg_fields = xmltodict.parse(pkg_xml) pkg_recipe.pkg_xml = pkg_xml pkg_recipe.license = pkg_fields['package']['license'] pkg_recipe.description = pkg_fields['package']['description'] if not isinstance(pkg_recipe.description, str): if '#text' in pkg_recipe.description: pkg_recipe.description = pkg_recipe.description['#text'] else: pkg_recipe.description = "None" pkg_recipe.description = pkg_recipe.description.replace('`', "") if len(pkg_recipe.description) > 80: pkg_recipe.description = pkg_recipe.description[:80] try: if 'url' not in pkg_fields['package']: warn("no website field for package {}".format(pkg_name)) elif sys.version_info <= (3, 0): pkg_recipe.recipe = pkg_fields['package']['url'].decode() elif isinstance(pkg_fields['package']['url'], str): pkg_recipe.homepage = pkg_fields['package']['url'] elif '@type' in pkg_fields['package']['url']: if pkg_fields['package']['url']['@type'] == 'website': if '#text' in pkg_fields['package']['url']: pkg_recipe.homepage =\ pkg_fields['package']['url']['#text'] else: warn("failed to parse website for package {}".format(pkg_name)) except TypeError as e: warn("failed to parse website package {}: {}".format(pkg_name, e)) return pkg_recipe
def _gen_ebuild_for_package( distro, pkg_name, pkg, repo, ros_pkg, pkg_rosinstall ): pkg_ebuild = Ebuild() pkg_ebuild.distro = distro.name pkg_ebuild.src_uri = pkg_rosinstall[0]['tar']['uri'] pkg_names = get_package_names(distro) pkg_dep_walker = DependencyWalker(distro) pkg_buildtool_deps = pkg_dep_walker.get_depends(pkg_name, "buildtool") pkg_build_deps = pkg_dep_walker.get_depends(pkg_name, "build") pkg_run_deps = pkg_dep_walker.get_depends(pkg_name, "run") pkg_test_deps = pkg_dep_walker.get_depends(pkg_name, "test") pkg_keywords = ['x86', 'amd64', 'arm', 'arm64'] # add run dependencies for rdep in pkg_run_deps: pkg_ebuild.add_run_depend(rdep, rdep in pkg_names[0]) # add build dependencies for bdep in pkg_build_deps: pkg_ebuild.add_build_depend(bdep, bdep in pkg_names[0]) # add build tool dependencies for tdep in pkg_buildtool_deps: pkg_ebuild.add_build_depend(tdep, tdep in pkg_names[0]) # add test dependencies for test_dep in pkg_test_deps: pkg_ebuild.add_test_depend(test_dep, test_dep in pkg_names[0]) # add keywords for key in pkg_keywords: pkg_ebuild.add_keyword(key) # parse throught package xml try: pkg_xml = ros_pkg.get_package_xml(distro.name) except Exception: warn("fetch metadata for package {}".format(pkg_name)) return pkg_ebuild pkg = PackageMetadata(pkg_xml) pkg_ebuild.upstream_license = pkg.upstream_license pkg_ebuild.description = pkg.description pkg_ebuild.homepage = pkg.homepage pkg_ebuild.build_type = pkg.build_type return pkg_ebuild