Skip to content
Snippets Groups Projects
Commit 3b2da547 authored by Peter Eisentraut's avatar Peter Eisentraut
Browse files

For automatic dependency tracking, replace our sed hackery with the GCC-

-built-in mechanism through the -MP flag.  Adjust the file extensions to
look more like Automake practice.  This frees up the .d suffix for use by
DTrace.
parent 0144eb92
No related branches found
No related tags found
No related merge requests found
# -*-makefile-*- # -*-makefile-*-
# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.223 2006/07/20 09:30:18 petere Exp $ # $PostgreSQL: pgsql/src/Makefile.global.in,v 1.224 2006/07/21 22:37:37 petere Exp $
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets, # All PostgreSQL makefiles include this file and use the variables it sets,
...@@ -511,17 +511,6 @@ install-strip: ...@@ -511,17 +511,6 @@ install-strip:
# Next time we invoke make we will have top-notch information about # Next time we invoke make we will have top-notch information about
# whether this file needs to be updated. The dependency files are kept # whether this file needs to be updated. The dependency files are kept
# in the .deps subdirectory of each directory. # in the .deps subdirectory of each directory.
#
# The sed command is necessary to post-process the dependency file:
# Each dependency file becomes a target of its own, without
# dependencies or commands. This is because if you happen to remove a
# file that is a dependency (say, you rename a header file) the
# dependency would point to a non-existing file and make would fail.
# But if the file is listed as a target of its own, without
# prerequisites and commands, and doesn't exist then make will
# consider it updated. (That in turn also has the nice side effect
# that make will update all files that depended on the now removed
# file.)
autodepend = @autodepend@ autodepend = @autodepend@
...@@ -532,38 +521,27 @@ COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c ...@@ -532,38 +521,27 @@ COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
endif endif
DEPDIR = .deps DEPDIR = .deps
df = $(DEPDIR)/$(*F)
# This converts a .d file in the current directory to a .P file in the .deps
# subdirectory, with the dummy targets as explained above.
define postprocess-depend
@if test ! -d $(DEPDIR); then mkdir -p $(DEPDIR); fi
@cp $*.d $(df).P
@sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $(df).P
@rm -f $*.d
endef
ifeq ($(GCC), yes) ifeq ($(GCC), yes)
# GCC allows us to create object and dependency file in one invocation. # GCC allows us to create object and dependency file in one invocation.
%.o : %.c %.o : %.c
$(COMPILE.c) -o $@ $< -MMD @if test ! -d $(DEPDIR); then mkdir -p $(DEPDIR); fi
$(postprocess-depend) $(COMPILE.c) -o $@ $< -MMD -MP -MF $(DEPDIR)/$(*F).Po
endif # GCC endif # GCC
# Include all the dependency files generated for the current # Include all the dependency files generated for the current
# directory. List /dev/null as dummy because if the wildcard expands # directory. List /dev/null as dummy because if the wildcard expands
# to nothing then make would complain. # to nothing then make would complain.
-include $(wildcard $(DEPDIR)/*.P) /dev/null -include $(wildcard $(DEPDIR)/*.Po) /dev/null
# hook for clean-up # hook for clean-up
clean distclean maintainer-clean: clean-deps clean distclean maintainer-clean: clean-deps
.PHONY: clean-deps .PHONY: clean-deps
clean-deps: clean-deps:
@rm -rf $(DEPDIR) *.d @rm -rf $(DEPDIR)
endif # autodepend endif # autodepend
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment