mirror of
				https://github.com/psycopg/psycopg2.git
				synced 2025-10-30 23:37:29 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Build psycopg2-binary wheel packages for Apple M1 (cpNNN-macosx_arm64)
 | |
| #
 | |
| # This script is designed to run on Scaleway Apple Silicon machines.
 | |
| #
 | |
| # The script cannot be run as sudo (installing brew fails), but requires sudo,
 | |
| # so it can pretty much only be executed by a sudo user as it is.
 | |
| 
 | |
| set -euo pipefail
 | |
| # set -x
 | |
| 
 | |
| python_versions="3.8.18 3.9.18 3.10.13 3.11.6 3.12.0"
 | |
| pg_version=16
 | |
| 
 | |
| function log {
 | |
|     echo "$@" >&2
 | |
| }
 | |
| 
 | |
| # Move to the root of the project
 | |
| dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 | |
| cd "${dir}/../../"
 | |
| 
 | |
| # Add /usr/local/bin to the path. It seems it's not, in non-interactive sessions
 | |
| if ! (echo $PATH | grep -q '/usr/local/bin'); then
 | |
|     export PATH=/usr/local/bin:$PATH
 | |
| fi
 | |
| 
 | |
| # Install brew, if necessary. Otherwise just make sure it's in the path
 | |
| if [[ -x /opt/homebrew/bin/brew ]]; then
 | |
|     eval "$(/opt/homebrew/bin/brew shellenv)"
 | |
| else
 | |
|     log "installing brew"
 | |
|     command -v brew > /dev/null || (
 | |
|         # Not necessary: already installed
 | |
|         # xcode-select --install
 | |
|         NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL \
 | |
|             https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
 | |
|     )
 | |
|     eval "$(/opt/homebrew/bin/brew shellenv)"
 | |
| fi
 | |
| 
 | |
| export PGDATA=/opt/homebrew/var/postgresql@${pg_version}
 | |
| 
 | |
| # Install PostgreSQL, if necessary
 | |
| command -v pg_config > /dev/null || (
 | |
|     log "installing postgres"
 | |
|     brew install postgresql@${pg_version}
 | |
| )
 | |
| 
 | |
| # Starting from PostgreSQL 15, the bin path is not in the path.
 | |
| export PATH="$(ls -d1 /opt/homebrew/Cellar/postgresql@${pg_version}/*/bin):$PATH"
 | |
| 
 | |
| # Make sure the server is running
 | |
| 
 | |
| # Currently not working
 | |
| # brew services start postgresql@${pg_version}
 | |
| 
 | |
| if ! pg_ctl status; then
 | |
|     log "starting the server"
 | |
|     pg_ctl -l "/opt/homebrew/var/log/postgresql@${pg_version}.log" start
 | |
| fi
 | |
| 
 | |
| 
 | |
| # Install the Python versions we want to build
 | |
| for ver3 in $python_versions; do
 | |
|     ver2=$(echo $ver3 | sed 's/\([^\.]*\)\(\.[^\.]*\)\(.*\)/\1\2/')
 | |
|     command -v python${ver2} > /dev/null || (
 | |
|         log "installing Python $ver3"
 | |
|         (cd /tmp &&
 | |
|             curl -fsSl -O \
 | |
|                 https://www.python.org/ftp/python/${ver3}/python-${ver3}-macos11.pkg)
 | |
|         sudo installer -pkg /tmp/python-${ver3}-macos11.pkg -target /
 | |
|     )
 | |
| done
 | |
| 
 | |
| # Create a virtualenv where to work
 | |
| if [[ ! -x .venv/bin/python ]]; then
 | |
|     log "creating a virtualenv"
 | |
|     python3 -m venv .venv
 | |
| fi
 | |
| 
 | |
| log "installing cibuildwheel"
 | |
| source .venv/bin/activate
 | |
| pip install cibuildwheel
 | |
| 
 | |
| log "building wheels"
 | |
| 
 | |
| # Build the binary packages
 | |
| export CIBW_PLATFORM=macos
 | |
| export CIBW_ARCHS=arm64
 | |
| export CIBW_BUILD='cp{38,39,310,311,312}-*'
 | |
| export CIBW_TEST_COMMAND='python -c "import tests; tests.unittest.main(defaultTest=\"tests.test_suite\")"'
 | |
| 
 | |
| export PSYCOPG2_TESTDB=postgres
 | |
| export PYTHONPATH=$(pwd)
 | |
| 
 | |
| # For some reason, cibuildwheel tests says that psycopg2 is already installed,
 | |
| # refuses to install, then promptly fails import. So, please, seriously,
 | |
| # install this thing.
 | |
| export PIP_FORCE_REINSTALL=1
 | |
| 
 | |
| # Replace the package name
 | |
| sed -i .bak 's/^setup(name="psycopg2"/setup(name="psycopg2-binary"/' setup.py
 | |
| 
 | |
| cibuildwheel
 |