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: ;
|
||||
target/%/Makefile: ;
|
||||
|
||||
SCAN_COOKIE?=$(shell echo $$$$)
|
||||
export SCAN_COOKIE
|
||||
|
||||
tmp/.packageinfo tmp/.targetinfo: FORCE
|
||||
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="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="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="$(TOPDIR)/include/package*.mk" SCAN_EXTRA=""
|
||||
|
||||
tmpinfo-clean: FORCE
|
||||
-rm -rf tmp/.*info
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
include $(TOPDIR)/include/verbose.mk
|
||||
|
||||
all: tmp/.$(SCAN_TARGET)
|
||||
|
||||
SCAN_TARGET ?= packageinfo
|
||||
SCAN_NAME ?= 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)
|
||||
define progress
|
||||
|
@ -15,41 +18,48 @@ else
|
|||
endef
|
||||
endif
|
||||
|
||||
SCAN = $(patsubst $(SCAN_DIR)/%/Makefile,%,$(wildcard $(SCAN_DIR)/*/Makefile))
|
||||
tmp/.$(SCAN_TARGET):
|
||||
@($(call progress,Collecting $(SCAN_NAME) info: merging...))
|
||||
for file in $(SCAN); do \
|
||||
cat tmp/info/.$(SCAN_TARGET)-$$file; \
|
||||
done > $@
|
||||
@($(call progress,Collecting $(SCAN_NAME) info: done))
|
||||
@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; \
|
||||
define PackageDir
|
||||
tmp/.$(SCAN_TARGET): tmp/info/.$(SCAN_TARGET)-$(1)
|
||||
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))))
|
||||
{ \
|
||||
$$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(1)) \
|
||||
echo Source-Makefile: $(SCAN_DIR)/$(1)/Makefile; \
|
||||
$(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; \
|
||||
} > $$@ || 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
|
||||
$(eval $(call scanfiles))
|
||||
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:
|
||||
.PHONY: FORCE
|
||||
|
|
|
@ -17,6 +17,7 @@ PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/packages
|
|||
|
||||
# build all in-tree kmod-* packages by default
|
||||
KMOD_DEFAULT:=m
|
||||
SCAN_DEPS=modules/*.mk
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
ifeq ($(DUMP),)
|
||||
|
|
Loading…
Reference in a new issue