# 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@ include $(DEPTH)/config/autoconf.mk SUPPRESS_DEFAULT_RULES := 1 STANDALONE_MAKEFILE := 1 include $(topsrcdir)/config/rules.mk # Building XPIDLs effectively consists of two steps: # # 1) Staging all .idl files to a common directory. # 2) Doing everything with the .idl files. # # Each .idl file is processed into a .h file and typelib information. # The .h file shares the same stem as the input file and is installed # in the common headers include directory. # # XPIDL files are logically grouped together by modules. The typelib # information for all XPIDLs in the same module is linked together into # an .xpt file having the name of the module. # # As an optimization to reduce overall CPU usage, we process all .idl # belonging to a module with a single command invocation. This prevents # redundant parsing of .idl files and significantly reduces CPU cycles. # For dependency files. idl_deps_dir := .deps # Where we put our final, linked .xpt files. idl_xpt_dir := xpt dist_idl_dir := $(DIST)/idl dist_include_dir := $(DIST)/include process_py := $(topsrcdir)/python/mozbuild/mozbuild/action/xpidl-process.py # TODO we should use py_action, but that would require extra directories to be # in the virtualenv. idlprocess := $(PYTHON_PATH) $(PLY_INCLUDE) -I$(IDL_PARSER_DIR) -I$(IDL_PARSER_CACHE_DIR) \ $(process_py) --cache-dir $(IDL_PARSER_CACHE_DIR) $(dist_idl_dir) \ $(dist_include_dir) $(idl_xpt_dir) $(idl_deps_dir) xpidl_modules := @xpidl_modules@ @xpidl_rules@ linked_xpt_files := $(addprefix $(idl_xpt_dir)/,$(addsuffix .xpt,$(xpidl_modules))) depends_files := $(foreach root,$(xpidl_modules),$(idl_deps_dir)/$(root).pp) xpidl:: $(linked_xpt_files) $(linked_xpt_files): $(process_py) $(call mkdir_deps,$(idl_deps_dir) $(idl_xpt_dir)) ifdef .PYMAKE -includedeps $(depends_files) else -include $(depends_files) endif .PHONY: xpidl