12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #
- # C / C++ header dependency stuff
- #
- # Needs GNU make and vncmkdepend, a hacked version of makedepend
-
- .SUFFIXES: .d
-
- CMAKEDEPEND = vncmkdepend
- CXXMAKEDEPEND = vncmkdepend
-
- #
- # The recommended method of doing dependency analysis in the GNU make manual
- # turns out to be painfully slow. This method is similar but it's
- # substantially faster and retains the desirable property that the user doesn't
- # need to manually invoke a "make depend" step.
- #
- # As with the method described in the manual, we generate a separate dependency
- # (.d) file for each source file. The .d file records the header files that
- # each C or C++ source file includes. Any source file recorded in SRCS or
- # CXXSRCS will cause us to try and include the corresponding .d file and GNU
- # make then treats each .d file as a target to be remade.
- #
- # Unlike the manual's method, the rule we provide for making the .d file is
- # actually a fake. All it does is record in a temporary file that the .d file
- # needs to be remade. But as well as all the .d files, we also try to include
- # a file called "depend.phony". This file never exists, but it causes GNU make
- # to try and make the target "depend.phony". The rule for depend.phony then
- # looks at the temporary files generated by the .d rules and then invokes the
- # "omkdepend" program on all of the source files in one go.
- #
-
- #
- # We use simple assignment here to remove any of the depend.tmp files
- # at the time make parses this bit.
- #
-
- dummyvariable := $(shell $(RM) cdepend.tmp cxxdepend.tmp)
-
- #
- # Now the "fake" rules for generating .d files.
- #
-
- %.d: %.c
- @echo "$<" >> cdepend.tmp
-
- %.d: %.cxx
- @echo "$<" >> cxxdepend.tmp
-
- #
- # The depend.phony rule which actually runs omkdepend.
- #
-
- depend.phony:
- @if [ -f cdepend.tmp ]; then \
- echo $(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \
- $(CMAKEDEPEND) $(ALL_CPPFLAGS) `cat cdepend.tmp`; \
- rm -f cdepend.tmp; \
- fi; \
- if [ -f cxxdepend.tmp ]; then \
- echo $(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \
- $(CXXMAKEDEPEND) $(ALL_CPPFLAGS) `cat cxxdepend.tmp`; \
- rm -f cxxdepend.tmp; \
- fi
-
- #
- # Now include the .d files and the "depend.phony" file which never exists.
- # For some reason GNU make evaluates the targets in reverse order, so we need
- # to include depend.phony first. The "-" tells make not to complain that it
- # can't find the file.
- #
-
- -include depend.phony
-
- ifdef SRCS
- -include $(patsubst %.c,%.d,$(patsubst %.cxx,%.d,$(SRCS)))
- endif
|