Bug 1306329 - Backout 621aa115c3df (bug 1316450). r=me draft
authorMike Hommey <mh+mozilla@glandium.org>
Sat, 14 Jan 2017 07:47:43 +0900
changeset 460832 837f940b49dd95b75b76796000e937a16f6c0897
parent 460828 211f4bd538455281b640cd9bb663888513c1f0f3
child 460833 d8c243ebcc58fa9b00fbf599016517e500491c7f
push id41509
push userbmo:mh+mozilla@glandium.org
push dateFri, 13 Jan 2017 22:54:07 +0000
reviewersme
bugs1306329, 1316450
milestone53.0a1
Bug 1306329 - Backout 621aa115c3df (bug 1316450). r=me We're going to remove the xpcom glue, so there is no need to check that nothing depends on it anymore.
python/mozbuild/mozbuild/frontend/data.py
python/mozbuild/mozbuild/frontend/emitter.py
python/mozbuild/mozbuild/test/frontend/test_emitter.py
--- a/python/mozbuild/mozbuild/frontend/data.py
+++ b/python/mozbuild/mozbuild/frontend/data.py
@@ -312,26 +312,24 @@ class LinkageWrongKindError(Exception):
 
 class LinkageMultipleRustLibrariesError(Exception):
     """Error thrown when trying to link multiple Rust libraries to an object"""
 
 
 class Linkable(ContextDerived):
     """Generic context derived container object for programs and libraries"""
     __slots__ = (
-        'name',
         'cxx_link',
         'lib_defines',
         'linked_libraries',
         'linked_system_libs',
     )
 
-    def __init__(self, context, name):
+    def __init__(self, context):
         ContextDerived.__init__(self, context)
-        self.name = name
         self.cxx_link = False
         self.linked_libraries = []
         self.linked_system_libs = []
         self.lib_defines = Defines(context, {})
 
     def link_library(self, obj):
         assert isinstance(obj, BaseLibrary)
         if isinstance(obj, SharedLibrary) and obj.variant == obj.COMPONENT:
@@ -380,17 +378,17 @@ class BaseProgram(Linkable):
     DICT_ATTRS = {
         'install_target',
         'KIND',
         'program',
         'relobjdir',
     }
 
     def __init__(self, context, program, is_unit_test=False):
-        Linkable.__init__(self, context, program)
+        Linkable.__init__(self, context)
 
         bin_suffix = context.config.substs.get(self.SUFFIX_VAR, '')
         if not program.endswith(bin_suffix):
             program += bin_suffix
         self.program = program
         self.is_unit_test = is_unit_test
 
     def __repr__(self):
@@ -470,17 +468,17 @@ class BaseLibrary(Linkable):
     __slots__ = (
         'basename',
         'lib_name',
         'import_name',
         'refs',
     )
 
     def __init__(self, context, basename):
-        Linkable.__init__(self, context, basename)
+        Linkable.__init__(self, context)
 
         self.basename = self.lib_name = basename
         if self.lib_name:
             self.lib_name = '%s%s%s' % (
                 context.config.lib_prefix,
                 self.lib_name,
                 context.config.lib_suffix
             )
--- a/python/mozbuild/mozbuild/frontend/emitter.py
+++ b/python/mozbuild/mozbuild/frontend/emitter.py
@@ -98,26 +98,16 @@ from .context import (
     Path,
     SubContext,
     TemplateContext,
 )
 
 from mozbuild.base import ExecutionSummary
 
 
-ALLOWED_XPCOM_GLUE = {
-    ('xpcshell', 'js/xpconnect/shell'),
-    ('testcrasher', 'toolkit/crashreporter/test'),
-    ('TestMailCookie', 'mailnews/base/test'),
-    ('calbasecomps', 'calendar/base/backend/libical/build'),
-    ('purplexpcom', 'extensions/purple/purplexpcom/src'),
-    ('ipdlunittest', 'ipc/ipdl/test/cxx/app'),
-}
-
-
 class TreeMetadataEmitter(LoggingMixin):
     """Converts the executed mozbuild files into data structures.
 
     This is a bridge between reader.py and data.py. It takes what was read by
     reader.BuildReader and converts it into the classes defined in the data
     module.
     """
 
@@ -279,25 +269,21 @@ class TreeMetadataEmitter(LoggingMixin):
         'host': 'HOST_LIBRARY_NAME',
         'target': 'LIBRARY_NAME',
     }
 
     def _link_libraries(self, context, obj, variable):
         """Add linkage declarations to a given object."""
         assert isinstance(obj, Linkable)
 
