Greetings,

I have run into a curious issue when trying to build XFree86 (4.4.0 or
4.4.99.13) from source on my i586 Linux system. I have the sinking feeling
that it is an easy problem with an obvious solution, but one that somehow
eludes me.


The symptoms are bizarre. After compilation (apparently without errors) and
installation (make World, make install, make install.man), several key
installed files have zero length - the most critical of which is startx.
If the empty startx is replaced with a valid script, X windows can be
started, but xrdb is inoperative, and some applications (e.g., xmms) will
have "jerky" screen updates - which apparently is caused by the fact that
/etc/X11/locale/locale.dir is empty. Some man pages are also empty
(e.g., /usr/X11R6/man/man1/Xnest.1x has a zero file length).


Acting on the assumption that all these problems are related, I decided
to start by tracking down what was causing the empty Xnest man page. In
my build directory (buildxc), the Makefile
(in buildxc/programs/Xserver/hw/xnest) contains (around line 1060):


Xnest.$(MANNEWSUFFIX)::  Xnest.$(MANSRCSUFFIX)
 $(RM) $@
 sed -e 's/\\$$/\\ /' Xnest.$(MANSRCSUFFIX) | $(RAWCPP)  $(MANDEFS) $(EXTRAMANDEFS) | 
sed -e '/^#  ...


(I have removed the tabs and truncated this very long line for readability).

Now, on my system with my own custom host.def (email me if you need to see
this), the xnest.man build line becomes:


sed -e 's/\\$/\\ /' Xnest.man | gcc -march=i586 -pipe -E -undef -traditional  ...


which FAILS with error "gcc: no input files". Unfortunately, compilation
does not stop with this error and the resulting Xnest._man output is empty.

I do not understand how this is expected to work in the first place
because gcc's man page clearly indicates that the input filename is NOT
optional even when only using the preprocessor via -E (which Xnest's build
uses for macro substitution):


SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] infile...


In order to get the Xnest.man build to work, I have to add the "-" option
to tell gcc to read from standard input:


sed -e 's/\\$/\\ /' Xnest.man | gcc - -march=i586 -pipe -E -undef -traditional  ...


which will then build the desired Xnest._man correctly.


I wonder why my net searches didn't turn up any prior posts on this matter.


Now, I am running a very recent gcc:


[mshell]: gcc --version
gcc (GCC) 3.4.2


But tests with the older gcc 2.96 seem to indicate that it works the same way:

[mshell]: echo "testing" | gcc_296 -E
gcc_296: No input files


[mshell]: echo "testing" | gcc_296 - -E
# 1 ""
testing



What is going wrong with my XFree makefiles and how best do I fix it?

For what it is worth, IMHO, if no input files are given to gcc, it should
assume that input is via stdin. But, this does not appear to be consistent
with GNU's vision of the way gcc should work.



  Thank you in advance,

  Michael Shell
  [EMAIL PROTECTED]
_______________________________________________
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86

Reply via email to