Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 1 | # 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 Pearce | 5047911 | 2013-07-29 17:30:50 -0700 | [diff] [blame] | 15 | # Rule definitions loaded by default into every BUCK file. |
| 16 | |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 17 | def genantlr( |
| 18 | name, |
| 19 | srcs, |
Shawn Pearce | 11d27c8 | 2013-07-24 08:09:31 -0700 | [diff] [blame] | 20 | out): |
| 21 | tmp = name + '.src.zip' |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 22 | genrule( |
| 23 | name = name, |
| 24 | srcs = srcs, |
Shawn Pearce | 11d27c8 | 2013-07-24 08:09:31 -0700 | [diff] [blame] | 25 | cmd = '$(exe //lib/antlr:antlr-tool) -o $TMP $SRCS;' + |
Shawn Pearce | 9e4e243 | 2013-05-30 13:09:29 -0700 | [diff] [blame] | 26 | 'cd $TMP;' + |
| 27 | 'zip -qr $OUT .', |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 28 | deps = ['//lib/antlr:antlr-tool'], |
Shawn Pearce | 11d27c8 | 2013-07-24 08:09:31 -0700 | [diff] [blame] | 29 | out = out, |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 30 | ) |
| 31 | |
| 32 | def 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 | |
| 50 | def gwt_application( |
| 51 | name, |
| 52 | module_target, |
| 53 | compiler_opts = [], |
| 54 | compiler_jvm_flags = [], |
| 55 | deps = [], |
| 56 | visibility = []): |
Shawn Pearce | 11d27c8 | 2013-07-24 08:09:31 -0700 | [diff] [blame] | 57 | cmd = ['$(exe //lib/gwt:compiler)', module_target, '$OUT'] |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 58 | cmd += compiler_opts + ['--', '$DEPS'] |
| 59 | genrule( |
| 60 | name = name, |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 61 | 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. |
| 73 | def 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 Pearce | 82e66ee | 2013-05-10 12:38:49 -0700 | [diff] [blame] | 89 | visibility = ['//tools/eclipse:classpath'], |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 90 | ) |
| 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 | |
| 107 | def gerrit_extension( |
| 108 | name, |
| 109 | deps = [], |
| 110 | srcs = [], |
| 111 | resources = [], |
| 112 | manifest_file = None, |
David Ostrovsky | 1f5813e | 2013-05-31 20:55:31 +0200 | [diff] [blame] | 113 | manifest_entries = [], |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 114 | visibility = ['PUBLIC']): |
| 115 | gerrit_plugin( |
| 116 | name = name, |
| 117 | deps = deps, |
| 118 | srcs = srcs, |
| 119 | resources = resources, |
| 120 | manifest_file = manifest_file, |
David Ostrovsky | 1f5813e | 2013-05-31 20:55:31 +0200 | [diff] [blame] | 121 | manifest_entries = manifest_entries, |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 122 | type = 'extension', |
| 123 | visibility = visibility, |
| 124 | ) |
| 125 | |
| 126 | def gerrit_plugin( |
| 127 | name, |
| 128 | deps = [], |
| 129 | srcs = [], |
| 130 | resources = [], |
| 131 | manifest_file = None, |
David Ostrovsky | 1f5813e | 2013-05-31 20:55:31 +0200 | [diff] [blame] | 132 | manifest_entries = [], |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 133 | 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 Ostrovsky | 1f5813e | 2013-05-31 20:55:31 +0200 | [diff] [blame] | 144 | for line in manifest_entries: |
| 145 | mf_cmd += ';echo "%s" >> $OUT' % line |
Shawn Pearce | fd6bb9f | 2013-05-08 14:14:24 -0700 | [diff] [blame] | 146 | 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 Ostrovsky | df36b6a | 2013-05-29 23:26:53 +0200 | [diff] [blame] | 168 | |
| 169 | def java_sources( |
| 170 | name, |
| 171 | srcs, |
| 172 | visibility = [] |
| 173 | ): |
| 174 | java_library( |
| 175 | name = name, |
| 176 | resources = srcs, |
| 177 | visibility = visibility, |
| 178 | ) |