Skip to content

Commit

Permalink
Bug 462463 - Stop using mddepend.pl. r=ted
Browse files Browse the repository at this point in the history
  • Loading branch information
glandium committed Mar 17, 2013
1 parent 483a31b commit 3a35c07
Show file tree
Hide file tree
Showing 15 changed files with 104 additions and 161 deletions.
1 change: 1 addition & 0 deletions build/cl.py
Expand Up @@ -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:])
37 changes: 37 additions & 0 deletions build/unix/add_phony_targets.py
@@ -0,0 +1,37 @@
# 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/.

import pymake.data
import pymake.parser
import pymake.parserdata
import sys

'''
Modifies the output of Sun Studio's -xM to look more like the output
of gcc's -MD -MP, adding phony targets for dependencies.
'''


def add_phony_targets(path):
print path
deps = set()
targets = set()
for stmt in pymake.parser.parsefile(path):
if isinstance(stmt, pymake.parserdata.Rule):
assert isinstance(stmt.depexp, pymake.data.StringExpansion)
assert isinstance(stmt.targetexp, pymake.data.StringExpansion)
for d in stmt.depexp.s.split():
deps.add(d)
for t in stmt.targetexp.s.split():
targets.add(t)
phony_targets = deps - targets
if not phony_targets:
return
with open(path, 'a') as f:
f.writelines('%s:\n' % d for d in phony_targets)


if __name__ == '__main__':
for f in sys.argv[1:]:
add_phony_targets(f)
3 changes: 3 additions & 0 deletions config/expandlibs_exec.py
Expand Up @@ -325,6 +325,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()
5 changes: 4 additions & 1 deletion config/expandlibs_gen.py
Expand Up @@ -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)
13 changes: 4 additions & 9 deletions config/rules.mk
Expand Up @@ -986,17 +986,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
Expand Down Expand Up @@ -1613,14 +1615,7 @@ 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))
include $(MDDEPEND_FILES)
endif

endif
Expand Down
2 changes: 1 addition & 1 deletion configure.in
Expand Up @@ -7930,7 +7930,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=
Expand Down
1 change: 1 addition & 0 deletions js/src/build/cl.py
Expand Up @@ -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:])
37 changes: 37 additions & 0 deletions js/src/build/unix/add_phony_targets.py
@@ -0,0 +1,37 @@
# 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/.

import pymake.data
import pymake.parser
import pymake.parserdata
import sys

'''
Modifies the output of Sun Studio's -xM to look more like the output
of gcc's -MD -MP, adding phony targets for dependencies.
'''


def add_phony_targets(path):
print path
deps = set()
targets = set()
for stmt in pymake.parser.parsefile(path):
if isinstance(stmt, pymake.parserdata.Rule):
assert isinstance(stmt.depexp, pymake.data.StringExpansion)
assert isinstance(stmt.targetexp, pymake.data.StringExpansion)
for d in stmt.depexp.s.split():
deps.add(d)
for t in stmt.targetexp.s.split():
targets.add(t)
phony_targets = deps - targets
if not phony_targets:
return
with open(path, 'a') as f:
f.writelines('%s:\n' % d for d in phony_targets)


if __name__ == '__main__':
for f in sys.argv[1:]:
add_phony_targets(f)
139 changes: 0 additions & 139 deletions js/src/build/unix/mddepend.pl

This file was deleted.

3 changes: 3 additions & 0 deletions js/src/config/expandlibs_exec.py
Expand Up @@ -325,6 +325,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()
5 changes: 4 additions & 1 deletion js/src/config/expandlibs_gen.py
Expand Up @@ -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)
13 changes: 4 additions & 9 deletions js/src/config/rules.mk
Expand Up @@ -986,17 +986,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
Expand Down Expand Up @@ -1613,14 +1615,7 @@ 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))
include $(MDDEPEND_FILES)
endif

endif
Expand Down
2 changes: 1 addition & 1 deletion js/src/configure.in
Expand Up @@ -3976,7 +3976,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=
Expand Down
2 changes: 2 additions & 0 deletions python/codegen/makeutils.py
Expand Up @@ -18,4 +18,6 @@ def writeMakeDependOutput(filename):
f.write('\n\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)

2 changes: 2 additions & 0 deletions xpcom/idl-parser/header.py
Expand Up @@ -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

0 comments on commit 3a35c07

Please sign in to comment.