Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Apr 2011 17:52:58 +0200
From:      Hartmut Brandt <hartmut.brandt@dlr.de>
To:        Roman Divacky <rdivacky@freebsd.org>
Cc:        hackers@freebsd.org
Subject:   Re: make question
Message-ID:  <20110428174523.I61666@beagle.kn.op.dlr.de>
In-Reply-To: <20110427193946.GA41659@freebsd.org>
References:  <20110427193946.GA41659@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Roman,

On Wed, 27 Apr 2011, Roman Divacky wrote:

RD>You seem to have messed with bsd make so I have a question for you  :)

Yeah, that was some time ago ...

RD>When a job is about to be executed in JobStart() a pipe is created with
RD>its ends connected to job->inPipe/job->outPipe. When the job is actually
RD>created in JobExec() the ps.out is set to job->outPipe so that in
RD>JobDoOutput() we can read from that pipe and basically just parse the output
RD>for shell->noPrint and leaving it out from the output. This is meant (I think)
RD>for supressing the "filter" thing. Ie. that if we do some @command the
RD>restoration of setting of quiet mode is filtered out.
RD>
RD>
RD>In -B mode we do it differently, as we invoke one shell per command we don't
RD>have to insert quiet/verbose commands and thus avoid all the piping/parsing
RD>dance.
RD>
RD>So my question is - why don't we invoke one shell per command by default
RD>and avoid the piping/parsing? Is this because of performance? I think that
RD>the piping/parsing of the output can have worse impact than invoking a shell
RD>for every command. Especially given that most targets consists of just one
RD>command.

The answer is in /usr/share/doc/psd/12.make. This is so one can write 
something like

debug:
	DEBUG_FLAGS=-g	
	for i in $(SUBDIR); do
		$(MAKE) -C $$i all
	done

instead of:

debug:
	DEBUG_FLAGS=-g \
	for i in $(SUBDIR); do \
		$(MAKE) -C $$i all ; \
	done

-B means 'backward compatible' and does what the original v7 make did: one 
shell per command. This means you don't have to write the backslashes and 
the shell variable will be seen in the sub-makes and programs.

I think we can change this, because it would break makefiles that assume 
that the entire script is given to the shell in one piece.

harti



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110428174523.I61666>