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

* Makefile.in (msys_to_w32, msys_lisppath_to_w32): Remove.

(msys_w32prefix_subst): Rename from msys_prefix_subst.
Operate on w32prefixpattern.
(epaths-force-w32): Use build-aux/msys-to-w32.

* build-aux/msys-to-w32: New file.
This commit is contained in:
Dani Moncayo 2013-11-19 20:48:50 -05:00 committed by Glenn Morris
parent 826dc7b6b1
commit e976486e7f
3 changed files with 185 additions and 26 deletions

View File

@ -1,3 +1,11 @@
2013-11-20 Dani Moncayo <dmoncayo@gmail.com>
* build-aux/msys-to-w32: New file.
* Makefile.in (msys_to_w32, msys_lisppath_to_w32): Remove.
(msys_w32prefix_subst): Rename from msys_prefix_subst.
Operate on w32prefixpattern.
(epaths-force-w32): Use build-aux/msys-to-w32.
2013-11-17 Paul Eggert <eggert@cs.ucla.edu>
* configure.ac (DEBUGGER_SEES_C_MACROS): Remove.

View File

@ -317,22 +317,9 @@ epaths-force: FRC
-e 's;\(#.*PATH_DOC\).*$$;\1 "${etcdocdir}";') && \
${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
# Convert MSYS-style /x/foo or Windows-style x:\foo file names
# into x:/foo that Windows can grok.
msys_to_w32=sed -e 's,\\\\,/,g' -e 's,^/\([A-Za-z]\)/,\1:/,'
# Transform directory search path and its components. Original can
# be MSYS or Windows style. Set path separator to ";", directory
# separator to "/" and transform MSYS-style "/c/" to "c:/".
# Remove empty path components and escape semicolons.
msys_lisppath_to_w32=sed -e 's,\\\\,/,g' \
-e 's,\(^\|[:;]\)\([A-Za-z]\):/,\1/\2/,g' \
-e 's/:/;/g' -e 's,\(^\|;\)/\([A-Za-z]\)/,\1\2:/,g' \
-e 's/;\+/;/g' -e 's/^;//' -e 's/;$$//' -e 's/;/\\\\;/g'
# Replace "${prefix}" with '%emacs_dir%' (which expands to install
# Replace "${w32prefix}" with '%emacs_dir%' (which expands to install
# directory at runtime).
msys_prefix_subst=sed -e 's!\(^\|;\)'"$${prefixpattern}"'\([;/]\|$$\)!\1%emacs_dir%\2!g'
msys_w32prefix_subst=sed -e 's!\(^\|;\)'"$${w32prefixpattern}"'\([;/]\|$$\)!\1%emacs_dir%\2!g'
# Quote Sed special characters (except backslash and newline) with
# a double backslash.
@ -340,22 +327,21 @@ msys_sed_sh_escape=sed -e 's/[];$$*.^[]/\\\\&/g'
# The w32 build needs a slightly different editing, and it uses
# nt/epaths.nt as the template.
#
# Use the value of ${locallisppath} supplied by `configure',
# to support the --enable-locallisppath argument.
#
# When building with MinGW inside the MSYS tree, 'pwd' produces directories
# relative to the root of the MSYS tree, e.g. '/home/user/foo' instead of
# '/d/MSYS/home/user/foo'. If such a value of srcdir is written to
# src/epaths.h, that causes temacs to fail, because, being a MinGW
# program that knows nothing of MSYS root substitution, it cannot find
# the data directory. "pwd -W" produces Windows-style 'd:/foo/bar'
# absolute directory names, so we use it here to countermand that lossage.
# In this case, the paths written to 'src/epaths.h' must be in native
# MS-Windows format (e.g. 'c:/foo/bar'), because temacs is a MinGW
# program that doesn't support MSYS-style paths (e.g. '/c/foo/bar' or
# '/foo/bar').
epaths-force-w32: FRC
@(w32srcdir=`cd "${srcdir}" && pwd -W` ; \
prefixpattern=`echo '${prefix}' | ${msys_to_w32} | ${msys_sed_sh_escape}` ; \
locallisppath=`echo '${locallisppath}' | ${msys_lisppath_to_w32} | ${msys_prefix_subst}` ; \
@(w32srcdir=`${srcdir}/build-aux/msys-to-w32 "${srcdir}"`; \
w32prefix=`${srcdir}/build-aux/msys-to-w32 "${prefix}" N`; \
w32prefixpattern=`echo "${w32prefix}" | ${msys_sed_sh_escape}` ; \
w32locallisppath=`${srcdir}/build-aux/msys-to-w32 "${locallisppath}" N ":" "\\;" | ${msys_w32prefix_subst}` ; \
sed < ${srcdir}/nt/epaths.nt > epaths.h.$$$$ \
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${locallisppath}"'";' \
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${w32locallisppath}"'";' \
-e '/^.*#/s/@VER@/${version}/g' \
-e '/^.*#/s/@CFG@/${configuration}/g' \
-e "/^.*#/s|@SRC@|$${w32srcdir}|g") && \

165
build-aux/msys-to-w32 Normal file
View File

@ -0,0 +1,165 @@
#!/bin/sh
# Take a list of MSYS-compatible paths and convert them to native
# MS-Windows format.
# Status is zero if successful, nonzero otherwise.
# Copyright (C) 2013 Free Software Foundation, Inc.
# This program 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 3 of the License, or
# (at your option) any later version.
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
# Take only the basename from the full pathname
me=${0//*\//}
usage="usage: ${me} PATHLIST [MUSTEXIST] [SEPARATOR [SEPARATOR2]]"
help="$usage
or: ${me} OPTION
Convert MSYS-compatible paths to MS-Windows native format.
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.
2. Replace backslashes with forward slashes.
3. Replace two consecutive slashes with single ones.
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').
5. Escape with backslashes every ocurrence 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
exist. Otherwise, only some part of each path is required to exist
(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
path.
If SEPARATOR2 is not supplied, it will take the same value as
SEPARATOR.
Options:
--help display this help and exit
Report bugs to <bug-gnu-emacs@gnu.org>."
for arg
do
case $arg in
--help | --hel | --he | --h)
exec echo "$help" ;;
--)
shift
break ;;
-*)
echo "${me}: invalid option: $arg" >&2
exit 1 ;;
*)
break ;;
esac
done
{ test $# -ge 1 && test $# -le 4; } ||
{ 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=""
for p in "${patharray[@]}"
do
# Skip empty paths
test "$p" = "" && continue
# Replace '\' with '/' and '//' with '/'
p="${p//\\//}"
p="${p//\/\///}"
if test -d "$p"
then
# The path exists, so just translate it
w32p=`cd "$p" && pwd -W`
else
# The path does not exists. So, try to guess the
# Windows-native translation, by looking for the deepest
# existing directory in this path, and then translating the
# existing part and concatenating the remainder.
test "${mustexist}" = "Y" &&
{ echo "${me}: invalid path: $p" >&2; exit 1; }
p1=$p
IFS=/ pcomponents=( $p )
for (( i=${#pcomponents[@]}-1 ; i>=0 ; i-- ))
do
if test "${pcomponents[i]}" = ""
then
# 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
# If no existing directory was found, error out
test -e "${p1}" ||
{ echo "${me}: invalid path: ${p}" >&2; exit 1; }
fi
# Concatenate the translated path to the translated pathlist
test "${w32pathlist}" = "" || w32pathlist="${w32pathlist}${separator2}"
w32pathlist="${w32pathlist}${w32p//${separator2}/\\${separator2}}"
done
# Write the translated pathlist to the standard output
printf "${w32pathlist}"