#!/bin/bash ulimit -s unlimited shopt -s extglob # python2.SlackBuild # Heavily based on the original Slackware build script, # Modified by Stuart Winter for ARMedslack. # 24-Jun-2004 # # Copyright 2008, 2009, 2012, 2013, 2016, 2018, 2020 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 # Determine the CFLAGS for the known architectures: # Don't set any SLKCFLAGS here, or OPT="$SLKCFLAGS" before the ./configure. # Python gets the compile options right without any help. case $ARCH in arm|aarch64) export EXTRA_CFLAGS="$SLKCFLAGS" ## Take them from the slackdev config esac # Capitalised source archive name: SRCNAM=Python # 2.6, 2.7 etc: 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/$SRCNAM-$VERSION.tar.!(*sign|*asc|*sig) cd $SRCNAM-*/ || failextract slackhousekeeping # Enable built-in SQLite module to load extensions sed -i "/SQLITE_OMIT_LOAD_EXTENSION/d" setup.py # If there's no pip2 on the system, assume python2 is not installed and # bootstrap from scratch: if [ ! -x /usr/bin/pip2 ]; then # If system we're building on already has Python2 with pip in site-packages, # ignore it and install pip anyway. sed -i 's|\("install",\)|\1 "--ignore-installed",|' Lib/ensurepip/__init__.py ENSUREPIP="--with-ensurepip" else ENSUREPIP="--without-ensurepip" fi # Clean up after the patches: find . -name "*.orig" -exec rm "{}" \; zcat $CWD/python.readline.set_pre_input_hook.diff.gz | patch -p1 --verbose || exit 1 # We don't want a large libpython*.a: zcat $CWD/python.no-static-library.diff.gz | patch -p1 --verbose || exit 1 # Install to lib64 instead of lib and # Python must report /usr/lib64/python2.7/site-packages as python_lib_dir: # This is the same patch as for x86_64 if [ "$SLKPORTARCH" = "aarch64" ]; then zcat $CWD/python.x86_64.diff.gz | patch -p1 --verbose || exit 1 fi # Configure: #OPT="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ --mandir=/usr/man \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --docdir=/usr/doc/${PKGNAM}-$VERSION \ --with-threads \ --with-system-expat \ --with-system-ffi \ --enable-ipv6 \ --enable-shared \ --enable-unicode=ucs4 \ $ENSUREPIP \ --build=${SLK_ARCH_BUILD} || failconfig # Build: make $NUMJOBS || make || failmake # Install into package: make install DESTDIR=$PKG || failinstall # Remove Windows garbage: find $PKG -name "*.exe" -exec rm -f "{}" \; find $PKG -name "*.dll" -exec rm -f "{}" \; # This conflicts with python3. We'll assume the python3 version is more # up-to-date and just get rid of it: rm -f $PKG/usr/bin/2to3 # We don't want these now: rm -f $PKG/usr/bin/python rm -f $PKG/usr/bin/python-config # Don't package this. We want /usr/bin/pip in the main python-pip package to be # the python3 version: rm -f $PKG/usr/bin/pip # It's tempting to get rid of this entirely, but we'll leave the -2.7 versioned # binary: rm -f $PKG/usr/bin/easy_install # Install some python-demo files: mkdir -p $PKG/usr/doc/python2-$VERSION cp -a Demo $PKG/usr/doc/python2-$VERSION # We'll install the python-tools under site-packages: mkdir -p $SITEPK cp -a Tools/* $SITEPK mkdir -p $PKG/usr/doc/python2-$VERSION mv -fv $SITEPK/README $PKG/usr/doc/python2-$VERSION/README.python-tools ( cd $PKG/usr/doc/python2-$VERSION ln -sf $TOOLSDIR Tools ) # Install docs: mkdir -p $PKG/usr/doc/python2-$VERSION/Documentation cp -a README LICENSE $PKG/usr/doc/python2-$VERSION cp -a Misc $PKG/usr/doc/python2-$VERSION tar xf $CWD/python-$VERSION-docs-text.tar.!(*sign|*asc|*sig) mv -fv python-${VERSION}-docs-text/* $PKG/usr/doc/python2-$VERSION/Documentation # Fix possible incorrect permissions: ( cd $PKG find . -type d -exec chmod 755 "{}" \; find . -perm 640 -exec chmod 644 "{}" \; find . -perm 750 -exec chmod 755 "{}" \; ) ( cd $PKG/usr/man if [ -r python${BRANCH_VERSION}.1.gz ] ; then ln -vfs python${BRANCH_VERSION}.1.gz python.1.gz fi ) # If python2 isn't already installed, we need to bootstrap it to the system now: if [ ! -x /usr/bin/pip2 ]; then ( cd $PKG echo "Bootstrapping..." tar cf - . | ( cd / ; tar xf - ) ) fi # Bundle the very last pip for python2: tar xf $CWD/pip-20.3.tar.lz || failextract cd pip-20.3 fix_perms python2 setup.py install --root=$PKG || failinstall # Don't package this. We want /usr/bin/pip in the main python-pip package to be # the python3 version: rm -f $PKG/usr/bin/pip mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION/pip-20.3 cp -a *.txt PKG-INFO README.rst \ $PKG/usr/doc/$PKGNAM-$VERSION/pip-20.3 cd .. # Bundle the very last setuptools for python2: tar xf $CWD/setuptools-44.1.1.tar.lz || failextract cd setuptools-44.1.1 fix_perms # Install setuptools to the system if it's not there: if [ ! -d /usr/lib${LIBDIRSUFFIX}/python2.7/site-packages/setuptools/version.py ]; then python2 setup.py install --root=/ || failinstall fi python2 setup.py install --root=$PKG || failinstall # It's tempting to get rid of this entirely, but we'll leave the -2.7 versioned # binary: rm -f $PKG/usr/bin/easy_install mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION/setuptools-44.1.1 cp -a CHANGES.rst PKG-INFO README.rst docs/*.txt \ $PKG/usr/doc/$PKGNAM-$VERSION/setuptools-44.1.1 # If there's a CHANGES.rst, installing at least part of the recent history # is useful, but don't let it get totally out of control: if [ -r CHANGES.rst ]; then DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION/setuptools-44.1.1) cat CHANGES.rst | head -n 1000 > $DOCSDIR/CHANGES.rst touch -r CHANGES.rst $DOCSDIR/CHANGES.rst fi cd .. # Apply generic Slackware packaging policies: cd $PKG slackstripall # strip all .a archives and all ELFs slack_delete_lafiles # delete usr/lib{,64}/*.la #slackstriprpaths # strip rpaths slackgzpages -i # compress man & info pages and delete usr/info/dir slackslack # chown -R root:root, chmod -R og-w, slackchown, slack644docs 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