This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: gcc-3.2 -MD -o misbehaviour


On 14 Oct 2002, Neil Booth <neil@daikokuya.co.uk> wrote:
> Martin Pool wrote:-
> 
> > The manual from Debian Sid's gcc-3.2 (3.2.1-0pre3) says
> > 
> >      If `-MD' is used in conjunction with `-E', any `-o' switch is
> >      understood to specify the dependency output file (but *note
> >      -MF::), but if used without `-E', each `-o' is understood to
> >      specify a target object file.
> > 
> > But this doesn't happen:
> > 
> >     !1169 15:18 /tmp/test% ls -l
> >     total 4
> >     -rw-r--r--    1 mbp      mbp            76 2002-10-02 14:44 hello.c
> >     !1171 15:18 /tmp/test% gcc-3.2 -MD -E -o hello.out hello.c
> >     !1172 15:18 /tmp/test% ls -la
> >     total 80
> >     drwxr-xr-x    2 mbp      mbp          4096 2002-10-02 15:18 .
> >     drwxrwxrwt   15 root     root        49152 2002-10-02 15:17 ..
> >     -rw-r--r--    1 mbp      mbp            76 2002-10-02 14:44 hello.c
> >     -rw-r--r--    1 mbp      mbp           536 2002-10-02 15:18 hello.d
> >     -rw-r--r--    1 mbp      mbp         18019 2002-10-02 15:18 hello.out
> > 
> > Actually I'm glad, this doesn't work.  Overriding -o to specify the
> > destination of dependency output seems needlessly complex since there
> > is already -MF.  Personally I'd prefer you pull this out of the
> > documentation rather than making -o actually specify the output file.
> 
> Yeah, it's a doc bug.  The behaviour of -M and -MD with or without -o
> and/or -E is kinda complicated and is different for almost each case; but
> I believe that gcc != 3.0.x all agree behaviour, and there is some kind
> of coherent underlying logic though it may not be obvious.  I spent ages
> with Chris Demetriou sorting this mess out.

I would very much like you to keep it working as it actually does in
3.2, rather than as documented.  

At the risk of flogging a dead horse, here are some reasons against
making -o specify the dependency output:

 - This breaks existing behaviour which distcc and possibly other
   programs or Makefiles depend upon.

 - Doing it that way denies a useful behaviour (producing both
   preprocessed source and dependencies), without adding anything
   useful in return.
 
 - The distcc client needs to generate both preprocessed source and
   dependencies, if the user wants dependencies.  If "-MD -E" causes
   preprocessed output to go nowhere, then apparently the only
   possibility is to call gcc twice, which is wasteful.  I think
   distcc is a useful program, and will be better in the
   future, so I hope the gcc team might pay a little attention to not
   breaking it.  (I realize it's not your most important customer.)

 - The "intention" of the -MD option, as far as I can see, is to turn
   on a side-effect of cpp, rather than changing the whole action of
   the compiler (as -E does).  To me (ignorant of the internals),
   generating dependencies as a side-effect makes a lot of sense.
   Interfering with -o changes the whole feeling of the thing.  Making
   it sometimes a sideeffect and sometimes not sounds crazy.

-- 
Martin					Discontent Provider
(please cc me on replies)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]