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, ): 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, ) 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 = '''\ mvn:org.apache.karaf.features/standard/3.0.5/xml/features ''' % ONOS_VERSION FEATURES_FOOTER = '' 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'], **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, ) 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 ) 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, ) 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, )