Bug 896797 - Part 2: Don't list autogenerated files in EXPORTS; r=glandium
☠☠ backed out by 49c8cb0df337 ☠ ☠
authorGregory Szorc <gps@mozilla.com>
Tue, 03 Sep 2013 20:28:05 -0700
changeset 153394 cc6f66e761d86fc1f4b89e08eb8413fd95b56110
parent 153393 d5b67c93e1a0e0f951500a1d31388961127689f4
child 153395 77f91c65d1627541870906df804800b7be4b454e
push id4254
push userakeybl@mozilla.com
push dateTue, 17 Sep 2013 14:18:33 +0000
treeherdermozilla-aurora@9edd56e694b0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersglandium
bugs896797
milestone26.0a1
Bug 896797 - Part 2: Don't list autogenerated files in EXPORTS; r=glandium
accessible/public/ia2/Makefile.in
accessible/public/ia2/moz.build
accessible/public/msaa/Makefile.in
accessible/public/msaa/moz.build
accessible/src/xpcom/Makefile.in
accessible/src/xpcom/moz.build
dom/bindings/Makefile.in
dom/bindings/moz.build
gfx/cairo/cairo/src/Makefile.in
gfx/cairo/cairo/src/moz.build
gfx/layers/moz.build
js/src/Makefile.in
js/src/moz.build
js/xpconnect/src/Makefile.in
js/xpconnect/src/moz.build
layout/style/Makefile.in
layout/style/moz.build
netwerk/Makefile.in
netwerk/moz.build
python/mozbuild/mozbuild/backend/recursivemake.py
python/mozbuild/mozbuild/test/backend/data/exports/dom1.h
python/mozbuild/mozbuild/test/backend/data/exports/dom2.h
python/mozbuild/mozbuild/test/backend/data/exports/foo.h
python/mozbuild/mozbuild/test/backend/data/exports/gfx.h
python/mozbuild/mozbuild/test/backend/data/exports/mozilla1.h
python/mozbuild/mozbuild/test/backend/data/exports/mozilla2.h
python/mozbuild/mozbuild/test/backend/data/exports/pprio.h
toolkit/components/telemetry/Makefile.in
toolkit/components/telemetry/moz.build
uriloader/exthandler/moz.build
xpcom/Makefile.in
xpcom/base/Makefile.in
xpcom/base/moz.build
xpcom/moz.build
--- a/accessible/public/ia2/Makefile.in
+++ b/accessible/public/ia2/Makefile.in
@@ -62,16 +62,21 @@ MIDL_GENERATED_FILES = \
   $(MIDL_INTERFACES:%.idl=%_p.c) \
   $(MIDL_INTERFACES:%.idl=%_i.c) \
   $(MIDL_INTERFACES:%.idl=%.h) \
   $(MIDL_ENUMS:%.idl=%.h) \
   $(NULL)
 
 EMBED_MANIFEST_AT = 2
 
+INSTALL_TARGETS += midl
+midl_FILES := $(filter %.h,$(MIDL_GENERATED_FILES)) $(filter %._i.c,$(MIDL_GENERATED_FILES))
+midl_DEST = $(DIST)/include
+midl_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 
 OS_LIBS = $(call EXPAND_LIBNAME,uuid kernel32 rpcns4 rpcrt4 ole32 oleaut32)
 
 # generate list of to-be-generated files that are missing
 # but ignore special file dlldata.c
 missing:=$(strip $(foreach onefile,$(strip $(subst dlldata.c,,$(MIDL_GENERATED_FILES))),$(if $(wildcard $(onefile)),,$(onefile))))
 
--- a/accessible/public/ia2/moz.build
+++ b/accessible/public/ia2/moz.build
@@ -1,53 +1,9 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # 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/.
 
 MODULE = 'accessibility'
