# 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/. DEPTH = @DEPTH@ topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ MODULE = dom LIBRARY_NAME = dombindings_s LIBXUL_LIBRARY = 1 FORCE_STATIC_LIB = 1 EXPORT_LIBRARY = 1 FAIL_ON_WARNINGS := 1 include $(topsrcdir)/config/config.mk include $(topsrcdir)/ipc/chromium/chromium-config.mk # Need this to find all our DOM source files. include $(topsrcdir)/dom/dom-config.mk include $(topsrcdir)/dom/webidl/WebIDL.mk binding_include_path := mozilla/dom all_webidl_files = $(webidl_files) $(generated_webidl_files) # Set exported_binding_headers before adding the test IDL to the mix exported_binding_headers := $(subst .webidl,Binding.h,$(all_webidl_files)) # Set linked_binding_cpp_files before adding the test IDL to the mix linked_binding_cpp_files := $(subst .webidl,Binding.cpp,$(all_webidl_files)) all_webidl_files += $(test_webidl_files) binding_header_files := $(subst .webidl,Binding.h,$(all_webidl_files)) binding_cpp_files := $(subst .webidl,Binding.cpp,$(all_webidl_files)) globalgen_targets := \ PrototypeList.h \ RegisterBindings.h \ RegisterBindings.cpp \ UnionTypes.h \ UnionTypes.cpp \ UnionConversions.h \ $(NULL) CPPSRCS = \ $(linked_binding_cpp_files) \ $(filter %.cpp, $(globalgen_targets)) \ BindingUtils.cpp \ CallbackInterface.cpp \ CallbackObject.cpp \ DOMJSProxyHandler.cpp \ $(NULL) EXPORTS_NAMESPACES = $(binding_include_path) mozilla EXPORTS_mozilla = \ ErrorResult.h \ $(NULL) EXPORTS_$(binding_include_path) = \ BindingDeclarations.h \ BindingUtils.h \ CallbackFunction.h \ CallbackInterface.h \ CallbackObject.h \ DOMJSClass.h \ DOMJSProxyHandler.h \ Errors.msg \ NonRefcountedDOMObject.h \ Nullable.h \ PrimitiveConversions.h \ PrototypeList.h \ RegisterBindings.h \ TypedArray.h \ UnionConversions.h \ UnionTypes.h \ $(NULL) LOCAL_INCLUDES += -I$(topsrcdir)/js/xpconnect/src \ -I$(topsrcdir)/js/xpconnect/wrappers \ -I$(topsrcdir)/content/canvas/src \ -I$(topsrcdir)/content/html/content/src \ -I$(topsrcdir)/media/webrtc/signaling/src/peerconnection \ -I$(topsrcdir)/dom/base \ -I$(topsrcdir)/dom/battery \ -I$(topsrcdir)/dom/indexedDB \ -I$(topsrcdir)/content/xslt/src/base \ -I$(topsrcdir)/content/xslt/src/xpath \ -I$(topsrcdir)/content/xml/content/src \ -I$(topsrcdir)/content/xul/content/src \ $(NULL) ifdef MOZ_AUDIO_CHANNEL_MANAGER LOCAL_INCLUDES += \ -I$(topsrcdir)/dom/system/gonk \ $(NULL) endif # XXXkhuey this is a terrible hack to avoid blowing out the command line ifneq (,$(filter-out all chrome default export realchrome tools clean clobber clobber_all distclean realclean,$(MAKECMDGOALS))) $(shell echo "$(addsuffix .pp,$(binding_header_files))" > hpp.list) $(shell echo "$(addsuffix .pp,$(binding_cpp_files))" > cpp.list) # 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. HPP_PP_RESULTS = $(shell cat hpp.list | $(PERL) $(BUILD_TOOLS)/mddepend.pl) $(eval $(HPP_PP_RESULTS)) CPP_PP_RESULTS = $(shell cat cpp.list | $(PERL) $(BUILD_TOOLS)/mddepend.pl) $(eval $(CPP_PP_RESULTS)) endif EXPORTS_GENERATED_FILES := $(exported_binding_headers) EXPORTS_GENERATED_DEST := $(DIST)/include/$(binding_include_path) EXPORTS_GENERATED_TARGET := webidl-export INSTALL_TARGETS += EXPORTS_GENERATED ifdef GNU_CC CXXFLAGS += -Wno-uninitialized endif include $(topsrcdir)/config/rules.mk # We need to create a separate target so we can ensure that the pickle is # done before generating headers. export:: ParserResults.pkl $(MAKE) webidl-export # If you change bindinggen_dependencies here, change it in # dom/bindings/test/Makefile.in too. bindinggen_dependencies := \ BindingGen.py \ Bindings.conf \ Configuration.py \ Codegen.py \ parser/WebIDL.py \ $(GLOBAL_DEPS) \ $(NULL) CSS2Properties.webidl: $(topsrcdir)/layout/style/nsCSSPropList.h \ $(topsrcdir)/layout/style/nsCSSPropAliasList.h \ $(webidl_base)/CSS2Properties.webidl.in \ $(webidl_base)/CSS2PropertiesProps.h \ $(srcdir)/GenerateCSS2PropertiesWebIDL.py \ $(GLOBAL_DEPS) $(CPP) $(DEFINES) $(ACDEFINES) -I$(topsrcdir)/layout/style $(webidl_base)/CSS2PropertiesProps.h | \ PYTHONDONTWRITEBYTECODE=1 $(PYTHON) \ $(srcdir)/GenerateCSS2PropertiesWebIDL.py $(webidl_base)/CSS2Properties.webidl.in > CSS2Properties.webidl $(webidl_files): %: $(webidl_base)/% $(INSTALL) $(IFLAGS1) $(webidl_base)/$* . $(test_webidl_files): %: $(srcdir)/test/% $(INSTALL) $(IFLAGS1) $(srcdir)/test/$* . $(binding_header_files): %Binding.h: $(bindinggen_dependencies) \ %.webidl \ $(call mkdir_deps,$(MDDEPDIR)) \ $(NULL) PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \ $(PLY_INCLUDE) -I$(srcdir)/parser \ $(srcdir)/BindingGen.py header \ $(srcdir)/Bindings.conf \ $*Binding \ $(topsrcdir)/dom/webidl/ \ $*.webidl $(binding_cpp_files): %Binding.cpp: $(bindinggen_dependencies) \ %.webidl \ $(call mkdir_deps,$(MDDEPDIR)) \ $(NULL) PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \ $(PLY_INCLUDE) -I$(srcdir)/parser \ $(srcdir)/BindingGen.py cpp \ $(srcdir)/Bindings.conf \ $*Binding \ $(topsrcdir)/dom/webidl/ \ $*.webidl $(globalgen_targets): ParserResults.pkl %-example: $(bindinggen_dependencies) \ $(all_webidl_files) \ $(NULL) PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \ $(PLY_INCLUDE) -I$(srcdir)/parser \ $(srcdir)/ExampleGen.py \ $(srcdir)/Bindings.conf $* CACHE_DIR = _cache globalgen_dependencies := \ GlobalGen.py \ Bindings.conf \ Configuration.py \ Codegen.py \ parser/WebIDL.py \ ../webidl/WebIDL.mk \ $(all_webidl_files) \ $(CACHE_DIR)/.done \ $(GLOBAL_DEPS) \ $(NULL) $(CACHE_DIR)/.done: $(MKDIR) -p $(CACHE_DIR) @$(TOUCH) $@ ParserResults.pkl: $(globalgen_dependencies) PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \ $(PLY_INCLUDE) -I$(srcdir)/parser \ $(srcdir)/GlobalGen.py $(srcdir)/Bindings.conf . \ --cachedir=$(CACHE_DIR) \ $(all_webidl_files) GARBAGE += \ $(binding_header_files) \ $(binding_cpp_files) \ $(all_webidl_files) \ $(globalgen_targets) \ ParserResults.pkl \ webidlyacc.py \ parser.out \ $(wildcard *-example.h) \ $(wildcard *-example.cpp) \ $(NULL) # Make sure all binding header files are created during the export stage, so we # don't have issues with .cpp files being compiled before we've generated the # headers they depend on. This is really only needed for the test files, since # the non-test headers are all exported above anyway. webidl-export:: $(binding_header_files) .PHONY: webidl-export