This adds automatic file tracking and uninstallation (similar to that for Build/InstallDev) for files installed by Host/Install.
A path to a staging directory will be passed to Host/Install. If files are placed in that staging directory, they will be tracked and installed into $(HOST_BUILD_PREFIX) (either $(STAGING_DIR_HOST) or $(STAGING_DIR_HOSTPKG), depend on the package/tool). If Host/Install doesn't use the staging directory and install to $(STAGING_DIR_HOST) / $(STAGING_DIR_HOSTPKG) directly, no error is raised. This also updates Host/Install/Default to handle the staging directory, combined with setting DESTDIR in a new HOST_MAKE_INSTALL_FLAGS variable. Host/Install/Default now also handles a second parameter, allowing a different install target to be specified (similar to Build/Install/Default). Signed-off-by: Jeffery To <jeffery...@gmail.com> --- include/host-build.mk | 52 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/include/host-build.mk b/include/host-build.mk index 827ea6bbfb..ce2fcc26eb 100644 --- a/include/host-build.mk +++ b/include/host-build.mk @@ -30,6 +30,20 @@ HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.built HOST_BUILD_PREFIX?=$(if $(IS_PACKAGE_BUILD),$(STAGING_DIR_HOSTPKG),$(STAGING_DIR_HOST)) HOST_STAMP_INSTALLED:=$(HOST_BUILD_PREFIX)/stamp/.$(PKG_NAME)_installed +HOST_STAGING_FILES_LIST:=$(PKG_NAME).list +HOST_STAGING_DIR:=$(TMP_DIR)/$(if $(IS_PACKAGE_BUILD),hostpkg,host)-stage-$(PKG_NAME) + +define HostCleanStaging + rm -f $(HOST_STAMP_INSTALLED) + @-(\ + if [ -f $(HOST_BUILD_PREFIX)/packages/$(HOST_STAGING_FILES_LIST) ]; then \ + $(SCRIPT_DIR)/clean-package.sh \ + "$(HOST_BUILD_PREFIX)/packages/$(HOST_STAGING_FILES_LIST)" \ + "$(HOST_BUILD_PREFIX)"; \ + fi; \ + ) +endef + override MAKEFLAGS= include $(INCLUDE_DIR)/autotools.mk @@ -77,6 +91,10 @@ HOST_MAKE_VARS = \ HOST_MAKE_FLAGS = +HOST_MAKE_INSTALL_FLAGS = \ + $(HOST_MAKE_FLAGS) \ + DESTDIR="$(HOST_INSTALL_DIR)" + HOST_CONFIGURE_CMD = $(BASH) ./configure ifeq ($(HOST_OS),Darwin) @@ -112,11 +130,17 @@ define Host/Compile endef define Host/Install/Default - $(call Host/Compile/Default,install) + +$(HOST_MAKE_VARS) \ + $(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) \ + $(HOST_MAKE_INSTALL_FLAGS) \ + $(if $(2),$(2),install) + $(if $(1), + $(CP) $(HOST_INSTALL_DIR)/$(HOST_BUILD_PREFIX)/* $(1)/ + ) endef define Host/Install - $(call Host/Install/Default,$(HOST_BUILD_PREFIX)) + $(call Host/Install/Default,$(1),) endef @@ -169,8 +193,25 @@ ifndef DUMP $(call Host/Exports,$(HOST_STAMP_INSTALLED)) $(HOST_STAMP_INSTALLED): $(HOST_STAMP_BUILT) $(if $(FORCE_HOST_INSTALL),FORCE) - $(call Host/Install,$(HOST_BUILD_PREFIX)) - $(foreach hook,$(Hooks/HostInstall/Post),$(call $(hook))$(sep)) + rm -rf $(HOST_STAGING_DIR) + mkdir -p $(HOST_STAGING_DIR) $(HOST_BUILD_PREFIX)/packages + $(call Host/Install,$(HOST_STAGING_DIR)) + $(foreach hook,$(Hooks/HostInstall/Post),\ + $(call $(hook),$(HOST_STAGING_DIR))$(sep)\ + ) + if [ -f $(HOST_BUILD_PREFIX)/packages/$(HOST_STAGING_FILES_LIST) ]; then \ + $(SCRIPT_DIR)/clean-package.sh \ + "$(HOST_BUILD_PREFIX)/packages/$(HOST_STAGING_FILES_LIST)" \ + "$(HOST_BUILD_PREFIX)"; \ + fi + if [ -z "$$$$(find $(HOST_STAGING_DIR) -maxdepth 0 -type d -empty)" ]; then \ + (cd $(HOST_STAGING_DIR); find ./ > $(HOST_STAGING_DIR).files); \ + $(call locked, \ + mv $(HOST_STAGING_DIR).files $(HOST_BUILD_PREFIX)/packages/$(HOST_STAGING_FILES_LIST) && \ + $(CP) $(HOST_STAGING_DIR)/* $(HOST_BUILD_PREFIX)/ \ + ,host-staging-dir); \ + fi + rm -rf $(HOST_STAGING_DIR) mkdir -p $$(shell dirname $$@) touch $(HOST_STAMP_BUILT) touch $$@ @@ -193,9 +234,10 @@ ifndef DUMP rm -rf $(HOST_BUILD_DIR) $(HOST_STAMP_BUILT) host-clean: host-clean-build + $(HostCleanStaging) $(call Host/Clean) $(call Host/Uninstall) - rm -rf $(HOST_STAMP_INSTALLED) + rm -f $(HOST_BUILD_PREFIX)/packages/$(HOST_STAGING_FILES_LIST) ifneq ($(CONFIG_AUTOREMOVE),) host-compile: -- 2.20.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel