summaryrefslogtreecommitdiffstats
path: root/source/a/pkgtools
diff options
context:
space:
mode:
Diffstat (limited to 'source/a/pkgtools')
-rwxr-xr-xsource/a/pkgtools/pkgtools.SlackBuild2
-rw-r--r--source/a/pkgtools/scripts/installpkg26
-rw-r--r--source/a/pkgtools/scripts/upgradepkg25
3 files changed, 50 insertions, 3 deletions
diff --git a/source/a/pkgtools/pkgtools.SlackBuild b/source/a/pkgtools/pkgtools.SlackBuild
index f0eca6586..c34f82f50 100755
--- a/source/a/pkgtools/pkgtools.SlackBuild
+++ b/source/a/pkgtools/pkgtools.SlackBuild
@@ -30,7 +30,7 @@ PKGNAM=pkgtools
# *** UPDATE THESE WITH EACH BUILD:
VERSION=15.0
ARCH=${ARCH:-noarch}
-BUILD=${BUILD:-40}
+BUILD=${BUILD:-41}
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
# the name of the created package would be, and then exit. This information
diff --git a/source/a/pkgtools/scripts/installpkg b/source/a/pkgtools/scripts/installpkg
index e7fa21c03..ee76cf134 100644
--- a/source/a/pkgtools/scripts/installpkg
+++ b/source/a/pkgtools/scripts/installpkg
@@ -1,7 +1,7 @@
#!/bin/bash
# Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA
# Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA
-# Copyright 2007, 2009, 2011, 2017, 2018, 2019, 2020 Patrick Volkerding, Sebeka, MN, USA
+# Copyright 2007, 2009, 2011, 2017, 2018, 2019, 2020, 2021 Patrick Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -21,6 +21,17 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
+# Thu May 20 18:55:21 UTC 2021
+# Add support for the flag ALWAYS_RUN_INSTALL_SCRIPT in doinst.sh. If it
+# appears, then the install script will always be run, even in the pre-install
+# pass.
+#
+# Wed May 19 18:11:44 UTC 2021
+# Don't run the install script if this is a pre-install pass as indicated by
+# upgradepkg setting PRE_INSTALL_PASS="true". Some of the install scripts can
+# take a significant amount of time to process, and there aren't any known
+# cases where they actually need to be run twice.
+#
# Wed Apr 1 21:59:41 UTC 2020
# If the package contains /install/douninst.sh, copy the uninstall script to
# $ADM_DIR/douninst.sh/$shortname and add the filename to the package list
@@ -667,7 +678,20 @@ EOF
) 9> $INSTLOCKDIR/ldconfig.lock
fi
+ # If we see ALWAYS_RUN_INSTALL_SCRIPT in the install script, then we'll
+ # unset PRE_INSTALL_PASS to ensure that the install script will be run even
+ # in a pre-install pass. We haven't found any case yet where skipping the
+ # install script in the pre-install pass breaks a package upgrade, but we'll
+ # add the ability to not skip it so there's a workaround if any corner cases
+ # emerge. Sorry to violate YAGNI like this. ;-)
if [ -f $ROOT/$INSTDIR/doinst.sh ]; then
+ if grep -q ALWAYS_RUN_INSTALL_SCRIPT $ROOT/$INSTDIR/doinst.sh ; then
+ unset PRE_INSTALL_PASS
+ fi
+ fi
+
+ # Run the install script if one exists and this isn't a pre-install pass:
+ if [ -f $ROOT/$INSTDIR/doinst.sh -a ! "$PRE_INSTALL_PASS" = "true" ]; then
if [ "$MODE" = "install" ]; then
echo "Executing install script for $(basename $package)."
fi
diff --git a/source/a/pkgtools/scripts/upgradepkg b/source/a/pkgtools/scripts/upgradepkg
index d71ca4b03..9ae3ce204 100644
--- a/source/a/pkgtools/scripts/upgradepkg
+++ b/source/a/pkgtools/scripts/upgradepkg
@@ -1,7 +1,7 @@
#!/bin/bash
# Copyright 1999 Patrick Volkerding, Moorhead, Minnesota, USA
# Copyright 2001, 2002, 2003 Slackware Linux, Inc., Concord, California, USA
-# Copyright 2009, 2015 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2009, 2015, 2021 Patrick J. Volkerding, Sebeka, MN, USA
# Copyright 2015 Michal Nazarewicz <mina86@mina86.com>
# All rights reserved.
#
@@ -22,6 +22,11 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
+# Wed May 19 04:46:53 UTC 2021
+# export PRE_INSTALL_PASS="true" if we'll be running installpkg a second time
+# for each package. Perhaps then we could skip some expensive install script
+# functions until the final pass. Thanks to Stuart Winter.
+#
# Mon Jun 4 21:17:58 UTC 2018
# Use /var/lib/pkgtools, not /var/log.
#
@@ -353,7 +358,14 @@ EOF
+==============================================================================
EOF
fi
+
# Next, the new package is pre-installed:
+
+ # Signal to the install script that this is a pre-install, in case it cares:
+ if [ ! "$NOT_PARANOID" = "true" ]; then
+ export PRE_INSTALL_PASS="true"
+ fi
+
if [ "$VERBOSE" = "verbose" ]; then
if ! [ $TERSE ]; then
/sbin/installpkg $INCOMINGDIR/$NNAME
@@ -379,6 +391,17 @@ EOF
RETCODE=$?
fi
fi
+
+ # At this stage, if the operator supplied --no-paranoia, the package
+ # installation process (as far as unpacking content and running setup scripts
+ # is concerned) is complete.
+ # By default there will be a second and final installation pass, and to avoid
+ # executing expensive actions (such as re-generating data files or creating
+ # a large number of symlinks) installpkg skips running the install script on
+ # that first pass. Now we'll unset the PRE_INSTALL_PASS environment variable
+ # so that installpkg will run the install script.
+ unset PRE_INSTALL_PASS
+
# Make sure that worked:
if [ ! $RETCODE = 0 ]; then
echo "ERROR: Package $INCOMINGDIR/$NNAME did not install"