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

Bernard Dautrevaux Dautrevaux@microprocess.com
Tue Jun 26 12:37:00 GMT 2001


> -----Original Message-----
> From: Randall R Schulz [ mailto:rrschulz@cris.com ]
> Sent: Tuesday, June 26, 2001 9:28 PM
> To: Bernard Dautrevaux; cygwin@cygwin.com
> Subject: 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?

No because the semicolon here is in fact a separator, and is thus stripped
from the command by make when reading the makefile...

> 
> 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.

Regretfully not; read th erest of my mail; even this will break the
"packaged" make-3.79.1-3, but will work perfectly if you recompile the
make-3.79.1-3 sources!... That's what I've said this mail needs attention
from the make maintainers :-)

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

You know I was starting on the same base as you, thinking the semicolon was
not stripped correctly ;-) so if you feel off base, I was too...

	Bernard

> 
> 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/
> 
--------------------------------------------
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/



More information about the Cygwin mailing list