19267674f7
As explained in [1], [2] in tree build mode is currently broken for plugins that expose GWT modules. To rectify, isolate the libraries that used for building regular and GWT modules. While regular modules need the whole Plugin API as their dependency, GWT modules should only consume pre-defined set of GWT API modules. [1] https://github.com/facebook/buck/issues/109 [2] https://gerrit-review.googlesource.com/63489 Change-Id: I4694745254ec0f2d9578d79b62110241d4b8b429
186 lines
4.9 KiB
Plaintext
186 lines
4.9 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')
|
|
import copy
|
|
|
|
# Add AutoValue support to java_library.
|
|
_buck_java_library = java_library
|
|
def java_library(*args, **kwargs):
|
|
_set_auto_value(kwargs)
|
|
_buck_java_library(*args, **kwargs)
|
|
|
|
# Add AutoValue support to java_test.
|
|
_buck_java_test = java_test
|
|
def java_test(*args, **kwargs):
|
|
_set_auto_value(kwargs)
|
|
_buck_java_test(*args, **kwargs)
|
|
|
|
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, [])
|
|
|
|
if AUTO_VALUE_DEP in kwargs.get('deps', []):
|
|
aps.extend(AUTO_VALUE_PROCESSORS)
|
|
apds.extend(AUTO_VALUE_PROCESSOR_DEPS)
|
|
|
|
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']):
|
|
from multiprocessing import cpu_count
|
|
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',
|
|
)
|
|
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 = ['//lib/gwt:dev'] +
|
|
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,
|
|
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,
|
|
manifest_file = ':%s__manifest' % name,
|
|
merge_manifests = False,
|
|
deps = [
|
|
':%s__plugin' % name,
|
|
] + static_jars,
|
|
visibility = visibility,
|
|
)
|