| # 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: |
| 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__plugin' % 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, |
| ) |