This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


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

RE: Shell avoidance in make-3.79.1-3 !! CORRECTED !! needs attent ion from cygwin MAKE maintainer


Bernard,

God, am I out of it lately.

I never wrote a makefile with the action on the same line as the rule 
target name and colon, even when there were no dependent targets. However, 
the semicolon _is_ what the code in job.c is keying off of, correct?

The problem could be solved by breaking the line, omitting the semicolon 
and thus fitting within make's criteria for a "simple" (directly 
executable) action.

I hope I'm not still off base....

Randall Schulz
Mountain View, CA USA


At 11:28 2001-06-26, Bernard Dautrevaux wrote:
> > -----Original Message-----
> > From: Randall R Schulz [mailto:rrschulz@cris.com]
> > Sent: Tuesday, June 26, 2001 4:26 PM
> > To: cygwin@cygwin.com
> > Subject: Re: Shell avoidance in make-3.79.1-3 [Correction]
> >
> >
> > Earl,
> >
> > I'm guessing it's the semicolon. You found the code where the
> > decision is
> > made, what does it say?
> >
> > But... Following your lead, I looked at ps.c. What a mess.
> >
> > CORRECTION: ... I looked at >>> job.c <<<.
> >
> >
> > Look at line 2414. Search for "sh_chars_sh" which is used to inialize
> > "sh_chars" which is tested on line 2569.
> >
> > Why is the semicolon there in your makefile, anyway?
>
>The semicolon is needed to *introduce* the commands of the rule, otherwise
>ps would be a dependency. The other way to do is replace the semicolon by
>NL/TAB, but I use semicolon myself quite often when the rule is so simple.
>
>Just a thought (I don't have make source available right on): is it possible
>make keeps the semicolon in the rule command?
>
>... searching ... found make-3.79.1 ...
>
>looking at read.c, in read_makefile the semicolon seems to be stripped from
>the command, so that should be OK; there just some bizarre twiddling with
>variable_expands somewhere the first time one set cmdleft, but I take for
>granted it works at least a bit, and as it overwrites the semicolon by a
>NUL,...
>
>To understand more you should try to debug make. Just trying...
>
>$ configure
>         ...
>$ make
>         ...
>$ mkdir TEST
>$ cd TEST
>$ echo "all: ; ps" > Makefile
>$ ../make
>ps
>   PID TTY          TIME CMD
>18681 ttya0    00:00:00 csh
>20969 ttya0    00:00:00 make
>20970 ttya0    00:00:00 ps
>
>Hey!... What's the problem? it works!... Oh wait, I'm working on a Linux box
>here :-) is there a difference under cygwin?
>
>bash-2.05$ mkdir TEST
>bash-2.05$ echo "all: ; ps"
>all: ; ps
>bash-2.05$ echo "all: ; ps" > Makefile
>bash-2.05$ make
>ps
>       PID    PPID    PGID     WINPID TTY  UID    STIME COMMAND
>       159       1     159        159  -1  500 17:37:55 /usr/bin/sh
>       467     159     467        487  -1  500 17:37:58 /usr/bin/bash
>        95     467      95        499  -1  500 17:38:27 /usr/bin/make
>       310      95      95        232  -1  500 17:38:27 /usr/bin/sh
>       562     310      95        358  -1  500 17:38:27 /usr/bin/ps
>
>Hey, don't work... So the problem is in some WIN32/Cygwin specific code...
>but I'm not able to check now; you should try to do it yourself, compiling
>make for debug, then trying to debug it with gdb.
>
>Wait, I can try this; it's a little bit longer on cygwin than on Linux
>(especially as I had to "unload" my PC for cygwin to be able to configure),
>but its running smoothly and, BADANG:
>
>$ cd TEST
>$ ../make
>ps
>       PID    PPID    PGID     WINPID TTY  UID    STIME COMMAND
>       302       1     302        302  -1  500 17:46:53 /usr/bin/bash
>       500     302     500         73  -1  500 18:30:48
>/cygdrive/y/WORK/V3/i486-unknown-linux/Import
>ed/cygnus/make/make
>       453     500     500        331  -1  500 18:30:48 /usr/bin/ps
>
>IT WORKS!...
>
>So what version am I using?
>$ ../make --version
>GNU Make version 3.79.1, by Richard Stallman and Roland McGrath.
>Built for i686-pc-cygwin
>Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
>         Free Software Foundation, Inc.
>This is free software; see the source for copying conditions.
>There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
>PARTICULAR PURPOSE.
>
>Report bugs to <bug-make@gnu.org>.
>
>$ type make
>make is hashed (/usr/bin/make)
>
>$ make --version
>GNU Make version 3.79.1, by Richard Stallman and Roland McGrath.
>Built for i686-pc-cygwin
>Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
>         Free Software Foundation, Inc.
>This is free software; see the source for copying conditions.
>There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
>PARTICULAR PURPOSE.
>
>Report bugs to <bug-make@gnu.org>.
>
>It seems to be the same MAKE version, except that I just rebuild it, OOTB
>:-), from the sources I downloaded from a cygwin mirror... (my installed.db
>says the installed make is 3.79.1-3 and I'm quite sure the sources were got
>at the same time).
>
>So probably there's something in the environment of the cygwin make
>maintainer ?-0 I can't say more, regretfully, but I hope this will allow to
>understand what's happenning.
>
>HTH,
>
>         Bernard
>
>PS: To whom it can help, putting the ps on a separate line with th
>efollowing Makefile:
>
>all:
>         ps
>
>does not change anything: my recompiled make works OK, the standard one sill
>fork a shell to execute ps...
>
> >
> > Randy
> >
> >
> > At 17:10 2001-06-25, you wrote:
> > >Randall R Schulz wrote:
> > > > That leaves only the question: Why are you asking when you know
> > > > already?
> > >
> > >The makefile:
> > >
> > >         all: ; ps
> > >
> > >tells me:
> > >
> > >bash-2.05$ make -f ../foo.mk
> > >ps
> > >       PID    PPID    PGID     WINPID TTY  UID    STIME COMMAND
> > >       317       1     317        317  -1  500 14:59:36 /bin/bash
> > >       461     317     461        549  -1  500 14:59:41 /usr/bin/make
> > >       591     461     461        224  -1  500 14:59:41 /bin/sh
> > >       662     591     461        585  -1  500 14:59:41 /usr/bin/ps
> > >
> > >that make is invoking /bin/sh in order to invoke /usr/bin/ps.
> > >
> > >Why isn't make invoking /usr/bin/ps directly?
> > >
> > >Earl
> >
> >
> > --
> > Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> > Bug reporting:         http://cygwin.com/bugs.html
> > Documentation:         http://cygwin.com/docs.html
> > FAQ:                   http://cygwin.com/faq/
> >
>
>--------------------------------------------
>Bernard Dautrevaux
>Microprocess Ingenierie
>97 bis, rue de Colombes
>92400 COURBEVOIE
>FRANCE
>Tel:    +33 (0) 1 47 68 80 80
>Fax:    +33 (0) 1 47 88 97 85
>e-mail: dautrevaux@microprocess.com
>                 b.dautrevaux@usa.net
>--------------------------------------------
>
>--
>Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
>Bug reporting:         http://cygwin.com/bugs.html
>Documentation:         http://cygwin.com/docs.html
>FAQ:                   http://cygwin.com/faq/


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


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