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
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
@[ -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@)
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
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
# 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"