From 7dac7ba6f008b25e03a415c5c627218029a0d8a2 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Thu, 14 Jun 2018 16:21:22 -0700 Subject: [PATCH] Added RPM packaging for C++ pulsar client lib (#1963) * Added RPM packaging for C++ pulsar client lib * Generate also pulsar-client-devel package * Added script to generate YUM repo to be published on Apache dist * Added license files into RPM * Fixed license copying order --- pulsar-client-cpp/CMakeLists.txt | 18 +- .../pkg/licenses/LICENSE-boost.txt | 23 ++ .../pkg/licenses/LICENSE-jsoncpp.txt | 55 +++++ .../pkg/licenses/LICENSE-libcurl.txt | 22 ++ .../pkg/licenses/LICENSE-protobuf.txt | 32 +++ .../pkg/licenses/LICENSE-zlib.txt | 23 ++ pulsar-client-cpp/pkg/licenses/LICENSE.txt | 215 ++++++++++++++++++ pulsar-client-cpp/pkg/rpm/.gitignore | 5 + pulsar-client-cpp/pkg/rpm/Dockerfile | 77 +++++++ .../pkg/rpm/SPECS/pulsar-client.spec | 89 ++++++++ .../pkg/rpm/build-docker-image.sh | 21 ++ pulsar-client-cpp/pkg/rpm/build-rpm.sh | 43 ++++ pulsar-client-cpp/pkg/rpm/docker-build-rpm.sh | 28 +++ src/sign-release.sh | 2 + src/stage-release.sh | 43 ++++ 15 files changed, 690 insertions(+), 6 deletions(-) create mode 100644 pulsar-client-cpp/pkg/licenses/LICENSE-boost.txt create mode 100644 pulsar-client-cpp/pkg/licenses/LICENSE-jsoncpp.txt create mode 100644 pulsar-client-cpp/pkg/licenses/LICENSE-libcurl.txt create mode 100644 pulsar-client-cpp/pkg/licenses/LICENSE-protobuf.txt create mode 100644 pulsar-client-cpp/pkg/licenses/LICENSE-zlib.txt create mode 100644 pulsar-client-cpp/pkg/licenses/LICENSE.txt create mode 100644 pulsar-client-cpp/pkg/rpm/.gitignore create mode 100644 pulsar-client-cpp/pkg/rpm/Dockerfile create mode 100644 pulsar-client-cpp/pkg/rpm/SPECS/pulsar-client.spec create mode 100755 pulsar-client-cpp/pkg/rpm/build-docker-image.sh create mode 100755 pulsar-client-cpp/pkg/rpm/build-rpm.sh create mode 100755 pulsar-client-cpp/pkg/rpm/docker-build-rpm.sh create mode 100755 src/stage-release.sh diff --git a/pulsar-client-cpp/CMakeLists.txt b/pulsar-client-cpp/CMakeLists.txt index 38a47742eff66..eafc7207f1ff6 100644 --- a/pulsar-client-cpp/CMakeLists.txt +++ b/pulsar-client-cpp/CMakeLists.txt @@ -94,9 +94,9 @@ else() endif (NOT PROTOBUF_LIBRARIES) find_library(LIB_JSON jsoncpp) - find_library(LOG4CXX_LIBRARY_PATH log4cxx) find_library(CURL_LIBRARY_PATH curl) if (USE_LOG4CXX) + find_library(LOG4CXX_LIBRARY_PATH log4cxx) find_path(LOG4CXX_INCLUDE_PATH log4cxx/logger.h) endif (USE_LOG4CXX) endif (LINK_STATIC) @@ -193,11 +193,6 @@ set(COMMON_LIBS ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARY_PATH} ${PROTOBUF_LIBRARIES} - ${LOG4CXX_LIBRARY_PATH} - ${APR_LIBRARY_PATH} - ${APR_UTIL_LIBRARY_PATH} - ${EXPAT_LIBRARY_PATH} - ${ICONV_LIBRARY_PATH} ${CURL_LIBRARY_PATH} ${ADDITIONAL_LIBRARIES} ${LIB_JSON} @@ -205,6 +200,17 @@ set(COMMON_LIBS pthread ) +if (USE_LOG4CXX) + set(COMMON_LIBS + ${COMMON_LIBS} + ${LOG4CXX_LIBRARY_PATH} + ${APR_LIBRARY_PATH} + ${APR_UTIL_LIBRARY_PATH} + ${EXPAT_LIBRARY_PATH} + ${ICONV_LIBRARY_PATH} + ) +endif () + if(NOT APPLE) set(COMMON_LIBS ${COMMON_LIBS} rt) endif () diff --git a/pulsar-client-cpp/pkg/licenses/LICENSE-boost.txt b/pulsar-client-cpp/pkg/licenses/LICENSE-boost.txt new file mode 100644 index 0000000000000..36b7cd93cdfba --- /dev/null +++ b/pulsar-client-cpp/pkg/licenses/LICENSE-boost.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/pulsar-client-cpp/pkg/licenses/LICENSE-jsoncpp.txt b/pulsar-client-cpp/pkg/licenses/LICENSE-jsoncpp.txt new file mode 100644 index 0000000000000..c41a1d1c77489 --- /dev/null +++ b/pulsar-client-cpp/pkg/licenses/LICENSE-jsoncpp.txt @@ -0,0 +1,55 @@ +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and +The JsonCpp Authors, and is released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. diff --git a/pulsar-client-cpp/pkg/licenses/LICENSE-libcurl.txt b/pulsar-client-cpp/pkg/licenses/LICENSE-libcurl.txt new file mode 100644 index 0000000000000..560a49dcee011 --- /dev/null +++ b/pulsar-client-cpp/pkg/licenses/LICENSE-libcurl.txt @@ -0,0 +1,22 @@ +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2018, Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. diff --git a/pulsar-client-cpp/pkg/licenses/LICENSE-protobuf.txt b/pulsar-client-cpp/pkg/licenses/LICENSE-protobuf.txt new file mode 100644 index 0000000000000..19b305b00060a --- /dev/null +++ b/pulsar-client-cpp/pkg/licenses/LICENSE-protobuf.txt @@ -0,0 +1,32 @@ +Copyright 2008 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Code generated by the Protocol Buffer compiler is owned by the owner +of the input file used when generating it. This code is not +standalone and requires a support library to be linked with it. This +support library is itself covered by the above license. diff --git a/pulsar-client-cpp/pkg/licenses/LICENSE-zlib.txt b/pulsar-client-cpp/pkg/licenses/LICENSE-zlib.txt new file mode 100644 index 0000000000000..cf25d04b7e1d1 --- /dev/null +++ b/pulsar-client-cpp/pkg/licenses/LICENSE-zlib.txt @@ -0,0 +1,23 @@ +zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu diff --git a/pulsar-client-cpp/pkg/licenses/LICENSE.txt b/pulsar-client-cpp/pkg/licenses/LICENSE.txt new file mode 100644 index 0000000000000..9cf470287f9ea --- /dev/null +++ b/pulsar-client-cpp/pkg/licenses/LICENSE.txt @@ -0,0 +1,215 @@ + + 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. + +---------------------------------------------------------------------------------------------------- + +This package is statically linked with libraries with the following licenses: + +MIT: + * Boost https://www.boost.org -- LICENSE-boost.txt + * JsonCpp -- https://github.com/open-source-parsers/jsoncpp -- LICENSE-jsoncpp.txt + * Libcurl -- https://curl.haxx.se -- LICENSE-libcurl.txt + +ZLib -- ZLib license -- LICENSE-zlib.txt + +Protocol buffers -- Protocol Buffers license -- LICENSE-protobuf.txt diff --git a/pulsar-client-cpp/pkg/rpm/.gitignore b/pulsar-client-cpp/pkg/rpm/.gitignore new file mode 100644 index 0000000000000..b77cada7b2abc --- /dev/null +++ b/pulsar-client-cpp/pkg/rpm/.gitignore @@ -0,0 +1,5 @@ +BUILD +BUILDROOT +SOURCES +RPMS +SRPMS \ No newline at end of file diff --git a/pulsar-client-cpp/pkg/rpm/Dockerfile b/pulsar-client-cpp/pkg/rpm/Dockerfile new file mode 100644 index 0000000000000..c321d07b81e54 --- /dev/null +++ b/pulsar-client-cpp/pkg/rpm/Dockerfile @@ -0,0 +1,77 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +# Build pulsar client library in Centos with tools to build static RPM + +FROM centos:7 + +RUN yum update && \ + yum install -y gcc-c++ make cmake git rpm-build \ + python-devel openssl-devel openssl-static + +# Download and compile boost +RUN curl -O -L https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz && \ + tar xvfz boost_1_64_0.tar.gz && \ + cd /boost_1_64_0 && \ + ./bootstrap.sh --with-libraries=program_options,filesystem,regex,thread,system,python && \ + ./b2 address-model=64 cxxflags=-fPIC link=static threading=multi variant=release install && \ + rm -rf /boost_1_64_0.tar.gz /boost_1_64_0 + +RUN curl -O -L https://github.com/Kitware/CMake/archive/v3.8.2.tar.gz && \ + tar xvfz v3.8.2.tar.gz && \ + cd CMake-3.8.2 && \ + ./configure && \ + make && make install && \ + rm -rf /v3.8.2.tar.gz /CMake-3.8.2 + +# Compile JSON CPP +RUN curl -O -L https://github.com/open-source-parsers/jsoncpp/archive/1.8.0.tar.gz && \ + tar xvfz 1.8.0.tar.gz && \ + cd jsoncpp-1.8.0 && \ + cmake . -DCMAKE_POSITION_INDEPENDENT_CODE=ON && \ + make && make install && \ + rm -rf /1.8.0.tar.gz /jsoncpp-1.8.0 + +# Download and copile protoubf +RUN curl -O -L https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz && \ + tar xvfz protobuf-cpp-3.3.0.tar.gz && \ + cd protobuf-3.3.0/ && \ + CXXFLAGS=-fPIC ./configure && \ + make && make install && ldconfig && \ + rm -rf /protobuf-cpp-3.3.0.tar.gz /protobuf-3.3.0 + +# ZLib +RUN curl -O -L https://github.com/madler/zlib/archive/v1.2.11.tar.gz && \ + tar xvfz v1.2.11.tar.gz && \ + cd zlib-1.2.11 && \ + CFLAGS="-fPIC -O3" ./configure && \ + make && make install && \ + rm -rf /zlib-1.2.11.tar.gz /zlib-1.2.11 + +# LibCurl +RUN curl -O -L https://github.com/curl/curl/releases/download/curl-7_54_0/curl-7.54.0.tar.gz && \ + tar xvfz curl-7.54.0.tar.gz && \ + cd curl-7.54.0 && \ + CFLAGS=-fPIC ./configure && \ + make && make install && \ + rm -rf /curl-7.54.0.tar.gz /curl-7.54.0 + +ADD build-rpm.sh / + +RUN yum install -y createrepo diff --git a/pulsar-client-cpp/pkg/rpm/SPECS/pulsar-client.spec b/pulsar-client-cpp/pkg/rpm/SPECS/pulsar-client.spec new file mode 100644 index 0000000000000..56c78391d3449 --- /dev/null +++ b/pulsar-client-cpp/pkg/rpm/SPECS/pulsar-client.spec @@ -0,0 +1,89 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +%define name pulsar-client +%define release 1 +%define buildroot %{_topdir}/%{name}-%{version}-root + +BuildRoot: %{buildroot} +Summary: Apache Pulsar client library +URL: https://pulsar.incubator.apache.org/ +License: Apache License v2 +Name: %{name} +Version: %{version} +Release: %{release} +Source: apache-pulsar-%{pom_version}-src.tar.gz +Prefix: /usr + +%package devel +Summary: Apache Pulsar client library +Provides: pulsar-client-devel + +%description +The Apache Pulsar client contains a C++ and C APIs to interact +with Apache Pulsar brokers. + +%description devel +The Apache Pulsar client contains a C++ and C APIs to interact +with Apache Pulsar brokers. + +The devel package contains C++ and C API headers and `libpulsar.a` +static library. + +%prep +%setup -q -n apache-pulsar-%{pom_version} + +%build +cd pulsar-client-cpp +cmake . -DBUILD_TESTS=OFF -DLINK_STATIC=ON +make pulsarShared pulsarStatic -j 3 + +%install +cd pulsar-client-cpp +INCLUDE_DIR=$RPM_BUILD_ROOT/usr/include +LIB_DIR=$RPM_BUILD_ROOT/usr/lib +DOC_DIR=$RPM_BUILD_ROOT/usr/share/doc/pulsar-client-%{version} +DOC_DEVEL_DIR=$RPM_BUILD_ROOT/usr/share/doc/pulsar-client-devel-%{version} +mkdir -p $INCLUDE_DIR $LIB_DIR $DOC_DIR $DOC_DEVEL_DIR + +cp -ar include/pulsar $INCLUDE_DIR +cp lib/libpulsar.a $LIB_DIR +cp lib/libpulsar.so.%{pom_version} $LIB_DIR + +# Copy LICENSE files +cp ../DISCLAIMER $DOC_DIR +cp ../NOTICE $DOC_DIR +cp pkg/licenses/* $DOC_DIR + +cp $DOC_DIR/* $DOC_DEVEL_DIR/ + +cd $LIB_DIR +ln -s libpulsar.so.%{pom_version} libpulsar.so + +%files +%defattr(-,root,root) +/usr/lib/libpulsar.so +/usr/lib/libpulsar.so.%{pom_version} +/usr/share/doc/pulsar-client-%{version} + +%files devel +%defattr(-,root,root) +/usr/lib/libpulsar.a +/usr/include/pulsar +/usr/share/doc/pulsar-client-devel-%{version} diff --git a/pulsar-client-cpp/pkg/rpm/build-docker-image.sh b/pulsar-client-cpp/pkg/rpm/build-docker-image.sh new file mode 100755 index 0000000000000..72b76c0331dfb --- /dev/null +++ b/pulsar-client-cpp/pkg/rpm/build-docker-image.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +docker build -t apachepulsar/pulsar-build:centos-7 . diff --git a/pulsar-client-cpp/pkg/rpm/build-rpm.sh b/pulsar-client-cpp/pkg/rpm/build-rpm.sh new file mode 100755 index 0000000000000..3541c7942d0c8 --- /dev/null +++ b/pulsar-client-cpp/pkg/rpm/build-rpm.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +set -e + +cd /pulsar +ROOT_DIR=$(git rev-parse --show-toplevel) +cd $ROOT_DIR/pulsar-client-cpp/pkg/rpm + +POM_VERSION=`cat ../../../pom.xml | xmllint --format - | sed "s/xmlns=\".*\"//g" | xmllint --stream --pattern /project/version --debug - | grep -A 2 "matches pattern" | grep text | sed "s/.* [0-9] //g"` + +# Sanitize VERSION by removing `-incubating` since it's not legal in RPM +VERSION=`echo $POM_VERSION | awk -F- '{print $1}'` + +mkdir -p BUILD RPMS SOURCES SPECS SRPMS + +cp $ROOT_DIR/all/target/apache-pulsar-$POM_VERSION-src.tar.gz SOURCES + +rpmbuild -v -bb --clean \ + --define "version $VERSION" \ + --define "pom_version $POM_VERSION" \ + --define "_topdir $PWD" \ + SPECS/pulsar-client.spec + +cd RPMS/x86_64 +createrepo . diff --git a/pulsar-client-cpp/pkg/rpm/docker-build-rpm.sh b/pulsar-client-cpp/pkg/rpm/docker-build-rpm.sh new file mode 100755 index 0000000000000..11b459273f1db --- /dev/null +++ b/pulsar-client-cpp/pkg/rpm/docker-build-rpm.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +set -e + +ROOT_DIR=$(git rev-parse --show-toplevel) + +docker pull apachepulsar/pulsar-build:centos-7 + +docker run -it -v $ROOT_DIR:/pulsar apachepulsar/pulsar-build:centos-7 \ + /build-rpm.sh diff --git a/src/sign-release.sh b/src/sign-release.sh index 8b3d60de69ce8..b26e6439f1482 100755 --- a/src/sign-release.sh +++ b/src/sign-release.sh @@ -18,6 +18,8 @@ # under the License. # +set -e + FILES=$* for FILE in $FILES diff --git a/src/stage-release.sh b/src/stage-release.sh new file mode 100755 index 0000000000000..4c29df5aaf0c6 --- /dev/null +++ b/src/stage-release.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +set -e -x + +if [ $# -eq 0 ]; then + echo "Required argument with destination directory" + exit 1 +fi + +DEST_PATH=$1 + +pushd $(dirname "$0")/.. +PULSAR_PATH=$(git rev-parse --show-toplevel) +VERSION=`cat pom.xml | xmllint --format - | sed "s/xmlns=\".*\"//g" | xmllint --stream --pattern /project/version --debug - | grep -A 2 "matches pattern" | grep text | sed "s/.* [0-9] //g"` +popd + +cp $PULSAR_PATH/all/target/apache-pulsar-$VERSION-src.tar.gz $DEST_PATH +cp $PULSAR_PATH/all/target/apache-pulsar-$VERSION-bin.tar.gz $DEST_PATH + +mkdir $DEST_PATH/RPMS +cp -r $PULSAR_PATH/pulsar-client-cpp/pkg/rpm/RPMS/x86_64/* $DEST_PATH/RPMS + +# Sign all files +cd $DEST_PATH +find . -type f | xargs $PULSAR_PATH/src/sign-release.sh