]> code.delx.au - gnu-emacs/blobdiff - build-aux/msys-to-w32
build-aux/msys-to-w32: always output absolute paths.
[gnu-emacs] / build-aux / msys-to-w32
index f8c37222889e11754e101f4ca8c499a83df3972c..1f9fda49fff2115f95143895819b35e4ad79c737 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Convert a MSYS path list to Windows-native format.
+# Convert a MSYS path list to absolute, Windows-native format.
 # Status is zero if successful, nonzero otherwise.
 
 # Copyright (C) 2013-2014 Free Software Foundation, Inc.
@@ -25,20 +25,20 @@ usage="usage: ${me} PATHLIST"
 help="$usage
   or:  ${me} OPTION
 
-Convert a MSYS path list to Windows-native format.
+Convert a MSYS path list to absolute, Windows-native format.
 
 PATHLIST should be a colon-separated list of MSYS paths, which will be
 written to the standard output after performing these transformations:
 
 1. Discard empty paths.
 2. Replace: '\' with '/', '//' with '/' and ':' with ';'.
-3. Translate each path to Windows-native format.
+3. Translate each path to absolute, Windows-native format.
 
-Relative paths or paths starting with '%emacs_dir%' will be passed
-verbatim to the standard output.
+Paths starting with '%emacs_dir%' will be passed verbatim to the
+standard output.
 
-Each non existing absolute path will be translated by looking for its
-deepest existing directory, which will be translated and the remainder
+Each non existing path will be translated by looking for its deepest
+existing directory, which will be translated and the remainder
 appended.
 
 Options:
@@ -79,9 +79,6 @@ do
     [ -z "$p" ] && continue
 
     if [ "${p:0:11}" = "%emacs_dir%" ]
-    then
-       w32p=$p
-    elif [ "${p:0:1}" != "/" ]
     then
        w32p=$p
     elif [ -d "$p" ]
@@ -95,17 +92,23 @@ do
        p=${p//\/\///}
        p=${p%/}
 
-       p1=$p
+       p1=$p # last candidate tried
        while :
        do
-           p1=${p1%/*}
-           [ -z "$p1" ] && p1="/" && break
-           [ -d "$p1" ] && break
+           p2=${p1%/*} # next candidate to try
+           [ "$p2" = "$p1" ] && {
+               # No more candidates to try
+               echo "Invalid path '$p'." >&2
+               exit 1
+           }
+           [ -z "$p2" ] && p2="/" && break
+           [ -d "$p2" ] && break
+           p1=$p2
        done
 
        # translate the existing part and append the rest
-       w32p=$(cd "${p1}" && pwd -W)
-       remainder=${p#$p1}
+       w32p=$(cd "${p2}" && pwd -W)
+       remainder=${p#$p2}
        w32p+=/${remainder#/}
     fi