]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
* lib/mkinstalldirs: Fix support for directory name with spaces if
authorAlexandre Duret-Lutz <adl@gnu.org>
Wed, 29 Jun 2005 21:08:19 +0000 (21:08 +0000)
committerAlexandre Duret-Lutz <adl@gnu.org>
Wed, 29 Jun 2005 21:08:19 +0000 (21:08 +0000)
`mkdir -p' does not work.
* tests/Makefile.am (TESTS): Add mkinst3.test.
* tests/mkinst3.test: New file.
Report from Noah Friedman.

ChangeLog
lib/mkinstalldirs
tests/Makefile.am
tests/Makefile.in
tests/mkinst3.test [new file with mode: 0755]

index 43358e0c5ea5a0319df5d20f1e6486aa9859202b..32d75212daaed496450bf4e91f4c8f060737b4d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2005-06-29  Alexandre Duret-Lutz  <adl@gnu.org>
 
+       * 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.
 
index 7f4333b3137dcca1b5e0dc29dc8cfb3ac0d2ad3d..259dbfcd35789bd0f087803d193cfd924f9a5f34 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # mkinstalldirs --- make directory hierarchy
 
-scriptversion=2005-05-14.22
+scriptversion=2005-06-29.22
 
 # Original author: Noah Friedman <friedman@prep.ai.mit.edu>
 # Created: 1993-05-16
@@ -12,7 +12,7 @@ scriptversion=2005-05-14.22
 # <automake-patches@gnu.org>.
 
 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
 
index 75e92e09b0f8a6f3a56a6de981fc9e3e6be631bc..62e11dbf46f852fee261981b06cae406b5ac073f 100644 (file)
@@ -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 \
index 0c89e00bb06fe7321c82f6f4278092bdf35169ea..130c4a95af02a8e68e2cc2a5d3b4a210f3028092 100644 (file)
@@ -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 (executable)
index 0000000..d55a94d
--- /dev/null
@@ -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'