import random DEBUG_ARG='JAVA_TOOL_OPTIONS="-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=y"' FORCE_INSTALL=True NONE='NONE' SRC = 'src/main/java/**/' TEST = 'src/test/java/**/' RESOURCES_ROOT = 'src/main/resources/' TEST_RESOURCES_ROOT = 'src/test/resources/' include_defs('//onos.defs') def _get_name(): base_path = get_base_path() return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator def checkstyle( name, srcs = None, jar_target = None, ): if srcs and jar_target: base = get_base_path() files = '%s\n%s\n' % (name, base) + '\n'.join(['%s/%s' % (base, s) for s in srcs]) genrule( name = name + '-checkstyle-files', bash = "echo '%s' > $OUT" % files, srcs = srcs, out = 'checkstyle-files.txt', ) sh_test( name = name + '-checkstyle', test = '//tools/build/conf:start-buck-daemon', deps = [ jar_target ], args = [ '$(location //tools/build/conf:buck-daemon-jar)', 'checkstyle', '$(location :' + name + '-checkstyle-files)', '$(location //tools/build/conf:checkstyle-xml)', '$(location //tools/build/conf:suppressions-xml)', ], test_rule_timeout_ms = 20000, labels = [ 'checkstyle' ], ) def java_doc( name, title, pkgs, paths, srcs = [], deps = [], visibility = [], do_it_wrong = False, ): if do_it_wrong: sourcepath = paths else: sourcepath = ['$SRCDIR/' + n for n in paths] if len(srcs) != 0: cmd = ' '.join([ 'while ! test -f .buckconfig; do cd ..; done;', 'javadoc', '-tag onos.rsModel:a:"onos model"', '-quiet', '-protected', '-encoding UTF-8', '-charset UTF-8', '-notimestamp', '-windowtitle "' + title + '"', '-link http://docs.oracle.com/javase/8/docs/api', '-subpackages ', ':'.join(pkgs), '-sourcepath ', ':'.join(sourcepath), ' -classpath ', ':'.join(['$(classpath %s)' % n for n in deps]), '-d $TMP', ]) + ';jar cf $OUT -C $TMP .' genrule( name = name, cmd = cmd, srcs = srcs, out = name + '.jar', visibility = visibility, ) def osgi_jar( name = None, srcs = None, group_id = ONOS_GROUP_ID, version = ONOS_VERSION, deps = [], visibility = ['PUBLIC'], license = 'NONE', description = '', debug = False, import_packages = '*', dynamicimport_packages = '', export_packages = '*', package_name_root = 'org.onosproject', include_resources = {}, web_context = NONE, api_title = None, api_version = NONE, api_package = NONE, api_description = NONE, resources = NONE, resources_root = None, tests = None, **kwargs ): # if name and _get_name() != name: # print _get_name(), '!=', name if name is None: name = _get_name() if srcs is None: srcs = glob([SRC + '/*.java']) if resources == NONE and resources_root is not None: resources = glob([resources_root + '**']) elif resources == NONE: resources = glob([RESOURCES_ROOT + '**']) if resources and not resources_root: resources_root = RESOURCES_ROOT mvn_coords = group_id + ':' + name + ':' + version onos_jar( name = name, srcs = srcs + glob(['src/main/webapp/**']), deps = deps, visibility = visibility, resources = resources, resources_root = resources_root, bundle_name = name, group_id = group_id, bundle_version = version, bundle_license = license, bundle_description = description, import_packages = import_packages, export_packages = export_packages, include_resources = include_resources, dynamicimport_packages = dynamicimport_packages, web_context = web_context, api_title = api_title, api_version = api_version, api_package = api_package, api_description = api_description, tests = tests, maven_coords = mvn_coords, **kwargs ) ### Checkstyle checkstyle( name = name + '-checkstyle-files', srcs = srcs, jar_target = ':'+ name, ) java_doc( name = name + '-javadoc', title = 'Java Docs', pkgs = [ package_name_root ], paths = [ 'src/main/java' ], srcs = srcs, deps = deps, visibility = visibility, do_it_wrong = False, ) # TODO add project config for intellij # project_config( # src_target = ':' + name, # src_roots = [ 'src/main/java' ], # test_target = ':' + name + '-tests', # test_roots = [ 'src/test/java' ], # ) ### .m2 Install mvn_cmd = ' '.join(( 'mvn install:install-file', '-Dfile=$(location :%s)' % name, '-DgroupId=%s' % group_id, '-DartifactId=%s' % name, '-Dversion=%s' % version, '-Dpackaging=jar' )) cmd = mvn_cmd + ' > $OUT' if FORCE_INSTALL: # Add a random number to the command to force this rule to run. # TODO We should make this configurable from CLI, perhaps with a flag. cmd = 'FOO=%s ' % random.random() + cmd genrule( name = name + '-install', bash = cmd, out = 'install.log', visibility = visibility, ) def osgi_jar_with_tests( name = None, deps = [], group_id = ONOS_GROUP_ID, version = ONOS_VERSION, test_srcs = None, test_deps = [ '//lib:TEST' ], test_resources = None, test_resources_root = None, visibility = [ 'PUBLIC' ], **kwargs ): if name is None: name = _get_name() osgi_jar(name = name, deps = deps, group_id = group_id, version = version, visibility = visibility, tests = [':' + name + '-tests'], **kwargs) if test_resources and not test_resources_root: test_resources_root = TEST_RESOURCES_ROOT if test_resources_root and not test_resources: test_resources = glob([test_resources_root + '**']) if not test_resources and not test_resources_root: test_resources = glob([TEST_RESOURCES_ROOT + '**']) if test_resources: test_resources_root = TEST_RESOURCES_ROOT if test_srcs is None: test_srcs = glob([TEST + '/*.java']) mvn_coords = group_id + ':' + name + ':jar:tests:' + version java_test( name = name + '-tests', srcs = test_srcs, deps = deps + test_deps + [':' + name + '#non-osgi'], resources = test_resources, resources_root = test_resources_root, maven_coords = mvn_coords, visibility = visibility, ) checkstyle( name = name + '-tests', srcs = test_srcs, jar_target = ':' + name + '-tests', )