-
-# Please keep this list in sync with the Makefile.in until the rest of that file
-# is ported over.
-midl_interfaces = [
-    'Accessible2',
-    'Accessible2_2',
-    'AccessibleAction',
-    'AccessibleApplication',
-    'AccessibleComponent',
-    'AccessibleDocument',
-    'AccessibleEditableText',
-    'AccessibleHyperlink',
-    'AccessibleHypertext',
-    'AccessibleHypertext2',
-    'AccessibleImage',
-    'AccessibleRelation',
-    'AccessibleTable',
-    'AccessibleTable2',
-    'AccessibleTableCell',
-    'AccessibleText',
-    'AccessibleText2',
-    'AccessibleValue',
-]
-
-# Please keep this list in sync with the Makefile.in until the rest of that file
-# is ported over.
-midl_enums = [
-    'AccessibleEventId',
-    'AccessibleRole',
-    'AccessibleStates',
-    'IA2CommonTypes',
-]
-
-headers = ['%s.h' % x for x in midl_enums]
-interfaces_h = ['%s.h' % x for x in midl_interfaces]
-interfaces_c = ['%s_i.c' % x for x in midl_interfaces]
-
-# The underscore throws off sorting and EXPORTS expects sorted lists.
-interfaces_c.sort()
-
-EXPORTS += headers
-EXPORTS += interfaces_h
-EXPORTS += interfaces_c
-
 LIBRARY_NAME = 'IA2Marshal'
 
--- a/accessible/public/msaa/Makefile.in
+++ b/accessible/public/msaa/Makefile.in
@@ -55,10 +55,24 @@ done_gen: ISimpleDOMNode.idl \
 export:: done_gen
 
 # This marshall dll is also registered in the installer
 register::
 	regsvr32 -s $(DIST)/bin/$(SHARED_LIBRARY)
 
 EMBED_MANIFEST_AT = 2
 
+midl_exports := \
+    ISimpleDOMDocument.h \
+    ISimpleDOMDocument_i.c \
+    ISimpleDOMNode.h \
+    ISimpleDOMNode_i.c \
+    ISimpleDOMText.h \
+    ISimpleDOMText_i.c \
+    $(NULL)
+
+INSTALL_TARGETS += midl_exports
+midl_exports_FILES := $(midl_exports)
+midl_exports_DEST = $(DIST)/include
+midl_exports_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 
--- a/accessible/public/msaa/moz.build
+++ b/accessible/public/msaa/moz.build
@@ -1,19 +1,10 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # 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/.
 
 MODULE = 'accessibility'
 
-EXPORTS += [
-    'ISimpleDOMDocument.h',
-    'ISimpleDOMDocument_i.c',
-    'ISimpleDOMNode.h',
-    'ISimpleDOMNode_i.c',
-    'ISimpleDOMText.h',
-    'ISimpleDOMText_i.c',
-]
-
 LIBRARY_NAME = 'AccessibleMarshal'
 
--- a/accessible/src/xpcom/Makefile.in
+++ b/accessible/src/xpcom/Makefile.in
@@ -6,16 +6,21 @@ DEPTH = @DEPTH@
 topsrcdir = @top_srcdir@
 srcdir = @srcdir@
 VPATH = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 EXTRA_MDDEPEND_FILES = xpcAccEvents.pp
 
+INSTALL_TARGETS += xpcaccevents
+xpcaccevents_FILES := xpcAccEvents.h
+xpcaccevents_DEST = $(DIST)/include
+xpcaccevents_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 
 LOCAL_INCLUDES = \
   -I$(srcdir)/../base \
   -I$(srcdir)/../generic \
   $(NULL)
 
 ifdef MOZ_ENABLE_GTK
--- a/accessible/src/xpcom/moz.build
+++ b/accessible/src/xpcom/moz.build
@@ -1,20 +1,16 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # 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/.
 
 MODULE = 'accessibility'
 
-EXPORTS += [
-    'xpcAccEvents.h',
-]
-
 CPP_SOURCES += [
     'nsAccessibleRelation.cpp',
     'xpcAccEvents.cpp',
     'xpcAccessibleTable.cpp',
     'xpcAccessibleTableCell.cpp',
 ]
 
 LIBRARY_NAME = 'accessibility_xpcom_s'
