1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-21 06:55:39 +00:00

build-aux/msys-to-w32: simplify the initial interface.

* build-aux/msys-to-w32: simplify the initial over-engineered
interface, and the implementation.
* Makefile.in (epaths-force-w32): Update for the above.
This commit is contained in:
Dani Moncayo 2014-11-08 15:55:09 +01:00
parent c936cbbc83
commit 7c86a2a7d8
3 changed files with 54 additions and 101 deletions

View File

@ -1,3 +1,9 @@
2014-11-08 Dani Moncayo <dmoncayo@gmail.com>
* build-aux/msys-to-w32: simplify the initial over-engineered
interface, and the implementation.
* Makefile.in (epaths-force-w32): Update for the above.
2014-11-05 Glenn Morris <rgm@gnu.org> 2014-11-05 Glenn Morris <rgm@gnu.org>
* Makefile.in (QUIET_SUBMAKE): Remove. * Makefile.in (QUIET_SUBMAKE): Remove.

View File

@ -343,11 +343,11 @@ msys_sed_sh_escape=sed -e 's/[];$$*.^[]/\\\\&/g'
# '/foo/bar'). # '/foo/bar').
epaths-force-w32: epaths-force-w32:
@(w32srcdir=`${srcdir}/build-aux/msys-to-w32 "${srcdir}"`; \ @(w32srcdir=`${srcdir}/build-aux/msys-to-w32 "${srcdir}"`; \
w32prefix=`${srcdir}/build-aux/msys-to-w32 "${prefix}" N`; \ w32prefix=`${srcdir}/build-aux/msys-to-w32 "${prefix}"`; \
w32prefixpattern=`echo "$${w32prefix}" | ${msys_sed_sh_escape}` ; \ w32prefixpattern=`echo "$${w32prefix}" | ${msys_sed_sh_escape}` ; \
w32locallisppath=`${srcdir}/build-aux/msys-to-w32 "${locallisppath}" N ":" "\\;" | ${msys_w32prefix_subst}` ; \ w32locallisppath=`${srcdir}/build-aux/msys-to-w32 "${locallisppath}" | ${msys_w32prefix_subst}` ; \
sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \ sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath}"'";' \ -e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath//;/\\;}"'";' \
-e '/^.*#/s/@VER@/${version}/g' \ -e '/^.*#/s/@VER@/${version}/g' \
-e '/^.*#/s/@CFG@/${configuration}/g' \ -e '/^.*#/s/@CFG@/${configuration}/g' \
-e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \ -e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/bash
# Take a list of MSYS-compatible paths and convert them to native # Take a list of MSYS-compatible paths and convert them to native
# MS-Windows format. # MS-Windows format.
# Status is zero if successful, nonzero otherwise. # Status is zero if successful, nonzero otherwise.
@ -21,36 +21,26 @@
# Take only the basename from the full pathname # Take only the basename from the full pathname
me=${0//*\//} me=${0//*\//}
usage="usage: ${me} PATHLIST [MUSTEXIST] [SEPARATOR [SEPARATOR2]]" usage="usage: ${me} PATHLIST"
help="$usage help="$usage
or: ${me} OPTION or: ${me} OPTION
Convert MSYS-compatible paths to MS-Windows native format. Convert a MSYS path list to 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:
PATHLIST should be a list of paths separated by SEPARATOR. This list
will be written to the standard output after performing the following
transformations:
1. Discard empty paths. 1. Discard empty paths.
2. Replace backslashes with forward slashes. 2. Replace: '\' with '/', '//' with '/' and ':' with ';'.
3. Replace two consecutive slashes with single ones. 3. Translate each path to Windows-native format.
4. Translate to Windows-native format those paths that are not in such
format already. The translated paths will not end with a slash,
except for root directories (e.g. 'c:/' or 'c:/foo'). Paths
starting with '%emacs_dir%' will not be translated.
5. Escape with backslashes every occurrence of SEPARATOR2 within the paths.
6. Concatenate the translated paths with SEPARATOR2.
If MUSTEXIST is 'Y' or not supplied, then each path in PATHLIST must Relative paths or paths starting with '%emacs_dir%' will be passed
exist. Otherwise, only some part of each path is required to exist verbatim to the standard output.
(the deepest existing subpath will be translated and the remainder
concatenated to the translation).
If SEPARATOR is not supplied, PATHLIST will be regarded as a single Each non existing absolute paths will be translated by looking for its
path. deepest existing directory, which will be translated and the remainder
will be appended.
If SEPARATOR2 is not supplied, it will take the same value as
SEPARATOR.
Options: Options:
--help display this help and exit --help display this help and exit
@ -73,98 +63,55 @@ do
esac esac
done done
{ test $# -ge 1 && test $# -le 4; } || [ $# -eq 1 ] || {
{ echo "${me}: $usage" >&2; exit 1; } echo "${me}: $usage" >&2
exit 1
# Arguments }
pathlist="$1"
mustexist="${2:-Y}"
separator="$3"
separator2="${4:-${separator}}"
# Split pathlist into its path components
if test -n "$separator"
then
IFS=${separator} patharray=( $pathlist )
else
patharray=( "$pathlist" )
fi
w32pathlist="" w32pathlist=""
for p in "${patharray[@]}" # Put each MSYS path in one positional parameter and iterate through
# them
IFS=:
set -- $1
for p
do do
# Skip empty paths [ -z "$p" ] && continue
test "$p" = "" && continue
# Replace '\' with '/' and '//' with '/' if [ "${p:0:11}" = "%emacs_dir%" ]
p="${p//\\//}"
p="${p//\/\///}"
if test "${p:0:11}" = "%emacs_dir%"
then then
# Paths starting with "%emacs_dir%" will not be translated
w32p=$p w32p=$p
elif test -d "$p" elif [ "${p:0:1}" != "/" ]
then then
# The path exists, so just translate it w32p=$p
w32p=`cd "$p" && pwd -W` elif [ -d "$p" ]
then
w32p=$(cd "$p" && pwd -W)
else else
# The path does not exist. So, try to guess the # Make some cleanup in the path and look for its deepest
# Windows-native translation, by looking for the deepest # existing directory
# existing directory in this path, and then translating the
# existing part and concatenating the remainder.
test "${mustexist}" = "Y" && p=${p//\\//}
{ echo "${me}: invalid path: $p" >&2; exit 1; } p=${p//\/\///}
p=${p%/}
p1=$p p1=$p
IFS=/ pcomponents=( $p ) while :
for (( i=${#pcomponents[@]}-1 ; i>=0 ; i-- ))
do do
p1=${p1%/*}
if test "${pcomponents[i]}" = "" [ -z "$p1" ] && p1="/" && break
then [ -d "$p1" ] && break
# The path component is empty. This can only mean
# that the path starts with "/" and all components
# have been stripped out already. So in this case we
# want to test with the MSYS root directory
p1="/"
else
p1="${p1%/}"
p1="${p1%${pcomponents[i]}}"
fi
if test -d "${p1}"
then
# Existing path found
# Translate the existing part and concatenate the
# remainder (ensuring that only one slash is used in
# the join, and no trailing slash is left)
w32p1=`cd "${p1}" && pwd -W`
remainder="${p#${p1}}"
remainder="${remainder#/}"
remainder="${remainder%/}"
w32p="${w32p1%/}/${remainder}"
break
fi
done done
# If no existing directory was found, error out # translate the existing part and append the rest
test -e "${p1}" || w32p=$(cd "${p1}" && pwd -W)
{ echo "${me}: invalid path: ${p}" >&2; exit 1; } remainder=${p#$p1}
w32p+=/${remainder#/}
fi fi
# Concatenate the translated path to the translated pathlist w32pathlist="${w32pathlist};${w32p}"
test "${w32pathlist}" = "" || w32pathlist="${w32pathlist}${separator2}"
w32pathlist="${w32pathlist}${w32p//${separator2}/\\${separator2}}"
done done
# Write the translated pathlist to the standard output echo "${w32pathlist:1}"
printf "%s" "${w32pathlist}"