1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#!/usr/bin/env bash
set -xe
# A script to build a static readline library for osx
#
# PREREQUESITES:
# - curl
# - wget
# - C/C++ compiler
# - /opt/nrnwheel folder created with access rights (this specific path is kept for consistency wrt `build_wheels.bash`)
set -e
if [[ `uname -s` != 'Darwin' ]]; then
echo "Error: this script is for macOS only. readline is already built statically in the linux Docker images"
exit 1
fi
NRNWHEEL_DIR=/opt/nrnwheel
if [[ ! -d "$NRNWHEEL_DIR" || ! -x "$NRNWHEEL_DIR" ]]; then
echo "Error: /opt/nrnwheel must exist and be accessible, i.e: sudo mkdir -p /opt/nrnwheel && sudo chown -R $USER /opt/nrnwheel"
exit 1
fi
# Set MACOSX_DEPLOYMENT_TARGET based on wheel arch.
# For upcoming `universal2` wheels we will consider leveling everything to 11.0.
if [[ `uname -m` == 'arm64' ]]; then
export MACOSX_DEPLOYMENT_TARGET=11.0 # for arm64 we need 11.0
else
export MACOSX_DEPLOYMENT_TARGET=10.9 # for x86_64
fi
(wget http://ftpmirror.gnu.org/ncurses/ncurses-6.4.tar.gz \
&& tar -xvzf ncurses-6.4.tar.gz \
&& cd ncurses-6.4 \
&& ./configure --prefix=/opt/nrnwheel/ncurses --without-shared CFLAGS="-fPIC" \
&& make -j install)
(curl -L -o readline-7.0.tar.gz https://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz \
&& tar -xvzf readline-7.0.tar.gz \
&& cd readline-7.0 \
&& ./configure --prefix=/opt/nrnwheel/readline --disable-shared CFLAGS="-fPIC" \
&& make -j install)
(cd /opt/nrnwheel/readline/lib \
&& ar -x libreadline.a \
&& ar -x ../../ncurses/lib/libncurses.a \
&& ar cq libreadline.a *.o \
&& rm *.o)
RDL_MINOS=`otool -l /opt/nrnwheel/readline/lib/libreadline.a | grep -e "minos \|version " | uniq | awk '{print $2}'`
if [ "$RDL_MINOS" != "$MACOSX_DEPLOYMENT_TARGET" ]; then
echo "Error: /opt/nrnwheel/readline/lib/libreadline.a doesn't match MACOSX_DEPLOYMENT_TARGET ($MACOSX_DEPLOYMENT_TARGET)"
exit 1
fi
echo "Done."
|