--- a/dom/bindings/Makefile.in
+++ b/dom/bindings/Makefile.in
@@ -105,16 +105,17 @@ EXPORTS_GENERATED_FILES := $(exported_bi
 EXPORTS_GENERATED_DEST := $(DIST)/include/$(binding_include_path)
 EXPORTS_GENERATED_TARGET := export
 INSTALL_TARGETS += EXPORTS_GENERATED
 
 # Install auto-generated GlobalGen files. The rules for the install must
 # be in the same target/subtier as GlobalGen.py, otherwise the files will not
 # get installed into the appropriate location as they are generated.
 globalgen_headers_FILES := \
+  GeneratedAtomList.h \
   PrototypeList.h \
   RegisterBindings.h \
   UnionConversions.h \
   UnionTypes.h \
   $(NULL)
 globalgen_headers_DEST = $(DIST)/include/mozilla/dom
 globalgen_headers_TARGET := webidl
 INSTALL_TARGETS += globalgen_headers
--- a/dom/bindings/moz.build
+++ b/dom/bindings/moz.build
@@ -16,17 +16,16 @@ EXPORTS.mozilla.dom += [
     'BindingUtils.h',
     'CallbackFunction.h',
     'CallbackInterface.h',
     'CallbackObject.h',
     'DOMJSClass.h',
     'DOMJSProxyHandler.h',
     'Date.h',
     'Errors.msg',
-    'GeneratedAtomList.h',
     'JSSlots.h',
     'NonRefcountedDOMObject.h',
     'Nullable.h',
     'PrimitiveConversions.h',
     'TypedArray.h',
 ]
 
 FAIL_ON_WARNINGS = True
--- a/gfx/cairo/cairo/src/Makefile.in
+++ b/gfx/cairo/cairo/src/Makefile.in
@@ -88,16 +88,21 @@ endif
 
 ifdef MOZ_ENABLE_CAIRO_FT
 CSRCS   += cairo-ft-font.c cairo-type1-subset.c
 OS_INCLUDES += $(CAIRO_FT_CFLAGS)
 endif
 
 LOCAL_INCLUDES  += -I$(srcdir)
 
+INSTALL_TARGETS += cairo_features
+cairo_features_FILES := cairo-features.h
+cairo_features_DEST = $(DIST)/include/cairo
+cairo_features_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 
 ifdef GNU_CC
 # Disable spammy "missing initializer" GCC warning
 CFLAGS += -Wno-missing-field-initializers
 
 # Disable spammy "implicit conversion from enumeration type 'cairo_" warnings.
 CFLAGS += -Wno-conversion
--- a/gfx/cairo/cairo/src/moz.build
+++ b/gfx/cairo/cairo/src/moz.build
@@ -5,17 +5,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 CONFIGURE_SUBST_FILES += ['cairo-features.h']
 
 MODULE = 'cairo'
 
 EXPORTS.cairo += [
     'cairo-deprecated.h',
-    'cairo-features.h',
     'cairo-platform.h',
     'cairo-rename.h',
     'cairo-tee.h',
     'cairo-version.h',
     'cairo.h',
 ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
--- a/gfx/layers/moz.build
+++ b/gfx/layers/moz.build
@@ -48,18 +48,18 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
         'D3D9SurfaceImage.cpp',
     ]
     if CONFIG['MOZ_ENABLE_D3D9_LAYER']:
         EXPORTS += [
             'd3d9/DeviceManagerD3D9.h',
             'd3d9/LayerManagerD3D9.h',
         ]
         EXPORTS.mozilla.layers += [
-            'CompositorD3D9.h',
-            'TextureD3D9.h',
+            'd3d9/CompositorD3D9.h',
+            'd3d9/TextureD3D9.h',
         ]
         CPP_SOURCES += [
             'CompositorD3D9.cpp',
             'TextureD3D9.cpp',
             'LayerManagerD3D9.cpp',
             'ThebesLayerD3D9.cpp',
             'ContainerLayerD3D9.cpp',
             'ImageLayerD3D9.cpp',
@@ -95,18 +95,16 @@ EXPORTS.gfxipc += [
     'ipc/ShadowLayerUtils.h',
 ]
 
 EXPORTS.mozilla.layers += [
     'Compositor.h',
     'CompositorTypes.h',
     'D3D9SurfaceImage.h',
     'Effects.h',
-    'GrallocTextureClient.h',
-    'GrallocTextureHost.h',
     'ImageDataSerializer.h',
     'LayersTypes.h',
     'RenderTrace.h',
     'YCbCrImageDataSerializer.h',
     'basic/BasicCompositor.h',
     'client/CanvasClient.h',
     'client/CompositableClient.h',
     'client/ContentClient.h',
@@ -140,16 +138,18 @@ EXPORTS.mozilla.layers += [
     'ipc/LayerTransactionParent.h',
     'ipc/ShadowLayers.h',
     'ipc/ShadowLayersManager.h',
     'ipc/SharedPlanarYCbCrImage.h',
     'ipc/SharedRGBImage.h',
     'ipc/TaskThrottler.h',
     'opengl/CompositingRenderTargetOGL.h',
     'opengl/CompositorOGL.h',
+    'opengl/GrallocTextureClient.h',
+    'opengl/GrallocTextureHost.h',
     'opengl/TextureClientOGL.h',
     'opengl/TextureHostOGL.h',
 ]
 
 if CONFIG['MOZ_X11']:
     EXPORTS.mozilla.layers += [
         'ipc/ShadowLayerUtilsX11.h',
     ]
--- a/js/src/Makefile.in
+++ b/js/src/Makefile.in
@@ -196,16 +196,26 @@ EXTRA_DSO_LDOPTS += -Wl,-version-script,
 
 symverscript: symverscript.in
 	$(PYTHON) $(topsrcdir)/config/Preprocessor.py \
 		-DVERSION="$(subst -,_,$(LIBRARY_NAME))" $< > $@
 
 EXTRA_DEPS += symverscript
 endif
 
+export_files = js-config.h
+ifdef HAVE_DTRACE
+export_files += $(CURDIR)/javascript-trace.h
+endif
+
+INSTALL_TARGETS += jsconfig
+jsconfig_FILES = $(export_files)
+jsconfig_DEST = $(DIST)/include
+jsconfig_TARGETS := export
+
 include $(topsrcdir)/config/rules.mk
 
 ifdef JS_HAS_CTYPES
 ifndef MOZ_NATIVE_FFI
 # Build libffi proper as part of the 'exports' target, so things get built
 # in the right order.
 export::
 		$(call SUBMAKE,,ctypes/libffi)
--- a/js/src/moz.build
+++ b/js/src/moz.build
@@ -26,17 +26,16 @@ else:
     LIBRARY_NAME = 'mozjs'
 
 CONFIGURE_SUBST_FILES += ['devtools/rootAnalysis/Makefile']
 
 # Changes to internal header files, used externally, massively slow down
 # browser builds.  Don't add new files here unless you know what you're
 # doing!
 EXPORTS += [
-    'js-config.h',
     'js.msg',
     'jsalloc.h',
     'jsapi.h',
     'jsbytecode.h',
     'jsclist.h',
     'jscpucfg.h',
     'jsfriendapi.h',
     'jsprf.h',
@@ -44,21 +43,16 @@ EXPORTS += [
     'jsproxy.h',
     'jspubtd.h',
     'jstypes.h',
     'jsversion.h',
     'jswrapper.h',
     'perf/jsperf.h',
 ]
 
-if CONFIG['HAVE_DTRACE']:
-    EXPORTS += [
-        '$(CURDIR)/javascript-trace.h',
-    ]
-
 # If you add a header here, add it to js/src/jsapi-tests/testIntTypesABI.cpp so
 # that we ensure we don't over-expose our internal integer typedefs.  Note that
 # LegacyIntTypes.h below is deliberately exempted from this requirement.
 EXPORTS.js += [
     '../public/Anchor.h',
     '../public/CallArgs.h',
     '../public/CallNonGenericMethod.h',
     '../public/CharacterEncoding.h',
--- a/js/xpconnect/src/Makefile.in
+++ b/js/xpconnect/src/Makefile.in
@@ -35,16 +35,25 @@ endif
 
 SHARED_LIBRARY_LIBS = \
   ../loader/$(LIB_PREFIX)jsloader_s.$(LIB_SUFFIX) \
   ../wrappers/$(LIB_PREFIX)xpcwrappers_s.$(LIB_SUFFIX) \
   $(NULL)
 
 EXTRA_MDDEPEND_FILES = dom_qsgen.pp dictionary_helper_gen.pp event_impl_gen.pp
 
+INSTALL_TARGETS += extra_export_files
+extra_export_files_FILES := \
+  DictionaryHelpers.h \
+  GeneratedEventClasses.h \
+  GeneratedEvents.h \
+  $(NULL)
+extra_export_files_DEST = $(DIST)/include
+extra_export_files_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 include $(topsrcdir)/ipc/chromium/chromium-config.mk
 
 DEFINES += \
   -DJSFILE \
   -DJS_THREADSAFE \
   -DEXPORT_XPC_API \
   $(NULL)
@@ -142,24 +151,16 @@ GeneratedEvents-webidl: event_impl_gen.c
 	$(PYTHON) $(topsrcdir)/config/pythonpath.py \
 	  $(PLY_INCLUDE) \
 	  -I$(LIBXUL_DIST)/sdk/bin \
 	  $(srcdir)/event_impl_gen.py \
 	  -I $(DEPTH)/dist/idl \
 	  --webidltarget=$(top_srcdir)/dom/webidl \
 	  event_impl_gen.conf
 
-_EXTRA_EXPORT_FILES = \
-  DictionaryHelpers.h \
-  GeneratedEventClasses.h \
-  $(NULL)
-
-libs:: $(_EXTRA_EXPORT_FILES)
-	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/dist/include
-
 GARBAGE += \
 		dom_quickstubs.h \
 		dom_quickstubs.cpp \
 		DictionaryHelpers.h \
 		DictionaryHelpers.cpp \
 		GeneratedEvents.h \
 		GeneratedEvents.cpp \
 		GeneratedEventClasses.h \
--- a/js/xpconnect/src/moz.build
+++ b/js/xpconnect/src/moz.build
@@ -3,17 +3,16 @@
 # 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/.
 
 MODULE = 'xpconnect'
 
 EXPORTS += [
     'BackstagePass.h',
-    'GeneratedEvents.h',
     'XPCJSMemoryReporter.h',
     'nsCxPusher.h',
     'qsObjectHelper.h',
     'xpcObjectHelper.h',
     'xpcpublic.h',
 ]
 
 CPP_SOURCES += [
--- a/layout/style/Makefile.in
+++ b/layout/style/Makefile.in
@@ -9,16 +9,21 @@ VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 ifdef GNU_CC
 OS_CFLAGS := $(OS_CFLAGS) -Wshadow
 OS_CXXFLAGS := $(OS_CXXFLAGS) -Wshadow
 endif
 
+INSTALL_TARGETS += structlist
+structlist_FILES := nsStyleStructList.h
+structlist_DEST = $(DIST)/include
+structlist_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 include $(topsrcdir)/ipc/chromium/chromium-config.mk
 
 LOCAL_INCLUDES	+= \
 		-I$(srcdir)/../base \
 		-I$(topsrcdir)/dom/base \
 		-I$(srcdir)/../generic \
 		-I$(srcdir)/../xul/base/src \
--- a/layout/style/moz.build
+++ b/layout/style/moz.build
@@ -49,17 +49,16 @@ EXPORTS += [
     'nsStyleAnimation.h',
     'nsStyleConsts.h',
     'nsStyleContext.h',
     'nsStyleCoord.h',
     'nsStyleSet.h',
     'nsStyleStruct.h',
     'nsStyleStructFwd.h',
     'nsStyleStructInlines.h',
-    'nsStyleStructList.h',
     'nsStyleTransformMatrix.h',
     'nsStyleUtil.h',
 ]
 
 EXPORTS.mozilla.dom += [
     'CSS.h',
     'CSSValue.h',
 ]
new file mode 100644
--- /dev/null
+++ b/netwerk/Makefile.in
@@ -0,0 +1,15 @@
+# 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@
+
+INSTALL_TARGETS += neckoconfig
+neckoconfig_FILES := necko-config.h
+neckoconfig_DEST = $(DIST)/include
+neckoconfig_TARGET := export
+
+include $(topsrcdir)/config/rules.mk
--- a/netwerk/moz.build
+++ b/netwerk/moz.build
@@ -30,13 +30,8 @@ PARALLEL_DIRS += ['locales']
 
 if CONFIG['MOZ_DASH']:
     PARALLEL_DIRS += ['dash']
 
 DIRS += ['build']
 TEST_TOOL_DIRS += ['test']
 
 MODULE = 'necko'
-
-EXPORTS += [
-    'necko-config.h',
-]
-
--- a/python/mozbuild/mozbuild/backend/recursivemake.py
+++ b/python/mozbuild/mozbuild/backend/recursivemake.py
@@ -203,17 +203,17 @@ class RecursiveMakeBackend(CommonBackend
                     for item in v:
                         backend_file.write('%s += %s\n' % (k, item))
                 elif isinstance(v, bool):
                     if v:
                         backend_file.write('%s := 1\n' % k)
                 else:
                     backend_file.write('%s := %s\n' % (k, v))
         elif isinstance(obj, Exports):
-            self._process_exports(obj.exports, backend_file)
+            self._process_exports(obj, obj.exports, backend_file)
 
         elif isinstance(obj, IPDLFile):
             self._ipdl_sources.add(mozpath.join(obj.srcdir, obj.basename))
 
         elif isinstance(obj, Program):
             self._process_program(obj.program, backend_file)
 
         elif isinstance(obj, XpcshellManifests):
@@ -362,39 +362,43 @@ class RecursiveMakeBackend(CommonBackend
 
         if len(obj.external_make_dirs):
             fh.write('DIRS += %s\n' % ' '.join(obj.external_make_dirs))
 
         if len(obj.parallel_external_make_dirs):
             fh.write('PARALLEL_DIRS += %s\n' %
                 ' '.join(obj.parallel_external_make_dirs))
 
-    def _process_exports(self, exports, backend_file, namespace=""):
+    def _process_exports(self, obj, exports, backend_file, namespace=""):
         strings = exports.get_strings()
         if namespace:
             if strings:
                 backend_file.write('EXPORTS_NAMESPACES += %s\n' % namespace)
             export_name = 'EXPORTS_%s' % namespace
             namespace += '/'
         else:
             export_name = 'EXPORTS'
 
         # Iterate over the list of export filenames, printing out an EXPORTS
         # declaration for each.
         if strings:
             backend_file.write('%s += %s\n' % (export_name, ' '.join(strings)))
 
             for s in strings:
+                source = os.path.normpath(os.path.join(obj.srcdir, s))
+                if not os.path.isfile(source):
+                    raise Exception('File listed in EXPORTS does not exist: %s' % source)
+
                 p = '%s%s' % (namespace, s)
                 self._purge_manifests['dist_include'].add(p)
 
         children = exports.get_children()
         for subdir in sorted(children):
-            self._process_exports(children[subdir], backend_file,
-                                  namespace=namespace + subdir)
+            self._process_exports(obj, children[subdir], backend_file,
+                namespace=namespace + subdir)
 
     def _handle_idl_manager(self, manager):
         build_files = self._purge_manifests['xpidl']
 
         for p in ('Makefile', 'backend.mk', '.deps/.mkdir.done',
             'headers/.mkdir.done', 'xpt/.mkdir.done'):
             build_files.add(p)
 
new file mode 100644
new file mode 100644
new file mode 100644
new file mode 100644
new file mode 100644
new file mode 100644
new file mode 100644
--- a/toolkit/components/telemetry/Makefile.in
+++ b/toolkit/components/telemetry/Makefile.in
@@ -25,16 +25,21 @@ ifdef MOZILLA_OFFICIAL
 DEFINES += -DMOZILLA_OFFICIAL
 endif
 
 MOZ_HISTOGRAMS_VERSION ?= $(call getSourceRepo)/rev/$(firstword $(shell hg -R $(topsrcdir) parent --template="{node|short}\n" 2>/dev/null))
 ifdef MOZ_HISTOGRAMS_VERSION
 DEFINES += -DHISTOGRAMS_FILE_VERSION="$(MOZ_HISTOGRAMS_VERSION)"
 endif
 
+INSTALL_TARGETS += histoenums
+histoenums_FILES := TelemetryHistogramEnums.h
+histoenums_DEST = $(DIST)/include/mozilla
+histoenums_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 include $(topsrcdir)/ipc/chromium/chromium-config.mk
 
 histograms_file := $(srcdir)/Histograms.json
 histogram_enum_file := TelemetryHistogramEnums.h
 histogram_data_file := TelemetryHistogramData.inc
 
 enum_python_deps := \
--- a/toolkit/components/telemetry/moz.build
+++ b/toolkit/components/telemetry/moz.build
@@ -11,17 +11,16 @@ XPIDL_SOURCES += [
     'nsITelemetryPing.idl',
 ]
 
 MODULE = 'telemetry'
 
 EXPORTS.mozilla += [
     'ProcessedStack.h',
     'Telemetry.h',
-    'TelemetryHistogramEnums.h',
 ]
 
 CPP_SOURCES += [
     'Telemetry.cpp',
 ]
 
 EXTRA_COMPONENTS += [
     'TelemetryPing.manifest',
--- a/uriloader/exthandler/moz.build
+++ b/uriloader/exthandler/moz.build
@@ -37,22 +37,24 @@ EXPORTS += [
 ]
 
 EXPORTS += [
     'nsExternalHelperAppService.h',
 ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
     EXPORTS += [
-        'nsExternalSharingAppService.h',
-        'nsExternalURLHandlerService.h',
+        osdir + '/nsExternalSharingAppService.h',
+        osdir + '/nsExternalURLHandlerService.h',
     ]
 
 if CONFIG['MOZ_ENABLE_MEEGOTOUCHSHARE']:
-    EXPORTS += ['nsExternalSharingAppService.h']
+    EXPORTS += [
+        osdir + '/nsExternalSharingAppService.h',
+    ]
 
 EXPORTS.mozilla.dom += [
     'ExternalHelperAppChild.h',
     'ExternalHelperAppParent.h',
 ]
 
 CPP_SOURCES += [
     'ExternalHelperAppChild.cpp',
new file mode 100644
--- /dev/null
+++ b/xpcom/Makefile.in
@@ -0,0 +1,15 @@
+# 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@
+
+INSTALL_TARGETS += xpcom
+xpcom_FILES := xpcom-config.h
+xpcom_DEST = $(DIST)/include
+xpcom_TARGET := export
+
+include $(topsrcdir)/config/rules.mk
--- a/xpcom/base/Makefile.in
+++ b/xpcom/base/Makefile.in
@@ -14,16 +14,24 @@ MOZILLA_INTERNAL_API =1
 ifeq ($(OS_ARCH),WINNT)
 
 ifdef MOZ_DEBUG
 CSRCS		+= pure_api.c
 endif
 
 endif #if OS_ARCH == WINNT
 
+INSTALL_TARGETS += errorlist
+errorlist_FILES := \
+  ErrorListCDefines.h \
+  ErrorListCxxDefines.h \
+  $(NULL)
+errorlist_DEST = $(DIST)/include
+errorlist_TARGET := export
+
 include $(topsrcdir)/config/rules.mk
 include $(topsrcdir)/ipc/chromium/chromium-config.mk
 
 ifdef MOZ_WIDGET_GTK
 CXXFLAGS        += $(TK_CFLAGS)
 endif
 
 LOCAL_INCLUDES += \
--- a/xpcom/base/moz.build
+++ b/xpcom/base/moz.build
@@ -38,18 +38,16 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco
     ]
 
 XPIDL_MODULE = 'xpcom_base'
 
 MODULE = 'xpcom'
 
 EXPORTS += [
     'ErrorList.h',
-    'ErrorListCDefines.h',
-    'ErrorListCxxDefines.h',
     'nsAgg.h',
     'nsAutoPtr.h',
     'nsAutoRef.h',
     'nsCom.h',
     'nsCycleCollector.h',
     'nsDebugImpl.h',
     'nsError.h',
     'nsGZFileWriter.h',
--- a/xpcom/moz.build
+++ b/xpcom/moz.build
@@ -34,13 +34,8 @@ TEST_TOOL_DIRS += [
 #    'reflect/xptinfo/tests',
 #    'reflect/xptcall/tests,
 #]
 
 if CONFIG['DEHYDRA_PATH']:
     DIRS += ['analysis']
 
 MODULE = 'xpcom'
-
-# xpcom-config.h is generated by configure
-EXPORTS += [
-    'xpcom-config.h',
-]