diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2008-07-10 14:34:12 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2008-07-10 14:34:12 +0000 |
commit | 4a4ce3ccc686d4f389fbe9c87c53326aaf3d4c7e (patch) | |
tree | 35a7545cd8a1d5b150a0186a7e63571d30fcc81e /build | |
parent | ab35ba70b41a06cfd3d2bb92da0c34ccf9420fc1 (diff) | |
download | libhubbub-4a4ce3ccc686d4f389fbe9c87c53326aaf3d4c7e.tar.gz libhubbub-4a4ce3ccc686d4f389fbe9c87c53326aaf3d4c7e.tar.bz2 |
Improved dependency tracking.
There's currently an issue that means that testcases don't get rebuilt when the debug library changes -- the workaround is to make clean. I've currently no idea how to fix this -- see the FIXME in test/Makefile for details.
svn path=/trunk/hubbub/; revision=4571
Diffstat (limited to 'build')
-rw-r--r-- | build/Makefile.common | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/build/Makefile.common b/build/Makefile.common index 2fa77ac..0388859 100644 --- a/build/Makefile.common +++ b/build/Makefile.common @@ -43,10 +43,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) @@ -80,8 +81,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: release @@ -102,18 +103,54 @@ uninstall: @$(RM) $(RMFLAGS) $(PREFIX)/lib/pkgconfig/$(COMPONENT).pc @$(RM) $(RMFLAGS) -r $(PREFIX)/include/hubbub +$(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) +$$(RELEASEDIR)/$(2): $$(RELEASEDIR)/deps/$(3) @$$(ECHO) $$(ECHOFLAGS) "==> $(1)" @$$(CC) -c $$(RELEASECFLAGS) -o $$@ $(1) -$$(DEBUGDIR)/$(2): $(1) +$$(DEBUGDIR)/$(2): $$(DEBUGDIR)/deps/$(3) @$$(ECHO) $$(ECHOFLAGS) "==> $(1)" @$$(CC) -c $$(DEBUGCFLAGS) -o $$@ $(1) endef $(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \ - $(call do_compile,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o))))) + $(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)),$(subst /,_,$(SOURCE:.c=.d))))) |