blob: 08eaba9271a3f78573532ed370f954a7fe216035 [file]
#!/usr/bin/env 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 -ex
arch=${1}
source_dir=${2}
build_dir=${3}
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "${script_dir}/python_util.sh"
function check_wheels {
if [[ $(uname) == "Linux" ]]; then
echo "=== Tag $component wheel with manylinux${MANYLINUX_VERSION} ==="
auditwheel repair "$@" -L . -w repaired_wheels --plat manylinux_2_17_${CIBW_ARCHS}
else # macOS
echo "=== Tag $component wheel with macOS ==="
delocate-wheel -v -k -w repaired_wheels "$@"
fi
}
echo "=== Set up platform variables ==="
setup_build_vars "${arch}"
find_drivers "${build_dir}"
# XXX: when we manually retag the wheel, we have to use the right arch
# tag accounting for cross-compiling, hence the replacements
PLAT_NAME=$(python -c "import sysconfig; print(sysconfig.get_platform()\
.replace('-x86_64', '-${PYTHON_ARCH}')\
.replace('-arm64', '-${PYTHON_ARCH}')\
.replace('-universal2', '-${PYTHON_ARCH}'))")
if [[ "${arch}" = "arm64v8" && "$(uname)" = "Darwin" ]]; then
# Manually override the tag in this case - CI will naively generate
# "macosx_10_9_arm64" but this isn't a 'real' tag because the first
# version of macOS supporting AArch64 was macOS 11 Big Sur
PLAT_NAME="macosx_11_0_arm64"
fi
echo "=== Relocating wheels ==="
# https://github.com/pypa/pip/issues/7555
# Get the latest pip so we have in-tree-build by default
python -m pip install --upgrade pip auditwheel 'cibuildwheel>3' delocate setuptools wheel
# Build with Cython debug info
export ADBC_BUILD_TYPE="debug"
for component in $COMPONENTS; do
pushd ${source_dir}/python/$component
echo "=== Clean build artifacts ==="
rm -rf ./build ./dist ./repaired_wheels ./$component/*.so ./$component/*.so.*
echo "=== Check $component version ==="
python $component/_version.py
echo "=== Building $component wheel ==="
# First, create an sdist, which 1) bundles the C++ sources and 2)
# embeds the git tag. cibuildwheel may copy into a Docker
# container during build, but it only copies the package
# directory, which omits the C++ sources and .git directory,
# causing the build to fail.
python setup.py sdist
if [[ "$component" = "adbc_driver_manager" ]]; then
python -m cibuildwheel --output-dir repaired_wheels/ dist/$component-*.tar.gz
for wheel in repaired_wheels/*.whl; do
if [[ "$(uname)" = "Linux" ]]; then
# We only check 2_17, though in principle everything should work on 2014
if ! [[ $(basename "${wheel}") == *manylinux_2_17* ]]; then
echo "Wheel does not support manylinux_2_17: ${wheel}"
exit 1
fi
fi
done
else
python -m pip wheel --no-deps -w dist -vvv .
# Retag the wheel
python "${script_dir}/python_wheel_fix_tag.py" --plat-name="${PLAT_NAME}" dist/$component-*.whl
check_wheels dist/$component-*.whl
fi
popd
done