From feb3f00938a717061e0b41e76f4c68cdac9a17f7 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sat, 12 Jul 2014 13:40:44 +0200 Subject: [PATCH] build: Remove depend.sh. 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 | 11 ++++++++--- depend.sh | 31 ------------------------------- 2 files changed, 8 insertions(+), 34 deletions(-) delete mode 100755 depend.sh diff --git a/Makefile.real b/Makefile.real index bc3bf616..9ba29774 100644 --- a/Makefile.real +++ b/Makefile.real @@ -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 index 80a6d40b..00000000 --- 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" -- 2.39.5