Put dependency files to a separate directory.
authorAndre Noll <maan@systemlinux.org>
Sat, 28 Jul 2012 16:14:24 +0000 (18:14 +0200)
committerAndre Noll <maan@systemlinux.org>
Mon, 27 Aug 2012 11:01:07 +0000 (13:01 +0200)
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
depend.sh
t/makefile.test

index b865e4e..3755e59 100644 (file)
@@ -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
index 60d4eba..a0af40c 100755 (executable)
--- 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"
index 4bbc5d7..69c69be 100644 (file)
@@ -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")