gerrit/tools/default.defs
David Ostrovsky 1ef2557f6f Buck: Add support for non transitive plugin dependencies
In some cases it might be useful to be able to pass dependencies as non
transitive dependencies, that not included in final plugin binary.

Why? When plugin dependencies are needed in both bootstrap classpath and
in plugin then they must be put in $gerrit_path/lib dir. Having them in lib
and inside the plugin doesn't make much sense.

This change exposes compile_deps parameter to the gerrit_{plugin|extension}
methods. It is possible to create both versions of the plugin: with and without
dependencies.

  gerrit_plugin(
    name = 'javamelody',
    srcs = glob(['src/main/java/**/*.java']),
    resources = glob(['src/main/resources/**/*']),
    manifest_entries = [
      'Gerrit-PluginName: javamelody',
      'Gerrit-Module: com.googlesource.gerrit.plugins.javamelody.Module',
      'Gerrit-HttpModule: com.googlesource.gerrit.plugins.javamelody.HttpModule',
    ],
    deps = [
      '//plugins/javamelody/lib:javamelody',
      '//plugins/javamelody/lib:jrobin',
    ],
  )

  gerrit_plugin(
    name = 'javamelody-no-deps',
    srcs = glob(['src/main/java/**/*.java']),
    resources = glob(['src/main/resources/**/*']),
    manifest_entries = [
      'Gerrit-PluginName: javamelody',
      'Gerrit-Module: com.googlesource.gerrit.plugins.javamelody.Module',
      'Gerrit-HttpModule: com.googlesource.gerrit.plugins.javamelody.HttpModule',
    ],
    compile_deps = [
      '//plugins/javamelody/lib:javamelody',
      '//plugins/javamelody/lib:jrobin',
    ],
  )

Change-Id: Ia274dbeb18de8807f0ab1edf7144f12ff0d02d74
2013-12-09 23:56:37 +01:00

251 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('//tools/buck.defs')
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'
for line in manifest_entries:
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 = []
):
genrule(
name = name,
cmd = ' '.join([
'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([n for n in paths]),
' -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,
)