[mercury-users] Installation problem on MacOS X

Fergus Henderson fjh at cs.mu.OZ.AU
Tue Jan 28 16:06:33 AEDT 2003

On 28-Jan-2003, Roy Ward <roy at videoscript.com> wrote:
> Fergus Henderson wrote:
> >I don't know for sure, but my guess is that this problem is due to a change
> >in behaviour in GCC which has been reverted in more recent versions of GCC.
> >In particular, I think the problem is that GCC 3.1 issues a
> >warning when invoked with `-I/usr/local/include',

Sorry, that wasn't it.

> >Could you please post me the `configure.log' and `config.log' files?
> Included.


> There seems to be a lot of "syntax error at '#' token" in config.log

Right.  Now that you've provided the `config.log' file, I see what the
problem is.  The problem is due to us passing `-traditional-cpp'.

#$^#$^% Apple @#^@#$!

Here's the story:

	Once apon a time, Apple decided to make GCC faster.
	To do this, they implemented a so-called "smart" preprocessor
	which was supposed to make things run faster.
	Unfortunately, they did not do a great job of it.
	Although it did make many things run faster,
	for the kind of C code that the Mercury compiler produces,
	the "smart" preprocessor not only ran much slower, and used way
	too much memory -- it also crashed.
	As a result, the Mercury configuration scripts now contain
	code to detect the use of Apple's so-called "smart"
	preprocessor, and to turn it off.

	Even more unfortunately, when Apple first implemented their
	"smart" preprocessor, rather than create a new option for
	disabling it, they decided to recycle an existing option,
	`-traditional-cpp', giving it a new meaning.
	This was a profoundly dumb idea.

	What is happening now is that Apple must now have realized their
	mistake, and given `-traditional-cpp' back its original meaning
	(specifying a K&R style preprocessor rather than an ANSI/ISO C
	preprocessor), instead using `-no-cpp-precomp' to disable the
	"smart" preprocessor.  This change broke the Mercury configure
	script, which uses `-traditional-cpp' with the meaning of
	disabling Apple's broken "smart" preprocessor.

Anyway, the fix is to replace `-traditional-cpp' with `-no-cpp-precomp'
in `aclocal.m4' (and hence in `configure').  It appears that the
`-no-cpp-precomp' option actually works with older versions of Apple's
C compiler too (e.g. "932.1, based on gcc 2.95.2 19991024") --
it just wasn't documented!

I have committed this change to our CVS repository.


	Use `-no-cpp-precomp' rather than `-traditional-cpp' to disable
	Apple's broken C preprocessor.  This is needed for recent releases
	of Apple's version of GCC, because `-traditional-cpp' has reverted
	to its original meaning (specifying a K&R-style preprocessor).

Workspace: /home/ceres/fjh/mercury
Index: aclocal.m4
RCS file: /home/mercury1/repository/mercury/aclocal.m4,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- aclocal.m4	24 Jan 2003 07:17:05 -0000	1.17
+++ aclocal.m4	28 Jan 2003 05:03:45 -0000	1.18
@@ -64,7 +64,7 @@
-AC_MSG_CHECKING(whether C compiler need --traditional-cpp)
+AC_MSG_CHECKING(whether C compiler needs -no-cpp-precomp)
 AC_CACHE_VAL(mercury_cv_cpp_precomp, [
 	if	test "$GCC" = yes &&
@@ -78,7 +78,7 @@
 if test $mercury_cv_cpp_precomp = yes; then
-	CC="$CC --traditional-cpp"
+	CC="$CC -no-cpp-precomp"
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe

More information about the users mailing list