From: Alexandre Duret-Lutz Date: Wed, 29 Jun 2005 21:08:19 +0000 (+0000) Subject: * lib/mkinstalldirs: Fix support for directory name with spaces if X-Git-Tag: Release-1-9b~142 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d3e84e539ad9333eb48a5197b37be1d9b6029b7;p=thirdparty%2Fautomake.git * lib/mkinstalldirs: Fix support for directory name with spaces if `mkdir -p' does not work. * tests/Makefile.am (TESTS): Add mkinst3.test. * tests/mkinst3.test: New file. Report from Noah Friedman. --- diff --git a/ChangeLog b/ChangeLog index 43358e0c5..32d75212d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2005-06-29 Alexandre Duret-Lutz + * lib/mkinstalldirs: Fix support for directory name with spaces if + `mkdir -p' does not work. + * tests/Makefile.am (TESTS): Add mkinst3.test. + * tests/mkinst3.test: New file. + Report from Noah Friedman. + * doc/automake.texi (Include, Extending aclocal): Typos. Report from Karl Berry. diff --git a/lib/mkinstalldirs b/lib/mkinstalldirs index 7f4333b31..259dbfcd3 100755 --- a/lib/mkinstalldirs +++ b/lib/mkinstalldirs @@ -1,7 +1,7 @@ #! /bin/sh # mkinstalldirs --- make directory hierarchy -scriptversion=2005-05-14.22 +scriptversion=2005-06-29.22 # Original author: Noah Friedman # Created: 1993-05-16 @@ -12,7 +12,7 @@ scriptversion=2005-05-14.22 # . errstatus=0 -dirmode="" +dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... @@ -103,13 +103,21 @@ esac for file do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file shift + IFS=$oIFS - pathcomp= for d do - pathcomp="$pathcomp$d" + test "x$d" = x && continue + + pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac @@ -124,7 +132,7 @@ do else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" - lasterr="" + lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then @@ -134,7 +142,7 @@ do fi fi - pathcomp="$pathcomp/" + pathcomp=$pathcomp/ done done diff --git a/tests/Makefile.am b/tests/Makefile.am index 75e92e09b..62e11dbf4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -347,8 +347,9 @@ mdate4.test \ missing.test \ missing2.test \ missing3.test \ -mkinst2.test \ mkinstall.test \ +mkinst2.test \ +mkinst3.test \ mmodely.test \ multlib.test \ nobase.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 0c89e00bb..130c4a95a 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -467,8 +467,9 @@ mdate4.test \ missing.test \ missing2.test \ missing3.test \ -mkinst2.test \ mkinstall.test \ +mkinst2.test \ +mkinst3.test \ mmodely.test \ multlib.test \ nobase.test \ diff --git a/tests/mkinst3.test b/tests/mkinst3.test new file mode 100755 index 000000000..d55a94d2d --- /dev/null +++ b/tests/mkinst3.test @@ -0,0 +1,66 @@ +#! /bin/sh +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Automake is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# Test mkinstalldirs with spaces in directory names. + +. ./defs || exit 1 + +set -e + +# Make sure the directory we will create can be created... +mkdir '~a b' || exit 77 +mkdir '~a b/-x y' || exit 77 +rm -rf '~a b' + +cp "$testsrcdir/../lib/mkinstalldirs" . + +# Test mkinstalldirs with the installed mkdir. + +./mkinstalldirs '~a b/-x y' +test -d '~a b/-x y' +rm -rf '~a b' + +# Trick mkinstalldirs into thinking mkdir does not support -p. + +cat >mkdir <<'EOF' +#!/bin/sh +case "$*" in + *-p*) exit 1;; +esac +PATH=$AM_PATH +export PATH +exec mkdir "$@" +EOF + +chmod +x mkdir +AM_PATH=$PATH +export AM_PATH +PATH=`pwd`:$PATH +export PATH + +# Test mkinstalldirs without mkdir -p. + +./mkinstalldirs '~a b/-x y' +test -d '~a b/-x y' +rm -rf '~a b' + +./mkinstalldirs "`pwd`///~a b//-x y" +test -d "`pwd`/~a b/-x y" +rm -rf '~a b'