diff --git a/build/cl.py b/build/cl.py index 00318ade63f2f..8d7c526047d4d 100644 --- a/build/cl.py +++ b/build/cl.py @@ -57,6 +57,7 @@ def InvokeClWithDependencyGeneration(cmdline): f = open(depstarget, "w") for dep in sorted(deps): print >>f, "%s: %s" % (target, dep) + print >>f, "%s:" % dep if __name__ == "__main__": InvokeClWithDependencyGeneration(sys.argv[1:]) diff --git a/config/expandlibs_exec.py b/config/expandlibs_exec.py index e93564d781a15..2a3274d543018 100644 --- a/config/expandlibs_exec.py +++ b/config/expandlibs_exec.py @@ -329,6 +329,9 @@ def main(): with open(options.depend, 'w') as depfile: depfile.write("%s : %s\n" % (options.target, ' '.join(dep for dep in deps if os.path.isfile(dep) and dep != options.target))) + for dep in deps: + if os.path.isfile(dep) and dep != options.target: + depfile.write("%s :\n" % dep) if __name__ == '__main__': main() diff --git a/config/expandlibs_gen.py b/config/expandlibs_gen.py index 4ece9d578816d..25962f60c943b 100644 --- a/config/expandlibs_gen.py +++ b/config/expandlibs_gen.py @@ -44,4 +44,7 @@ def generate(args): if options.depend: ensureParentDir(options.depend) with open(options.depend, 'w') as depfile: - depfile.write("%s : %s\n" % (options.output, ' '.join(ExpandLibsDeps(args)))) + deps = ExpandLibsDeps(args) + depfile.write("%s : %s\n" % (options.output, ' '.join(deps))) + for dep in deps: + depfile.write("%s :\n" % dep) diff --git a/config/rules.mk b/config/rules.mk index b774958dd3277..b7ecd8fabae6c 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -987,17 +987,19 @@ define MAKE_DEPS_AUTO_CC if test -d $(@D); then \ echo "Building deps for $< using Sun Studio cc"; \ $(CC) $(COMPILE_CFLAGS) -xM $< >$(_MDDEPFILE) ; \ + $(PYTHON) $(topsrcdir)/build/unix/add_phony_targets.py $(_MDDEPFILE) ; \ fi endef define MAKE_DEPS_AUTO_CXX if test -d $(@D); then \ echo "Building deps for $< using Sun Studio CC"; \ $(CXX) $(COMPILE_CXXFLAGS) -xM $< >$(_MDDEPFILE) ; \ + $(PYTHON) $(topsrcdir)/build/unix/add_phony_targets.py $(_MDDEPFILE) ; \ fi endef endif # Sun Studio on Solaris -$(OBJS) $(HOST_OBJS): $(GLOBAL_DEPS) +$(OBJS) $(HOST_OBJS) $(PROGOBJS) $(HOST_PROGOBJS): $(GLOBAL_DEPS) # Rules for building native targets must come first because of the host_ prefix $(HOST_COBJS): host_%.$(OBJ_SUFFIX): %.c @@ -1614,14 +1616,11 @@ ifneq (,$(filter-out all chrome default export realchrome tools clean clobber cl MDDEPEND_FILES := $(strip $(wildcard $(foreach file,$(OBJS) $(PROGOBJS) $(HOST_OBJS) $(HOST_PROGOBJS) $(TARGETS) $(XPIDLSRCS:.idl=.h) $(XPIDLSRCS:.idl=.xpt),$(MDDEPDIR)/$(notdir $(file)).pp) $(addprefix $(MDDEPDIR)/,$(EXTRA_MDDEPEND_FILES)))) ifneq (,$(MDDEPEND_FILES)) -# The script mddepend.pl checks the dependencies and writes to stdout -# one rule to force out-of-date objects. For example, -# foo.o boo.o: FORCE -# The script has an advantage over including the *.pp files directly -# because it handles the case when header files are removed from the build. -# 'make' would complain that there is no way to build missing headers. -ALL_PP_RESULTS = $(shell $(PERL) $(BUILD_TOOLS)/mddepend.pl - $(MDDEPEND_FILES)) -$(eval $(ALL_PP_RESULTS)) +ifdef .PYMAKE +includedeps $(MDDEPEND_FILES) +else +include $(MDDEPEND_FILES) +endif endif endif diff --git a/configure.in b/configure.in index c350964f2ddf0..d288021d85996 100644 --- a/configure.in +++ b/configure.in @@ -7992,7 +7992,7 @@ dnl ======================================================== MOZ_ARG_HEADER(Build dependencies) if test "$GNU_CC" -a "$GNU_CXX"; then - _DEPEND_CFLAGS='$(filter-out %/.pp,-MD -MF $(MDDEPDIR)/$(@F).pp)' + _DEPEND_CFLAGS='-MD -MP -MF $(MDDEPDIR)/$(@F).pp' dnl Sun Studio on Solaris use -xM instead of -MD, see config/rules.mk elif test "$SOLARIS_SUNPRO_CC"; then _DEPEND_CFLAGS= diff --git a/js/src/build/cl.py b/js/src/build/cl.py index 00318ade63f2f..8d7c526047d4d 100644 --- a/js/src/build/cl.py +++ b/js/src/build/cl.py @@ -57,6 +57,7 @@ def InvokeClWithDependencyGeneration(cmdline): f = open(depstarget, "w") for dep in sorted(deps): print >>f, "%s: %s" % (target, dep) + print >>f, "%s:" % dep if __name__ == "__main__": InvokeClWithDependencyGeneration(sys.argv[1:]) diff --git a/js/src/build/unix/mddepend.pl b/js/src/build/unix/mddepend.pl deleted file mode 100644 index 231998fdffb84..0000000000000 --- a/js/src/build/unix/mddepend.pl +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/env perl - -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# mddepend.pl - Reads in dependencies generated my -MD flag. Prints list -# of objects that need to be rebuilt. These can then be added to the -# PHONY target. Using this script copes with the problem of header -# files that have been removed from the build. -# -# Usage: -# mddepend.pl -# -# Send comments, improvements, bugs to Steve Lamm (slamm@netscape.com). - -use strict; - -use constant DEBUG => 0; - -my $outfile = shift @ARGV; -my $silent = $ENV{MAKEFLAGS} =~ /^\w*s|\s-s/; - -my $line = ''; -my %alldeps; -# Parse dependency files -while (<>) { - s/\r?\n$//; # Handle both unix and DOS line endings - $line .= $_; - if ($line =~ /\\$/) { - chop $line; - next; - } - - $line =~ s|\\|/|g; - - my ($obj,$rest) = split /\s*:\s+/, $line, 2; - $line = ''; - next if !$obj || !$rest; - - my @deps = split /\s+/, $rest; - push @{$alldeps{$obj}}, @deps; - if (DEBUG >= 2) { - foreach my $dep (@deps) { print STDERR "add $obj $dep\n"; } - } -} - -# Test dependencies -my %modtimes; # cache -my @objs; # force rebuild on these -OBJ_LOOP: foreach my $obj (keys %alldeps) { - my $mtime = (stat $obj)[9] or next; - - my %not_in_cache; - my $deps = $alldeps{$obj}; - foreach my $dep_file (@{$deps}) { - my $dep_mtime = $modtimes{$dep_file}; - if (not defined $dep_mtime) { - print STDERR "Skipping $dep_file for $obj, will stat() later\n" if DEBUG >= 2; - $not_in_cache{$dep_file} = 1; - next; - } - - print STDERR "Found $dep_file in cache\n" if DEBUG >= 2; - - if ($dep_mtime > $mtime) { - print STDERR "$dep_file($dep_mtime) newer than $obj($mtime)\n" if DEBUG; - } - elsif ($dep_mtime == -1) { - print STDERR "Couldn't stat $dep_file for $obj\n" if DEBUG; - } - else { - print STDERR "$dep_file($dep_mtime) older than $obj($mtime)\n" if DEBUG >= 2; - next; - } - - push @objs, $obj; # dependency is missing or newer - next OBJ_LOOP; # skip checking the rest of the dependencies - } - - foreach my $dep_file (keys %not_in_cache) { - print STDERR "STAT $dep_file for $obj\n" if DEBUG >= 2; - my $dep_mtime = $modtimes{$dep_file} = (stat $dep_file)[9] || -1; - - if ($dep_mtime > $mtime) { - print STDERR "$dep_file($dep_mtime) newer than $obj($mtime)\n" if DEBUG; - } - elsif ($dep_mtime == -1) { - print STDERR "Couldn't stat $dep_file for $obj\n" if DEBUG; - } - else { - print STDERR "$dep_file($dep_mtime) older than $obj($mtime)\n" if DEBUG >= 2; - next; - } - - push @objs, $obj; # dependency is missing or newer - next OBJ_LOOP; # skip checking the rest of the dependencies - } - - # If we get here it means nothing needs to be done for $obj -} - -# Output objects to rebuild (if needed). -if ($outfile eq '-') { - if (@objs) { - print "@objs: FORCE\n"; - } -} elsif (@objs) { - my $old_output; - my $new_output = "@objs: FORCE\n"; - - # Read in the current dependencies file. - open(OLD, "<$outfile") - and $old_output = ; - close(OLD); - - # Only write out the dependencies if they are different. - if ($new_output ne $old_output) { - open(OUT, ">$outfile") and print OUT "$new_output"; - print "Updating dependencies file, $outfile\n" unless $silent; - if (DEBUG) { - print "new: $new_output\n"; - print "was: $old_output\n" if $old_output ne ''; - } - } -} elsif (-s $outfile) { - # Remove the old dependencies because all objects are up to date. - print "Removing old dependencies file, $outfile\n" unless $silent; - - if (DEBUG) { - my $old_output; - open(OLD, "<$outfile") - and $old_output = ; - close(OLD); - print "was: $old_output\n"; - } - - unlink $outfile; -} diff --git a/js/src/config/expandlibs_exec.py b/js/src/config/expandlibs_exec.py index e93564d781a15..2a3274d543018 100644 --- a/js/src/config/expandlibs_exec.py +++ b/js/src/config/expandlibs_exec.py @@ -329,6 +329,9 @@ def main(): with open(options.depend, 'w') as depfile: depfile.write("%s : %s\n" % (options.target, ' '.join(dep for dep in deps if os.path.isfile(dep) and dep != options.target))) + for dep in deps: + if os.path.isfile(dep) and dep != options.target: + depfile.write("%s :\n" % dep) if __name__ == '__main__': main() diff --git a/js/src/config/expandlibs_gen.py b/js/src/config/expandlibs_gen.py index 4ece9d578816d..25962f60c943b 100644 --- a/js/src/config/expandlibs_gen.py +++ b/js/src/config/expandlibs_gen.py @@ -44,4 +44,7 @@ def generate(args): if options.depend: ensureParentDir(options.depend) with open(options.depend, 'w') as depfile: - depfile.write("%s : %s\n" % (options.output, ' '.join(ExpandLibsDeps(args)))) + deps = ExpandLibsDeps(args) + depfile.write("%s : %s\n" % (options.output, ' '.join(deps))) + for dep in deps: + depfile.write("%s :\n" % dep) diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk index b774958dd3277..b7ecd8fabae6c 100644 --- a/js/src/config/rules.mk +++ b/js/src/config/rules.mk @@ -987,17 +987,19 @@ define MAKE_DEPS_AUTO_CC if test -d $(@D); then \ echo "Building deps for $< using Sun Studio cc"; \ $(CC) $(COMPILE_CFLAGS) -xM $< >$(_MDDEPFILE) ; \ + $(PYTHON) $(topsrcdir)/build/unix/add_phony_targets.py $(_MDDEPFILE) ; \ fi endef define MAKE_DEPS_AUTO_CXX if test -d $(@D); then \ echo "Building deps for $< using Sun Studio CC"; \ $(CXX) $(COMPILE_CXXFLAGS) -xM $< >$(_MDDEPFILE) ; \ + $(PYTHON) $(topsrcdir)/build/unix/add_phony_targets.py $(_MDDEPFILE) ; \ fi endef endif # Sun Studio on Solaris -$(OBJS) $(HOST_OBJS): $(GLOBAL_DEPS) +$(OBJS) $(HOST_OBJS) $(PROGOBJS) $(HOST_PROGOBJS): $(GLOBAL_DEPS) # Rules for building native targets must come first because of the host_ prefix $(HOST_COBJS): host_%.$(OBJ_SUFFIX): %.c @@ -1614,14 +1616,11 @@ ifneq (,$(filter-out all chrome default export realchrome tools clean clobber cl MDDEPEND_FILES := $(strip $(wildcard $(foreach file,$(OBJS) $(PROGOBJS) $(HOST_OBJS) $(HOST_PROGOBJS) $(TARGETS) $(XPIDLSRCS:.idl=.h) $(XPIDLSRCS:.idl=.xpt),$(MDDEPDIR)/$(notdir $(file)).pp) $(addprefix $(MDDEPDIR)/,$(EXTRA_MDDEPEND_FILES)))) ifneq (,$(MDDEPEND_FILES)) -# The script mddepend.pl checks the dependencies and writes to stdout -# one rule to force out-of-date objects. For example, -# foo.o boo.o: FORCE -# The script has an advantage over including the *.pp files directly -# because it handles the case when header files are removed from the build. -# 'make' would complain that there is no way to build missing headers. -ALL_PP_RESULTS = $(shell $(PERL) $(BUILD_TOOLS)/mddepend.pl - $(MDDEPEND_FILES)) -$(eval $(ALL_PP_RESULTS)) +ifdef .PYMAKE +includedeps $(MDDEPEND_FILES) +else +include $(MDDEPEND_FILES) +endif endif endif diff --git a/js/src/configure.in b/js/src/configure.in index 52e943c20da70..b16f2576d57af 100644 --- a/js/src/configure.in +++ b/js/src/configure.in @@ -4020,7 +4020,7 @@ dnl ======================================================== MOZ_ARG_HEADER(Build dependencies) if test "$GNU_CC" -a "$GNU_CXX"; then - _DEPEND_CFLAGS='$(filter-out %/.pp,-MD -MF $(MDDEPDIR)/$(@F).pp)' + _DEPEND_CFLAGS='-MD -MP -MF $(MDDEPDIR)/$(@F).pp' dnl Sun Studio on Solaris use -xM instead of -MD, see config/rules.mk elif test "$SOLARIS_SUNPRO_CC"; then _DEPEND_CFLAGS= diff --git a/python/codegen/makeutils.py b/python/codegen/makeutils.py index 91bb29427e751..f36a2ceeec0bc 100644 --- a/python/codegen/makeutils.py +++ b/python/codegen/makeutils.py @@ -26,7 +26,9 @@ def writeMakeDependOutput(filename): f.write("%s:" % makeQuote(targets[0])) for filename in dependencies: f.write(' \\\n\t\t%s' % makeQuote(filename)) - f.write('\n\n') + f.write('\n') for filename in targets[1:]: f.write('%s: %s\n' % (makeQuote(filename), makeQuote(targets[0]))) + for filename in dependencies: + f.write('%s:\n' % filename) diff --git a/xpcom/idl-parser/header.py b/xpcom/idl-parser/header.py index 2102ab02e0077..7725eeddee189 100644 --- a/xpcom/idl-parser/header.py +++ b/xpcom/idl-parser/header.py @@ -538,3 +538,5 @@ def emitTemplate(tmpl, tmpl_notxpcom=None): deps = [dep.replace('\\', '/') for dep in idl.deps] print >>depfd, "%s: %s" % (options.outfile, " ".join(deps)) + for dep in deps: + print >>depfd, "%s:" % dep