| # 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('//lib/auto/auto_value.defs') | 
 | include_defs('//tools/gwt-constants.defs') | 
 | include_defs('//tools/java_doc.defs') | 
 | include_defs('//tools/java_sources.defs') | 
 | include_defs('//tools/git.defs') | 
 | import copy | 
 | import traceback | 
 | import os | 
 | from multiprocessing import cpu_count | 
 |  | 
 | # Set defaults on java rules: | 
 | #  - Add AutoValue annotation processing support. | 
 | #  - Treat source files as UTF-8. | 
 |  | 
 | _buck_java_library = java_library | 
 | def java_library(*args, **kwargs): | 
 |   _munge_args(kwargs) | 
 |   _buck_java_library(*args, **kwargs) | 
 |  | 
 | _buck_java_test = java_test | 
 | def java_test(*args, **kwargs): | 
 |   _munge_args(kwargs) | 
 |   _buck_java_test(*args, **kwargs) | 
 |  | 
 |  | 
 | # Munge kwargs to set Gerrit-specific defaults. | 
 | def _munge_args(kwargs): | 
 |   _set_auto_value(kwargs) | 
 |   _set_extra_arguments(kwargs) | 
 |  | 
 | def _set_extra_arguments(kwargs): | 
 |   ext = 'extra_arguments' | 
 |   if ext not in kwargs: | 
 |     kwargs[ext] = [] | 
 |   extra_args = kwargs[ext] | 
 |  | 
 |   for arg in extra_args: | 
 |     if arg.startswith('-encoding'): | 
 |       return | 
 |  | 
 |   extra_args.extend(['-encoding', 'UTF-8']) | 
 |  | 
 | def _set_auto_value(kwargs): | 
 |   apk = 'annotation_processors' | 
 |   if apk not in kwargs: | 
 |     kwargs[apk] = [] | 
 |   aps = kwargs.get(apk, []) | 
 |  | 
 |   apdk = 'annotation_processor_deps' | 
 |   if apdk not in kwargs: | 
 |     kwargs[apdk] = [] | 
 |   apds = kwargs.get(apdk, []) | 
 |  | 
 |   all_deps = kwargs.get('deps', []) + kwargs.get('exported_deps', []) | 
 |   if AUTO_VALUE_DEP in all_deps: | 
 |     aps.extend(AUTO_VALUE_PROCESSORS) | 
 |     apds.extend(AUTO_VALUE_PROCESSOR_DEPS) | 
 |  | 
 |  | 
 | # Add 'license' argument to genrule. | 
 | _buck_genrule = genrule | 
 | def genrule(*args, **kwargs): | 
 |   license = kwargs.pop('license', None) | 
 |   if license: | 
 |     license = '//lib:LICENSE-%s' % license | 
 |     # genrule has no deps attribute, but locations listed in the command show | 
 |     # up as deps of the target with buck audit. | 
 |     kwargs['cmd'] = 'true $(location %s); %s' % (license, kwargs['cmd']) | 
 |   _buck_genrule(*args, **kwargs) | 
 |  | 
 |  | 
 | def genantlr( | 
 |     name, | 
 |     srcs, | 
 |     out): | 
 |   genrule( | 
 |     name = name, | 
 |     srcs = srcs, | 
 |     cmd = '$(exe //lib/antlr:antlr-tool) -o $TMP $SRCS;' + | 
 |       'cd $TMP;' + | 
 |       'zip -qr $OUT .', | 
 |     out = out, | 
 |   ) | 
 |  | 
 | def gwt_module(gwt_xml=None, **kwargs): | 
 |   kw = copy.deepcopy(kwargs) | 
 |   if 'resources' not in kw: | 
 |     kw['resources'] = [] | 
 |   if gwt_xml: | 
 |     kw['resources'] += [gwt_xml] | 
 |   if 'srcs' in kw: | 
 |     kw['resources'] += kw['srcs'] | 
 |  | 
 |   # Buck does not accept duplicate resources. Callers may have | 
 |   # included gwt_xml or srcs as part of resources, so de-dupe. | 
 |   kw['resources'] = list(set(kw['resources'])) | 
 |  | 
 |   java_library(**kw) | 
 |  | 
 | def gerrit_extension( | 
 |     name, | 
 |     deps = [], | 
 |     provided_deps = [], | 
 |     srcs = [], | 
 |     resources = [], | 
 |     manifest_file = None, | 
 |     manifest_entries = [], | 
 |     visibility = ['PUBLIC']): | 
 |   gerrit_plugin( | 
 |     name = name, | 
 |     deps = deps, | 
 |     provided_deps = provided_deps, | 
 |     srcs = srcs, | 
 |     resources = resources, | 
 |     manifest_file = manifest_file, | 
 |     manifest_entries = manifest_entries, | 
 |     type = 'extension', | 
 |     visibility = visibility, | 
 |   ) | 
 |  | 
 | def gerrit_plugin( | 
 |     name, | 
 |     deps = [], | 
 |     provided_deps = [], | 
 |     srcs = [], | 
 |     resources = [], | 
 |     gwt_module = None, | 
 |     manifest_file = None, | 
 |     manifest_entries = [], | 
 |     type = 'plugin', | 
 |     visibility = ['PUBLIC'], | 
 |     target_suffix = ''): | 
 |   tb = traceback.extract_stack() | 
 |   calling_BUCK_file = tb[-2][0] | 
 |   calling_BUCK_dir = os.path.abspath(os.path.dirname(calling_BUCK_file)) | 
 |   mf_cmd = 'v=%s;' % git_describe(calling_BUCK_dir) | 
 |   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', | 
 |   ) | 
 |   static_jars = [] | 
 |   if gwt_module: | 
 |     static_jars = [':%s-static-jar' % name] | 
 |   java_library( | 
 |     name = name + '__plugin', | 
 |     srcs = srcs, | 
 |     resources = resources, | 
 |     deps = deps, | 
 |     provided_deps = ['//gerrit-%s-api:lib' % type] + | 
 |       provided_deps + | 
 |       GWT_PLUGIN_DEPS, | 
 |     visibility = ['PUBLIC'], | 
 |   ) | 
 |   if gwt_module: | 
 |     java_library( | 
 |       name = name + '__gwt_module', | 
 |       srcs = [], | 
 |       resources = list(set(srcs + resources)), | 
 |       deps = deps, | 
 |       provided_deps = GWT_PLUGIN_DEPS, | 
 |       visibility = ['PUBLIC'], | 
 |     ) | 
 |     prebuilt_jar( | 
 |       name = '%s-static-jar' % name, | 
 |       binary_jar = ':%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.jar' % name, | 
 |     ) | 
 |     gwt_binary( | 
 |       name = name + '__gwt_application', | 
 |       modules = [gwt_module], | 
 |       deps = GWT_PLUGIN_DEPS + GWT_TRANSITIVE_DEPS + ['//lib/gwt:dev'], | 
 |       module_deps = [':%s__gwt_module' % name], | 
 |       local_workers = cpu_count(), | 
 |       strict = True, | 
 |       experimental_args = GWT_COMPILER_ARGS, | 
 |       vm_args = GWT_JVM_ARGS, | 
 |     ) | 
 |  | 
 |   java_binary( | 
 |     name = name + target_suffix, | 
 |     manifest_file = ':%s__manifest' % name, | 
 |     merge_manifests = False, | 
 |     deps = [ | 
 |       ':%s__plugin' % name, | 
 |     ] + static_jars, | 
 |     visibility = visibility, | 
 |   ) |