From f1cab3aed419f78d15acdc831ec7900ddfe6384a Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Fri, 5 Sep 2008 11:53:56 +0000 Subject: Dependency tracking svn path=/trunk/libparserutils/; revision=5257 --- Makefile | 2 ++ Makefile-riscos | 2 ++ build/Makefile.common | 45 +++++++++++++++++++++++++++++++++++++++++---- test/Makefile | 20 +++++++++++++++++++- 4 files changed, 64 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 680b2f3..0c02248 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ PERL := perl PKGCONFIG := pkg-config INSTALL := install SED := sed +TOUCH := touch LCOV := lcov GENHTML := genhtml @@ -33,6 +34,7 @@ MVFLAGS := ECHOFLAGS := MAKEFLAGS := PKGCONFIGFLAGS := +TOUCHFLAGS := EXEEXT := diff --git a/Makefile-riscos b/Makefile-riscos index dff3dd3..12a431b 100644 --- a/Makefile-riscos +++ b/Makefile-riscos @@ -16,6 +16,7 @@ PERL := perl PKGCONFIG := $(GCCSDK_INSTALL_ENV)/ro-pkg-config INSTALL := install SED := sed +TOUCH := touch LCOV := echo GENHTML := echo @@ -37,6 +38,7 @@ MVFLAGS := ECHOFLAGS := MAKEFLAGS := PKGCONFIGFLAGS := +TOUCHFLAGS := EXEEXT := ,ff8 diff --git a/build/Makefile.common b/build/Makefile.common index 1817555..d66237e 100644 --- a/build/Makefile.common +++ b/build/Makefile.common @@ -46,10 +46,11 @@ OBJECTS := $(subst /,_,$(subst .c,.o,$(SOURCES))) # Rules release: setup $(addprefix $(RELEASEDIR)/,$(OBJECTS)) - @$(AR) $(ARFLAGS) $(COMPONENT).a $(RELEASEDIR)/* + @$(AR) $(ARFLAGS) $(COMPONENT).a $(addprefix $(RELEASEDIR)/,$(OBJECTS)) debug: setup $(addprefix $(DEBUGDIR)/,$(OBJECTS)) - @$(AR) $(ARFLAGS) $(COMPONENT)-debug.a $(DEBUGDIR)/* + @$(AR) $(ARFLAGS) $(COMPONENT)-debug.a \ + $(addprefix $(DEBUGDIR)/,$(OBJECTS)) test: debug $(TARGET_TESTS) @@ -83,8 +84,8 @@ distclean: clean -@$(RM) $(RMFLAGS) -r $(TOP)/dist setup: - @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR) - @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR) + @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR)/deps + @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR)/deps @$(MKDIR) $(MKDIRFLAGS) $(COVERAGEDIR) export: @@ -111,6 +112,34 @@ uninstall: @$(RM) $(RMFLAGS) $(PREFIX)/lib/pkgconfig/$(COMPONENT).pc @$(RM) $(RMFLAGS) -r $(PREFIX)/include/parserutils +$(RELEASEDIR)/deps/created: + @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR)/deps + @$(TOUCH) $(TOUCHFLAGS) $(RELEASEDIR)/deps/created + +$(DEBUGDIR)/deps/created: + @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR)/deps + @$(TOUCH) $(TOUCHFLAGS) $(DEBUGDIR)/deps/created + +DEPFILES := + +define do_dep +DEPFILES += $(2) +$$(RELEASEDIR)/deps/$(2): $$(RELEASEDIR)/deps/created $(1) + @$$(ECHO) $$(ECHOFLAGS) "DEP $(1)" + @$$(RM) $$(RMFLAGS) $$(RELEASEDIR)/deps/$(2) + @$$(CC) $$(RELEASECFLAGS) -MM -MT \ + '$$(RELEASEDIR)/deps/$(2) $$(RELEASEDIR)/$(3)' \ + -MF $$(RELEASEDIR)/deps/$(2) $(1) + +$$(DEBUGDIR)/deps/$(2): $$(DEBUGDIR)/deps/created $(1) + @$$(ECHO) $$(ECHOFLAGS) "DEP $(1)" + @$$(RM) $$(RMFLAGS) $$(DEBUGDIR)/deps/$(2) + @$$(CC) $$(DEBUGCFLAGS) -MM -MT \ + '$$(DEBUGDIR)/deps/$(2) $$(DEBUGDIR)/$(3)' \ + -MF $$(DEBUGDIR)/deps/$(2) $(1) + +endef + # Finally, build rules for compilation define do_compile $$(RELEASEDIR)/$(2): $(1) @@ -123,6 +152,14 @@ $$(DEBUGDIR)/$(2): $(1) endef +$(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \ + $(call do_dep,$(SOURCE),$(subst /,_,$(SOURCE:.c=.d)),$(subst /,_,$(SOURCE:.c=.o))))) + +ifneq ($(findstring clean,$(MAKECMDGOALS)),clean) +-include $(sort $(addprefix $(RELEASEDIR)/deps/,$(DEPFILES))) +-include $(sort $(addprefix $(DEBUGDIR)/deps/,$(DEPFILES))) +endif + $(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \ $(call do_compile,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o))))) diff --git a/test/Makefile b/test/Makefile index 73b7659..8d5bc82 100644 --- a/test/Makefile +++ b/test/Makefile @@ -44,7 +44,8 @@ TESTS_$(d) := $(TESTS_$(d)) regression/cscodec-segv regression/filter-segv \ ITEMS_CLEAN := $(ITEMS_CLEAN) \ $(addprefix $(d), $(addsuffix $(EXEEXT), $(TESTS_$(d)))) \ $(addprefix $(d), $(addsuffix .gcda, $(TESTS_$(d)))) \ - $(addprefix $(d), $(addsuffix .gcno, $(TESTS_$(d)))) + $(addprefix $(d), $(addsuffix .gcno, $(TESTS_$(d)))) \ + $(addprefix $(d), $(addsuffix .d, $(TESTS_$(d)))) ITEMS_DISTCLEAN := $(ITEMS_DISTCLEAN) $(d)log # Targets for top-level makefile to run @@ -59,6 +60,16 @@ TARGET_TESTS := $(TARGET_TESTS) test_$(d) test_$(d): $(d) $(addprefix $(d), $(TESTS_$(d))) @$(PERL) $(TOP)/$