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

Reply via email to