all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
blob f8ae2d45539b889c21a6aab2c07e5d445cc92f39 5200 bytes (raw)
name: build-aux/msys-to-w32 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
 
#!/bin/sh
# Take a list of MSYS-compatible paths and convert them to native
# MS-Windows format.
# Status is zero if successful, nonzero otherwise.

VERSION='2013-11-09 10:48'; # UTC
# The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook
# do its job.  Otherwise, update this string manually.

# Copyright (C) 2002-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/>.

usage="usage: $0 PATHLIST [MUSTEXIST] [SEPARATOR [SEPARATOR2]]"

help="$usage
  or:  $0 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. Empty paths will be discarded.
2. Backslashes will be replaced by forward slashed.
3. Two consecutive slashes will be replaced by a single one.
4. Each path will be translated to Windows-native format, using
   forward slashes (e.g. 'c:/foo/bar').  This translated path will
   never end with a slash.
5. Ocurrences of SEPARATOR2 withing the paths will be escaped with
   backslashes.
6. Different paths will be separated with SEPARATOR2.

If MUSTEXIST is 'Y' (or not supplied), then each path in PATHLIST must
exists.

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
  --version  output version information and exit

Report bugs to <bug-gnu-emacs@gnu.org>."

version=`expr "$VERSION" : '\([^ ]*\)'`
version="msys-to-w32 $version
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law."

for arg
do
  case $arg in
    --help | --hel | --he | --h)
      exec echo "$help" ;;
    --version | --versio | --versi | --vers | --ver | --ve | --v)
      exec echo "$version" ;;
    --)
      shift
      break ;;
    -*)
      echo "$0: invalid option: $arg" >&2
      exit 1 ;;
    *)
      break ;;
  esac
done

{ test $# -ge 1 && test $# -le 4; } ||
{ echo "$0: $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

# Output pathlist
pathlist2=""

for p in "${patharray[@]}"
do
    # Skip empty paths
    test "$p" = "" && continue

    # Replace '\' with '/', '//' with '/' and remove the final slash
    # (if any).
    p=${p//"\\"/"/"}
    p=${p//\/\//"/"}
    test ${#p} -gt 1 && p=${p%"/"}

    if test -d "$p"
    then
	# The path exists, so just translate it
	p2=`cd "$p" && pwd -W`
    else
	# The path does not exists.  So, try to guess the
	# Windows-native translation

	test "${mustexist}" = "Y" &&
	{ echo "$0: invalid path: $p" >&2; exit 1; }
	
	# Look for the deepest existing directory in this path,
	# testing with partial paths by removing one component from
	# the right side in each iteration
	IFS=/ pcomponents=( $p )
	pa=$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
		# "pa" must be set to the MSYS root directory
		pa="/"
	    else
		pa=${pa%"/${pcomponents[i]}"}
	    fi

	    if test -d "${pa}"
	    then

		# Translate the existing part
		p2=`cd "${pa}" && pwd -W`

		# Remainder
		pb="${p#${pa}}"

		# Concatenate both parts (existing and remainder)
		test "${p2}" = "/" || p2="${p2}/"
		pb=${pb#/}
		p2="${p2}${pb}"

		break
	    fi

	done

	# If no existing directory was found, error out
	test -e "${pa}" ||
	{ echo "$0: invalid path: ${p}" >&2; exit 1; }
    fi

    # Add this translated path to the translated pathlist
    test "${pathlist2}" = "" || pathlist2="${pathlist2}${separator2}"
    pathlist2="${pathlist2}${p2//${separator2}/\\${separator2}}"

done

# Write the translated pathlist to the standard output
printf "${pathlist2}"

## Local Variables:
## eval: (add-hook 'write-file-functions 'time-stamp)
## time-stamp-start: "VERSION='"
## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
## time-stamp-time-zone: "UTC"
## time-stamp-end: "'; # UTC"
## End:

debug log:

solving f8ae2d4 ...
found f8ae2d4 in https://yhetil.org/emacs/CAH8Pv0gZYVJmQVWfwRSdx5Uh3ofERehJiOKeY65=+KSH-ncBRQ@mail.gmail.com/

applying [1/1] https://yhetil.org/emacs/CAH8Pv0gZYVJmQVWfwRSdx5Uh3ofERehJiOKeY65=+KSH-ncBRQ@mail.gmail.com/
diff --git a/build-aux/msys-to-w32 b/build-aux/msys-to-w32
new file mode 100644
index 0000000..f8ae2d4

1:134: trailing whitespace.
	
Checking patch build-aux/msys-to-w32...
Applied patch build-aux/msys-to-w32 cleanly.
warning: 1 line adds whitespace errors.

index at:
100644 f8ae2d45539b889c21a6aab2c07e5d445cc92f39	build-aux/msys-to-w32

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.