From 3466c4746ad2337c15ad87b4d9eae5919fe22680 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 21 Aug 2016 20:13:26 +0200 Subject: [PATCH] update build script --- README.md | 3 +- build.sh | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++ make.sh | 81 --------------------------- prepare.sh | 56 ------------------- 4 files changed, 158 insertions(+), 139 deletions(-) create mode 100755 build.sh delete mode 100755 make.sh delete mode 100755 prepare.sh diff --git a/README.md b/README.md index ee1f907..647ebc2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ # Build Python environment for OS X -those scripts are used to build the python environment for OML - +Build OS X Python environment for OML, XCode must to be installed. diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..c118a04 --- /dev/null +++ b/build.sh @@ -0,0 +1,157 @@ +#!/bin/bash +cd `dirname $0` +set -e + +BREW="$HOME/.local" +BREW="`pwd`/brew" +PREFIX="`pwd`/dist" +OSXVERSION=10.8 +pyversion=3.5.2 + +export PATH="$BREW/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin" +export HOMEBREW_NO_ANALYTICS=1 +export HOMEBREW_CACHE="$HOME/Library/Caches/Homebrew" + +if [ ! -e $BREW ]; then + mkdir -p $BREW + curl -L https://github.com/Homebrew/homebrew/tarball/master | tar xz --strip 1 -C $BREW +fi +brew update + +function brew_install { + pkg=$1 + brew list | grep -q $pkg || brew install $pkg + brew outdated $pkg || brew upgrade $pkg +} + +brew_install openssl +brew_install sqlite +brew_install xz +brew_install readline + +brew_install libxml2 +brew_install libxslt + +# Python +CPPFLAGS="-I$BREW/opt/openssl/include/openssl" +LDFLAGS="" +for pkg in openssl sqlite readline xz; do + CPPFLAGS="$CPPFLAGS -I$BREW/opt/$pkg/include" + LDFLAGS="$LDFLAGS -L$BREW/opt/$pkg/lib" +done +export CPPFLAGS +export LDFLAGS + +url="https://www.python.org/ftp/python/${pyversion}/Python-${pyversion}.tar.xz" +name=`basename $url .tar.xz` +tar=`basename $url` + +test -e $tar || curl -O $url +test -e $name || tar xf $tar +cd $name +./configure MACOSX_DEPLOYMENT_TARGET=$OSXVERSION --prefix="$PREFIX" +make -j8 +make altinstall + +unset CPPFLAGS +unset LDFLAGS + +ln -sf pip3.5 "$PREFIX/bin/pip" +ln -sf pip3.5 "$PREFIX/bin/pip3" +ln -sf python3.5 "$PREFIX/bin/python3" + +PATH="$PREFIX/bin:$PATH" +hash -r 2>/dev/null + +cd "$BASE" + +curl https://git.0x2620.org/openmedialibrary.git/blob_plain/HEAD:/requirements.txt > requirements.txt +$PREFIX/bin/pip3 install -r requirements.txt + +for lib in \ + opt/libxml2/lib/libxml2.2.dylib \ + opt/libxslt/lib/libexslt.0.dylib \ + opt/libxslt/lib/libxslt.1.dylib \ + opt/openssl/lib/libcrypto.1.0.0.dylib \ + opt/openssl/lib/libssl.1.0.0.dylib \ + opt/readline/lib/libreadline.6.dylib \ + opt/readline/lib/libreadline.6.3.dylib \ + opt/sqlite/lib/libsqlite3.0.dylib \ + opt/xz/lib/liblzma.5.dylib \ +; do + target="$PREFIX/lib/`basename "$lib"`" + rm -f "$target" + cp -a "$BREW/$lib" "$target" +done +chmod -R +rw "$PREFIX/lib" +mkdir -p "$PREFIX/etc/openssl/certs" +cp $BREW/etc/openssl/cert.pem "$PREFIX/etc/openssl" + +# cleanup +rm -rf \ + "$PREFIX/lib/python3.5/test" \ + "$PREFIX/bin/*.py" \ + "$PREFIX/bin/edsig" \ + "$PREFIX/bin/openssl" \ + "$PREFIX/etc/openssl/man" \ + "$PREFIX/bin/c_rehash" \ + "$PREFIX/bin/2to3-3.5" \ + "$PREFIX/bin/easy_install-3.5" \ + "$PREFIX/bin/idle3.5" \ + "$PREFIX/bin/pyvenv-3.5" \ + "$PREFIX/bin/c_rehash" \ + "$PREFIX/bin/pydoc3.5" + +for bin in $PREFIX/bin/pip3.5 $PREFIX/bin/python3.5m-config; do + sed "s#$PREFIX/bin/python3.5#/usr/bin/env python3.5#g" "$bin" > "$bin.t" + mv "$bin.t" "$bin" + chmod +x "$bin" +done + +find "$PREFIX" -d -name "__pycache__" -type d -exec rm -r "{}" \; +find "$PREFIX" -name "*.pyc" -exec rm "{}" \; +find "$PREFIX" -name "*.a" -exec rm -f "{}" \; + +for plib in \ + $PREFIX/lib/python3.5/site-packages/lxml/etree.cpython-35m-darwin.so \ + $PREFIX/lib/python3.5/site-packages/lxml/objectify.cpython-35m-darwin.so \ + $PREFIX/lib/python3.5/lib-dynload/_hashlib.cpython-35m-darwin.so \ + $PREFIX/lib/python3.5/lib-dynload/_lzma.cpython-35m-darwin.so \ + $PREFIX/lib/python3.5/lib-dynload/_sqlite3.cpython-35m-darwin.so \ + $PREFIX/lib/python3.5/lib-dynload/_ssl.cpython-35m-darwin.so \ + $PREFIX/lib/python3.5/lib-dynload/readline.cpython-35m-darwin.so \ +; do + if [ -e "$plib" ]; then + for lib in \ + $BREW/Cellar/libxslt/1.1.28_1/lib/libxslt.1.dylib \ + $BREW/Cellar/openssl/1.0.2d_1/lib/libcrypto.1.0.0.dylib \ + $BREW/opt/libxml2/lib/libxml2.2.dylib \ + $BREW/opt/libxslt/lib/libexslt.0.dylib \ + $BREW/opt/libxslt/lib/libxslt.1.dylib \ + $BREW/opt/openssl/lib/libcrypto.1.0.0.dylib \ + $BREW/opt/openssl/lib/libssl.1.0.0.dylib \ + $BREW/opt/readline/lib/libreadline.6.dylib \ + $BREW/opt/readline/lib/libreadline.6.3.dylib \ + $BREW/opt/sqlite/lib/libsqlite3.0.dylib \ + $BREW/opt/xz/lib/liblzma.5.dylib \ + $PREFIX/lib/libcrypto.1.0.0.dylib \ + $PREFIX/lib/libexslt.0.dylib \ + $PREFIX/lib/liblzma.5.dylib \ + $PREFIX/lib/libreadline.6.dylib \ + $PREFIX/lib/libreadline.6.3.dylib \ + $PREFIX/lib/libsqlite3.0.dylib \ + $PREFIX/lib/libssl.1.0.0.dylib \ + $PREFIX/lib/libxml2.2.dylib \ + $PREFIX/lib/libxslt.1.dylib \ + /usr/lib/libexslt.0.dylib \ + /usr/lib/libreadline.6.dylib \ + /usr/lib/libreadline.6.3.dylib \ + /usr/lib/libxml2.2.dylib \ + /usr/lib/libxslt.1.dylib \ + ; do + name=`basename $lib` + otool -L "$plib" | grep -q "$lib" && install_name_tool -change "$lib" "@executable_path/../lib/$name" "$plib" + done + otool -L "$plib" + fi +done diff --git a/make.sh b/make.sh deleted file mode 100755 index 93e2bf3..0000000 --- a/make.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash -cd `dirname $0` - -target=Darwin -brew=$HOME/.local -python_base=$HOME/python -base=$brew/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5 - -if [ ! -e $python_base ]; then - echo prepare your installation before creating the distributable version - echo read prepare.sh and run it - exit 1 -fi - -rm -rf $target -mkdir -p $target/bin $target/lib $target/include - -for bin in \ - python3 \ - python3.5 \ -; do - cp -a $python_base/bin/$bin $target/bin/$python_bin -done - -for bin in \ - pip3 \ -; do - sed "s/#\!.*python.*/#\!\/usr\/bin\/env python3/g" $brew/bin/$bin > $target/bin/$bin -done - -cp -a $base/lib/python3.5 $target/lib/python3.5 -rm $target/lib/python3.5/site-packages -rsync -a $brew/lib/python3.5/site-packages/ $target/lib/python3.5/site-packages/ -cp -a $base/include/python3.5m $target/include/python3.5m -rm -r $target/lib/python3.5/test -find $target/ -name __pycache__ -type d | xargs rm -r - -for lib in \ - opt/libxml2/lib/libxml2.2.dylib \ - opt/libxslt/lib/libexslt.0.dylib \ - opt/libxslt/lib/libxslt.1.dylib \ - opt/openssl/lib/libcrypto.1.0.0.dylib \ - opt/openssl/lib/libssl.1.0.0.dylib \ - opt/readline/lib/libreadline.6.dylib \ - opt/sqlite/lib/libsqlite3.0.dylib \ - opt/xz/lib/liblzma.5.dylib \ -; do - cp -a $brew/$lib $target/lib/$(basename $lib) -done - -for plib in \ - $target/lib/python3.5/site-packages/lxml/etree.cpython-35m-darwin.so \ - $target/lib/python3.5/site-packages/lxml/objectify.cpython-35m-darwin.so \ - $target/lib/python3.5/lib-dynload/_hashlib.cpython-35m-darwin.so \ - $target/lib/python3.5/lib-dynload/_lzma.cpython-35m-darwin.so \ - $target/lib/python3.5/lib-dynload/_sqlite3.cpython-35m-darwin.so \ - $target/lib/python3.5/lib-dynload/_ssl.cpython-35m-darwin.so \ - $target/lib/python3.5/lib-dynload/readline.cpython-35m-darwin.so \ - $target/lib/libexslt.0.dylib \ - $target/lib/libxslt.1.dylib \ - $target/lib/libcrypto.1.0.0.dylib \ - $target/lib/libssl.1.0.0.dylib \ -; do - for lib in \ - Cellar/libxslt/1.1.28_1/lib/libxslt.1.dylib \ - Cellar/openssl/1.0.2d_1/lib/libcrypto.1.0.0.dylib \ - opt/libxml2/lib/libxml2.2.dylib \ - opt/libxslt/lib/libexslt.0.dylib \ - opt/libxslt/lib/libxslt.1.dylib \ - opt/openssl/lib/libcrypto.1.0.0.dylib \ - opt/openssl/lib/libssl.1.0.0.dylib \ - opt/readline/lib/libreadline.6.dylib \ - opt/sqlite/lib/libsqlite3.0.dylib \ - opt/xz/lib/liblzma.5.dylib \ - ; do - name=$(basename $lib) - fullpath=$brew/$lib - install_name_tool -change "$fullpath" "@rpath/$name" $plib - done - otool -L $plib -done diff --git a/prepare.sh b/prepare.sh deleted file mode 100755 index a505988..0000000 --- a/prepare.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -cd `dirname $0` -set -e - -brew=$HOME/.local -prefix=$HOME/python - -export PATH="$brew/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin" -export HOMEBREW_CACHE="$HOME/Library/Caches/Homebrew" - -if [ ! -e $brew ]; then - mkdir -p $brew - curl -L https://github.com/Homebrew/homebrew/tarball/master | tar xz --strip 1 -C $brew - mkdir -p $brew - mkdir homebrew && curl -L https://github.com/Homebrew/homebrew/tarball/master | tar xz --strip 1 -C $brew - brew update -fi -brew install openssl -brew install sqlite -brew install xz - -brew install python3 -pip3 install --upgrade pip setuptools -brew install libxml2 -brew install libxslt -brew link libxml2 --force -brew link libxslt --force - -curl https://git.0x2620.org/openmedialibrary.git/blob_plain/HEAD:/requirements.txt > requirements.txt -pip3 install -r requirements.txt - -name=Python-3.5.0 -rm -rf $name -tar xf $HOMEBREW_CACHE/python3-3.5.0.tar.xz -cd $name -patch -p1 < $HOMEBREW_CACHE/python3--patch-029cc0dc72b1bcf4ddc5f913cc4a3fd970378073c6355921891f041aca2f8b12.diff - -export PATH="$prefix/bin:$PATH" -CPPFLAGS="-I$brew/opt/openssl/include/openssl" -LDFLAGS="" -for pkg in openssl sqlite readline gdbm xz; do - CPPFLAGS="$CPPFLAGS -I$brew/opt/$pkg/include" - LDFLAGS="$LDFLAGS -L$brew/opt/$pkg/lib" -done -export CPPFLAGS -export LDFLAGS - -./configure \ - --prefix=$prefix \ - --enable-ipv6 \ - --datarootdir=$prefix/share \ - --datadir=$prefix/share \ - --without-gcc MACOSX_DEPLOYMENT_TARGET=10.11 - -make -make install PYTHONAPPSDIR=$prefix