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:
parent
81455651a2
commit
bdc9419a20
3 changed files with 49 additions and 35 deletions
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
|
||||||
|
|
||||||
|
$(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 $@; \
|
||||||
|
} \
|
||||||
)
|
)
|
||||||
|
|
||||||
endef
|
tmp/.$(SCAN_TARGET): $(TARGET_STAMP) $(SCAN_STAMP)
|
||||||
$(eval $(call scanfiles))
|
$(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),)
|
||||||
|
|
Loading…
Reference in a new issue