-        use_xpcom = False
-
         for path in context.get(variable, []):
             force_static = path.startswith('static:') and obj.KIND == 'target'
             if force_static:
                 path = path[7:]
             name = mozpath.basename(path)
-            if name in ('xpcomglue', 'xpcomglue_s'):
-                use_xpcom = True
             dir = mozpath.dirname(path)
             candidates = [l for l in self._libs[name] if l.KIND == obj.KIND]
             if dir:
                 if dir.startswith('/'):
                     dir = mozpath.normpath(
                         mozpath.join(obj.topobjdir, dir[1:]))
                 else:
                     dir = mozpath.normpath(
@@ -374,48 +360,16 @@ class TreeMetadataEmitter(LoggingMixin):
                     SharedLibrary):
                 self._static_linking_shared.add(obj)
             obj.link_library(candidates[0])
 
         # Link system libraries from OS_LIBS/HOST_OS_LIBS.
         for lib in context.get(variable.replace('USE', 'OS'), []):
             obj.link_system_library(lib)
 
-        key = (obj.name, obj.relativedir)
-        substs = context.config.substs
-        extra_allowed = []
-        moz_build_app = substs.get('MOZ_BUILD_APP')
-        if moz_build_app is not None: # None during some test_emitter.py tests.
-            if moz_build_app.startswith('../'):
-                # For comm-central builds, where topsrcdir is not the root
-                # source dir.
-                moz_build_app = moz_build_app[3:]
-            extra_allowed = [
-                (substs.get('MOZ_APP_NAME'), '%s/app' % moz_build_app),
-                ('%s-bin' % substs.get('MOZ_APP_NAME'), '%s/app' % moz_build_app),
-            ]
-        if substs.get('MOZ_WIDGET_TOOLKIT') != 'android':
-            extra_allowed.append((substs.get('MOZ_CHILD_PROCESS_NAME'), 'ipc/app'))
-        else:
-            extra_allowed.append(('mozglue_android', 'mozglue/android'))
-
-        if key in ALLOWED_XPCOM_GLUE or key in extra_allowed:
-            if not use_xpcom:
-                raise SandboxValidationError(
-                    "%s is in the exception list for XPCOM glue dependency but "
-                    "doesn't depend on the XPCOM glue. Please adjust the list "
-                    "in %s." % (obj.name, __file__), context
-                )
-        elif use_xpcom:
-            raise SandboxValidationError(
-                "%s depends on the XPCOM glue. "
-                "No new dependency on the XPCOM glue is allowed."
-                % obj.name, context
-            )
-
     @memoize
     def _get_external_library(self, dir, name, force_static):
         # Create ExternalStaticLibrary or ExternalSharedLibrary object with a
         # context more or less truthful about where the external library is.
         context = Context(config=self.config)
         context.add_source(mozpath.join(self.config.topsrcdir, dir, 'dummy'))
         if force_static:
             return ExternalStaticLibrary(context, name)
--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py
+++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py
@@ -2,18 +2,16 @@
 # 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/.
 
 from __future__ import unicode_literals
 
 import os
 import unittest
 
-from collections import defaultdict
-from buildconfig import topsrcdir
 from mozunit import main
 
 from mozbuild.frontend.context import (
     ObjDirPath,
     Path,
 )
 from mozbuild.frontend.data import (
     AndroidResDirs,
@@ -1230,34 +1228,11 @@ class TestEmitterBasic(unittest.TestCase
         """Test that a SYMBOLS_FILE in the objdir that's missing
         from GENERATED_FILES is an error.
         """
         reader = self.reader('test-symbols-file-objdir-missing-generated')
         with self.assertRaisesRegexp(SandboxValidationError,
              'Objdir file specified in SYMBOLS_FILE not in GENERATED_FILES:'):
             self.read_topsrcdir(reader)
 
-    def test_allowed_xpcom_glue(self):
-        """Test that the ALLOWED_XPCOM_GLUE list is still relevant."""
-        from mozbuild.frontend.emitter import ALLOWED_XPCOM_GLUE
-
-        allowed = defaultdict(list)
-        useless = []
-        for name, path in ALLOWED_XPCOM_GLUE:
-            allowed[path].append(name)
-
-        for path, names in allowed.iteritems():
-            if path.startswith(('mailnews/', 'calendar/', 'extensions/purple/purplexpcom')):
-                continue
-            try:
-                content = open(os.path.join(topsrcdir, path, 'moz.build')).read()
-            except:
-                content = ''
-            for name in names:
-                if "'%s'" % name in content or '"%s"' % name in content:
-                    continue
-                useless.append((name, path))
-
-        self.assertEqual(useless, [])
-
 
 if __name__ == '__main__':
     main()