diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..486a23256c437b811b5647e40517a35964f60dc6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.zip filter=lfs diff=lfs merge=lfs -text diff --git a/0001-fix-build-for-Power.patch b/0001-fix-build-for-Power.patch new file mode 100644 index 0000000000000000000000000000000000000000..b1f829ea261e7abf96e22fa1e4c73038fbd858d4 --- /dev/null +++ b/0001-fix-build-for-Power.patch @@ -0,0 +1,46 @@ + +The zip -d flag will error if it doesn't find that extension. +This is a fix for Power, but doesn't fix the default case. + +Signed-off-by: Christy Norman + +Closes #9346. + +PiperOrigin-RevId: 271566240 +--- + src/conditions/BUILD | 6 ++++++ + third_party/BUILD | 1 + + 2 files changed, 7 insertions(+) + +diff --git a/src/conditions/BUILD b/src/conditions/BUILD +index 2b28e28057..faa41a439d 100644 +--- a/src/conditions/BUILD ++++ b/src/conditions/BUILD +@@ -10,6 +10,12 @@ filegroup( + visibility = ["//src:__pkg__"], + ) + ++config_setting( ++ name = "linux_ppc", ++ values = {"cpu": "ppc"}, ++ visibility = ["//visibility:public"], ++) ++ + config_setting( + name = "linux_x86_64", + values = {"cpu": "k8"}, +diff --git a/third_party/BUILD b/third_party/BUILD +index 159006d741..b2c0163d61 100644 +--- a/third_party/BUILD ++++ b/third_party/BUILD +@@ -526,6 +526,7 @@ UNNECESSARY_DYNAMIC_LIBRARIES = select({ + # The .so file is an x86 one, so we can just remove it if the CPU is not x86 + "//src/conditions:arm": "*.so *.jnilib *.dll", + "//src/conditions:linux_aarch64": "*.so *.jnilib *.dll", ++ "//src/conditions:linux_ppc": "*.so *.jnilib *.dll", + # Play it safe -- better have a big binary than a slow binary + # zip -d does require an argument. Supply something bogus. + "//conditions:default": "*.bogusextension", +-- +2.23.0 + diff --git a/18950.patch b/18950.patch new file mode 100644 index 0000000000000000000000000000000000000000..9b3cafe29816ca12d983a2a315e2d367a47e9e2c --- /dev/null +++ b/18950.patch @@ -0,0 +1,78 @@ +From d1d017390b799c59d6fdf7b8afa6136d218bdd61 Mon Sep 17 00:00:00 2001 +From: Benjamin Peterson +Date: Fri, 3 May 2019 08:11:00 -0700 +Subject: [PATCH] Rename gettid() functions. + +glibc 2.30 will declare its own gettid; see https://sourceware.org/git/?p=glibc.git;a=commit;h=1d0fc213824eaa2a8f8c4385daaa698ee8fb7c92. Rename the grpc versions to avoid naming conflicts. +--- + src/core/lib/gpr/log_linux.cc | 4 ++-- + src/core/lib/gpr/log_posix.cc | 4 ++-- + src/core/lib/iomgr/ev_epollex_linux.cc | 4 ++-- + 3 files changed, 6 insertions(+), 6 deletions(-) + +diff --git src/core/lib/gpr/log_linux.cc.orig src/core/lib/gpr/log_linux.cc +index 561276f0c20..8b597b4cf2f 100644 +--- src/core/lib/gpr/log_linux.cc.orig 2019-06-21 10:42:13.235611417 -0400 ++++ src/core/lib/gpr/log_linux.cc 2019-06-21 10:42:16.686608855 -0400 +@@ -40,7 +40,7 @@ + #include + #include + +-static long gettid(void) { return syscall(__NR_gettid); } ++static long sys_gettid(void) { return syscall(__NR_gettid); } + + void gpr_log(const char* file, int line, gpr_log_severity severity, + const char* format, ...) { +@@ -70,7 +70,7 @@ void gpr_default_log(gpr_log_func_args* + gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME); + struct tm tm; + static __thread long tid = 0; +- if (tid == 0) tid = gettid(); ++ if (tid == 0) tid = sys_gettid(); + + timer = static_cast(now.tv_sec); + final_slash = strrchr(args->file, '/'); +diff --git src/core/lib/gpr/log_posix.cc.orig src/core/lib/gpr/log_posix.cc +index b6edc14ab6b..2f7c6ce3760 100644 +--- src/core/lib/gpr/log_posix.cc.orig 2019-06-21 10:42:13.242611412 -0400 ++++ src/core/lib/gpr/log_posix.cc 2019-06-21 10:42:22.794604319 -0400 +@@ -30,7 +30,7 @@ + #include + #include + +-static intptr_t gettid(void) { return (intptr_t)pthread_self(); } ++static intptr_t sys_gettid(void) { return (intptr_t)pthread_self(); } + + void gpr_log(const char* file, int line, gpr_log_severity severity, + const char* format, ...) { +@@ -85,7 +85,7 @@ void gpr_default_log(gpr_log_func_args* + char* prefix; + gpr_asprintf(&prefix, "%s%s.%09d %7tu %s:%d]", + gpr_log_severity_string(args->severity), time_buffer, +- (int)(now.tv_nsec), gettid(), display_file, args->line); ++ (int)(now.tv_nsec), sys_gettid(), display_file, args->line); + + fprintf(stderr, "%-70s %s\n", prefix, args->message); + gpr_free(prefix); +diff --git src/core/lib/iomgr/ev_epollex_linux.cc.orig src/core/lib/iomgr/ev_epollex_linux.cc +index 08116b3ab53..76f59844312 100644 +--- src/core/lib/iomgr/ev_epollex_linux.cc.orig 2019-06-21 10:42:13.247611408 -0400 ++++ src/core/lib/iomgr/ev_epollex_linux.cc 2019-06-21 10:42:29.767599141 -0400 +@@ -1150,7 +1150,7 @@ static void end_worker(grpc_pollset* pol + } + + #ifndef NDEBUG +-static long gettid(void) { return syscall(__NR_gettid); } ++static long sys_gettid(void) { return syscall(__NR_gettid); } + #endif + + /* pollset->mu lock must be held by the caller before calling this. +@@ -1170,7 +1170,7 @@ static grpc_error* pollset_work(grpc_pol + #define WORKER_PTR (&worker) + #endif + #ifndef NDEBUG +- WORKER_PTR->originator = gettid(); ++ WORKER_PTR->originator = sys_gettid(); + #endif + if (grpc_polling_trace.enabled()) { + gpr_log(GPR_INFO, diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..5b144f97cf05791217b610cac72d2f0126ab121f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM fedora +WORKDIR /build +RUN dnf install -y 'dnf-command(builddep)' rpm-build java-1.8.0-openjdk-devel zlib-devel pkgconfig python gcc-c++ make +ADD . /build +RUN dnf builddep -y ./bazel.spec && make rpm diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..29f81d812f3e768fa89638d1f72920dbfd1413a8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5c80c9f3efca7ad67ead6a1bee261b05a31ad2fb --- /dev/null +++ b/Makefile @@ -0,0 +1,71 @@ +pkgname := bazel +spec ?= $(pkgname).spec +pwd := $(shell pwd) +NAME := $(shell rpmspec -q --qf "%{name}" $(spec)) +VERSION := $(shell rpmspec -q --qf "%{version}" $(spec)) +RELEASE := $(shell rpmspec -q --qf "%{release}" $(spec)) +NVR := $(NAME)-$(VERSION)-$(RELEASE) +outdir ?= $(pwd) + +RELEASE_ID = $(shell grep '^ID=' /etc/*release | cut -d = -f 2 | tr -d \") +SUDO = + +ifneq ($(shell id -u),0) +SUDO = sudo +endif + +default: rpm + +all: rpm srpm + +name: + @echo $(NVR) + @echo " NAME: $(NAME)" + @echo " VERSION: $(VERSION)" + @echo " RELEASE: $(RELEASE)" + +rpm: .deps.$(RELEASE_ID) .builddep.$(RELEASE_ID) + rpmbuild \ + --define '_sourcedir $(pwd)' \ + --define '_specdir $(pwd)' \ + --define '_builddir $(pwd)' \ + --define '_srcrpmdir $(outdir)' \ + --define '_rpmdir $(outdir)' \ + -bb ./$(spec) + +srpm: $(NVR).src.rpm + +# https://developer.fedoraproject.org/deployment/copr/copr-cli.html +copr: $(NVR).src.rpm + copr-cli build bazel $(NVR).src.rpm + +$(NVR).src.rpm: .deps.$(RELEASE_ID) $(spec) $(wildcard *.diff) + rpmbuild \ + --define '_sourcedir $(pwd)' \ + --define '_specdir $(pwd)' \ + --define '_builddir $(pwd)' \ + --define '_srcrpmdir $(outdir)' \ + --define '_rpmdir $(outdir)' \ + --nodeps \ + -bs ./$(spec) + +.deps.$(RELEASE_ID): +ifeq ($(RELEASE_ID),centos) + $(SUDO) yum install -y yum-utils rpm-build && touch $@ +else + $(SUDO) dnf install -y 'dnf-command(builddep)' rpm-build && touch $@ +endif + +.builddep.$(RELEASE_ID): $(spec) +ifeq ($(RELEASE_ID),centos) + $(SUDO) yum-builddep -y $< && touch $@ +else + $(SUDO) dnf builddep -y $< && touch $@ +endif + +rebuild: .deps.$(RELEASE_ID) .builddep.$(RELEASE_ID) $(NVR).src.rpm + rpmbuild --rebuild $(NVR).src.rpm + +clean: + rm -rf *~ *.rpm noarch .builddep.$(RELEASE_ID) .deps.$(RELEASE_ID) $(shell uname -m)/ $(NAME)-$(VERSION)/ + diff --git a/README.md b/README.md index 1acdf645536ff3d4466aa3f6b86267d543d890cf..cb742974c6e3a489e0792b8167fa5bfd225a5fed 100644 --- a/README.md +++ b/README.md @@ -4,20 +4,26 @@ Tool for the automation of building and testing of software #### 软件架构 -软件架构说明 +基于openEuler aarch64 构架下的源码编译 +bazel for openEuler aarch64 + +version :2.1.0 + #### 安装教程 -1. xxxx -2. xxxx -3. xxxx +1. git clone +2. rpm -ivh "XXX.rpm" + +You can also [Build Bazel from scratch (bootstrapping)](https://docs.bazel.build/versions/3.4.0/install-compile-source.html) + #### 使用说明 -1. xxxx -2. xxxx -3. xxxx +1. bazel --help +2. bazel version <查看版本> +3. bazel build to use #### 参与贡献 @@ -25,6 +31,7 @@ Tool for the automation of building and testing of software 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request +5. 打包bazel请参考 https://copr.fedorainfracloud.org/coprs/vbatts/bazel/ #### 码云特技 diff --git a/bazel-1.0.0-log-warning.patch b/bazel-1.0.0-log-warning.patch new file mode 100644 index 0000000000000000000000000000000000000000..4262d68242e6cb8ded6037de6495d497b1ad2b6a --- /dev/null +++ b/bazel-1.0.0-log-warning.patch @@ -0,0 +1,11 @@ +--- src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java.orig 2019-10-16 13:05:10.252727691 +0000 ++++ src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java 2019-10-16 13:05:17.957900302 +0000 +@@ -179,7 +179,7 @@ public final class StrictJavaDepsPlugin + log.error(diagnostic.pos(), Errors.ProcMessager(diagnostic.message())); + break; + case WARN: +- log.warning(diagnostic.pos(), Warnings.ProcMessager(diagnostic.message())); ++ //log.warning(diagnostic.pos(), Warnings.ProcMessager(diagnostic.message())); + break; + case OFF: // continue below + } diff --git a/bazel-2.1.0-dist.zip b/bazel-2.1.0-dist.zip new file mode 100644 index 0000000000000000000000000000000000000000..3c6eb8383a128045b947ed8ecae0a6ccfdd6462a --- /dev/null +++ b/bazel-2.1.0-dist.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3371cd9050989173a3b27364668328653a65653a50a85c320adc53953b4d5f46 +size 259806518 diff --git a/bazel.spec b/bazel.spec new file mode 100644 index 0000000000000000000000000000000000000000..778d9e10588ad57a3246cbd76c09676e7ff6a086 --- /dev/null +++ b/bazel.spec @@ -0,0 +1,116 @@ + +%define bashcompdir %(pkg-config --variable=completionsdir bash-completion 2>/dev/null) +%define shortname bazel +%define shortver 0.29 + +#Workaround for s390x (Java 1.8 runs out of memory) +%ifarch s390x +%if 0%{?suse_version} > 1500 +%define openjdktouse java-12-openjdk-devel +%else +%define openjdktouse java-11-openjdk-devel +%endif +%else +%define openjdktouse java-1.8.0-openjdk-devel +%endif + +Name: bazel%{shortver} +Version: 0.29.1 +Release: 0 +Summary: Tool for the automation of building and testing of software +License: Apache-2.0 +Group: Development/Tools/Building +URL: http://bazel.io/ +Source0: https://github.com/bazelbuild/bazel/releases/download/%{version}/%{shortname}-%{version}-dist.zip +Source1: https://github.com/bazelbuild/bazel/releases/download/%{version}/%{shortname}-%{version}-dist.zip.sig +Patch1: 0001-fix-build-for-Power.patch +Patch2: 0002-fix-build-for-s390x.patch +BuildRequires: gcc-c++ +BuildRequires: java-1_8_0-openjdk-devel +BuildRequires: pkgconfig +BuildRequires: python3 +BuildRequires: unzip +BuildRequires: zip +BuildRequires: pkgconfig(bash-completion) +BuildRequires: pkgconfig(zlib) +Requires(post): update-alternatives +Requires(postun): update-alternatives +Requires: %{openjdktouse} +Provides: bazel = %{version} +ExcludeArch: %ix86 + +%description +Tool for the automation of building and testing of software. It supports Java, +C++ and Go as programing languages. It also has a support for Android and iOS +as mobile operating systems. + +%prep +%setup -q -c +%patch1 -p1 +%patch2 -p1 +# Remove executable permissions +chmod 0644 AUTHORS CHANGELOG.md CONTRIBUTORS LICENSE +# Use Python 3 +find . -type f \( -name "*.py" -o -name "*.txt" \) -exec sed -i 's|#!.*python.*|#!/usr/bin/python3|' "{}" + +find . -type f -name "*.java" -exec sed -i 's|#!/usr/bin/env python|#!/usr/bin/python3|' "{}" + +# Fix collision between grpc's gettid and glibc's gettid +find third_party/grpc -type f -name "*.cc" -exec sed -i -e 's|gettid(|my_gettid(|g' {} + + +%build +%ifarch aarch64 %arm +export BAZEL_JAVAC_OPTS="-J-Xmx2g -J-Xms200m" +%endif +%ifarch s390x +export BAZEL_JAVAC_OPTS="-J-Xmx4g -J-Xms1g" +%endif +CC=gcc +CXX=g++ +EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" ./compile.sh +./scripts/generate_bash_completion.sh \ + --bazel=output/bazel \ + --output=output/bazel-complete.bash \ + --prepend=scripts/bazel-complete-header.bash \ + --prepend=scripts/bazel-complete-template.bash +./output/bazel shutdown + +%install +export NO_BRP_STRIP_DEBUG=true +export NO_DEBUGINFO_STRIP_DEBUG=true +%define __debug_install_post %{nil} +: >debugfiles.list +: >debugsources.list +: >debugsourcefiles.list + +install -Dm0755 output/bazel %{buildroot}%{_bindir}/bazel%{shortver} +install -Dm0644 output/bazel-complete.bash %{buildroot}%{_datadir}/%{name}/bazel-complete.bash + +# update-alternatives +mkdir -p %{buildroot}%{_sysconfdir}/alternatives +ln -sf %{_sysconfdir}/alternatives/bazel %{buildroot}%{_bindir}/bazel +mkdir -p %{buildroot}%{_datadir}/bash-completion/completions +ln -sf %{_sysconfdir}/alternatives/bazel-complete.bash %{buildroot}%{_datadir}/bash-completion/completions/bazel + +%post +update-alternatives \ + --install %{_bindir}/bazel bazel %{_bindir}/bazel%{shortver} 29 \ + --slave %{_datadir}/bash-completion/completions/bazel \ + bazel-complete.bash \ + %{_datadir}/%{name}/bazel-complete.bash + +%postun +if [ $1 -eq 0 ] ; then + update-alternatives --remove bazel %{_bindir}/bazel%{shortver} +fi + +%files +%doc AUTHORS CHANGELOG.md CONTRIBUTORS +%license LICENSE +%{_bindir}/bazel +%{_bindir}/bazel%{shortver} +%{_datadir}/bash-completion/completions/bazel +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/bazel-complete.bash +%ghost %{_sysconfdir}/alternatives/bazel +%ghost %{_sysconfdir}/alternatives/bazel-complete.bash + +%changelog