diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2013-12-26 00:07:27 +0100 |
---|---|---|
committer | Stefano Lattarini <stefano.lattarini@gmail.com> | 2013-12-26 00:07:27 +0100 |
commit | 222337e60bfc87456773a4c7cbbbd3192fde956d (patch) | |
tree | 4bef40969d4f02c785f08673e7558a3f5c6111e5 /t/install-sh-unittests.sh | |
parent | 6863925ddd92c8f4b44556a2bb32d958d00325ff (diff) | |
download | automake-222337e60bfc87456773a4c7cbbbd3192fde956d.tar.gz |
install-sh: be stricter in catching invalid usages
Such usages (which are rejected by GNU install as well) are:
- options -d and -t used together;
- argument passed to option -t must be a directory;
- if there are two or more SOURCEFILE arguments, the
DESTINATION argument must be a directory.
Note that we still allow the use of options -d and -T together, by
making -d take the precedence; this is for compatibility with GNU
install.
This change fixes, among other things, automake bug#15376.
* lib/install-sh: Adjust.
* t/install-sh-unittests.sh: Enhance.
* NEWS: Update.
* THANKS: Add reporter of bug#15376.
Helped-by: Tobias Hansen <thansen@debian.org>
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Diffstat (limited to 't/install-sh-unittests.sh')
-rw-r--r-- | t/install-sh-unittests.sh | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/t/install-sh-unittests.sh b/t/install-sh-unittests.sh index 8a60d7435..1b85c9ce3 100644 --- a/t/install-sh-unittests.sh +++ b/t/install-sh-unittests.sh @@ -25,26 +25,46 @@ get_shell_script install-sh ./install-sh && exit 1 ./install-sh -m 644 dest && exit 1 -# Directories. +# Incorrect usages. +: > bar +: > baz +: > qux +./install-sh -d -t foo && exit 1 +./install-sh -d -t foo bar && exit 1 +./install-sh -t foo bar && exit 1 +./install-sh bar baz foo && exit 1 +mkdir foo +./install-sh -d -t foo && exit 1 +./install-sh -d -t foo bar && exit 1 +rmdir foo +rm -f bar baz qux -# It should be OK to create no directory. We sometimes need -# this when directory are conditionally defined. -./install-sh -d -# One directory. -./install-sh -d d0 -test -d d0 -# Multiple directories (for make installdirs). -./install-sh -d d1 d2 d3 d4 -test -d d1 -test -d d2 -test -d d3 -test -d d4 -# Subdirectories. -./install-sh -d p1/p2/p3 p4//p5//p6// -test -d p1/p2/p3 -test -d p4/p5/p6 +# Directories. +for opts in '-d' '-d -T' '-T -d' '-d -T -d' '-T -d -T -d -T'; do + # It should be OK to create no directory. We sometimes need + # this when directory are conditionally defined. + ./install-sh $opts + # One directory. + ./install-sh $opts d0 + test -d d0 + # Multiple directories (for make installdirs). + ./install-sh $opts d1 d2 d3 d4 + test -d d1 + test -d d2 + test -d d3 + test -d d4 + rmdir d[0-9] + # Subdirectories. + ./install-sh $opts p1/p2/p3 p4//p5//p6// + test -d p1/p2/p3 + test -d p4/p5/p6 + rmdir p[0-9]/p[0-9]/p[0-9] + rmdir p[0-9]/p[0-9] + rmdir p[0-9] +done # Files. +mkdir d0 d1 d2 d3 d4 : > x ./install-sh -c -m 644 x y test -f x |