[XeTeX] compiling svn on Mac with icc

Jonathan Kew jonathan_kew at sil.org
Sun Mar 18 15:38:39 CET 2007


On 18 Mar 2007, at 12:29 pm, Michael Zedler wrote:

> Hello,
>
> I tried compiling the current SVN version on 10.4.9 with icc 9.1.035.
> Executing
>    export CC=icc
>    export CXX=icpc
>    ./build-xetex
>
> two problems occur:
> 1) Work/texk/xdv2pdf has
>       CXX = c++
>     instead of
>       CXX = icpc
>    and thus the linking stage fails

Ah, that's currently hard-coded in Makefile.in, which it shouldn't  
be. Maybe someone who knows about autoconf and make and all that  
stuff could do some tidying up....

Should be trivial to fix this by hand in your Makefile, as a  
temporary workaround.

>
> 2) Compiling Work/texk/web2c/xetexini.c balks with
> icc -DHAVE_CONFIG_H  -I. -I../../../texk/web2c -I..
> -I../../../texk/web2c/..   -Wall
> -I../../../texk/web2c/../../libs/teckit/source/Public-headers
> -DHAVE_CONFIG_H  -I.
> -I../../../texk/web2c -I.. -I../../../texk/web2c/..   -Wall  - 
> DXETEX_MAC
> -c xetexini.c -o xetexini.o
> xetexcoerce.h(1131): remark #310: old-style parameter list  
> (anachronism)
>    extern strnumber makefullnamestring();
>                     ^

That should be harmless, but you could try patching as follows:

Index: texk/web2c/web2c/coerce.h
===================================================================
--- texk/web2c/web2c/coerce.h   (revision 445)
+++ texk/web2c/web2c/coerce.h   (working copy)
@@ -43,7 +43,7 @@

  #ifdef TeX
  /* Prototypes for source-specials functions... */
-extern strnumber makefullnamestring();
+extern strnumber makefullnamestring(void);
  extern boolean isnewsource P2H(strnumber, int);
  extern poolpointer makesrcspecial P2H(strnumber, int);
  extern void remembersourceinfo P2H(strnumber, int);

The real problem is going to be this:
>
> /opt/intel/cc/9.1.035/include/mmintrin.h(113): error: expected a ")"
>                    char b3, char b2, char b1, char b0);
>                         ^
>
> /opt/intel/cc/9.1.035/include/mmintrin.h(120): error: expected a ")"
>                     char b3, char b2, char b1, char b0);
>                          ^
>
> /opt/intel/cc/9.1.035/include/emmintrin.h(342): error: expected a ")"
>                              char b3, char b2, char b1, char b0);
>                                   ^
>
> /opt/intel/cc/9.1.035/include/emmintrin.h(354): error: expected a ")"
>                               char b3, char b2, char b1, char b0);
>                                    ^
>
> Is this a compiler bug?

I think it's a name clash between the parameter names (b0 .. b3)  
being used in internal icc headers, and preprocessor macros used in  
web2c; you'll find that texmfmem.h includes the lines

#define b0 u.B0
#define b1 u.B1
#define b2 u.B2
#define b3 u.B3

as part of the code used to access the memory_word union from C.

It should be possible to work around this by ensuring that the web2c  
definitions are not in effect at the time the icc headers are read,  
but I'm not going to attempt an actual patch without hands-on access  
to a compiler where I can try things out.

JK



More information about the XeTeX mailing list