Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Message-ID: <3B38CBFA.97932AC8@agilent.com> Date: Tue, 26 Jun 2001 10:52:58 -0700 From: Earl Chew Organization: Agilent Technologies X-Mailer: Mozilla 4.76 [en] (WinNT; U) X-Accept-Language: en MIME-Version: 1.0 To: cygwin AT cygwin DOT com, cygwin AT sources DOT redhat DOT com Subject: Patch: Bug: Shell fork/exec avoidance in make-3.79.1-3 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit I previously wrote: > Can anyone offer some advice /bin/sh avoidance with make? > > I'm trying to figure out how to trigger make-3.79.1-3 to avoid > invoking /bin/sh unnecessarily. > > I construct a makefile: > > all: ; sleep 15 > > Then I try: > > 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 I eventually figured out how to rebuild make.exe, and discovered the problem is that main.c contains a CYGWIN LOCAL section declaring: extern char* default_shell; but the definition in job.c contains: char default_shell[] = "/bin/sh"; Gack! Thus the fixup in main.c overwrites the default_shell array, with the result being that job.c is convinced that the default shell isn't the default_shell. I've included a patch below that changes all the char[] definitions in job.c to char*. Earl -- > ---------------------------------------------------------------------+ > Earl Chew http://www.agilent.com | > Agilent Technologies mailto:earl_chew AT agilent DOT com | > Advanced Networks Division Tel: +1 604 454 3411 | > 2500-4710 Kingsway Fax: +1 604 454 3401 | > Burnaby BC V5H 4M2 Canada | > ---------------------------------------------------------------------+ --- job.c.orig Sun Mar 11 12:45:49 2001 +++ job.c Tue Jun 26 10:29:58 2001 @@ -40,7 +40,7 @@ int batch_mode_shell = 1; #else /* WINDOWS32 */ # ifdef _AMIGA -char default_shell[] = ""; +char* default_shell = ""; extern int MyExecute (char **); # else /* _AMIGA */ # ifdef __MSDOS__ @@ -52,9 +52,9 @@ # else /* __MSDOS__ */ # ifdef VMS # include -char default_shell[] = ""; +char* default_shell = ""; # else -char default_shell[] = "/bin/sh"; +char* default_shell = "/bin/sh"; # endif /* VMS */ # endif /* __MSDOS__ */ int batch_mode_shell = 0; -- 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/