| include_defs('//onos.defs') |
| |
| DEFAULT_APP_CATEGORY = 'Utility' |
| |
| import os.path |
| |
| # FIXME Factor this into common place |
| def _get_name(): |
| base_path = get_base_path() |
| return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator |
| |
| def _get_app_name(): |
| base_path = get_base_path() |
| return APP_PREFIX + os.path.basename(base_path) |
| |
| def osgi_feature( |
| name, |
| title, |
| feature_coords = None, |
| version = ONOS_VERSION, |
| required_features = [ 'onos-api' ], |
| required_apps = [], |
| included_bundles = None, |
| excluded_bundles = [], |
| generate_file = False, |
| visibility = [ 'PUBLIC' ], |
| stage_repo = True, |
| maven_coords = None, |
| ): |
| |
| if not feature_coords: |
| feature_coords = name |
| args = [ '-n %s' % feature_coords, |
| '-v %s' % version, |
| '-t "%s"' % title, |
| ] |
| args += [ '-f %s' % f for f in required_features ] |
| args += [ '-b $(maven_coords %s)' % b for b in included_bundles ] |
| args += [ '-e $(maven_coords %s)' % b for b in excluded_bundles ] |
| args += [ '-d %s' % a for a in required_apps ] |
| |
| feature_cmd = '-F' if generate_file else '-E' |
| |
| cmd = '$(exe //buck-tools:onos-app-writer) %s ' % feature_cmd |
| cmd += ' '.join(args) + ' > $OUT' |
| genrule( |
| name = name + '-feature', |
| bash = cmd, |
| out = 'features.xml', |
| visibility = visibility, |
| maven_coords = maven_coords, |
| ) |
| |
| if stage_repo: |
| sources = ['$(location %s) $(maven_coords %s)' % (i, i) for i in included_bundles] |
| genrule( |
| name = name + '-repo', |
| out = name + '-repo.zip.part', |
| bash = '$(exe //buck-tools:onos-feature) $OUT ' + ' '.join(sources), |
| visibility = visibility, |
| ) |
| |
| FEATURES_HEADER = '''\ |
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" |
| name="onos-%s"> |
| <repository>mvn:org.apache.karaf.features/standard/3.0.5/xml/features</repository> |
| |
| ''' % ONOS_VERSION |
| |
| FEATURES_FOOTER = '</features>' |
| |
| def compile_features( |
| name, |
| features = [], |
| maven_coords = None, |
| visibility = [ 'PUBLIC' ], |
| ): |
| |
| cmd = "(echo '%s'; " % FEATURES_HEADER |
| cmd += ''.join(['cat $(location %s-feature); ' % s for s in features]) |
| cmd += "echo '%s') > $OUT" % FEATURES_FOOTER |
| |
| genrule( |
| name = name, |
| bash = cmd, |
| visibility = visibility, |
| out = 'features.xml', |
| maven_coords = maven_coords, |
| ) |
| |
| |
| #TODO rename this |
| def osgi_feature_group( |
| name, |
| description = 'TEST', |
| version = ONOS_VERSION, |
| exported_deps = [], |
| visibility = ['PUBLIC'], |
| maven_coords = None, |
| **kwargs |
| ): |
| java_library( |
| name = name, |
| exported_deps = exported_deps, #compile only |
| visibility = visibility, |
| ) |
| |
| osgi_feature( |
| name = name, |
| feature_coords = name, |
| version = version, |
| title = description, |
| required_features = [], |
| included_bundles = exported_deps, |
| generate_file = False, |
| visibility = visibility, |
| maven_coords = maven_coords, |
| ) |
| |
| |
| |
| def onos_app( |
| app_name = None, |
| name = None, |
| title = None, |
| version = ONOS_VERSION, |
| origin = ONOS_ORIGIN, |
| category = DEFAULT_APP_CATEGORY, |
| url = None, |
| description = None, #TODO make this a file |
| #TODO icon, |
| feature_coords = None, |
| required_features = [ 'onos-api' ], |
| required_apps = [], |
| included_bundles = None, |
| excluded_bundles = [], |
| visibility = [ 'PUBLIC' ], |
| **kwargs): |
| if name is None: |
| name = _get_name() |
| |
| if app_name is None: |
| app_name = _get_app_name() |
| |
| maven_coords = '%s:%s:oar:%s' % ( ONOS_GROUP_ID, name, ONOS_VERSION ) |
| feature_xml_coords = '%s:%s:xml:features:%s' % ( ONOS_GROUP_ID, name, ONOS_VERSION ) |
| |
| if title is None: |
| print "Missing title for %s" % _get_name() |
| title = _get_app_name() |
| |
| if included_bundles is None: |
| target = ':' + _get_name() |
| included_bundles = [ target ] |
| |
| if not feature_coords and len(included_bundles) == 1: |
| feature_coords = '$(maven_coords %s)' % included_bundles[0] |
| |
| if not feature_coords: |
| feature_coords = '%s:%s:%s' % ( ONOS_GROUP_ID, _get_name(), ONOS_VERSION ) |
| |
| args = [ '-n %s' % feature_coords, |
| '-v %s' % version, |
| '-t "%s"' % title, |
| '-o "%s"' % origin, |
| '-c "%s"' % category, |
| '-a "%s"' % app_name, |
| '-u %s' % url, |
| ] |
| args += [ '-f %s' % f for f in required_features ] |
| args += [ '-b $(maven_coords %s)' % b for b in included_bundles ] |
| args += [ '-e $(maven_coords %s)' % b for b in excluded_bundles ] |
| args += [ '-d %s' % a for a in required_apps ] |
| |
| # cmd = '$(exe //buck-tools:onos-app-writer) -F ' + ' '.join(args) + ' > $OUT' |
| # genrule( |
| # name = name + '-feature', |
| # bash = cmd, |
| # out = 'features.xml', |
| # visibility = [], |
| # ) |
| osgi_feature( |
| name = name, |
| feature_coords = feature_coords, |
| version = version, |
| title = title, |
| required_features = required_features, |
| included_bundles = included_bundles, |
| excluded_bundles = excluded_bundles, |
| generate_file = True, |
| visibility = [], |
| stage_repo = False, |
| maven_coords = feature_xml_coords, |
| ) |
| |
| cmd = '$(exe //buck-tools:onos-app-writer) -A ' + ' '.join(args) + ' > $OUT' |
| genrule( |
| name = name + '-app-xml', |
| bash = cmd, |
| out = 'app.xml', |
| visibility = [], |
| ) |
| |
| sources = [ |
| '$(location :%s-feature) %s' % (name, feature_coords), |
| '$(location :%s-app-xml) NONE' % name, |
| ] |
| sources += ['$(location %s) $(maven_coords %s)' % (i, i) for i in included_bundles] |
| genrule( |
| name = name + '-oar', |
| out = 'app.oar', |
| bash = '$(exe //buck-tools:onos-app-oar) $OUT ' + ' '.join(sources), |
| maven_coords = maven_coords, |
| visibility = visibility, |
| ) |