Subject: Re: bug#16099: 24.3.50; Build failure, undefined function `cl-member'

From: Dani Moncayo <[email-masked]>
Date: Thu, 12 Dec 2013 20:53:29 +0100

>> >> In that case, 'unmsys--file-name' will not translate the MSYS path
>> >> ("/home/user/...") as expected.
>> >
>> > How is this different from your use case, which is already handled?
>>
>> The difference is this:  I invoke the configure script (from the build
>> dir) using a relative path, which works with the current trunk.  But
>> if someone invokes the configure script using an absolute path which
>> doesn't match the "/c/foo/bar" pattern (e.g.
>> "/home/user-foo/emacs/trunk/configure"), the build will fail.
>
> The "pwd -W" method worked with both.  I understand that the
> msys-to-w32 method broke that.

No, the msys-to-w32 method didn't broke that.  It was at revno 114990
(which is not mine, BTW).

> Then please un-break it.

The attached patch seems to be what you want (I've tested it and works fine).

>> But your way of implementing the translation doesn't work with all
>> types of MSYS paths, as we've already seen.
>
> It isn't supposed to.
>
>> PS: The only "tricky" part of the patch is this:
>>
>>   leimdir=`${srcdir}/../build-aux/msys-to-w32 "${leimdir}"` && \
>>   ${RUN_EMACS} -l international/quail \
>>     --eval "(update-leim-list-file \"$${leimdir}\");"
>>                                                    ^
>>                                                    ^
>>                                                    ^
>> This semicolon does not alter the effect of the lisp expression, but
>> prevents MSYS from altering the argument, since such argument (in the
>> MSYS case) will have a colon ("c:/foo/bar") and that would make MSYS
>> think about it as a list of posix paths which need translation to
>> native windows format.  See the rules in [1].  (This technique has
>> been employed in several points)
>
> I don't think we should rely on such fragility.

Ok, I agree that it is fragile.

I don't like the current approach either, but it seems better that the
above one, yes.

So I'll wait for you to validate the attached patch.

-- 
Dani Moncayo
diff --git a/configure.ac b/configure.ac
index 41258fc..524ee4c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,7 +24,17 @@ dnl  along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 AC_PREREQ(2.65)
 AC_INIT(emacs, 24.3.50)
 
-test "x$MSYSTEM" = "xMINGW32" && . $srcdir/nt/mingw-cfg.site
+if test "x$MSYSTEM" = "xMINGW32"
+then
+   # MSYS-specific processing
+   . $srcdir/nt/mingw-cfg.site
+
+   # Convert srcdir to an absolute MSYS path of the form "/c/foo/bar"
+   # to simplify the conversion of paths to windows-native format
+   # "c:/foo/bar"
+   srcdir=`cd "${srcdir}" && pwd -W`
+   srcdir="/${srcdir:0:1}${srcdir:2}"
+fi
 
 dnl Set emacs_config_options to the options of 'configure', quoted for the shell,
 dnl and then quoted again for a C string.  Separate options with spaces.