automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Make compile wrapper eat win32 paths


From: Ralf Wildenhues
Subject: Re: Make compile wrapper eat win32 paths
Date: Tue, 3 Mar 2009 22:07:45 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

Hi Peter,

* Peter Rosin wrote on Mon, Mar 02, 2009 at 02:16:51PM CET:
> Den 2009-03-01 19:10 skrev Ralf Wildenhues:
>> * Peter Rosin wrote on Sun, Feb 01, 2009 at 08:30:20PM CET:
>>> Constant name 'HASH(0xa2a1ea8)' has invalid characters at ./automake.tmp 
>>> line 293
>>> BEGIN failed--compilation aborted at ./automake.tmp line 293.
>>>
>>> I have no clue as to how to debug that.
>>
>> Please try this patch, report results and the perl version you have,
>> and which email address you want in THANKS.  :-)
>
> Excellent, I can now bootstrap, and I want the email address im using here
> in THANKS.

Cool.  Pushed to master.

> $ perl -V
> Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:

> Regarding the change itself, I haven't found any tests that feeds win32 paths
> to compile. Are there any?

No, not yet.  But now there are.  I've pushed this to both branches;
would be nice if you could test it (but wait until I've got your other
pending patch).

Cheers, and thanks again,
Ralf

2009-03-03  Ralf Wildenhues  <address@hidden>
            Peter Rosin  <address@hidden>

        Fix w32 path handling in the `compile' script.
        * lib/compile: Handle colons and backslashes in win32 paths.
        * tests/compile2.test: New test.
        * tests/Makefile.am: Update.
        Report and initial patch by Peter Rosin.

diff --git a/lib/compile b/lib/compile
index 35af809..af472ac 100755
--- a/lib/compile
+++ b/lib/compile
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand `-c -o'.
 
-scriptversion=2005-05-14.22
+scriptversion=2009-03-03.21
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
+# Foundation, Inc.
 # Written by Tom Tromey <address@hidden>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -102,13 +103,13 @@ if test -z "$ofile" || test -z "$cfile"; then
 fi
 
 # Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
 
 # Create the lock directory.
-# Note: use `[/.-]' here to ensure that we don't use the same name
+# Note: use `[/\\:.-]' here to ensure that we don't use the same name
 # that we are using for the .o file.  Also, base the name on the expected
 # object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
 while true; do
   if mkdir "$lockdir" >/dev/null 2>&1; then
     break
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3a55de0..2d8a974 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -121,6 +121,7 @@ comment8.test \
 comment9.test \
 commen10.test \
 compile.test \
+compile2.test \
 compile_f90_c_cxx.test \
 compile_f_c_cxx.test \
 cond.test \
diff --git a/tests/compile2.test b/tests/compile2.test
new file mode 100755
index 0000000..9f5d7b3
--- /dev/null
+++ b/tests/compile2.test
@@ -0,0 +1,85 @@
+#! /bin/sh
+# Copyright (C) 2009  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, 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/>.
+
+# Make sure `compile' deals correctly with w32 style paths.
+
+. ./defs || Exit 1
+
+set -e
+
+cp "$testsrcdir/../lib/compile" .
+
+cat >mycc <<'END'
+source_seen=no
+for arg
+do
+  test "X$arg" = X-o && exit 1
+  test "X$arg" = "X$amtest_source" && source_seen=yes
+done
+if test "$source_seen" != yes; then
+  echo "$0: no source file seen" >&2
+  exit 1
+fi
+if test ! -f "$amtest_source"; then
+  echo "$0: $amtest_source not readable" >&2
+  exit 1
+fi
+if test ! -d "$amtest_lock"; then
+  echo "$0: no lockdir $amtest_lock" >&2
+  exit 1
+fi
+touch "$amtest_obj"
+END
+
+chmod +x ./mycc
+
+# In case this test runs on a system with backslash directory separators:
+mkdir libltdl libltdl/libltdl
+
+# Backslashes in the input and the output name should be accepted.
+# Since this test might run on non-w32 systems, we need to be careful not
+# to use any backslash sequences which might be interpreted by `echo'.
+amtest_source='libltdl\libltdl\slist.c'
+amtest_object='libtldl\libltdl\libltdl_libltdl_la-slist.obj'
+amtest_obj='slist.o'
+amtest_lock='slist_o.d'
+export amtest_source amtest_object amtest_obj amtest_lock
+
+: > "$amtest_source"
+./compile ./mycc -c "$amtest_source" -o "$amtest_object"
+test -f "$amtest_object"
+
+
+# Absolute w32 paths should be accepted.
+# Do not actually run this test on anything that could be w32.
+test -d "C:\\" && exit 77
+# This test is taken from Autoconf's _AS_PATH_SEPARATOR_PREPARE.
+(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+  (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+    exit 77
+}
+
+amtest_source='C:\libltdl\libltdl\slist.c'
+amtest_object='C:\libtldl\libltdl\libltdl_libltdl_la-slist.obj'
+amtest_obj='slist.o'
+amtest_lock='slist_o.d'
+export amtest_source amtest_object amtest_obj amtest_lock
+
+: > "$amtest_source"
+./compile ./mycc -c "$amtest_source" -o "$amtest_object"
+test -f "$amtest_object"
+
+:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]