80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
# Create macOS wheels for psycopg2
 | 
						|
#
 | 
						|
# Following instructions from https://github.com/MacPython/wiki/wiki/Spinning-wheels
 | 
						|
# Cargoculting pieces of implementation from https://github.com/matthew-brett/multibuild
 | 
						|
 | 
						|
set -euo pipefail
 | 
						|
set -x
 | 
						|
 | 
						|
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 | 
						|
prjdir="$( cd "${dir}/../.." && pwd )"
 | 
						|
 | 
						|
brew install gnu-sed postgresql@13
 | 
						|
 | 
						|
# Start the database for testing
 | 
						|
brew services start postgresql
 | 
						|
 | 
						|
for i in $(seq 10 -1 0); do
 | 
						|
  eval pg_isready && break
 | 
						|
  if [ $i == 0 ]; then
 | 
						|
      echo "PostgreSQL service not ready, giving up"
 | 
						|
      exit 1
 | 
						|
  fi
 | 
						|
  echo "PostgreSQL service not ready, waiting a bit, attempts left: $i"
 | 
						|
  sleep 5
 | 
						|
done
 | 
						|
 | 
						|
# Find psycopg version
 | 
						|
version=$(grep -e ^PSYCOPG_VERSION "${prjdir}/setup.py" | gsed "s/.*'\(.*\)'/\1/")
 | 
						|
# A gratuitous comment to fix broken vim syntax file: '")
 | 
						|
distdir="${prjdir}/dist/psycopg2-$version"
 | 
						|
mkdir -p "$distdir"
 | 
						|
 | 
						|
# Install required python packages
 | 
						|
pip install -U pip wheel delocate
 | 
						|
 | 
						|
# Replace the package name
 | 
						|
if [[ "${PACKAGE_NAME:-}" ]]; then
 | 
						|
    gsed -i "s/^setup(name=\"psycopg2\"/setup(name=\"${PACKAGE_NAME}\"/" \
 | 
						|
        "${prjdir}/setup.py"
 | 
						|
fi
 | 
						|
 | 
						|
# Build the wheels
 | 
						|
wheeldir="${prjdir}/wheels"
 | 
						|
pip wheel -w ${wheeldir} .
 | 
						|
delocate-listdeps ${wheeldir}/*.whl
 | 
						|
 | 
						|
# Check where is the libpq. I'm gonna kill it for testing
 | 
						|
if [[ -z "${LIBPQ:-}" ]]; then
 | 
						|
    export LIBPQ=$(delocate-listdeps ${wheeldir}/*.whl | grep libpq)
 | 
						|
fi
 | 
						|
 | 
						|
delocate-wheel ${wheeldir}/*.whl
 | 
						|
# https://github.com/MacPython/wiki/wiki/Spinning-wheels#question-will-pip-give-me-a-broken-wheel
 | 
						|
delocate-addplat --rm-orig -x 10_9 -x 10_10 ${wheeldir}/*.whl
 | 
						|
cp ${wheeldir}/*.whl ${distdir}
 | 
						|
 | 
						|
# kill the libpq to make sure tests don't depend on it
 | 
						|
mv "$LIBPQ" "${LIBPQ}-bye"
 | 
						|
 | 
						|
# Install and test the built wheel
 | 
						|
pip install ${PACKAGE_NAME:-psycopg2} --no-index -f "$distdir"
 | 
						|
 | 
						|
# Print psycopg and libpq versions
 | 
						|
python -c "import psycopg2; print(psycopg2.__version__)"
 | 
						|
python -c "import psycopg2; print(psycopg2.__libpq_version__)"
 | 
						|
python -c "import psycopg2; print(psycopg2.extensions.libpq_version())"
 | 
						|
 | 
						|
# fail if we are not using the expected libpq library
 | 
						|
# Disabled as we just use what's available on the system on macOS
 | 
						|
# if [[ "${WANT_LIBPQ:-}" ]]; then
 | 
						|
#     python -c "import psycopg2, sys; sys.exit(${WANT_LIBPQ} != psycopg2.extensions.libpq_version())"
 | 
						|
# fi
 | 
						|
 | 
						|
python -c "import tests; tests.unittest.main(defaultTest='tests.test_suite')"
 | 
						|
 | 
						|
# just because I'm a boy scout
 | 
						|
mv "${LIBPQ}-bye" "$LIBPQ"
 |