This is an automated email from the ASF dual-hosted git repository.
xyz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-client-python.git
The following commit(s) were added to refs/heads/main by this push:
new 1554e39 Fixed building of Linux wheel files (#45)
1554e39 is described below
commit 1554e39e105fe80a6427801284a6b11fdc23bff2
Author: Matteo Merli <[email protected]>
AuthorDate: Fri Nov 11 21:00:26 2022 -0800
Fixed building of Linux wheel files (#45)
The current build process for Python wheels is to fetch the RPM packages of
the C++ release and use the `libpulsar.so` from there.
There are some issues due to incompatibilities between different versions
of `libstdc++`, causing segmentation faults. In particular problems with
callbacks and `std::function` objects compiled in different environments.
To avoid these issues, we need to compile the C++ client lib when we're
building the Python wrapper.
---
build-support/copy-deps-versionfile.sh | 1 +
dependencies.yaml | 2 -
pkg/build-wheel-inside-docker.sh | 2 -
pkg/manylinux2014/Dockerfile | 70 +++++++++++++++++++++++++++++++++-
pkg/manylinux_musl/Dockerfile | 68 +++++++++++++++++++++++++++++++++
5 files changed, 138 insertions(+), 5 deletions(-)
diff --git a/build-support/copy-deps-versionfile.sh
b/build-support/copy-deps-versionfile.sh
index 0a36d10..3e42105 100755
--- a/build-support/copy-deps-versionfile.sh
+++ b/build-support/copy-deps-versionfile.sh
@@ -25,5 +25,6 @@ ROOT_DIR=$(git rev-parse --show-toplevel)
for dir in manylinux2014 manylinux_musl; do
mkdir -p pkg/$dir/.build
cp $ROOT_DIR/dependencies.yaml pkg/$dir/.build
+ cp $ROOT_DIR/pulsar-client-cpp-version.txt pkg/$dir/.build
cp $ROOT_DIR/build-support/dep-version.py pkg/$dir/.build
done
diff --git a/dependencies.yaml b/dependencies.yaml
index 262b100..3d76f96 100644
--- a/dependencies.yaml
+++ b/dependencies.yaml
@@ -18,8 +18,6 @@
#
boost: 1.80.0
-
-# Only used for MacOS builds
cmake: 3.24.2
protobuf: 3.20.0
zlib: 1.2.13
diff --git a/pkg/build-wheel-inside-docker.sh b/pkg/build-wheel-inside-docker.sh
index a477b35..09b4304 100755
--- a/pkg/build-wheel-inside-docker.sh
+++ b/pkg/build-wheel-inside-docker.sh
@@ -22,8 +22,6 @@ set -e -x
cd /pulsar-client-python
-build-support/install-cpp-client.sh
-
rm -f CMakeCache.txt CMakeFiles
cmake . \
diff --git a/pkg/manylinux2014/Dockerfile b/pkg/manylinux2014/Dockerfile
index 7355585..70f5e31 100644
--- a/pkg/manylinux2014/Dockerfile
+++ b/pkg/manylinux2014/Dockerfile
@@ -22,7 +22,6 @@ FROM quay.io/pypa/manylinux2014_${ARCH}
ARG PYTHON_VERSION
ARG PYTHON_SPEC
-ARG PLATFORM
ARG ARCH
ENV PYTHON_VERSION=${PYTHON_VERSION}
@@ -36,6 +35,7 @@ ENV PYTHON_LIBRARIES
/opt/python/${PYTHON_SPEC}/lib/python${PYTHON_VERSION}
RUN pip3 install pyyaml
ADD .build/dependencies.yaml /
+ADD .build/pulsar-client-cpp-version.txt /
ADD .build/dep-version.py /usr/local/bin
# Download and compile boost
@@ -54,3 +54,71 @@ RUN CMAKE_VERSION=$(dep-version.py cmake) && \
cp cmake-${CMAKE_VERSION}-linux-${ARCH}/bin/* /usr/bin/ && \
cp -r cmake-${CMAKE_VERSION}-linux-${ARCH}/share/cmake-* /usr/share/ && \
rm -rf cmake-${CMAKE_VERSION}-linux-${ARCH}
cmake-${CMAKE_VERSION}-linux-${ARCH}.tar.gz
+
+# Download and compile protobuf
+RUN PROTOBUF_VERSION=$(dep-version.py protobuf) && \
+ curl -O -L
https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
&& \
+ tar xfz protobuf-cpp-${PROTOBUF_VERSION}.tar.gz && \
+ cd protobuf-${PROTOBUF_VERSION}/ && \
+ CXXFLAGS=-fPIC ./configure && \
+ make -j8 && make install && ldconfig && \
+ rm -rf /protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
/protobuf-${PROTOBUF_VERSION}
+
+# ZLib
+RUN ZLIB_VERSION=$(dep-version.py zlib) && \
+ curl -O -L https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz
&& \
+ tar xfz v${ZLIB_VERSION}.tar.gz && \
+ cd zlib-${ZLIB_VERSION} && \
+ CFLAGS="-fPIC -O3" ./configure && \
+ make -j8 && make install && \
+ rm -rf /v${ZLIB_VERSION}.tar.gz /zlib-${ZLIB_VERSION}
+
+# Zstandard
+RUN ZSTD_VERSION=$(dep-version.py zstd) && \
+ curl -O -L
https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz
&& \
+ tar xfz zstd-${ZSTD_VERSION}.tar.gz && \
+ cd zstd-${ZSTD_VERSION} && \
+ CFLAGS="-fPIC -O3" make -j8 && \
+ make install && \
+ rm -rf /zstd-${ZSTD_VERSION} /zstd-${ZSTD_VERSION}.tar.gz
+
+# Snappy
+RUN SNAPPY_VERSION=$(dep-version.py snappy) && \
+ curl -O -L
https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz && \
+ tar xfz ${SNAPPY_VERSION}.tar.gz && \
+ cd snappy-${SNAPPY_VERSION} && \
+ CXXFLAGS="-fPIC -O3" cmake . -DSNAPPY_BUILD_TESTS=OFF
-DSNAPPY_BUILD_BENCHMARKS=OFF && \
+ make -j8 && make install && \
+ rm -rf /snappy-${SNAPPY_VERSION} /${SNAPPY_VERSION}.tar.gz
+
+RUN OPENSSL_VERSION=$(dep-version.py openssl) && \
+ OPENSSL_VERSION_UNDERSCORE=$(echo $OPENSSL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/openssl/openssl/archive/OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
&& \
+ tar xfz OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz && \
+ cd openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}/ && \
+ ./config -fPIC --prefix=/usr/local/ssl/ && \
+ make -j8 && make install && \
+ rm -rf /OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
/openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}
+
+ENV LD_LIBRARY_PATH /usr/local/ssl/lib/:/usr/local/lib
+ENV OPENSSL_ROOT_DIR /usr/local/ssl/
+
+# LibCurl
+RUN CURL_VERSION=$(dep-version.py curl) && \
+ CURL_VERSION_UNDERSCORE=$(echo $CURL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/curl/curl/releases/download/curl-${CURL_VERSION_UNDERSCORE}/curl-${CURL_VERSION}.tar.gz
&& \
+ tar xfz curl-${CURL_VERSION}.tar.gz && \
+ cd curl-${CURL_VERSION} && \
+ CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ --without-zstd && \
+ make -j8 && make install && \
+ rm -rf /curl-${CURL_VERSION}.tar.gz /curl-${CURL_VERSION}
+
+# Pulsar client C++
+RUN PULSAR_CPP_VERSION=$(cat pulsar-client-cpp-version.txt | xargs) && \
+ curl -O -L
https://archive.apache.org/dist/pulsar/pulsar-client-cpp-${PULSAR_CPP_VERSION}/apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}.tar.gz
&& \
+ tar xfz apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}.tar.gz && \
+ cd apache-pulsar-client-cpp-${PULSAR_CPP_VERSION} && \
+ cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF
-DBUILD_STATIC_LIB=OFF -DLINK_STATIC=ON && \
+ make -j8 && \
+ make install && \
+ rm -rf apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}
apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}.tar.gz
diff --git a/pkg/manylinux_musl/Dockerfile b/pkg/manylinux_musl/Dockerfile
index f402bec..796d355 100644
--- a/pkg/manylinux_musl/Dockerfile
+++ b/pkg/manylinux_musl/Dockerfile
@@ -38,6 +38,7 @@ RUN pip install pyyaml
RUN apk add cmake
ADD .build/dependencies.yaml /
+ADD .build/pulsar-client-cpp-version.txt /
ADD .build/dep-version.py /usr/local/bin
# Download and compile boost
@@ -51,3 +52,70 @@ RUN BOOST_VERSION=$(dep-version.py boost) && \
rm -rf /boost_${BOOST_VERSION_UNDESRSCORE}.tar.gz
/boost_${BOOST_VERSION_UNDESRSCORE}
+# Download and compile protobuf
+RUN PROTOBUF_VERSION=$(dep-version.py protobuf) && \
+ curl -O -L
https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
&& \
+ tar xfz protobuf-cpp-${PROTOBUF_VERSION}.tar.gz && \
+ cd protobuf-${PROTOBUF_VERSION}/ && \
+ CXXFLAGS=-fPIC ./configure && \
+ make -j8 && make install && \
+ rm -rf /protobuf-cpp-${PROTOBUF_VERSION}.tar.gz
/protobuf-${PROTOBUF_VERSION}
+
+# ZLib
+RUN ZLIB_VERSION=$(dep-version.py zlib) && \
+ curl -O -L https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz
&& \
+ tar xfz v${ZLIB_VERSION}.tar.gz && \
+ cd zlib-${ZLIB_VERSION} && \
+ CFLAGS="-fPIC -O3" ./configure && \
+ make -j8 && make install && \
+ rm -rf /v${ZLIB_VERSION}.tar.gz /zlib-${ZLIB_VERSION}
+
+# Zstandard
+RUN ZSTD_VERSION=$(dep-version.py zstd) && \
+ curl -O -L
https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz
&& \
+ tar xfz zstd-${ZSTD_VERSION}.tar.gz && \
+ cd zstd-${ZSTD_VERSION} && \
+ CFLAGS="-fPIC -O3" make -j8 && \
+ make install && \
+ rm -rf /zstd-${ZSTD_VERSION} /zstd-${ZSTD_VERSION}.tar.gz
+
+# Snappy
+RUN SNAPPY_VERSION=$(dep-version.py snappy) && \
+ curl -O -L
https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz && \
+ tar xfz ${SNAPPY_VERSION}.tar.gz && \
+ cd snappy-${SNAPPY_VERSION} && \
+ CXXFLAGS="-fPIC -O3" cmake . -DSNAPPY_BUILD_TESTS=OFF
-DSNAPPY_BUILD_BENCHMARKS=OFF && \
+ make -j8 && make install && \
+ rm -rf /snappy-${SNAPPY_VERSION} /${SNAPPY_VERSION}.tar.gz
+
+RUN OPENSSL_VERSION=$(dep-version.py openssl) && \
+ OPENSSL_VERSION_UNDERSCORE=$(echo $OPENSSL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/openssl/openssl/archive/OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
&& \
+ tar xfz OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz && \
+ cd openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}/ && \
+ ./config -fPIC --prefix=/usr/local/ssl/ && \
+ make -j8 && make install && \
+ rm -rf /OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz
/openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}
+
+ENV LD_LIBRARY_PATH /usr/local/ssl/lib/:/usr/local/lib
+ENV OPENSSL_ROOT_DIR /usr/local/ssl/
+
+# LibCurl
+RUN CURL_VERSION=$(dep-version.py curl) && \
+ CURL_VERSION_UNDERSCORE=$(echo $CURL_VERSION | sed 's/\./_/g') && \
+ curl -O -L
https://github.com/curl/curl/releases/download/curl-${CURL_VERSION_UNDERSCORE}/curl-${CURL_VERSION}.tar.gz
&& \
+ tar xfz curl-${CURL_VERSION}.tar.gz && \
+ cd curl-${CURL_VERSION} && \
+ CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ --without-zstd && \
+ make -j8 && make install && \
+ rm -rf /curl-${CURL_VERSION}.tar.gz /curl-${CURL_VERSION}
+
+# Pulsar client C++
+RUN PULSAR_CPP_VERSION=$(cat pulsar-client-cpp-version.txt | xargs) && \
+ curl -O -L
https://archive.apache.org/dist/pulsar/pulsar-client-cpp-${PULSAR_CPP_VERSION}/apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}.tar.gz
&& \
+ tar xfz apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}.tar.gz && \
+ cd apache-pulsar-client-cpp-${PULSAR_CPP_VERSION} && \
+ cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF
-DBUILD_STATIC_LIB=OFF -DLINK_STATIC=ON && \
+ make -j8 && \
+ make install && \
+ rm -rf apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}
apache-pulsar-client-cpp-${PULSAR_CPP_VERSION}.tar.gz