summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-11-12 17:49:31 -0800
committerKarl Berry <karl@freefriends.org>2020-11-12 17:49:31 -0800
commitdb65189f8022ac9084bf9e6a311a42edd175b6be (patch)
tree34b1a9de5e37964ff2a155b1eece7ee7f4674a0e /lib
parent8aa4d93f663a641d3de41cecc5cb93e35381c146 (diff)
downloadautomake-db65189f8022ac9084bf9e6a311a42edd175b6be.tar.gz
install-sh: new option -S SUFFIX for simple file backups.
* lib/install-sh: implement and document -S. Patch sent by Julien Elie: https://lists.gnu.org/archive/html/automake-patches/2018-03/msg00004.html (scriptversion): 2020-11-13.01 * t/install-sh-option-S.sh: new test. * t/list-of-tests.mk (handwritten_tests): add it. * NEWS: mention it.
Diffstat (limited to 'lib')
-rwxr-xr-xlib/install-sh16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/install-sh b/lib/install-sh
index b6d2a909d..bf704a452 100755
--- a/lib/install-sh
+++ b/lib/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2020-11-11.03; # UTC
+scriptversion=2020-11-13.01; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -73,6 +73,7 @@ mode=0755
# This is like GNU 'install' as of coreutils 8.32 (2020).
mkdir_umask=22
+backupsuffix=
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
@@ -110,6 +111,7 @@ Options:
-o USER $chownprog installed files to USER.
-p pass -p to $cpprog.
-s $stripprog installed files.
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
@@ -120,6 +122,8 @@ Environment variables override the default commands:
By default, rm is invoked with -f; when overridden with RMPROG,
it's up to you to specify -f if you want it.
+If -S is not specified, no backups are attempted.
+
Email bug reports to bug-automake@gnu.org.
Automake home page: https://www.gnu.org/software/automake/
"
@@ -152,6 +156,9 @@ while test $# -ne 0; do
-s) stripcmd=$stripprog;;
+ -S) backupsuffix="$2"
+ shift;;
+
-t)
is_target_a_directory=always
dst_arg=$2
@@ -486,6 +493,13 @@ do
then
rm -f "$dsttmp"
else
+ # If $backupsuffix is set, and the file being installed
+ # already exists, attempt a backup. Don't worry if it fails,
+ # e.g., if mv doesn't support -f.
+ if test -n "$backupsuffix" && test -f "$dst"; then
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+ fi
+
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||