#!/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-2024 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 || failextract slackhousekeeping # Apply patches: #if [[ "${ARCH}" =~ (x86_64|aarch64) ]]; then # # Install to lib64 instead of lib. #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. #grep -Flr -- '-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-computed-gotos \ --enable-optimizations \ --with-dbmliborder=gdbm:ndbm \ --with-system-expat \ --with-system-ffi \ --enable-loadable-sqlite-extensions \ --without-ensurepip \ --with-tzpath=/usr/share/zoneinfo \ --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 # PEP says we can claim this link: ( cd $PKG/usr/bin rm -f python ln -vsf python${BRANCH_VERSION} python ) # We don't want a large libpython*.a. find $PKG -name "libpython*.a" -exec rm --verbose "{}" \; # Make sure we have a non-platform-specific site-packages directory: mkdir -vpm755 $PKG/usr/lib/python${BRANCH_VERSION}/site-packages # 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