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 <[email protected]> Peter Rosin <[email protected]> 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 <[email protected]>. # # 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" + +:
