#!/bin/bash ulimit -s unlimited shopt -s extglob # python3.SlackBuild # Heavily based on the original Slackware build scripts, # Modified by Stuart Winter for Slackware ARM. # # Copyright 2012-2017 Audrius Kažukauskas # Copyright 2017 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Record toolchain & other info for the build log: slackbuildinfo # Paths to skeleton port's source & real Slackware source tree: slackset_var_cwds # Temporary build locations: export TMPBUILD=$TMP/build-$PKGNAM export PKG=$TMP/package-$PKGNAM mkpkgdirs # Delete & re-create temporary directories then cd into $TMPBUILD BRANCH_VERSION=$( echo $VERSION | cut -f 1,2 -d . ) # Location for Python site-packages: SITEPK=$PKG/usr/lib${LIBDIRSUFFIX}/python${BRANCH_VERSION}/site-packages # same as above without $PKG TOOLSDIR=/usr/lib${LIBDIRSUFFIX}/python${BRANCH_VERSION}/site-packages # Extract source: tar xvvf $CWD/Python-$VERSION.tar.!(*sign|*asc|*sig) cd Python-$VERSION || exit 1 slackhousekeeping zcat $CWD/python3.readline.set_pre_input_hook.diff.gz | patch -p1 --verbose || exit 1 # We don't want a large libpython*.a. zcat $CWD/python3.no-static-library.diff.gz | patch -p1 --verbose || exit 1 if [[ "${ARCH}" =~ (x86_64|aarch64) ]]; then # Install to lib64 instead of lib. zcat $CWD/python.sysconfig.py.x86_64.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/python3.distutils.x86_64.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/python3.setup.py.x86_64.diff.gz | patch -p1 --verbose || exit 1 fi # Fix python3 path in cgi.py. sed -i '1s|^#.*/usr/local/bin/python|#!/usr/bin/python3|' Lib/cgi.py # If system we're building on already has Python3 with pip in site-packages, # ignore it and install pip anyway. sed -i 's|\("install",\)|\1 "--ignore-installed",|' Lib/ensurepip/__init__.py # Configure: # Regenerate the configure script and pyconfig.h.in autoconf autoheader # No -O3 thanks. #fgrep -lr -- '-O3 ' . | xargs sed -i 's?-O3 ?-O2 ?g' EXTRA_CFLAGS="-O0 -Wno-cpp" \ CFLAGS="$SLKCFLAGS -D_GNU_SOURCE -fPIC -fwrapv" \ CXXFLAGS="$SLKCFLAGS -D_GNU_SOURCE -fPIC -fwrapv" \ CFLAGS_NODIST="$CFLAGS" \ LDFLAGS="-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -g" \ ./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --with-platlibdir=lib${LIBDIRSUFFIX} \ --mandir=/usr/man \ --docdir=/usr/doc/$PKGNAM-$VERSION \ --enable-ipv6 \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --enable-loadable-sqlite-extensions \ --without-ensurepip \ --host=${SLK_ARCH_HOST} \ --build=${SLK_ARCH_BUILD} || failconfig # Build: make V=1 VERBOSE=1 $NUMJOBS || make V=1 VERBOSE=1 || failmake # Install into package framework: make install DESTDIR=$PKG || failinstall # Remove to avoid overwriting a copy from Python2. rm -f $PKG/usr/bin/2to3 # We'll install the python-tools under site-packages. mkdir -p $SITEPK cp -a Tools/* $SITEPK # Remove DOS batch/exe files. find $PKG \( -name '*.exe' -o -name '*.bat' \) -exec rm -f '{}' \; # Fix permissions on dynamic libraries. find $PKG -type f -perm 555 -exec chmod 755 '{}' \; # Add documentation: mkdir -vpm755 $PKG/usr/doc/$PKGNAM-$VERSION cp -fav \ README.rst LICENSE Misc \ $PKG/usr/doc/$PKGNAM-$VERSION # Delete stuff that we don't need to package: rm -f $PKG/usr/doc/$PKGNAM-$VERSION/Misc/{HISTORY,*.in,*.wpr,python.man,svnmap.txt} mv $SITEPK/README $PKG/usr/doc/$PKGNAM-$VERSION/README.python-tools ( cd $PKG/usr/doc/$PKGNAM-$VERSION ; ln -vsf $TOOLSDIR Tools ) if [ -e "$CWD/python-$VERSION-docs-html.tar.bz2" ]; then tar xf $CWD/python-$VERSION-docs-html.tar.bz2 mv -fv python-$VERSION-docs-html $PKG/usr/doc/$PKGNAM-$VERSION/docs-html fi if [ -e "$CWD/python-$VERSION-docs-text.tar.bz2" ]; then tar xf $CWD/python-$VERSION-docs-text.tar.bz2 mv -fv python-$VERSION-docs-text $PKG/usr/doc/$PKGNAM-$VERSION/docs-text fi #changelogliposuction ChangeLog $PKGNAM $VERSION # Trim down a "ChangeLog" file # Fix possible incorrect permissions. ( cd $PKG find . -type d -exec chmod 755 "{}" \; find . -perm 640 -exec chmod 644 "{}" \; find . -perm 750 -exec chmod 755 "{}" \; ) # Apply generic Slackware packaging policies: cd $PKG slackstripall # strip all .a archives and all ELFs #slackstriprpaths # strip rpaths slack_delete_lafiles # delete usr/lib{,64}/*.la slackgzpages -i # compress man & info pages and delete usr/info/dir slackslack # set standard Slackware file/dir permissions and ownerships slackdesc # install slack-desc and doinst.sh slackmp # run makepkg -l y -c n # Perform any final checks on the package: cd $PKG slackhlinks # search for any hard links