From 3634794c3ba2f9fba60d3b26bcceae51fb3718c6 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sat, 28 Jul 2012 18:14:24 +0200 Subject: [PATCH] Put dependency files to a separate directory. Currently the dependency files are stored in the same directory as the object files. This moves these files to the new build/deps directory instead, and makes "make clean" remove the objects directory while "make clean2" now removes the whole build directory. As a side effect of this change, the $(all_objs) variable now contains only the non-directory part of the objects, so we may get rid of the directory-stripping in the test makefile. --- Makefile.in | 28 +++++++++++++++------------- depend.sh | 15 +++++++++------ t/makefile.test | 2 +- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/Makefile.in b/Makefile.in index b865e4e8..3755e591 100644 --- a/Makefile.in +++ b/Makefile.in @@ -31,6 +31,7 @@ else endif ggo_dir := $(build_dir)/ggo object_dir := $(build_dir)/objects +dep_dir := $(build_dir)/deps man_dir := $(build_dir)/man/man1 cmdline_dir := $(build_dir)/cmdline @@ -101,7 +102,7 @@ dep: $(deps) man: $(man_pages) tarball: $(tarball) -$(object_dir) $(man_dir) $(ggo_dir) $(cmdline_dir): +$(object_dir) $(man_dir) $(ggo_dir) $(cmdline_dir) $(dep_dir): $(Q) $(MKDIR_P) $@ -include $(m4_ggo_dir)/makefile @@ -206,14 +207,20 @@ $(object_dir)/%.o: %.c | $(object_dir) @[ -z "$(Q)" ] || echo 'CC $<' $(Q) $(CC) -c -o $@ $(CPPFLAGS) $(DEBUG_CPPFLAGS) $< -$(object_dir)/%.cmdline.d: $(cmdline_dir)/%.cmdline.c | $(object_dir) +$(dep_dir)/%.cmdline.d: $(cmdline_dir)/%.cmdline.c | $(dep_dir) @[ -z "$(Q)" ] || echo 'DEP $<' - $(Q) ./depend.sh $(object_dir) $(cmdline_dir) $(CPPFLAGS) $< > $@ + $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \ + $(CPPFLAGS) $< > $@ -$(object_dir)/%.d: %.c | $(object_dir) +$(dep_dir)/%.d: %.c | $(dep_dir) @[ -z "$(Q)" ] || echo 'DEP $<' - $(Q) ./depend.sh $(object_dir) $(cmdline_dir) $(CPPFLAGS) $< > $@ + $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \ + $(CPPFLAGS) $< > $@ +all_objs := @recv_objs@ @filter_objs@ @client_objs@ @gui_objs@ \ + @audiod_objs@ @audioc_objs@ @fade_objs@ @server_objs@ \ + @write_objs@ @afh_objs@ +deps := $(addprefix $(dep_dir)/, $(all_objs:.o=.d)) recv_objs := $(addprefix $(object_dir)/, @recv_objs@) filter_objs := $(addprefix $(object_dir)/, @filter_objs@) @@ -226,12 +233,6 @@ server_objs := $(addprefix $(object_dir)/, @server_objs@) write_objs := $(addprefix $(object_dir)/, @write_objs@) afh_objs := $(addprefix $(object_dir)/, @afh_objs@) -all_objs := $(recv_objs) $(filter_objs) $(client_objs) $(gui_objs) \ - $(audiod_objs) $(audioc_objs) $(fade_objs) $(server_objs) \ - $(write_objs) $(afh_objs) - -deps := $(all_objs:.o=.d) - ifeq ($(findstring clean, $(MAKECMDGOALS)),) -include $(deps) endif @@ -278,12 +279,13 @@ para_afh: $(afh_objs) clean: @[ -z "$(Q)" ] || echo 'CLEAN' - $(Q) rm -f @executables@ $(object_dir)/*.o + $(Q) rm -f @executables@ + $(Q) rm -rf $(object_dir) clean2: clean @[ -z "$(Q)" ] || echo 'CLEAN2' - $(Q) rm -rf $(man_dir) $(object_dir) $(cmdline_dir) $(ggo_dir) $(Q) rm -f *_command_list.* *_completion.h + $(Q) rm -rf $(build_dir) distclean: clean2 test-clean @[ -z "$(Q)" ] || echo 'DISTCLEAN' $(Q) rm -f Makefile autoscan.log config.status config.log diff --git a/depend.sh b/depend.sh index 60d4eba6..a0af40c8 100755 --- a/depend.sh +++ b/depend.sh @@ -4,19 +4,22 @@ # the given input file and parse the output to add a *.d target with the same # dependencies. -# The first two arguments to that script are special: $1 is the object -# directory. This string is prefixed to both the .o and the .d target. $2 is -# the directory that contains the *.cmdline.h files generated by gengetopt. +# The first three arguments to that script are special: $1 is the +# dependency directory and $2 is the object directory. These are used +# to prefix the .d and .o targets respectively. $3 is the directory +# that contains the *.cmdline.h files generated by gengetopt. # As gcc outputs the dependencies on the *.cmdline.h files either as either # foo.cmdline.h or as $cmdline_dir/foo,cmdline.h, depending on whether the # latter file exists, we prefix the former with $2/ -object_dir="$1" -cmdline_dir="$2" +dep_dir="$1" +object_dir="$2" +cmdline_dir="$3" +shift shift shift LC_ALL=C gcc -MM -MG "$@" \ - | sed -e "s@^\(.*\)\.o:@$object_dir/\1.d $object_dir/\1.o:@" \ + | sed -e "s@^\(.*\)\.o:@$dep_dir/\1.d $object_dir/\1.o:@" \ -e "s@[ ^]\([a-zA-Z0-9_]\{1,\}\.cmdline.h\)@ $cmdline_dir/\1@g" diff --git a/t/makefile.test b/t/makefile.test index 4bbc5d72..69c69bef 100644 --- a/t/makefile.test +++ b/t/makefile.test @@ -7,7 +7,7 @@ test_options := --executables-dir $(shell pwd) test_options += --results-dir $(results_dir) test_options += --trash-dir $(trash_dir) test_options += --executables "$(executables)" -test_options += --objects "$(basename $(notdir $(all_objs)))" +test_options += --objects "$(basename $(all_objs))" ifdef V ifeq ("$(origin V)", "command line") -- 2.39.5