blob: 01e9476bd8165c36f47f76140be7b26cf5bcb832 [file] [log] [blame]
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -07001# Copyright (C) 2013 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
Shawn Pearce50479112013-07-29 17:30:50 -070015# Rule definitions loaded by default into every BUCK file.
16
Dave Borowitz08180de2014-11-06 15:39:34 -080017include_defs('//lib/auto/auto_value.defs')
David Ostrovskyc5382782013-11-12 09:41:18 +010018include_defs('//tools/gwt-constants.defs')
David Ostrovsky188bd782014-07-19 22:43:36 +020019include_defs('//tools/java_doc.defs')
20include_defs('//tools/java_sources.defs')
David Ostrovsky4af374c2014-05-17 08:04:25 +020021import copy
David Ostrovskyc5382782013-11-12 09:41:18 +010022
Dave Borowitz08180de2014-11-06 15:39:34 -080023# Add AutoValue support to java_library.
24_buck_java_library = java_library
25def java_library(*args, **kwargs):
26 _set_auto_value(kwargs)
27 _buck_java_library(*args, **kwargs)
28
29# Add AutoValue support to java_test.
30_buck_java_test = java_test
31def java_test(*args, **kwargs):
32 _set_auto_value(kwargs)
33 _buck_java_test(*args, **kwargs)
34
35def _set_auto_value(kwargs):
36 apk = 'annotation_processors'
37 if apk not in kwargs:
38 kwargs[apk] = []
39 aps = kwargs.get(apk, [])
40
41 apdk = 'annotation_processor_deps'
42 if apdk not in kwargs:
43 kwargs[apdk] = []
44 apds = kwargs.get(apdk, [])
45
46 if AUTO_VALUE_DEP in kwargs.get('deps', []):
47 aps.extend(AUTO_VALUE_PROCESSORS)
48 apds.extend(AUTO_VALUE_PROCESSOR_DEPS)
49
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070050def genantlr(
51 name,
52 srcs,
Shawn Pearce11d27c82013-07-24 08:09:31 -070053 out):
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070054 genrule(
55 name = name,
56 srcs = srcs,
Shawn Pearce11d27c82013-07-24 08:09:31 -070057 cmd = '$(exe //lib/antlr:antlr-tool) -o $TMP $SRCS;' +
Shawn Pearce9e4e2432013-05-30 13:09:29 -070058 'cd $TMP;' +
59 'zip -qr $OUT .',
Shawn Pearce11d27c82013-07-24 08:09:31 -070060 out = out,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070061 )
62
David Ostrovsky76e396b2014-05-17 08:24:12 +020063def gwt_module(gwt_xml=None, **kwargs):
David Ostrovsky4af374c2014-05-17 08:04:25 +020064 kw = copy.deepcopy(kwargs)
65 if 'resources' not in kw:
66 kw['resources'] = []
David Ostrovsky76e396b2014-05-17 08:24:12 +020067 if gwt_xml:
68 kw['resources'] += [gwt_xml]
David Ostrovsky4af374c2014-05-17 08:04:25 +020069 if 'srcs' in kw:
70 kw['resources'] += kw['srcs']
Shawn Pearce3bfca9e2014-08-01 07:08:54 -070071
72 # Buck does not accept duplicate resources. Callers may have
73 # included gwt_xml or srcs as part of resources, so de-dupe.
74 kw['resources'] = list(set(kw['resources']))
75
David Ostrovsky4af374c2014-05-17 08:04:25 +020076 java_library(**kw)
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070077
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070078def gerrit_extension(
79 name,
80 deps = [],
Shawn Pearce33499722014-05-02 13:22:49 -070081 provided_deps = [],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070082 srcs = [],
83 resources = [],
84 manifest_file = None,
David Ostrovsky1f5813e2013-05-31 20:55:31 +020085 manifest_entries = [],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070086 visibility = ['PUBLIC']):
87 gerrit_plugin(
88 name = name,
89 deps = deps,
Shawn Pearce33499722014-05-02 13:22:49 -070090 provided_deps = provided_deps,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070091 srcs = srcs,
92 resources = resources,
93 manifest_file = manifest_file,
David Ostrovsky1f5813e2013-05-31 20:55:31 +020094 manifest_entries = manifest_entries,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070095 type = 'extension',
96 visibility = visibility,
97 )
98
99def gerrit_plugin(
100 name,
101 deps = [],
Shawn Pearce33499722014-05-02 13:22:49 -0700102 provided_deps = [],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700103 srcs = [],
104 resources = [],
David Ostrovskyc5382782013-11-12 09:41:18 +0100105 gwt_module = None,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700106 manifest_file = None,
David Ostrovsky1f5813e2013-05-31 20:55:31 +0200107 manifest_entries = [],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700108 type = 'plugin',
109 visibility = ['PUBLIC']):
Shawn Pearce06e069c2014-05-13 15:57:36 -0700110 from multiprocessing import cpu_count
David Ostrovsky38828ed2014-10-30 21:52:53 +0100111 mf_cmd = 'v=\$(git describe HEAD);'
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700112 if manifest_file:
113 mf_src = [manifest_file]
114 mf_cmd += 'sed "s:@VERSION@:$v:g" $SRCS >$OUT'
115 else:
116 mf_src = []
117 mf_cmd += 'echo "Manifest-Version: 1.0" >$OUT;'
118 mf_cmd += 'echo "Gerrit-ApiType: %s" >>$OUT;' % type
David Ostrovsky82fc6202014-02-26 21:14:00 +0100119 mf_cmd += 'echo "Implementation-Version: $v" >>$OUT;'
120 mf_cmd += 'echo "Implementation-Vendor: Gerrit Code Review" >>$OUT'
David Ostrovsky1f5813e2013-05-31 20:55:31 +0200121 for line in manifest_entries:
David Ostrovsky73c3ad92014-03-17 08:16:10 +0100122 line = line.replace('$', '\$')
David Ostrovsky1f5813e2013-05-31 20:55:31 +0200123 mf_cmd += ';echo "%s" >> $OUT' % line
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700124 genrule(
125 name = name + '__manifest',
126 cmd = mf_cmd,
127 srcs = mf_src,
128 out = 'MANIFEST.MF',
129 )
David Ostrovskyc5382782013-11-12 09:41:18 +0100130 static_jars = []
131 if gwt_module:
David Ostrovskyc5382782013-11-12 09:41:18 +0100132 static_jars = [':%s-static-jar' % name]
Shawn Pearce33499722014-05-02 13:22:49 -0700133 java_library(
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700134 name = name + '__plugin',
135 srcs = srcs,
136 resources = resources,
137 deps = deps,
David Ostrovsky192676742015-01-23 21:50:47 +0100138 provided_deps = ['//gerrit-%s-api:lib' % type] +
139 provided_deps +
140 GWT_PLUGIN_DEPS,
David Ostrovsky65b6a742014-05-30 06:33:20 +0200141 visibility = ['PUBLIC'],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700142 )
David Ostrovskyc5382782013-11-12 09:41:18 +0100143 if gwt_module:
David Ostrovsky192676742015-01-23 21:50:47 +0100144 java_library(
145 name = name + '__gwt_module',
146 srcs = [],
147 resources = list(set(srcs + resources)),
148 deps = deps,
149 provided_deps = ['//lib/gwt:dev'] +
150 GWT_PLUGIN_DEPS,
151 visibility = ['PUBLIC'],
152 )
David Ostrovskyc5382782013-11-12 09:41:18 +0100153 prebuilt_jar(
154 name = '%s-static-jar' % name,
David Ostrovskyd8af0922014-05-30 12:42:32 +0200155 binary_jar = ':%s-static' % name,
David Ostrovskyc5382782013-11-12 09:41:18 +0100156 )
157 genrule(
158 name = '%s-static' % name,
159 cmd = 'mkdir -p $TMP/static' +
160 ';unzip -qd $TMP/static $(location %s)' %
161 ':%s__gwt_application' % name +
162 ';cd $TMP' +
163 ';zip -qr $OUT .',
164 out = '%s-static.zip' % name,
David Ostrovskyc5382782013-11-12 09:41:18 +0100165 )
Shawn Pearce06e069c2014-05-13 15:57:36 -0700166 gwt_binary(
David Ostrovskyc5382782013-11-12 09:41:18 +0100167 name = name + '__gwt_application',
Shawn Pearce06e069c2014-05-13 15:57:36 -0700168 modules = [gwt_module],
David Ostrovsky192676742015-01-23 21:50:47 +0100169 deps = GWT_PLUGIN_DEPS,
170 module_deps = [':%s__gwt_module' % name],
Shawn Pearce06e069c2014-05-13 15:57:36 -0700171 local_workers = cpu_count(),
172 strict = True,
173 experimental_args = GWT_COMPILER_ARGS,
174 vm_args = GWT_JVM_ARGS,
David Ostrovskyc5382782013-11-12 09:41:18 +0100175 )
David Ostrovskyfb193562014-05-19 22:48:33 +0200176
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700177 java_binary(
178 name = name,
David Ostrovskyd8af0922014-05-30 12:42:32 +0200179 manifest_file = ':%s__manifest' % name,
David Ostrovsky9d6a4532014-06-09 22:15:21 +0200180 merge_manifests = False,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700181 deps = [
182 ':%s__plugin' % name,
David Ostrovskyc5382782013-11-12 09:41:18 +0100183 ] + static_jars,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700184 visibility = visibility,
185 )