infra: Add PRE_*_HOOKS for every step
PATCH v3 1/1 infra: Add PRE_*_HOOKS for every step
Add PRE_*_HOOKS to all the different steps through which a package may go.
This will help avoid using POST_*_HOOKS to do tasks that should be done in the PRE_*_HOOKS of the next step.
Otherwise, when the user would do a make foo-re<step>, this would not do what was really intented, the POST_*_HOOK of the preceding step not being executed.
---
Changes v2 -> v3
- Fix a mis-match in the number of spaces used to indent (Yann E. Morin)
Changes v1 -> v2
- Move the PRE_*_HOOKS after the message (Arnout Vandecappelle)
- PRE_LEGAL_HOOKS executed even if condition is not met (Arnout Vandecappelle)
--- docs/manual/adding-packages-hooks.txt | 17 +++++++++++++++++ package/pkg-generic.mk | 22 ++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-)
docs/manual/adding-packages-hooks.txt +17 -0
@@ -14,17 +14,34 @@ of the package construction. The following hook points are available: +* +LIBFOO_PRE_DOWNLOAD_HOOKS+ * +LIBFOO_POST_DOWNLOAD_HOOKS+ + +* +LIBFOO_PRE_EXTRACT_HOOKS+ * +LIBFOO_POST_EXTRACT_HOOKS+ + +* +LIBFOO_PRE_RSYNC_HOOKS+ * +LIBFOO_POST_RSYNC_HOOKS+ + * +LIBFOO_PRE_PATCH_HOOKS+ * +LIBFOO_POST_PATCH_HOOKS+ + * +LIBFOO_PRE_CONFIGURE_HOOKS+ * +LIBFOO_POST_CONFIGURE_HOOKS+ + +* +LIBFOO_PRE_BUILD_HOOKS+ * +LIBFOO_POST_BUILD_HOOKS+ + +* +LIBFOO_PRE_INSTALL_HOOKS+ (for host packages only) * +LIBFOO_POST_INSTALL_HOOKS+ (for host packages only) + +* +LIBFOO_PRE_INSTALL_STAGING_HOOKS+ (for target packages only) * +LIBFOO_POST_INSTALL_STAGING_HOOKS+ (for target packages only) + +* +LIBFOO_PRE_INSTALL_TARGET_HOOKS+ (for target packages only) * +LIBFOO_POST_INSTALL_TARGET_HOOKS+ (for target packages only) + +* +LIBFOO_PRE_LEGAL_INFO_HOOKS+ * +LIBFOO_POST_LEGAL_INFO_HOOKS+ These variables are 'lists' of variable names containing actions to be
package/pkg-generic.mk +20 -2
@@ -70,6 +70,7 @@ endif # Retrieve the archive $(BUILD_DIR)/%/.stamp_downloaded: + $(foreach hook,$($(PKG)_PRE_DOWNLOAD_HOOKS),$(call $(hook))$(sep)) ifeq ($(DL_MODE),DOWNLOAD) # Only show the download message if it isn't already downloaded $(Q)if test ! -e $(DL_DIR)/$($(PKG)_SOURCE); then \
@@ -101,6 +102,7 @@ endif $(BUILD_DIR)/%/.stamp_extracted: @$(call step_start,extract) @$(call MESSAGE,"Extracting") + $(foreach hook,$($(PKG)_PRE_EXTRACT_HOOKS),$(call $(hook))$(sep)) $(Q)mkdir -p $(@D) $($(PKG)_EXTRACT_CMDS) # some packages have messed up permissions inside
@@ -114,6 +116,7 @@ $(BUILD_DIR)/%/.stamp_extracted: $(BUILD_DIR)/%/.stamp_rsynced: @$(call MESSAGE,"Syncing from source dir $(SRCDIR)") @test -d $(SRCDIR) || (echo "ERROR: $(SRCDIR) does not exist" ; exit 1) + $(foreach hook,$($(PKG)_PRE_RSYNC_HOOKS),$(call $(hook))$(sep)) rsync -au $(RSYNC_VCS_EXCLUSIONS) $(SRCDIR)/ $(@D) $(foreach hook,$($(PKG)_POST_RSYNC_HOOKS),$(call $(hook))$(sep)) $(Q)touch $@
@@ -162,8 +165,8 @@ $(BUILD_DIR)/%/.stamp_patched: # Configure $(BUILD_DIR)/%/.stamp_configured: @$(call step_start,configure) - $(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep)) @$(call MESSAGE,"Configuring") + $(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep)) $($(PKG)_CONFIGURE_CMDS) $(foreach hook,$($(PKG)_POST_CONFIGURE_HOOKS),$(call $(hook))$(sep)) $(Q)touch $@
@@ -173,6 +176,7 @@ $(BUILD_DIR)/%/.stamp_configured: $(BUILD_DIR)/%/.stamp_built:: @$(call step_start,build) @$(call MESSAGE,"Building") + $(foreach hook,$($(PKG)_PRE_BUILD_HOOKS),$(call $(hook))$(sep)) $($(PKG)_BUILD_CMDS) $(foreach hook,$($(PKG)_POST_BUILD_HOOKS),$(call $(hook))$(sep)) $(Q)touch $@
@@ -182,6 +186,7 @@ $(BUILD_DIR)/%/.stamp_built:: $(BUILD_DIR)/%/.stamp_host_installed: @$(call step_start,install-host) @$(call MESSAGE,"Installing to host directory") + $(foreach hook,$($(PKG)_PRE_INSTALL_HOOKS),$(call $(hook))$(sep)) $($(PKG)_INSTALL_CMDS) $(foreach hook,$($(PKG)_POST_INSTALL_HOOKS),$(call $(hook))$(sep)) $(Q)touch $@
@@ -191,6 +196,7 @@ $(BUILD_DIR)/%/.stamp_host_installed: $(BUILD_DIR)/%/.stamp_staging_installed: @$(call step_start,install-staging) @$(call MESSAGE,"Installing to staging directory") + $(foreach hook,$($(PKG)_PRE_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep)) $($(PKG)_INSTALL_STAGING_CMDS) $(foreach hook,$($(PKG)_POST_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep)) $(Q)if test -n "$($(PKG)_CONFIG_SCRIPTS)" ; then \
@@ -207,6 +213,7 @@ $(BUILD_DIR)/%/.stamp_staging_installed: $(BUILD_DIR)/%/.stamp_images_installed: @$(call step_start,install-image) @$(call MESSAGE,"Installing to images directory") + $(foreach hook,$($(PKG)_PRE_INSTALL_IMAGES_HOOKS),$(call $(hook))$(sep)) $($(PKG)_INSTALL_IMAGES_CMDS) $(foreach hook,$($(PKG)_POST_INSTALL_IMAGES_HOOKS),$(call $(hook))$(sep)) $(Q)touch $@
@@ -216,6 +223,7 @@ $(BUILD_DIR)/%/.stamp_images_installed: $(BUILD_DIR)/%/.stamp_target_installed: @$(call step_start,install-target) @$(call MESSAGE,"Installing to target") + $(foreach hook,$($(PKG)_PRE_INSTALL_TARGET_HOOKS),$(call $(hook))$(sep)) $(if $(BR2_INIT_SYSTEMD),\ $($(PKG)_INSTALL_INIT_SYSTEMD)) $(if $(BR2_INIT_SYSV)$(BR2_INIT_BUSYBOX),\
@@ -377,19 +385,28 @@ $(2)_EXTRACT_CMDS ?= \ $$(if $$($(2)_SOURCE),$$(INFLATE$$(suffix $$($(2)_SOURCE))) $(DL_DIR)/$$($(2)_SOURCE) | \ $(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $$($(2)_DIR) $(TAR_OPTIONS) -) -# post-steps hooks +# pre/post-steps hooks +$(2)_PRE_DOWNLOAD_HOOKS ?= $(2)_POST_DOWNLOAD_HOOKS ?= +$(2)_PRE_EXTRACT_HOOKS ?= $(2)_POST_EXTRACT_HOOKS ?= +$(2)_PRE_RSYNC_HOOKS ?= $(2)_POST_RSYNC_HOOKS ?= $(2)_PRE_PATCH_HOOKS ?= $(2)_POST_PATCH_HOOKS ?= $(2)_PRE_CONFIGURE_HOOKS ?= $(2)_POST_CONFIGURE_HOOKS ?= +$(2)_PRE_BUILD_HOOKS ?= $(2)_POST_BUILD_HOOKS ?= +$(2)_PRE_INSTALL_HOOKS ?= $(2)_POST_INSTALL_HOOKS ?= +$(2)_PRE_INSTALL_STAGING_HOOKS ?= $(2)_POST_INSTALL_STAGING_HOOKS ?= +$(2)_PRE_INSTALL_TARGET_HOOKS ?= $(2)_POST_INSTALL_TARGET_HOOKS ?= +$(2)_PRE_INSTALL_IMAGES_HOOKS ?= $(2)_POST_INSTALL_IMAGES_HOOKS ?= +$(2)_PRE_LEGAL_INFO_HOOKS ?= $(2)_POST_LEGAL_INFO_HOOKS ?= # human-friendly targets and target sequencing
@@ -543,6 +560,7 @@ $(2)_MANIFEST_TARBALL ?= not saved # legal-info: produce legally relevant info. $(1)-legal-info: # Packages without a source are assumed to be part of Buildroot, skip them. + $(foreach hook,$($(2)_PRE_LEGAL_INFO_HOOKS),$(call $(hook))$(sep)) ifneq ($(call qstrip,$$($(2)_SOURCE)),) ifeq ($$($(2)_SITE_METHOD),local)
Signature · 1 line
1.9.0
PATCH v3 1/1 infra: Add PRE_*_HOOKS for every step
Hello,
Quoted 2 lines · Maxime Hadjinlian
+* +LIBFOO_PRE_LEGAL_INFO_HOOKS+
* +LIBFOO_POST_LEGAL_INFO_HOOKS+
I'm generally fine with the patch, but I'm wondering what's the usefulness of the legal-info hooks. I know you're merely adding a pre-hook to match an existing post-hook, but I'm wondering what would be the usage of a post-legal-info hook actually.
Luca?
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v3 1/1 infra: Add PRE_*_HOOKS for every step
Hi Thomas,
Quoted 7 lines · Thomas Petazzoni
Hello,
Quoted 2 lines · Maxime Hadjinlian
+* +LIBFOO_PRE_LEGAL_INFO_HOOKS+
* +LIBFOO_POST_LEGAL_INFO_HOOKS+
Quoted 6 lines
I'm generally fine with the patch, but I'm wondering what's the usefulness of the legal-info hooks. I know you're merely adding a pre-hook to match an existing post-hook, but I'm wondering what would be the usage of a post-legal-info hook actually.
Luca?
Maybe some mysterious package wants to save some additional files in the sources directory, or anything even more strange...?
No, I can't really think of anything sound.
OTOH having pre- and post-hooks for all steps /except one/ does not look very polished, and I think the effort to maintain an unused hook is minimal.
So I would keep Maxime's patch as-is, unless there is a solid reason to do otherwise.
Signature · 1 line
Luca
PATCH v3 1/1 infra: Add PRE_*_HOOKS for every step
In reply to Thomas PetazzoniThomas, All,
On 2014-04-06 14:31 +0200, Thomas Petazzoni spake thusly:
Quoted 9 lines · Maxime Hadjinlian
Quoted 3 lines
+* +LIBFOO_PRE_LEGAL_INFO_HOOKS+
* +LIBFOO_POST_LEGAL_INFO_HOOKS+I'm generally fine with the patch, but I'm wondering what's the usefulness of the legal-info hooks. I know you're merely adding a pre-hook to match an existing post-hook, but I'm wondering what would be the usage of a post-legal-info hook actually.
I can think of an example where it would be needed: the freescale imx6 binary blobs for the GPU. There is a license text in the auto-extract archive, but we do not save it for now (because "that's just too much effort.")
Adding a pre-legal hook could be useful to extract the license from the archive, for example.
Regards,
Yann E. MORIN.
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'