[OpenWrt-Devel,1/6] build: Add auto file tracking / uninstall for Host/Install
diff mbox series

Message ID 20190614183534.14768-1-jeffery.to@gmail.com
State New
Headers show
Series
  • [OpenWrt-Devel,1/6] build: Add auto file tracking / uninstall for Host/Install
Related show

Commit Message

Jeffery To June 14, 2019, 6:35 p.m. UTC
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.to@gmail.com>
---
 include/host-build.mk | 52 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 47 insertions(+), 5 deletions(-)

Patch
diff mbox series

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: