help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Conditional broken line in recipe


From: Alejandro Colomar
Subject: Re: Conditional broken line in recipe
Date: Sun, 3 Sep 2023 13:20:18 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.1

On 2023-09-03 13:11, Alejandro Colomar wrote:
> Hi Paul,
> 
> On 2023-09-03 04:09, Paul Smith wrote:
>> On Sun, 2023-09-03 at 01:03 +0200, Alejandro Colomar wrote:
>>> I was also wondering... is ONESHELL significant for performance? 
>>> Does the reduction in number of shells speed up things?
>>
>> It might increase performance but that's not what it's for primarily,
> 
> For those wondering, here's an experiment with a rule that runs a few
> shells (given appropriate values for certain variables):
> 
> 
> $ time make -j install DESTDIR=/tmp/foo Z=.gz LINK_PAGES=symlink >/dev/null
> 
> real  0m6.229s
> user  0m17.820s
> sys   0m5.269s
> $ sed -i '/ONESHELL/s/^/#/' GNUmakefile 
> $ time make -j install DESTDIR=/tmp/bar Z=.gz LINK_PAGES=symlink >/dev/null
> 
> real  0m8.511s
> user  0m23.823s
> sys   0m7.511s
> 
> 
> It's not orders of magnitude, but it might be interesting to cut a
> 25%, considering no obvious pitfalls (when you overcome the SHELL
> errors, that is :D).  For rules with just 1 canned recipe, the times
> didn't change.
> 
> Here's the rule I used (I chose it because it's the most complex rule
> in the Makefile, as it has 3 canned recipes):
> 
> 
> $(_manpages):
>       $(info INSTALL  $@)
>       <$< \
>       $(SED) $(foreach s, $(MANSECTIONS), \
>               -e '/^\.so /s, man$(s)/\(.*\)\.$(s)$$, $(notdir 
> $(man$(s)dir))/\1$(man$(s)ext)$(Z),') \
>       | $(INSTALL_DATA) -T /dev/stdin $@
> ifeq ($(LINK_PAGES),symlink)
>       if $(GREP) '^\.so ' <$@ >/dev/null; then \
>               $(GREP) '^\.so ' <$@ \
>               | $(SED) 's,^\.so \(.*\),../\1,' \
>               | $(XARGS) -I tgt $(LN) -fsT tgt $@; \
>       fi
> endif
> ifeq ($(Z),.bz2)
>       if ! $(TEST) -L $@; then \
>               $(BZIP2) $(BZIP2FLAGS) <$@ \
>               | $(SPONGE) $@; \
>       fi
> else ifeq ($(Z),.gz)
>       if ! $(TEST) -L $@; then \
>               $(GZIP) $(GZIPFLAGS) <$@ \
>               | $(SPONGE) $@; \
>       fi
> else ifeq ($(Z),.lz)
>       if ! $(TEST) -L $@; then \
>               $(LZIP) $(LZIPFLAGS) <$@ \
>               | $(SPONGE) $@; \
>       fi
> else ifeq ($(Z),.xz)
>       if ! $(TEST) -L $@; then \
>               $(XZ) $(XZFLAGS) <$@ \
>               | $(SPONGE) $@; \
>       fi
> endif
> 
> 
> 
>> at least not in my opinion.  It's there for people who want to use
>> shells other than POSIX sh as their SHELL value,
> 
> Well, my SHELL is not the POSIX sh, as I'm using bash(1), but I get
> it's still POSIX-sh-like, not python.  :)
> 
>> where it's not so easy
>> to create an entire script on a single line and using backslashes.
> 
> Can we really call it script if it's invoked via sh -c?  It's more
> like a command line.  :)
> 
> Jokes apart, can you put an example of such a scenario?  I'm not
> imagining it.

Never mind; a python script could be it.

> 
> 
> BTW, apart from fixing the SHELL (which was a good thing, anyway),
> the only change I needed was to remove the '+' from a couple of
> recipes (and keep only the first one).  Not a big deal.  Most rules
> work without modification.
> 
> 
> Cheers,
> 
> Alex
> 

-- 
<http://www.alejandro-colomar.es/>
GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]