David Dawes wrote:
> The patch is necessary for building against freetype 2.1.7, because
> changes in header file names were hidden behind these macros.

BTW, what is this freetype-2.1.7 I keep reading about?

Isn't freetype hosted on SourceForge anymore? The latest version I see
there is 2.1.5. The freetype project moved somewhere else?

> My first question is, do you have a clean 4.3.99.901 tree?

Yup.

> The next question is, is '-I/usr/include -I/usr/include/freetype2' on
> the gcc command lines as it should be?

Yes it is.

> Can you send the actual build log extract for the failing part?

Sure:

#v+
rm -f ftfuncs.o unshared/ftfuncs.o
gcc -c -I/usr/include -I/usr/include/freetype2 -I. -I../../../include/fonts 
-I../include -I../../../exports/include/X11 -I../../../programs/Xserver/include 
-I../../../extras/freetype2/src/truetype -I../../../exports/include -I../../.. 
-I../../../exports/include -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L 
-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE 
-DFUNCPROTO=15 -DNARROWPROTO -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH 
-DXvExtension -DXFree86Server -DXF86VIDMODE -DSMART_SCHEDULE 
-DX_BYTE_ORDER=X_LITTLE_ENDIAN -DXFREE86_FT2 -march=pentium2 -Os -fomit-frame-pointer 
-s -pipe -DNDEBUG -DG_DISABLE_ASSERT -s -z combreloc ftfuncs.c
ftfuncs.c:46:10: #include expects "FILENAME" or <FILENAME>
ftfuncs.c:47:10: #include expects "FILENAME" or <FILENAME>

        [... CUT! Nearly 600 lines ...]

make: *** [ftfuncs.o] Błąd 1
#v-

> Also, check the depend stuff in the Makefile that gets created to
> see which "ft2build.h" file it thinks is getting used.

After "grep ft2build Makefile":

ftfuncs.o: ../include/fontutil.h /usr/include/ft2build.h
ftenc.o: ../include/fontutil.h ../include/fontenc.h /usr/include/ft2build.h
fttools.o: /usr/include/ft2build.h

If I replace the '#include <ft2build.h>' in ftfuncs.c with

#include "/usr/include/ft2build.h"

then it builds well. But if I leave the default '#include <ft2build.h>'
it fails.

But I think I know what's wrong. The gcc manual says:

"Directories named by -I are searched before the standard system include
directories."

So system directories, like /usr/include, have *lowest* priorities.
Anything "blessed" with -I will be checked first. It gets even worse:

"(...) If the directory dir is a standard system include directory, the
option (this means -I) is ignored"

So you can't do anything about it. The *only* way of solving this
would be rearranging xc's includes. If you want gcc to use
/usr/include/ft2build.h you need to make sure that gcc gets absolutely
no -I pointing to a directory with a second "ft2build.h" in it.

This isn't good, is it? It's not only freetype, it can probably happen
to expat, fontconfig etc.

Oh, and the troublemaking ft2build.h is, in this case, located in the
xc/lib/font/FreeType directory (-I .) Once you remove it, it all works.
And now I understand why. Well, this means that to ensure gcc3
compatibility the included external parts, like expat or freetype, would
need to be completely isolated from the build process. gcc should not be
allowed to learn about those includes unless they are really needed.
'cause if gcc finds them, it will use them instead of /usr/include.

> If you can figure out what the problem is and send a patch for it,
> that would be most welcome.  It has to work with older versions of
> flex, as well as lex too.

Someone with flexperience would be needed...

On my config this does nicely:

--- xc/programs/twm/lex.c       2003-12-10 17:10:27.000000000 +0100
+++ xc/programs/twm/lex.c.new   2003-12-10 17:10:47.000000000 +0100
@@ -25,6 +25,8 @@
 
 /* flex integer type definitions */
 
+int yy_prev_more_offset;
+
 #ifndef FLEXINT_H
 #define FLEXINT_H

But it's just a quick&dirty hack if someone (like me) is just interested
in getting a XFree86 release to compile.

I looked a bit at it, and it seems that flex, at least my flex-2.5.31,
uses a /usr/include/FlexLexer.h header. I guess this header needs to be
included in every flexed C source. However, greping twm for "FlexLexer"
yields no results.

But twm/lex.c already includes many, many definitions from FlexLexer.h
(some are still missing, like yy_prev_more_offset). I don't know the
history of flex - this /usr/include/FlexLexer.h is either something
really new, or someone embedded an older FlexLexer.h file in twm sources
long ago (which would explain why there are so many parts of FlexLexer.h
in it).

A good fix would be to kick redundand definitions out of twm/lex.c and
put a "#include <FlexLexer.h>" there instead. But I don't know if it
wouldn't break compatibility with older versions of flex or lex. I never
used flex, so I don't know how to solve this.


Argh, I don't like it. Two problems and I can't fix even a single one.
Oh well, maybe someone else will.

-- 
\hoppke
(Grzegorz "Grażyna" Niewęgłowski)
http://lubuska.zapto.org/~hoppke/
_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to