blob: 3d686c66a309f854693ca3617376468bc6387a5c [file] [log] [blame]
# Copyright (C) 2014 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.
#
# This depends on gerrit-plugin-api and optionally
# gerrit-plugin-gwtui (GWT module) and gwt-user libraries to be
# available under:
#
# //lib/gerrit:plugin-api
# //lib/gerrit:plugin-gwtui
# //lib/gwt:user
# //lib/gwt:dev
#
# To provide it maven_jar() or bucklet can be used in lib/gerrit/BUCK:
#
# include_defs('//bucklets/maven_jar.bucklet')
#
# VER = '2.10'
#
# maven_jar(
# name = 'plugin-api',
# id = 'com.google.gerrit:gerrit-plugin-api:' + VER',
# )
#
# maven_jar(
# name = 'plugin-gwtui',
# id = 'com.google.gerrit:gerrit-plugin-gwtui:' + VER',
# )
#
GWT_JVM_ARGS = ['-Xmx512m']
GWT_COMPILER_ARGS = [
'-XdisableClassMetadata',
'-XdisableCastChecking',
]
GERRIT_PLUGIN_API = ['//lib/gerrit:plugin-api']
GERRIT_GWT_API = ['//lib/gerrit:gwtui-api']
GWT_DEPS = [
'//lib/gwt:user',
'//lib/gwt:dev',
]
STANDALONE_MODE = True
def gerrit_plugin(
name,
deps = [],
provided_deps = [],
srcs = [],
resources = [],
gwt_module = None,
manifest_entries = [],
type = 'plugin',
visibility = ['PUBLIC']):
from multiprocessing import cpu_count
from os import path,getcwd
# TODO(davido): Remove this hack and replace all this mess with just
# ROOT = get_base_path()
# when this issue is fixed:
# https://github.com/facebook/buck/issues/200
# Or this PR is merged:
# https://github.com/facebook/buck/pull/201
ROOT = getcwd()
while not path.lexists(path.join(ROOT, '.buckconfig')):
ROOT = path.dirname(ROOT)
if path.exists(path.join(ROOT, 'VERSION')):
include_defs('//' + path.join(ROOT, 'VERSION'))
mf_cmd = 'v=%s && ' % PLUGIN_VERSION
elif path.exists(path.join(ROOT, '.git')):
mf_cmd = 'v=\$(git describe --always HEAD) && '
else: # cannot retrieve plugin version, guessing '1.0'
mf_cmd = 'v=1.0 && '
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,
out = 'MANIFEST.MF',
)
gwt_deps = []
static_jars = []
if gwt_module:
gwt_deps = GWT_DEPS + GERRIT_GWT_API
static_jars = [':%s-static-jar' % name]
java_library(
name = name + '__plugin',
srcs = srcs,
resources = resources,
deps = deps,
provided_deps = GERRIT_PLUGIN_API + provided_deps + gwt_deps,
visibility = ['PUBLIC'],
)
if gwt_module:
java_library(
name = name + '__gwt_module',
srcs = [],
resources = list(set(srcs + resources)),
deps = deps,
provided_deps = gwt_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_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,
)