# collect what's left

ifneq (,$(REPORT))

include lib/common.mk

BUILDDIR := $(shell sed -n 's/^.* BUILDDIR = \(.*\)/\1/p' "$(REPORT_PATH)")
BUILDLOG := $(BUILDDIR)/$(BUILD_LOG)
REPORTDIR := $(BUILDDIR)/reports
IMAGE_OUTPATH := $(shell sed -n 's/^IMAGE_OUTPATH = \(.*\)/\1/p' $(BUILDLOG))
IMAGE_OUTFILE := $(shell sed -n 's/^IMAGE_OUTFILE = \(.*\)/\1/p' $(BUILDLOG))
LOGDIR := $(shell sed -n 's/^LOGDIR = \(.*\)/\1/p' $(BUILDLOG))

# for a multi-image build there's no sense to refer to buildroot
# contained reports as these are very ephemeral between builds
ifneq (1,$(NUM_TARGETS))
SHORTEN := >/dev/null
endif

all: reports/targets reports/scripts reports/cleanlog
	@if [ -n "$(IMAGE_OUTPATH)" ]; then \
		cp -a "$(REPORTDIR)" "$(LOGDIR)/$(IMAGE_OUTFILE).reports"; \
	fi

reports/prep:
	@mkdir -p "$(REPORTDIR)"

# try to drop common noise rendering diff(1) mostly useless
reports/cleanlog: reports/prep
	@OUT="$(REPORTDIR)/$(@F).log"; \
	sed -r \
		-e 's,$(BUILDDIR),,g' \
		-e '/\/var\/lib\/apt\/lists/d' \
		-e 's/... .. ..:..:..//g' \
		-e 's/\[[0-9]+\]//g' \
		-e '/^(Reading Package Lists|Building Dependency Tree)/d' \
		-e '/^(Fetched|Need to get|After unpacking) /d' \
		-e '/^(Preparing packages for installation|Done\.)/d' \
		-e '/^hsh(|-(initroot|install|fakedev|(mk|rm)chroot|run)): /d' \
		-e '/^(hasher-priv|mkaptbox|(mk|rm)dir): /d' \
		-e '/^mki-((invalidate-|)cache|check-obsolete|prepare): /d' \
		-e '/^(mode of|changed (group|ownership)|removed) /d' \
		-e '/^chroot\/.in\//d' \
		-e '/ has started executing\.$$/d' \
		-e '/\/var\/log\/apt\.log$$/d' \
		-e '/\/usr\/share\/apt\/scripts\/log\.lua/d' \
		-e '/\.rpm$$/d' \
		-e "/' -> '/d" \
		< $(BUILDLOG) \
		> "$(REPORTDIR)/$(@F).log" \
	&& echo "** diffable log: $$OUT" $(SHORTEN)

reports/scripts: reports/prep
	@OUT="$(REPORTDIR)/$(@F).log"; \
	grep "^mki.*scripts: Run: " $(BUILDLOG) \
	| sed -rn "s,^.*($(BUILDDIR)|$(SYMLINK))/(.*)'$$,\2,p" > "$$OUT" \
	&& if [ -s "$$OUT" ]; then \
		echo "** scripts report: $$OUT" $(SHORTEN); \
	fi

reports/targets: reports/prep
	@if ! [ -n "$(REPORT_PATH)" -a -s "$(REPORT_PATH)" ]; then \
		exit 0; \
	fi; \
	if type -t dot >&/dev/null; then \
		OUT="$(REPORTDIR)/$(@F).png"; \
		report-targets < "$(REPORT_PATH)" \
		| dot -Tpng -o "$$OUT" \
		&& if [ -s "$$OUT" ]; then \
			echo "** target graph report: $$OUT"; \
		fi; \
	else \
		OUT="$(BUILDDIR)/targets.dot"; \
		report-targets < "$(REPORT_PATH)" > "$$OUT" \
		&& if [ -s "$$OUT" ]; then \
			echo "** graphviz missing, " \
				"target graph dot file: $$OUT"; \
		fi; \
	fi $(SHORTEN); \
	mv "$(REPORT_PATH)" "$(REPORTDIR)/$(@F).log"

else
all:; @:
endif