>From 26a9a711526ad5d387b2341a4b0ef19e405da9b3 Mon Sep 17 00:00:00 2001 From: Ondrej Oprala Date: Thu, 21 Feb 2013 16:17:14 +0100 Subject: [PATCH] install: check for the existence of a strip program * bootstrap.conf: Add findprog to the list of modules. * src/install.c (main): Check the path for the strip tool if no explicit strip tool is specified, otherwise check the current directory. * tests/install/strip-program.sh: Add a test case to exercise the changes. --- bootstrap.conf | 1 + src/install.c | 25 +++++++++++++++++++++++++ tests/install/strip-program.sh | 8 ++++++++ 3 files changed, 34 insertions(+) diff --git a/bootstrap.conf b/bootstrap.conf index bb6c145..59636e9 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -86,6 +86,7 @@ gnulib_modules=" filemode filenamecat filevercmp + findprog fnmatch-gnu fopen-safer fprintftime diff --git a/src/install.c b/src/install.c index 94374df..02d8c47 100644 --- a/src/install.c +++ b/src/install.c @@ -20,11 +20,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include "system.h" #include "backupfile.h" @@ -32,6 +34,7 @@ #include "cp-hash.h" #include "copy.h" #include "filenamecat.h" +#include "findprog.h" #include "full-read.h" #include "mkancesdirs.h" #include "mkdir-p.h" @@ -968,6 +971,28 @@ main (int argc, char **argv) usage (EXIT_FAILURE); } + if (strip_files) + { + /* if specified with a path. */ + if (strip_program_specified && strchr (strip_program, '/')) + { + struct stat dst_st; + if (lstat (strip_program, &dst_st) == -1) + strip_files = false; + } + else + { + char *path = (char *)find_in_path (strip_program); + if (STREQ (path, strip_program)) + strip_files = false; + else + free (path); + } + if (!strip_files) + error (0, 0, _("WARNING: %s not found - ignoring the -s option"), + quote (strip_program)); + } + if (copy_only_if_needed && extra_mode (mode)) error (0, 0, _("the --compare (-C) option is ignored when you" " specify a mode with non-permission bits")); diff --git a/tests/install/strip-program.sh b/tests/install/strip-program.sh index 8950d50..5d7e16b 100755 --- a/tests/install/strip-program.sh +++ b/tests/install/strip-program.sh @@ -33,4 +33,12 @@ echo aBc > exp || fail=1 ginstall src dest -s --strip-program=./b || fail=1 compare exp dest || fail=1 +#check that only stripping fails with a nonexistent strip program specified +umask 0022 +chmod 600 src +ginstall src dest -s -m 755 --strip-program=./FOO &>/dev/null || fail=1 +exp_perm='-rwxr-xr-x' +dest_perm="$(ls -ld dest|cut -b-10)" +test $exp_perm = $dest_perm || fail=1 + Exit $fail -- 1.7.11.7