rewrite of the metadata scanning - cleaner code, faster scanning, recursive scanning and better handling of makefile dependencies
SVN-Revision: 7981
This commit is contained in:
		
							
								
								
									
										7
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								Makefile
									
									
									
									
									
								
							| @@ -44,10 +44,13 @@ endif | |||||||
| package/%/Makefile: ; | package/%/Makefile: ; | ||||||
| target/%/Makefile: ; | target/%/Makefile: ; | ||||||
|  |  | ||||||
|  | SCAN_COOKIE?=$(shell echo $$$$) | ||||||
|  | export SCAN_COOKIE | ||||||
|  |  | ||||||
| tmp/.packageinfo tmp/.targetinfo: FORCE | tmp/.packageinfo tmp/.targetinfo: FORCE | ||||||
| 	mkdir -p tmp/info | 	mkdir -p tmp/info | ||||||
| 	$(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="" SCAN_TARGET_DEPS="$(wildcard target/*/Makefile include/kernel*.mk)" SCAN_EXTRA="" | 	$(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="profiles/*.mk $(TOPDIR)/include/kernel*.mk" SCAN_EXTRA="" | ||||||
| 	$(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(wildcard package/*/Makefile include/package*.mk include/kernel.mk)" SCAN_EXTRA="" | 	$(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(TOPDIR)/include/package*.mk" SCAN_EXTRA="" | ||||||
|  |  | ||||||
| tmpinfo-clean: FORCE | tmpinfo-clean: FORCE | ||||||
| 	-rm -rf tmp/.*info | 	-rm -rf tmp/.*info | ||||||
|   | |||||||
| @@ -1,9 +1,12 @@ | |||||||
| include $(TOPDIR)/include/verbose.mk | include $(TOPDIR)/include/verbose.mk | ||||||
|  |  | ||||||
|  | all: tmp/.$(SCAN_TARGET) | ||||||
|  |  | ||||||
| SCAN_TARGET ?= packageinfo | SCAN_TARGET ?= packageinfo | ||||||
| SCAN_NAME ?= package | SCAN_NAME ?= package | ||||||
| SCAN_DIR ?= package | SCAN_DIR ?= package | ||||||
| SCAN_DEPS ?= include/package.mk | TARGET_STAMP:=tmp/info/.files-$(SCAN_TARGET).stamp | ||||||
|  | FILELIST:=tmp/info/.files-$(SCAN_TARGET)-$(SCAN_COOKIE) | ||||||
|  |  | ||||||
| ifeq ($(IS_TTY),1) | ifeq ($(IS_TTY),1) | ||||||
|   define progress |   define progress | ||||||
| @@ -15,41 +18,48 @@ else | |||||||
|   endef |   endef | ||||||
| endif | endif | ||||||
|  |  | ||||||
| SCAN = $(patsubst $(SCAN_DIR)/%/Makefile,%,$(wildcard $(SCAN_DIR)/*/Makefile)) | define PackageDir | ||||||
| tmp/.$(SCAN_TARGET): |   tmp/.$(SCAN_TARGET): tmp/info/.$(SCAN_TARGET)-$(1) | ||||||
| 	@($(call progress,Collecting $(SCAN_NAME) info: merging...)) |   tmp/info/.$(SCAN_TARGET)-$(1): $(SCAN_DIR)/$(1)/Makefile $(SCAN_STAMP) $(foreach DEP,$(DEPS_$(SCAN_DIR)/$(1)/Makefile) $(SCAN_DEPS),$(wildcard $(if $(filter /%,$(DEP)),$(DEP),$(SCAN_DIR)/$(1)/$(DEP)))) | ||||||
| 	for file in $(SCAN); do \ | 	{ \ | ||||||
| 		cat tmp/info/.$(SCAN_TARGET)-$$file; \ | 		$$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(1)) \ | ||||||
| 	done > $@ | 		echo Source-Makefile: $(SCAN_DIR)/$(1)/Makefile; \ | ||||||
| 	@($(call progress,Collecting $(SCAN_NAME) info: done)) | 		$(NO_TRACE_MAKE) --no-print-dir DUMP=1 -C $(SCAN_DIR)/$(1) 2>/dev/null || echo "ERROR: please fix $(SCAN_DIR)/$(1)/Makefile" >&2; \ | ||||||
| 	@echo |  | ||||||
|  |  | ||||||
| ifneq ($(SCAN_EXTRA),) |  | ||||||
| SCAN_STAMP=tmp/info/.scan-$(SCAN_TARGET)-$(shell ls $(SCAN_EXTRA) 2>/dev/null | (md5sum || md5) 2>/dev/null | cut -d' ' -f1) |  | ||||||
| $(SCAN_STAMP): |  | ||||||
| 	rm -f tmp/info/.scan-$(SCAN_TARGET)-* |  | ||||||
| 	touch $@ |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| # FIXME: generate this dynamically? |  | ||||||
| ifeq ($(SCAN_TARGET),packageinfo) |  | ||||||
| tmp/info/.packageinfo-kernel: $(wildcard package/kernel/modules/*.mk) |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| define scanfiles |  | ||||||
| $(foreach FILE,$(SCAN), |  | ||||||
|   tmp/.$(SCAN_TARGET): tmp/info/.$(SCAN_TARGET)-$(FILE) $(SCAN_TARGET_DEPS) $(SCAN_DEPS) |  | ||||||
|   tmp/info/.$(SCAN_TARGET)-$(FILE): $(SCAN_DIR)/$(FILE)/Makefile $(SCAN_STAMP) $(SCAN_TARGET_DEPS) |  | ||||||
| 	grep -E 'include (\$$$$\(INCLUDE_DIR\)|\$$$$\(TOPDIR\)/include)/' $(SCAN_DIR)/$(FILE)/Makefile >/dev/null && { \ |  | ||||||
| 		$$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(FILE)) \ |  | ||||||
| 		echo Source-Makefile: $(SCAN_DIR)/$(FILE)/Makefile; \ |  | ||||||
| 		$(NO_TRACE_MAKE) --no-print-dir DUMP=1 -C $(SCAN_DIR)/$(FILE) 3>/dev/null || echo "ERROR: please fix $(SCAN_DIR)/$(FILE)/Makefile" >&2; \ |  | ||||||
| 		echo; \ | 		echo; \ | ||||||
| 	} > $$@ || true | 	} > $$@ || true | ||||||
| ) |  | ||||||
|  |  | ||||||
| endef | endef | ||||||
| $(eval $(call scanfiles)) |  | ||||||
|  | $(FILELIST): | ||||||
|  | 	rm -f tmp/info/.files-$(SCAN_TARGET)-* | ||||||
|  | 	find $(SCAN_DIR) $(SCAN_EXTRA) -mindepth 1 $(if $(SCAN_DEPTH),-maxdepth $(SCAN_DEPTH)) -name Makefile | xargs grep -HE 'call (KernelPackage|Build(Package|Kernel))' | sed -e 's#^$(SCAN_DIR)/##' -e 's#/Makefile:.*##' | uniq > $@ | ||||||
|  |  | ||||||
|  | tmp/info/.files-$(SCAN_TARGET).mk: $(FILELIST) | ||||||
|  | 	( \ | ||||||
|  | 		cat $< | awk '{print "$(SCAN_DIR)/" $$0 "/Makefile" }' | xargs grep -HE '^ *SCAN_DEPS *= *' | awk -F: '{ gsub(/^.*DEPS *= */, "", $$2); print "DEPS_" $$1 "=" $$2 }'; \ | ||||||
|  | 		awk -v deps="$$DEPS" '{ \ | ||||||
|  | 			print "$$(eval $$(call PackageDir," $$0 "))"; \ | ||||||
|  | 		} ' < $<; \ | ||||||
|  | 		true; \ | ||||||
|  | 	) > $@ | ||||||
|  |  | ||||||
|  | -include tmp/info/.files-$(SCAN_TARGET).mk | ||||||
|  |  | ||||||
|  | $(TARGET_STAMP): | ||||||
|  | 	( \ | ||||||
|  | 		$(NO_TRACE_MAKE) $(FILELIST); \ | ||||||
|  | 		MD5SUM=$$(cat $(FILELIST) | (md5sum || md5) | awk '{print $$1}'); \ | ||||||
|  | 		[ -f "$@.$$MD5SUM" ] || { \ | ||||||
|  | 			rm -f $@.*; \ | ||||||
|  | 			touch $@.$$MD5SUM; \ | ||||||
|  | 			touch $@; \ | ||||||
|  | 		} \ | ||||||
|  | 	) | ||||||
|  |  | ||||||
|  | tmp/.$(SCAN_TARGET): $(TARGET_STAMP) $(SCAN_STAMP) | ||||||
|  | 	$(call progress,Collecting $(SCAN_NAME) info: merging...) | ||||||
|  | 	cat $(FILELIST) | awk '{print "tmp/info/.$(SCAN_TARGET)-" $$0}' | xargs cat > $@ | ||||||
|  | 	$(call progress,Collecting $(SCAN_NAME) info: done) | ||||||
|  | 	echo | ||||||
|  |  | ||||||
| FORCE: | FORCE: | ||||||
| .PHONY: FORCE | .PHONY: FORCE | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/packages | |||||||
|  |  | ||||||
| # build all in-tree kmod-* packages by default | # build all in-tree kmod-* packages by default | ||||||
| KMOD_DEFAULT:=m | KMOD_DEFAULT:=m | ||||||
|  | SCAN_DEPS=modules/*.mk | ||||||
|  |  | ||||||
| include $(INCLUDE_DIR)/package.mk | include $(INCLUDE_DIR)/package.mk | ||||||
| ifeq ($(DUMP),) | ifeq ($(DUMP),) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau