mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-15 09:21:06 +02:00
211 lines
5.9 KiB
Plaintext
211 lines
5.9 KiB
Plaintext
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 = '''\
|
|
<?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'],
|
|
**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,
|
|
)
|