[arch-releng] [archiso] [PATCH] Makefile: Refactor hook handling

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Sun Aug 19 15:21:01 EDT 2012


On 08/19/2012 11:21 AM, Lukas Fleischer wrote:
> On Sun, Aug 19, 2012 at 12:21:32AM -0300, Gerardo Exequiel Pozzi wrote:
>> On 08/18/2012 06:48 AM, Lukas Fleischer wrote:
>>> Move all hooks into a list and create shell commands dynamically instead
>>> of specifying all of them in every recipe.
>>>
>>> Signed-off-by: Lukas Fleischer<archlinux at cryptocrack.de>
>>> ---
>>>   Makefile | 57 +++++++++++++++++++++++----------------------------------
>>>   1 file changed, 23 insertions(+), 34 deletions(-)
>>>
>>> diff --git a/Makefile b/Makefile
>>> index 309f890..552d8cc 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -1,5 +1,24 @@
>>>   V=1
>>> +HOOKS = \
>>> +	hooks/archiso \
>>> +	install/archiso \
>>> +	archiso_shutdown \
>>> +	hooks/archiso_shutdown \
>>> +	install/archiso_shutdown \
>>> +	archiso_pxe_nbd \
>>> +	hooks/archiso_pxe_common \
>>> +	install/archiso_pxe_common \
>>> +	hooks/archiso_pxe_nbd \
>>> +	install/archiso_pxe_nbd \
>>> +	hooks/archiso_pxe_http \
>>> +	install/archiso_pxe_http \
>>> +	hooks/archiso_pxe_nfs \
>>> +	install/archiso_pxe_nfs \
>>> +	hooks/archiso_loop_mnt \
>>> +	install/archiso_loop_mnt \
>>> +	install/archiso_kms
>>> +
>>>   all:
>>>   install: install-program install-hooks install-examples install-doc
>>> @@ -9,23 +28,9 @@ install-program:
>>>   install-hooks:
>>>   	# hooks/install are needed by mkinitcpio
>>> -	install -D -m 644 archiso/hooks/archiso $(DESTDIR)/usr/lib/initcpio/hooks/archiso
>>> -	install -D -m 644 archiso/install/archiso $(DESTDIR)/usr/lib/initcpio/install/archiso
>>> -	install -D -m 755 archiso/archiso_shutdown $(DESTDIR)/usr/lib/initcpio/archiso_shutdown
>>> -	install -D -m 644 archiso/hooks/archiso_shutdown $(DESTDIR)/usr/lib/initcpio/hooks/archiso_shutdown
>>> -	install -D -m 644 archiso/install/archiso_shutdown $(DESTDIR)/usr/lib/initcpio/install/archiso_shutdown
>>> -	install -D -m 644 archiso/archiso_pxe_nbd $(DESTDIR)/usr/lib/initcpio/archiso_pxe_nbd
>>> -	install -D -m 644 archiso/hooks/archiso_pxe_common $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_common
>>> -	install -D -m 644 archiso/install/archiso_pxe_common $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_common
>>> -	install -D -m 644 archiso/hooks/archiso_pxe_nbd $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_nbd
>>> -	install -D -m 644 archiso/install/archiso_pxe_nbd $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_nbd
>>> -	install -D -m 644 archiso/hooks/archiso_pxe_http $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_http
>>> -	install -D -m 644 archiso/install/archiso_pxe_http $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_http
>>> -	install -D -m 644 archiso/hooks/archiso_pxe_nfs $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_nfs
>>> -	install -D -m 644 archiso/install/archiso_pxe_nfs $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_nfs
>>> -	install -D -m 644 archiso/hooks/archiso_loop_mnt $(DESTDIR)/usr/lib/initcpio/hooks/archiso_loop_mnt
>>> -	install -D -m 644 archiso/install/archiso_loop_mnt $(DESTDIR)/usr/lib/initcpio/install/archiso_loop_mnt
>>> -	install -D -m 644 archiso/install/archiso_kms $(DESTDIR)/usr/lib/initcpio/install/archiso_kms
>>> +	$(foreach hook,$(HOOKS), \
>>> +		install -D -m 644 archiso/$(hook) $(DESTDIR)/usr/lib/initcpio/$(hook) ; \
>>> +	)
>> Warning, not all files are 644, look... ;)
> An oversight of mine :) This should be easy to fix, though...
>
>>>   install-examples:
>>>   	install -d -m 755 $(DESTDIR)/usr/share/archiso/
>>> @@ -37,23 +42,7 @@ install-doc:
>>>   uninstall:
>>>   	rm -f $(DESTDIR)/usr/sbin/mkarchiso
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/hooks/archiso
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/archiso_shutdown
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/hooks/archiso_shutdown
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso_shutdown
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/archiso_pxe_nbd
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_common
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_common
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_nbd
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_nbd
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_http
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_http
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/hooks/archiso_pxe_nfs
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso_pxe_nfs
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/hooks/archiso_loop_mnt
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso_loop_mnt
>>> -	rm -f $(DESTDIR)/usr/lib/initcpio/install/archiso_kms
>>> +	$(foreach hook,$(HOOKS),rm -f $(DESTDIR)/usr/lib/initcpio/$(hook) ; )
>>>   	rm -rf $(DESTDIR)/usr/share/archiso/
>>>   	rm -f $(DESTDIR)/usr/share/doc/archiso/README
>> Thanks you, but If this will be refactored, I prefer to do in a more
>> "makefile way"   if possible.
> Could you please elaborate on this? "foreach" is a valid Makefile
> construct supported by GNU make [1]. We use a similar approach in
> initscripts [2] and devtools [3] (even though the latter uses the shell
> builtin "for" instead of "foreach"). Feel free to suggest a more elegant
> alternative -- we would all be very grateful.

ok, something like (DRAFT)

INITCPIO_RUN_HOOKS=archiso archiso_shutdown....
INITCPIO_INSTALL_HOOKS=archiso_kms
INITCPIO_SCRIPTS=archiso_shutdown

INITCPIO_INSTALL_HOOKS+=INITCPIO_RUN_HOOKS

install-run-hooks: $(INITCPIO_RUN_HOOKS)
     install -t $(DESTDIR).... $^

etc...


>
>> -- 
>> Gerardo Exequiel Pozzi
>> \cos^2\alpha + \sin^2\alpha = 1
> [1] http://www.gnu.org/software/make/manual/make.html#Foreach-Function
> [2] https://projects.archlinux.org/initscripts.git/tree/Makefile#n22
> [3] https://projects.archlinux.org/devtools.git/tree/Makefile#n85
>


-- 
Gerardo Exequiel Pozzi
\cos^2\alpha + \sin^2\alpha = 1



More information about the arch-releng mailing list