blob: 680ecc9e2890270311512cf85688937f12cf5721 [file] [log] [blame]
Ray Milkey7dac7da2017-08-01 16:56:05 -07001load("//tools/build/bazel:generate_workspace.bzl", "COMPILE", "TEST")
2load("//tools/build/bazel:variables.bzl", "ONOS_VERSION")
3load("//tools/build/bazel:generate_test_rules.bzl", "generate_test_rules")
4
5def all_java_sources():
6 return native.glob(["src/main/java/**/*.java"])
7
8def all_java_test_sources():
9 return native.glob(["src/test/java/**/*.java"])
10
11def all_test_resources():
12 return native.glob(["src/test/resources/**"])
13
14def all_resources(resources_root):
15 if resources_root == None:
16 return native.glob(["src/main/resources/**"])
17 else:
18 return native.glob([resources_root + '**'])
19
20# Implementation of the rule to call bnd to make an OSGI jar file
21def _bnd_impl(ctx):
22
23 jar = ctx.file.source.path
24 output = ctx.outputs.osgi_jar.path
25 cp = ""
26 name = ctx.attr.source.label.name
27 group = ctx.attr.package_name_root
28 version = ctx.attr.version
29 license = ""
30 importPackages = "*"
31 exportPackages = "*"
32 includeResources = ""
33 webContext = "NONE"
34 dynamicimportPackages = ""
35
36 inputDependencies = [ctx.file.source]
37
38 # determine the dependencies and build the class path
39 for dep in ctx.attr.deps:
40 file = dep.java.outputs.jars[0].class_jar
41
42 if cp:
43 cp += ":"
44 cp += file.path
45 inputDependencies = inputDependencies + [file]
46
47 # extract the class files for use by bnd
48 classes = ctx.actions.declare_file("classes")
49 classesPath = classes.path
50 jarCommand = "mkdir -p %s && cp %s %s && cd %s && jar xf *.jar" % (classesPath, jar, classesPath, classesPath)
51 ctx.actions.run_shell(
52 inputs=inputDependencies,
53 outputs=[classes],
54 command=jarCommand,
55 progress_message="Expanding jar file: %s" % jar,
56 )
57 inputDependencies += [classes]
58
59 # call bnd to make the OSGI jar file
60 arguments=[
61 jar,
62 output,
63 cp,
64 name,
65 group,
66 version,
67 license,
68 importPackages,
69 exportPackages,
70 includeResources,
71 webContext,
72 dynamicimportPackages,
73 classesPath,
74 ]
75 ctx.actions.run(
76 inputs=inputDependencies,
77 outputs=[ctx.outputs.osgi_jar],
78 arguments=arguments,
79 progress_message="Running bnd wrapper on: %s" % ctx.attr.name,
80 executable=ctx.executable._bnd_exe,
81 )
82
83bnd = rule(
84 attrs = {
85 "deps": attr.label_list(),
86 "version": attr.string(),
87 "package_name_root": attr.string(),
88 "source": attr.label(allow_single_file = True),
89 "_bnd_exe": attr.label(
90 executable = True,
91 cfg = "host",
92 allow_files = True,
93 default = Label("//utils/osgiwrap:osgi-jar"),
94 ),
95 },
96 fragments = ["java"],
97 outputs = {
98 "osgi_jar": "lib%{name}.jar",
99 },
100 implementation = _bnd_impl,
101)
102
103def _fwd_bnd(name, source, deps, version, package_name_root, visibility):
104 bnd(name = name, source = source, deps = deps, version = version, package_name_root = package_name_root, visibility = visibility)
105
106def wrapped_osgi_library(name, jar, deps, version = ONOS_VERSION, package_name_root = "org.onosproject", visibility = [ "//visibility:private" ]):
107 _fwd_bnd(name, jar, deps, version, package_name_root, visibility)
108
109def osgi_jar_with_tests(name = None,
110 deps = None,
111 test_deps = None,
112 package_name_root = "org.onosproject",
113 srcs = None,
114 resources_root = None,
115 resources = None,
116 test_srcs = None,
117 exclude_tests = None,
118 test_resources = None,
119 visibility = [ "//visibility:public" ],
120 version = ONOS_VERSION):
121 if name == None:
122 name = "onos-" + native.package_name().replace("/", "-")
123 if srcs == None:
124 srcs = all_java_sources()
125 if resources == None:
126 resources = all_resources(resources_root)
127 if test_srcs == None:
128 test_srcs = all_java_test_sources()
129 if test_resources == None:
130 test_resources = all_test_resources()
131 if exclude_tests == None:
132 exclude_tests = []
133 if deps == None:
134 deps = COMPILE
135 if test_deps == None:
136 test_deps = TEST
137 tests_name = name + '-tests'
138 tests_jar_deps = list(depset(deps + test_deps)) + [ name ]
139 all_test_deps = tests_jar_deps + [ tests_name ]
140
141 native.java_library(name = name, srcs = srcs, resources = resources, deps = deps, visibility = visibility)
142 _fwd_bnd(name + '-osgi', name, deps, version, package_name_root, visibility)
143 if test_srcs != []:
144 native.java_library(name = tests_name,
145 srcs = test_srcs,
146 resources = test_resources,
147 deps = tests_jar_deps,
148 visibility = visibility)
149
150 generate_test_rules(
151 name = name + "-tests-gen",
152 test_files = test_srcs,
153 exclude_tests = exclude_tests,
154 deps = all_test_deps
155 )
156
157def osgi_jar(name = None,
158 deps = None,
159 package_name_root = "org.onosproject",
160 srcs = None,
161 resources_root = None,
162 resources = None,
163 visibility = [ "//visibility:public" ],
164 version = ONOS_VERSION):
165 if srcs == None:
166 srcs = all_java_sources()
167 if deps == None:
168 deps = COMPILE
169
170 osgi_jar_with_tests(name = name,
171 deps = deps,
172 test_deps = [],
173 package_name_root = package_name_root,
174 srcs = srcs,
175 resources = resources,
176 resources_root = resources_root,
177 test_srcs = [],
178 exclude_tests = [],
179 test_resources = [],
180 visibility = visibility,
181 version = version)
182