blob: e7981dd5e5143277320b59a8c71bc76d77f56671 [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
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070017def genantlr(
18 name,
19 srcs,
Shawn Pearce11d27c82013-07-24 08:09:31 -070020 out):
21 tmp = name + '.src.zip'
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070022 genrule(
23 name = name,
24 srcs = srcs,
Shawn Pearce11d27c82013-07-24 08:09:31 -070025 cmd = '$(exe //lib/antlr:antlr-tool) -o $TMP $SRCS;' +
Shawn Pearce9e4e2432013-05-30 13:09:29 -070026 'cd $TMP;' +
27 'zip -qr $OUT .',
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070028 deps = ['//lib/antlr:antlr-tool'],
Shawn Pearce11d27c82013-07-24 08:09:31 -070029 out = out,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070030 )
31
32def gwt_module(
33 name,
34 srcs,
35 gwtxml = None,
36 resources = [],
37 deps = [],
38 visibility = []):
39 if gwtxml:
40 resources = resources + [gwtxml]
41 resources = resources + srcs
42 java_library(
43 name = name,
44 srcs = srcs,
45 deps = deps,
46 resources = resources,
47 visibility = visibility,
48 )
49
50def gwt_application(
51 name,
52 module_target,
53 compiler_opts = [],
54 compiler_jvm_flags = [],
55 deps = [],
56 visibility = []):
Shawn Pearce11d27c82013-07-24 08:09:31 -070057 cmd = ['$(exe //lib/gwt:compiler)', module_target, '$OUT']
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070058 cmd += compiler_opts + ['--', '$DEPS']
59 genrule(
60 name = name,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070061 cmd = ' '.join(cmd),
62 deps = [
63 '//lib/gwt:compiler',
64 '//lib/gwt:dev',
65 ] + deps,
66 out = '%s.zip' % name,
67 visibility = visibility,
68 )
69
70# Compiles a Java library with additional compile-time dependencies
71# that do not show up as transitive dependencies to java_library()
72# or java_binary() rule that depends on this library.
73def java_library2(
74 name,
75 srcs = [],
76 resources = [],
77 deps = [],
78 compile_deps = [],
79 visibility = []):
80 c = name + '__compile'
81 t = name + '__link'
82 j = 'lib__%s__output/%s.jar' % (c, c)
83 o = 'lib__%s__output/%s.jar' % (name, name)
84 java_library(
85 name = c,
86 srcs = srcs,
87 resources = resources,
88 deps = deps + compile_deps,
Shawn Pearce82e66ee2013-05-10 12:38:49 -070089 visibility = ['//tools/eclipse:classpath'],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -070090 )
91 # Break the dependency chain by passing the newly built
92 # JAR to consumers through a prebuilt_jar().
93 genrule(
94 name = t,
95 cmd = 'mkdir -p $(dirname $OUT);ln -s $SRCS $OUT',
96 srcs = [genfile(j)],
97 deps = [':' + c],
98 out = o,
99 )
100 prebuilt_jar(
101 name = name,
102 binary_jar = genfile(o),
103 deps = deps + [':' + t],
104 visibility = visibility,
105 )
106
107def gerrit_extension(
108 name,
109 deps = [],
110 srcs = [],
111 resources = [],
112 manifest_file = None,
David Ostrovsky1f5813e2013-05-31 20:55:31 +0200113 manifest_entries = [],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700114 visibility = ['PUBLIC']):
115 gerrit_plugin(
116 name = name,
117 deps = deps,
118 srcs = srcs,
119 resources = resources,
120 manifest_file = manifest_file,
David Ostrovsky1f5813e2013-05-31 20:55:31 +0200121 manifest_entries = manifest_entries,
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700122 type = 'extension',
123 visibility = visibility,
124 )
125
126def gerrit_plugin(
127 name,
128 deps = [],
129 srcs = [],
130 resources = [],
131 manifest_file = None,
David Ostrovsky1f5813e2013-05-31 20:55:31 +0200132 manifest_entries = [],
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700133 type = 'plugin',
134 visibility = ['PUBLIC']):
135 mf_cmd = 'v=$(git describe HEAD);'
136 if manifest_file:
137 mf_src = [manifest_file]
138 mf_cmd += 'sed "s:@VERSION@:$v:g" $SRCS >$OUT'
139 else:
140 mf_src = []
141 mf_cmd += 'echo "Manifest-Version: 1.0" >$OUT;'
142 mf_cmd += 'echo "Gerrit-ApiType: %s" >>$OUT;' % type
143 mf_cmd += 'echo "Implementation-Version: $v" >>$OUT'
David Ostrovsky1f5813e2013-05-31 20:55:31 +0200144 for line in manifest_entries:
145 mf_cmd += ';echo "%s" >> $OUT' % line
Shawn Pearcefd6bb9f2013-05-08 14:14:24 -0700146 genrule(
147 name = name + '__manifest',
148 cmd = mf_cmd,
149 srcs = mf_src,
150 out = 'MANIFEST.MF',
151 )
152 java_library2(
153 name = name + '__plugin',
154 srcs = srcs,
155 resources = resources,
156 deps = deps,
157 compile_deps = ['//:%s-lib' % type],
158 )
159 java_binary(
160 name = name,
161 manifest_file = genfile('MANIFEST.MF'),
162 deps = [
163 ':%s__plugin' % name,
164 ':%s__manifest' % name,
165 ],
166 visibility = visibility,
167 )
David Ostrovskydf36b6a2013-05-29 23:26:53 +0200168
169def java_sources(
170 name,
171 srcs,
172 visibility = []
173 ):
174 java_library(
175 name = name,
176 resources = srcs,
177 visibility = visibility,
178 )