|  | # Copyright (C) 2013 The Android Open Source Project | 
|  | # | 
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | # you may not use this file except in compliance with the License. | 
|  | # You may obtain a copy of the License at | 
|  | # | 
|  | # http://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, software | 
|  | # distributed under the License is distributed on an "AS IS" BASIS, | 
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | # See the License for the specific language governing permissions and | 
|  | # limitations under the License. | 
|  |  | 
|  | # Rule definitions loaded by default into every BUCK file. | 
|  |  | 
|  | include_defs('//tools/gwt-constants.defs') | 
|  |  | 
|  | def genantlr( | 
|  | name, | 
|  | srcs, | 
|  | out): | 
|  | tmp = name + '.src.zip' | 
|  | genrule( | 
|  | name = name, | 
|  | srcs = srcs, | 
|  | cmd = '$(exe //lib/antlr:antlr-tool) -o $TMP $SRCS;' + | 
|  | 'cd $TMP;' + | 
|  | 'zip -qr $OUT .', | 
|  | deps = ['//lib/antlr:antlr-tool'], | 
|  | out = out, | 
|  | ) | 
|  |  | 
|  | def gwt_module( | 
|  | name, | 
|  | srcs, | 
|  | gwtxml = None, | 
|  | resources = [], | 
|  | deps = [], | 
|  | compile_deps = [], | 
|  | visibility = []): | 
|  | if gwtxml: | 
|  | resources = resources + [gwtxml] | 
|  | java_library( | 
|  | name = name, | 
|  | deps = deps + compile_deps, | 
|  | resources = srcs + resources, | 
|  | visibility = visibility, | 
|  | ) | 
|  | java_library( | 
|  | name = name + '_lib', | 
|  | srcs = srcs, | 
|  | deps = [':' + name] + [d + '_lib' for d in deps] + compile_deps, | 
|  | visibility = visibility, | 
|  | ) | 
|  |  | 
|  | def gwt_application( | 
|  | name, | 
|  | module_target, | 
|  | compiler_opts = [], | 
|  | compiler_jvm_flags = [], | 
|  | deps = [], | 
|  | visibility = []): | 
|  | cmd = ['$(exe //lib/gwt:compiler)', module_target, '$TMP', '$OUT'] | 
|  | cmd += compiler_opts + ['--', '$DEPS'] | 
|  | genrule( | 
|  | name = name, | 
|  | cmd = ' '.join(cmd), | 
|  | deps = [ | 
|  | '//lib/gwt:compiler', | 
|  | '//lib/gwt:dev', | 
|  | ] + deps, | 
|  | out = '%s.zip' % name, | 
|  | visibility = visibility, | 
|  | ) | 
|  |  | 
|  | # Compiles a Java library with additional compile-time dependencies | 
|  | # that do not show up as transitive dependencies to java_library() | 
|  | # or java_binary() rule that depends on this library. | 
|  | def java_library2( | 
|  | name, | 
|  | srcs = [], | 
|  | resources = [], | 
|  | deps = [], | 
|  | compile_deps = [], | 
|  | visibility = []): | 
|  | c = name + '__compile' | 
|  | t = name + '__link' | 
|  | j = 'lib__%s__output/%s.jar' % (c, c) | 
|  | o = 'lib__%s__output/%s.jar' % (name, name) | 
|  | java_library( | 
|  | name = c, | 
|  | srcs = srcs, | 
|  | resources = resources, | 
|  | deps = deps + compile_deps, | 
|  | visibility = ['//tools/eclipse:classpath'], | 
|  | ) | 
|  | # Break the dependency chain by passing the newly built | 
|  | # JAR to consumers through a prebuilt_jar(). | 
|  | genrule( | 
|  | name = t, | 
|  | cmd = 'mkdir -p $(dirname $OUT);ln -s $SRCS $OUT', | 
|  | srcs = [genfile(j)], | 
|  | deps = [':' + c], | 
|  | out = o, | 
|  | ) | 
|  | prebuilt_jar( | 
|  | name = name, | 
|  | binary_jar = genfile(o), | 
|  | deps = deps + [':' + t], | 
|  | visibility = visibility, | 
|  | ) | 
|  |  | 
|  | def gerrit_extension( | 
|  | name, | 
|  | deps = [], | 
|  | compile_deps = [], | 
|  | srcs = [], | 
|  | resources = [], | 
|  | manifest_file = None, | 
|  | manifest_entries = [], | 
|  | visibility = ['PUBLIC']): | 
|  | gerrit_plugin( | 
|  | name = name, | 
|  | deps = deps, | 
|  | compile_deps = compile_deps, | 
|  | srcs = srcs, | 
|  | resources = resources, | 
|  | manifest_file = manifest_file, | 
|  | manifest_entries = manifest_entries, | 
|  | type = 'extension', | 
|  | visibility = visibility, | 
|  | ) | 
|  |  | 
|  | def gerrit_plugin( | 
|  | name, | 
|  | deps = [], | 
|  | compile_deps = [], | 
|  | srcs = [], | 
|  | resources = [], | 
|  | gwt_module = None, | 
|  | manifest_file = None, | 
|  | manifest_entries = [], | 
|  | type = 'plugin', | 
|  | visibility = ['PUBLIC']): | 
|  | mf_cmd = 'v=$(git describe HEAD);' | 
|  | if manifest_file: | 
|  | mf_src = [manifest_file] | 
|  | mf_cmd += 'sed "s:@VERSION@:$v:g" $SRCS >$OUT' | 
|  | else: | 
|  | mf_src = [] | 
|  | mf_cmd += 'echo "Manifest-Version: 1.0" >$OUT;' | 
|  | mf_cmd += 'echo "Gerrit-ApiType: %s" >>$OUT;' % type | 
|  | mf_cmd += 'echo "Implementation-Version: $v" >>$OUT;' | 
|  | mf_cmd += 'echo "Implementation-Vendor: Gerrit Code Review" >>$OUT' | 
|  | for line in manifest_entries: | 
|  | line = line.replace('$', '\$') | 
|  | mf_cmd += ';echo "%s" >> $OUT' % line | 
|  | genrule( | 
|  | name = name + '__manifest', | 
|  | cmd = mf_cmd, | 
|  | srcs = mf_src, | 
|  | out = 'MANIFEST.MF', | 
|  | ) | 
|  | gwt_deps = [] | 
|  | static_jars = [] | 
|  | if gwt_module: | 
|  | gwt_deps = GWT_PLUGIN_DEPS | 
|  | static_jars = [':%s-static-jar' % name] | 
|  | java_library2( | 
|  | name = name + '__plugin', | 
|  | srcs = srcs, | 
|  | resources = resources, | 
|  | deps = deps, | 
|  | compile_deps = ['//gerrit-%s-api:lib' % type] + compile_deps + gwt_deps, | 
|  | ) | 
|  | if gwt_module: | 
|  | prebuilt_jar( | 
|  | name = '%s-static-jar' % name, | 
|  | binary_jar = genfile('%s-static.zip' % name), | 
|  | deps = [':%s-static' % name], | 
|  | ) | 
|  | genrule( | 
|  | name = '%s-static' % name, | 
|  | cmd = 'mkdir -p $TMP/static' + | 
|  | ';unzip -qd $TMP/static $(location %s)' % | 
|  | ':%s__gwt_application' % name + | 
|  | ';cd $TMP' + | 
|  | ';zip -qr $OUT .', | 
|  | out = '%s-static.zip' % name, | 
|  | deps = [':%s__gwt_application' % name] | 
|  | ) | 
|  | gwt_application( | 
|  | name = name + '__gwt_application', | 
|  | module_target = gwt_module, | 
|  | compiler_opts = GWT_COMPILER_OPTS, | 
|  | deps = [':%s__plugin' % name] + gwt_deps, | 
|  | ) | 
|  | java_binary( | 
|  | name = name, | 
|  | manifest_file = genfile('MANIFEST.MF'), | 
|  | deps = [ | 
|  | ':%s__plugin' % name, | 
|  | ':%s__manifest' % name, | 
|  | ] + static_jars, | 
|  | visibility = visibility, | 
|  | ) | 
|  |  | 
|  | def java_sources( | 
|  | name, | 
|  | srcs, | 
|  | visibility = [] | 
|  | ): | 
|  | java_library( | 
|  | name = name, | 
|  | resources = srcs, | 
|  | visibility = visibility, | 
|  | ) | 
|  |  | 
|  | def java_doc( | 
|  | name, | 
|  | title, | 
|  | pkg, | 
|  | paths, | 
|  | srcs = [], | 
|  | deps = [], | 
|  | visibility = [], | 
|  | do_it_wrong = False, | 
|  | ): | 
|  | if do_it_wrong: | 
|  | sourcepath = paths | 
|  | else: | 
|  | sourcepath = ['$SRCDIR/' + n for n in paths] | 
|  | genrule( | 
|  | name = name, | 
|  | cmd = ' '.join([ | 
|  | 'while ! test -f .buckconfig; do cd ..; done;', | 
|  | 'javadoc', | 
|  | '-quiet', | 
|  | '-protected', | 
|  | '-encoding UTF-8', | 
|  | '-charset UTF-8', | 
|  | '-notimestamp', | 
|  | '-windowtitle "' + title + '"', | 
|  | '-link http://docs.oracle.com/javase/7/docs/api', | 
|  | '-subpackages ' + pkg, | 
|  | '-sourcepath ', | 
|  | ':'.join(sourcepath), | 
|  | ' -classpath ', | 
|  | ':'.join(['$(location %s)' % n for n in deps]), | 
|  | '-d $TMP', | 
|  | ]) + ';jar cf $OUT -C $TMP .', | 
|  | srcs = srcs, | 
|  | deps = deps, | 
|  | out = name + '.jar', | 
|  | visibility = visibility, | 
|  | ) |