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

Lukas Fleischer archlinux at cryptocrack.de
Sun Aug 19 10:21:05 EDT 2012


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.

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


More information about the arch-releng mailing list