#!/usr/bin/env bash # DO NOT use this script manually! Called by docker. set -ex # Print usage and fail. function usage() { echo "Usage: protobuf_optimized_pip.sh PROTOBUF_VERSION" >&2 exit 1 # Causes caller to exit because we use -e. } # Build wheel function build_wheel() { PYTHON_VERSION=$1 PYTHON_BIN=/opt/python/${PYTHON_VERSION}/bin/python $PYTHON_BIN setup.py bdist_wheel --cpp_implementation --compile_static_extension auditwheel repair dist/protobuf-${PROTOBUF_VERSION}-${PYTHON_VERSION}-linux_x86_64.whl } # Validate arguments. if [ $0 != ./protobuf_optimized_pip.sh ]; then echo "Please run this script from the directory in which it is located." >&2 exit 1 fi if [ $# -lt 1 ]; then usage exit 1 fi PROTOBUF_VERSION=$1 PYPI_USERNAME=$2 PYPI_PASSWORD=$3 DIR=${PWD}/'protobuf-python-build' PYTHON_VERSIONS=('cp27-cp27mu' 'cp33-cp33m' 'cp34-cp34m' 'cp35-cp35m' 'cp36-cp36m') mkdir -p ${DIR} cd ${DIR} curl -SsL -O https://github.com/protocolbuffers/protobuf/archive/v${PROTOBUF_VERSION}.tar.gz tar xzf v${PROTOBUF_VERSION}.tar.gz cd $DIR/protobuf-${PROTOBUF_VERSION} # Autoconf on centos 5.11 cannot recognize AC_PROG_OBJC. sed -i '/AC_PROG_OBJC/d' configure.ac sed -i 's/conformance\/Makefile//g' configure.ac # Use the /usr/bin/autoconf and related tools to pick the correct aclocal macros export PATH="/usr/bin:$PATH" # Build protoc ./autogen.sh CXXFLAGS="-fPIC -g -O2" ./configure make -j8 export PROTOC=$DIR/src/protoc cd python for PYTHON_VERSION in "${PYTHON_VERSIONS[@]}" do build_wheel $PYTHON_VERSION done /opt/python/cp27-cp27mu/bin/twine upload wheelhouse/*