[arch-releng] [archiso] [PATCH] Makefile: Refactor hook handling
Lukas Fleischer
archlinux at cryptocrack.de
Sun Aug 19 16:39:44 EDT 2012
On Sun, Aug 19, 2012 at 04:21:01PM -0300, Gerardo Exequiel Pozzi wrote:
> 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).... $^
Are you aware that this still requires the "foreach" function (or
something similar)? `install -t $(DESTDIR).... $^` won't work since the
hooks are not located in the top-level source directory. There's only
two obvious fixes for that:
* Use something like
$(foreach hook, $(INITCPIO_RUN_HOOKS),archiso/hooks/$(hook))
to add the relative path to every source file.
* Split the Makefile into several modules and place these in the
appropriate directories.
>
> 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