build: Remove depend.sh.
authorAndre Noll <maan@systemlinux.org>
Sat, 12 Jul 2014 11:40:44 +0000 (13:40 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 26 Oct 2014 12:15:54 +0000 (13:15 +0100)
This script was rather clumsy, and it referred to gcc rather than
$(CC) as it should be. This commit adds a command to Makefile.real
that generates the .d files directly, which is not more complicated.

Use the opportunity to add -MP to the $(CC) command which generates
the dependency files. This option works around make errors in case
a header file is removed from the tree.

This change gives another speedup of ~15% for make dep.

Makefile.real
depend.sh [deleted file]

index bc3bf61..9ba2977 100644 (file)
@@ -244,10 +244,15 @@ $(object_dir)/%.cmdline.o: $(cmdline_dir)/%.cmdline.c $(cmdline_dir)/%.cmdline.h
        @[ -z "$(Q)" ] || echo 'CC $<'
        $(Q) $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $<
 
-$(dep_dir)/%.d: %.c error2.h | $(dep_dir) $(cmdlist_dir)
+# The compiler outputs dependencies either as foo.h or as some_directory/foo.h,
+# depending on whether the latter file exists. Since make needs the directory
+# part we prefix the dependency as appropriate.
+$(dep_dir)/%.d: %.c error2.h | $(dep_dir)
        @[ -z "$(Q)" ] || echo 'DEP $<'
-       $(Q) ./depend.sh $(dep_dir) $(object_dir) $(cmdline_dir) \
-               $(cmdlist_dir) $(CPPFLAGS) $< > $@
+       $(Q) $(CC) $(CPPFLAGS) -MM -MG -MP -MT $@ -MT $(object_dir)/$(*F).o $< \
+               | sed -e "s@ \([a-zA-Z0-9_]\{1,\}\.cmdline.h\)@ $(cmdline_dir)/\1@g" \
+               -e "s@ \([a-zA-Z0-9_]\{1,\}\.command_list.h\)@ $(cmdlist_dir)/\1@g" \
+               -e "s@ \([a-zA-Z0-9_]\{1,\}\.completion.h\)@ $(cmdlist_dir)/\1@g" > $@
 
 para_recv para_afh para_play para_server: LDFLAGS += $(id3tag_ldflags)
 para_write para_play para_audiod: LDFLAGS += $(ao_ldflags) $(core_audio_ldflags)
diff --git a/depend.sh b/depend.sh
deleted file mode 100755 (executable)
index 80a6d40..0000000
--- a/depend.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-# Call gcc to output a rule suitable for make describing the dependencies of
-# the given input file and parse the output to add a *.d target with the same
-# dependencies.
-
-# The first four 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. Similarly,
-# $4 is the command list directory which contains all files generated by
-# the command_util script.
-
-# As gcc outputs the dependencies on the *.cmdline.h files either as
-# foo.cmdline.h or as $cmdline_dir/foo.cmdline.h, depending on whether the
-# latter file exists, we prefix the former with $2/
-
-dep_dir="$1"
-object_dir="$2"
-cmdline_dir="$3"
-cmdlist_dir="$4"
-shift
-shift
-shift
-shift
-
-LC_ALL=C cc -MM -MG "$@" \
-       | 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" \
-       -e "s@[         ^]\([a-zA-Z0-9_]\{1,\}\.command_list.h\)@ $cmdlist_dir/\1@g" \
-       -e "s@[         ^]\([a-zA-Z0-9_]\{1,\}\.completion.h\)@ $cmdlist_dir/\1@g"