Commit 3a35c078 authored by Mike Hommey's avatar Mike Hommey
Browse files

Bug 462463 - Stop using mddepend.pl. r=ted

parent 483a31b5
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
# 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 −0
Original line number Diff line number Diff line
@@ -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()
+4 −1
Original line number Diff line number Diff line
@@ -44,4 +44,7 @@ if __name__ == '__main__':
    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)
+4 −9
Original line number Diff line number Diff line
@@ -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
@@ -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
Loading