We implement the license argument to maven_jar by producing a prebuilt_jar package that includes the license file as a dependency. However, we can't depend on all artifacts that we ever download being jars, so this doesn't work. Instead, just let a genrule provide a license directly, adding it as a dep of the genrule. Of course, genrules can't have deps, so we have to hack them into the command to get buck to pick them up. Change-Id: Ibcabc1ae63eeabf1333616780605314d0429a992
		
			
				
	
	
		
			226 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# 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.zip' % 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,
 | 
						|
  )
 |