Bug 1370695 - Remove build system code handling binary components. r=glandium
authorChris Manchester <cmanchester@mozilla.com>
Tue, 13 Jun 2017 16:01:45 -0700
changeset 363956 51d1ab9b2e524c089170a3477d03b90807606827
parent 363955 7f2e9866b29bf07f239ff8d47db01a235d95ac4f
child 363957 33b0a8337b9e1efb66ae78815f8734b465c69651
push id32029
push userarchaeopteryx@coole-files.de
push dateThu, 15 Jun 2017 08:54:25 +0000
treeherdermozilla-central@dced94de288a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersglandium
bugs1370695
milestone56.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1370695 - Remove build system code handling binary components. r=glandium MozReview-Commit-ID: BKHWR34vWsu
build/docs/defining-binaries.rst
build/gecko_templates.mozbuild
build/unix/gnu-ld-scripts/components-export-list
build/unix/gnu-ld-scripts/components-version-script
config/makefiles/target_binaries.mk
config/rules.mk
old-configure.in
python/mozbuild/mozbuild/backend/recursivemake.py
python/mozbuild/mozbuild/frontend/context.py
python/mozbuild/mozbuild/frontend/data.py
python/mozbuild/mozbuild/frontend/emitter.py
python/mozbuild/mozbuild/test/backend/data/binary-components/bar/moz.build
python/mozbuild/mozbuild/test/backend/data/binary-components/foo/moz.build
python/mozbuild/mozbuild/test/backend/data/binary-components/moz.build
python/mozbuild/mozbuild/test/backend/test_recursivemake.py
python/mozbuild/mozbuild/test/frontend/data/binary-components/bar/moz.build
python/mozbuild/mozbuild/test/frontend/data/binary-components/foo/moz.build
python/mozbuild/mozbuild/test/frontend/data/binary-components/moz.build
python/mozbuild/mozbuild/test/frontend/test_emitter.py
--- a/build/docs/defining-binaries.rst
+++ b/build/docs/defining-binaries.rst
@@ -333,16 +333,13 @@ templates exists to ease defining such p
 essentially the same as the above mentioned templates, prefixed with "Gecko":
 
   - ``GeckoProgram``
   - ``GeckoSimplePrograms``
   - ``GeckoCppUnitTests``
   - ``GeckoSharedLibrary``
   - ``GeckoFramework``
 
-There is also ``XPCOMBinaryComponent`` for XPCOM components, which is a
-special kind of library.
-
 All the Gecko-prefixed templates take the same arguments as their
 non-Gecko-prefixed counterparts, and can take a few more arguments
 for non-standard cases. See the definition of ``GeckoBinary`` in
 build/gecko_templates.mozbuild for more details, but most usecases
 should not require these additional arguments.
--- a/build/gecko_templates.mozbuild
+++ b/build/gecko_templates.mozbuild
@@ -143,19 +143,8 @@ def GeckoFramework(name, **kwargs):
     `name` identifies the library base name.
     See the documentation for `GeckoBinary` for other possible arguments.
     '''
     Framework(name)
 
     kwargs.setdefault('mozglue', 'library')
 
     GeckoBinary(**kwargs)
-
-
-@template
-def XPCOMBinaryComponent(name):
-    '''Template defining an XPCOM binary component for Gecko.
-
-    `name` is the name of the component.
-    '''
-    GeckoSharedLibrary(name)
-
-    IS_COMPONENT = True
deleted file mode 100644
--- a/build/unix/gnu-ld-scripts/components-export-list
+++ /dev/null
@@ -1,1 +0,0 @@
-_NSModule
deleted file mode 100644
--- a/build/unix/gnu-ld-scripts/components-version-script
+++ /dev/null
@@ -1,7 +0,0 @@
-EXPORTED {
-   global:
-		NSModule;
-		NSGetModule;
-		__RLD_MAP;
-   local: *;
-};
--- a/config/makefiles/target_binaries.mk
+++ b/config/makefiles/target_binaries.mk
@@ -9,28 +9,20 @@ ifndef NO_DIST_INSTALL
 
 ifneq (,$(strip $(PROGRAM)$(SIMPLE_PROGRAMS)$(RUST_PROGRAMS)))
 PROGRAMS_EXECUTABLES = $(SIMPLE_PROGRAMS) $(PROGRAM) $(RUST_PROGRAMS)
 PROGRAMS_DEST ?= $(FINAL_TARGET)
 PROGRAMS_TARGET := target
 INSTALL_TARGETS += PROGRAMS
 endif
 
-ifdef LIBRARY
-ifdef DIST_INSTALL
-ifdef IS_COMPONENT
-$(error Shipping static component libs makes no sense.)
-endif
-endif # DIST_INSTALL
-endif # LIBRARY
-
 
 ifdef SHARED_LIBRARY
 SHARED_LIBRARY_FILES = $(SHARED_LIBRARY)
-SHARED_LIBRARY_DEST ?= $(FINAL_TARGET)$(if $(IS_COMPONENT),/components)
+SHARED_LIBRARY_DEST ?= $(FINAL_TARGET)
 SHARED_LIBRARY_TARGET = target
 INSTALL_TARGETS += SHARED_LIBRARY
 endif # SHARED_LIBRARY
 
 ifneq (,$(strip $(HOST_SIMPLE_PROGRAMS)$(HOST_PROGRAM)))
 HOST_PROGRAMS_EXECUTABLES = $(HOST_SIMPLE_PROGRAMS) $(HOST_PROGRAM) $(HOST_RUST_PROGRAMS)
 HOST_PROGRAMS_DEST ?= $(DIST)/host/bin
 HOST_PROGRAMS_TARGET = host
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -324,105 +324,43 @@ TAG_PROGRAM		= xargs etags -a
 # (moved this from config.mk so that config.mk can be included
 #  before the CPPSRCS are defined)
 #
 ifneq ($(HOST_CPPSRCS)$(HOST_CMMSRCS),)
 HOST_CPP_PROG_LINK	= 1
 endif
 
 #
-# This will strip out symbols that the component should not be
-# exporting from the .dynsym section.
-#
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += $(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS)
-endif # IS_COMPONENT
-
-#
 # MacOS X specific stuff
 #
 
 ifeq ($(OS_ARCH),Darwin)
 ifdef SHARED_LIBRARY
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS	+= -bundle
-else
 ifdef MOZ_IOS
 _LOADER_PATH := @rpath
 else
 _LOADER_PATH := @executable_path
 endif
 EXTRA_DSO_LDOPTS	+= -dynamiclib -install_name $(_LOADER_PATH)/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module
 endif
 endif
-endif
-
-#
-# On NetBSD a.out systems, use -Bsymbolic.  This fixes what would otherwise be
-# fatal symbol name clashes between components.
-#
-ifeq ($(OS_ARCH),NetBSD)
-ifeq ($(DLL_SUFFIX),.so.1.0)
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-endif
-endif
-endif
-
-ifeq ($(OS_ARCH),FreeBSD)
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-endif
-endif
 
 ifeq ($(OS_ARCH),NetBSD)
 ifneq (,$(filter arc cobalt hpcmips mipsco newsmips pmax sgimips,$(OS_TEST)))
 ifneq (,$(filter layout/%,$(relativesrcdir)))
 OS_CFLAGS += -Wa,-xgot
 OS_CXXFLAGS += -Wa,-xgot
 endif
 endif
 endif
 
 #
-# HP-UXBeOS specific section: for COMPONENTS only, add -Bsymbolic flag
-# which uses internal symbols first
-#
-ifeq ($(OS_ARCH),HP-UX)
-ifdef IS_COMPONENT
-ifeq ($(GNU_CC)$(GNU_CXX),)
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-ifneq ($(HAS_EXTRAEXPORTS),1)
-MKSHLIB  += -Wl,+eNSGetModule -Wl,+eerrno
-MKCSHLIB += +eNSGetModule +eerrno
-ifneq ($(OS_TEST),ia64)
-MKSHLIB  += -Wl,+e_shlInit
-MKCSHLIB += +e_shlInit
-endif # !ia64
-endif # !HAS_EXTRAEXPORTS
-endif # non-gnu compilers
-endif # IS_COMPONENT
-endif # HP-UX
-
-ifeq ($(OS_ARCH),AIX)
-ifdef IS_COMPONENT
-ifneq ($(HAS_EXTRAEXPORTS),1)
-MKSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall
-MKCSHLIB += -bE:$(MOZILLA_DIR)/build/unix/aix.exp -bnoexpall
-endif # HAS_EXTRAEXPORTS
-endif # IS_COMPONENT
-endif # AIX
-
-#
 # Linux: add -Bsymbolic flag for components
 #
 ifeq ($(OS_ARCH),Linux)
-ifdef IS_COMPONENT
-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-endif
 ifdef LD_VERSION_SCRIPT
 EXTRA_DSO_LDOPTS += -Wl,--version-script,$(LD_VERSION_SCRIPT)
 EXTRA_DEPS += $(LD_VERSION_SCRIPT)
 endif
 endif
 
 ifdef SYMBOLS_FILE
 ifeq ($(OS_TARGET),WINNT)
@@ -450,21 +388,19 @@ ifeq ($(OS_ARCH),GNU)
 OS_CPPFLAGS += -DPATH_MAX=1024 -DMAXPATHLEN=1024
 endif
 
 #
 # MINGW32
 #
 ifeq ($(OS_ARCH),WINNT)
 ifdef GNU_CC
-ifndef IS_COMPONENT
 DSO_LDOPTS += -Wl,--out-implib -Wl,$(IMPORT_LIBRARY)
 endif
 endif
-endif
 
 ifeq ($(USE_TVFS),1)
 IFLAGS1 = -rb
 IFLAGS2 = -rb
 else
 IFLAGS1 = -m 644
 IFLAGS2 = -m 755
 endif
--- a/old-configure.in
+++ b/old-configure.in
@@ -1211,34 +1211,16 @@ if test -n "$MOZ_LINKER"; then
   MOZ_LINKER_EXTRACT=1
   AC_CHECK_PROGS(XZ, xz)
 fi
 
 dnl Only one oddball right now (QNX), but this gives us flexibility
 dnl if any other platforms need to override this in the future.
 AC_DEFINE_UNQUOTED(D_INO,$DIRENT_INO)
 
-dnl ========================================================
-dnl = Flags to strip unused symbols from .so components and
-dnl = to export jemalloc symbols when linking a program
-dnl ========================================================
-case "$target" in
-    *-linux*|*-kfreebsd*-gnu|*-gnu*)
-        MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script'
-        ;;
-    *-darwin*)
-        MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-exported_symbols_list -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-export-list'
-        ;;
-    *-mingw*)
-        if test -n "$GNU_CC"; then
-           MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script'
-        fi
-        ;;
-esac
-
 if test -z "$COMPILE_ENVIRONMENT"; then
     SKIP_COMPILER_CHECKS=1
     SKIP_LIBRARY_CHECKS=1
     PKG_SKIP_STRIP=1
     MOZ_DEBUGGING_OPTS
 else
     MOZ_COMPILER_OPTS
 fi # COMPILE_ENVIRONMENT
@@ -4892,21 +4874,16 @@ MOZ_ARG_DISABLE_BOOL(cookies,
     NECKO_COOKIES=1)
 AC_SUBST(NECKO_COOKIES)
 if test "$NECKO_COOKIES"; then
     AC_DEFINE(NECKO_COOKIES)
     _NON_GLOBAL_ACDEFINES="$_NON_GLOBAL_ACDEFINES NECKO_COOKIES"
 fi
 
 dnl ========================================================
-if test "$MOZ_DEBUG" -o "$MOZ_DMD"; then
-    MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS=
-fi
-
-dnl ========================================================
 dnl =
 dnl = Maintainer debug option (no --enable equivalent)
 dnl =
 dnl ========================================================
 
 AC_SUBST(AR)
 AC_SUBST(AR_FLAGS)
 AC_SUBST(AR_EXTRACT)
@@ -4951,17 +4928,16 @@ AC_SUBST(MOZ_ANDROID_APPLICATION_CLASS)
 AC_SUBST(MOZ_ANDROID_BROWSER_INTENT_CLASS)
 AC_SUBST(MOZ_ANDROID_SEARCH_INTENT_CLASS)
 AC_SUBST(MOZ_EXCLUDE_HYPHENATION_DICTIONARIES)
 AC_SUBST(ENABLE_STRIP)
 AC_SUBST(PKG_SKIP_STRIP)
 AC_SUBST(STRIP_FLAGS)
 AC_SUBST(USE_ELF_HACK)
 AC_SUBST(INCREMENTAL_LINKER)
-AC_SUBST(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS)
 
 AC_SUBST(MOZ_FIX_LINK_PATHS)
 
 AC_SUBST(MOZ_POST_PROGRAM_COMMAND)
 AC_SUBST(MOZ_LINKER_EXTRACT)
 
 if test -n "$MOZ_BINARY_EXTENSIONS"; then
   AC_DEFINE(MOZ_BINARY_EXTENSIONS)
--- a/python/mozbuild/mozbuild/backend/recursivemake.py
+++ b/python/mozbuild/mozbuild/backend/recursivemake.py
@@ -105,17 +105,16 @@ MOZBUILD_VARIABLES = [
     b'HOST_CFLAGS',
     b'HOST_CSRCS',
     b'HOST_CMMSRCS',
     b'HOST_CXXFLAGS',
     b'HOST_EXTRA_LIBS',
     b'HOST_LIBRARY_NAME',
     b'HOST_PROGRAM',
     b'HOST_SIMPLE_PROGRAMS',
-    b'IS_COMPONENT',
     b'JAR_MANIFEST',
     b'JAVA_JAR_TARGETS',
     b'LD_VERSION_SCRIPT',
     b'LIBRARY_NAME',
     b'LIBS',
     b'MAKE_FRAMEWORK',
     b'MODULE',
     b'NO_DIST_INSTALL',
@@ -1227,18 +1226,16 @@ class RecursiveMakeBackend(CommonBackend
             backend_file.write('%s_JAVAC_FLAGS := %s\n' %
                 (target, ' '.join(jar.javac_flags)))
 
     def _process_shared_library(self, libdef, backend_file):
         backend_file.write_once('LIBRARY_NAME := %s\n' % libdef.basename)
         backend_file.write('FORCE_SHARED_LIB := 1\n')
         backend_file.write('IMPORT_LIBRARY := %s\n' % libdef.import_name)
         backend_file.write('SHARED_LIBRARY := %s\n' % libdef.lib_name)
-        if libdef.variant == libdef.COMPONENT:
-            backend_file.write('IS_COMPONENT := 1\n')
         if libdef.soname:
             backend_file.write('DSO_SONAME := %s\n' % libdef.soname)
         if libdef.symbols_file:
             backend_file.write('SYMBOLS_FILE := %s\n' % libdef.symbols_file)
         if not libdef.cxx_link:
             backend_file.write('LIB_IS_C_ONLY := 1\n')
 
     def _process_static_library(self, libdef, backend_file):
@@ -1298,26 +1295,24 @@ class RecursiveMakeBackend(CommonBackend
                     # linkage for any RustLibrary elsewhere.
                     continue
                 elif isinstance(lib, StaticLibrary):
                     backend_file.write_once('STATIC_LIBS += %s/%s\n'
                                         % (relpath, lib.import_name))
                     if isinstance(obj, SharedLibrary):
                         write_shared_and_system_libs(lib)
                 elif isinstance(obj, SharedLibrary):
-                    assert lib.variant != lib.COMPONENT
                     backend_file.write_once('SHARED_LIBS += %s/%s\n'
                                         % (relpath, lib.import_name))
             elif isinstance(obj, (Program, SimpleProgram)):
                 if isinstance(lib, StaticLibrary):
                     backend_file.write_once('STATIC_LIBS += %s/%s\n'
                                         % (relpath, lib.import_name))
                     write_shared_and_system_libs(lib)
                 else:
-                    assert lib.variant != lib.COMPONENT
                     backend_file.write_once('SHARED_LIBS += %s/%s\n'
                                         % (relpath, lib.import_name))
             elif isinstance(obj, (HostLibrary, HostProgram, HostSimpleProgram)):
                 assert isinstance(lib, (HostLibrary, HostRustLibrary))
                 backend_file.write_once('HOST_LIBS += %s/%s\n'
                                    % (relpath, lib.import_name))
 
         # We have to link any Rust libraries after all intermediate static
--- a/python/mozbuild/mozbuild/frontend/context.py
+++ b/python/mozbuild/mozbuild/frontend/context.py
@@ -1164,22 +1164,16 @@ VARIABLES = {
 
     'HOST_SOURCES': (ContextDerivedTypedList(SourcePath, StrictOrderingOnAppendList), list,
         """Source code files to compile with the host compiler.
 
         This variable contains a list of source code files to compile.
         with the host compiler.
         """),
 
-    'IS_COMPONENT': (bool, bool,
-        """Whether the library contains a binary XPCOM component manifest.
-
-        Implies FORCE_SHARED_LIB.
-        """),
-
     'HOST_LIBRARY_NAME': (unicode, unicode,
         """Name of target library generated when cross compiling.
         """),
 
     'JAVA_JAR_TARGETS': (dict, dict,
         """Defines Java JAR targets to be built.
 
         This variable should not be populated directly. Instead, it should
@@ -1831,17 +1825,16 @@ for name, (storage_type, input_types, do
 
 # Set of variables that are only allowed in templates:
 TEMPLATE_VARIABLES = {
     'CPP_UNIT_TESTS',
     'FORCE_SHARED_LIB',
     'HOST_PROGRAM',
     'HOST_LIBRARY_NAME',
     'HOST_SIMPLE_PROGRAMS',
-    'IS_COMPONENT',
     'IS_FRAMEWORK',
     'LIBRARY_NAME',
     'PROGRAM',
     'SIMPLE_PROGRAMS',
 }
 
 # Add a note to template variable documentation.
 for name in TEMPLATE_VARIABLES:
@@ -2208,27 +2201,16 @@ DEPRECATION_HINTS = {
             SharedLibrary('foo')
 
         instead of
 
             Library('foo') [ or LIBRARY_NAME = 'foo' ]
             FORCE_SHARED_LIB = True
         ''',
 
-    'IS_COMPONENT': '''
-        Please use
-
-            XPCOMBinaryComponent('foo')
-
-        instead of
-
-            Library('foo') [ or LIBRARY_NAME = 'foo' ]
-            IS_COMPONENT = True
-        ''',
-
     'IS_FRAMEWORK': '''
         Please use
 
             Framework('foo')
 
         instead of
 
             Library('foo') [ or LIBRARY_NAME = 'foo' ]
--- a/python/mozbuild/mozbuild/frontend/data.py
+++ b/python/mozbuild/mozbuild/frontend/data.py
@@ -327,19 +327,16 @@ class Linkable(ContextDerived):
         ContextDerived.__init__(self, context)
         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:
-            raise LinkageWrongKindError(
-                'Linkable.link_library() does not take components.')
         if obj.KIND != self.KIND:
             raise LinkageWrongKindError('%s != %s' % (obj.KIND, self.KIND))
         # Linking multiple Rust libraries into an object would result in
         # multiple copies of the Rust standard library, as well as linking
         # errors from duplicate symbols.
         if isinstance(obj, RustLibrary) and any(isinstance(l, RustLibrary)
                                                 for l in self.linked_libraries):
             raise LinkageMultipleRustLibrariesError("Cannot link multiple Rust libraries into %s",
@@ -571,18 +568,17 @@ class SharedLibrary(Library):
         'import_name',
         'install_target',
         'lib_name',
         'relobjdir',
         'soname',
     }
 
     FRAMEWORK = 1
-    COMPONENT = 2
-    MAX_VARIANT = 3
+    MAX_VARIANT = 2
 
     def __init__(self, context, basename, real_name=None,
                  soname=None, variant=None, symbols_file=False):
         assert(variant in range(1, self.MAX_VARIANT) or variant is None)
         Library.__init__(self, context, basename, real_name)
         self.variant = variant
         self.lib_name = real_name or basename
         assert self.lib_name
--- a/python/mozbuild/mozbuild/frontend/emitter.py
+++ b/python/mozbuild/mozbuild/frontend/emitter.py
@@ -73,17 +73,16 @@ from .data import (
     TestWebIDLFile,
     TestManifest,
     UnifiedSources,
     VariablePassthru,
     WebIDLFile,
     XPIDLFile,
 )
 from mozpack.chrome.manifest import (
-    ManifestBinaryComponent,
     Manifest,
 )
 
 from .reader import SandboxValidationError
 
 from ..testing import (
     TEST_MANIFESTS,
     REFTEST_FLAVORS,
@@ -603,17 +602,16 @@ class TreeMetadataEmitter(LoggingMixin):
 
         static_lib = context.get('FORCE_STATIC_LIB')
         shared_lib = context.get('FORCE_SHARED_LIB')
 
         static_name = context.get('STATIC_LIBRARY_NAME')
         shared_name = context.get('SHARED_LIBRARY_NAME')
 
         is_framework = context.get('IS_FRAMEWORK')
-        is_component = context.get('IS_COMPONENT')
 
         soname = context.get('SONAME')
 
         lib_defines = context.get('LIBRARY_DEFINES')
 
         shared_args = {}
         static_args = {}
 
@@ -625,32 +623,20 @@ class TreeMetadataEmitter(LoggingMixin):
             if shared_lib:
                 raise SandboxValidationError(
                     'FINAL_LIBRARY conflicts with FORCE_SHARED_LIB. '
                     'Please remove one.', context)
             if is_framework:
                 raise SandboxValidationError(
                     'FINAL_LIBRARY conflicts with IS_FRAMEWORK. '
                     'Please remove one.', context)
-            if is_component:
-                raise SandboxValidationError(
-                    'FINAL_LIBRARY conflicts with IS_COMPONENT. '
-                    'Please remove one.', context)
             static_args['link_into'] = final_lib
             static_lib = True
 
         if libname:
-            if is_component:
-                if static_lib:
-                    raise SandboxValidationError(
-                        'IS_COMPONENT conflicts with FORCE_STATIC_LIB. '
-                        'Please remove one.', context)
-                shared_lib = True
-                shared_args['variant'] = SharedLibrary.COMPONENT
-
             if is_framework:
                 if soname:
                     raise SandboxValidationError(
                         'IS_FRAMEWORK conflicts with SONAME. '
                         'Please remove one.', context)
                 shared_lib = True
                 shared_args['variant'] = SharedLibrary.FRAMEWORK
 
@@ -737,20 +723,16 @@ class TreeMetadataEmitter(LoggingMixin):
                     shared_args['symbols_file'] = symbols_file.target_basename
 
             if shared_lib:
                 lib = SharedLibrary(context, libname, **shared_args)
                 self._libs[libname].append(lib)
                 self._linkage.append((context, lib, 'USE_LIBS'))
                 linkables.append(lib)
                 generated_files.add(lib.lib_name)
-                if is_component and not context['NO_COMPONENTS_MANIFEST']:
-                    yield ChromeManifestEntry(context,
-                        'components/components.manifest',
-                        ManifestBinaryComponent('components', lib.lib_name))
                 if symbols_file and isinstance(symbols_file, SourcePath):
                     script = mozpath.join(
                         mozpath.dirname(mozpath.dirname(__file__)),
                         'action', 'generate_symbols_file.py')
                     defines = ()
                     if lib.defines:
                         defines = lib.defines.get_defines()
                     yield GeneratedFile(context, script,
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/data/binary-components/bar/moz.build
+++ /dev/null
@@ -1,2 +0,0 @@
-Component('bar')
-NO_COMPONENTS_MANIFEST = True
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/data/binary-components/foo/moz.build
+++ /dev/null
@@ -1,1 +0,0 @@
-Component('foo')
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/data/binary-components/moz.build
+++ /dev/null
@@ -1,10 +0,0 @@
-@template
-def Component(name):
-    LIBRARY_NAME = name
-    FORCE_SHARED_LIB = True
-    IS_COMPONENT = True
-
-DIRS += [
-    'foo',
-    'bar',
-]
--- a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py
+++ b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py
@@ -933,73 +933,11 @@ class TestRecursiveMakeBackend(BackendTe
         # Only mochitest.js should be in the install manifest.
         self.assertTrue('testing/mochitest/tests/mochitest.js' in m)
 
         # The path is odd here because we do not normalize at test manifest
         # processing time.  This is a fragile test because there's currently no
         # way to iterate the manifest.
         self.assertFalse('instrumentation/./not_packaged.java' in m)
 
-    def test_binary_components(self):
-        """Ensure binary components are correctly handled."""
-        env = self._consume('binary-components', RecursiveMakeBackend)
-
-        with open(mozpath.join(env.topobjdir, 'foo', 'backend.mk')) as fh:
-            lines = fh.readlines()[2:]
-
-        self.assertEqual(lines, [
-            'misc::\n',
-            '\t$(call py_action,buildlist,$(DEPTH)/dist/bin/chrome.manifest '
-            + "'manifest components/components.manifest')\n",
-            '\t$(call py_action,buildlist,'
-            + '$(DEPTH)/dist/bin/components/components.manifest '
-            + "'binary-component foo')\n",
-            'LIBRARY_NAME := foo\n',
-            'FORCE_SHARED_LIB := 1\n',
-            'IMPORT_LIBRARY := foo\n',
-            'SHARED_LIBRARY := foo\n',
-            'IS_COMPONENT := 1\n',
-            'DSO_SONAME := foo\n',
-            'LIB_IS_C_ONLY := 1\n',
-        ])
-
-        with open(mozpath.join(env.topobjdir, 'bar', 'backend.mk')) as fh:
-            lines = fh.readlines()[2:]
-
-        self.assertEqual(lines, [
-            'LIBRARY_NAME := bar\n',
-            'FORCE_SHARED_LIB := 1\n',
-            'IMPORT_LIBRARY := bar\n',
-            'SHARED_LIBRARY := bar\n',
-            'IS_COMPONENT := 1\n',
-            'DSO_SONAME := bar\n',
-            'LIB_IS_C_ONLY := 1\n',
-        ])
-
-        self.assertTrue(os.path.exists(mozpath.join(env.topobjdir, 'binaries.json')))
-        with open(mozpath.join(env.topobjdir, 'binaries.json'), 'rb') as fh:
-            binaries = json.load(fh)
-
-        self.assertEqual(binaries, {
-            'programs': [],
-            'shared_libraries': [
-                {
-                    'basename': 'foo',
-                    'import_name': 'foo',
-                    'install_target': 'dist/bin',
-                    'lib_name': 'foo',
-                    'relobjdir': 'foo',
-                    'soname': 'foo',
-                },
-                {
-                    'basename': 'bar',
-                    'import_name': 'bar',
-                    'install_target': 'dist/bin',
-                    'lib_name': 'bar',
-                    'relobjdir': 'bar',
-                    'soname': 'bar',
-                }
-            ],
-        })
-
 
 if __name__ == '__main__':
     main()
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/frontend/data/binary-components/bar/moz.build
+++ /dev/null
@@ -1,2 +0,0 @@
-Component('bar')
-NO_COMPONENTS_MANIFEST = True
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/frontend/data/binary-components/foo/moz.build
+++ /dev/null
@@ -1,1 +0,0 @@
-Component('foo')
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/frontend/data/binary-components/moz.build
+++ /dev/null
@@ -1,10 +0,0 @@
-@template
-def Component(name):
-    LIBRARY_NAME = name
-    FORCE_SHARED_LIB = True
-    IS_COMPONENT = True
-
-DIRS += [
-    'foo',
-    'bar',
-]
--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py
+++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py
@@ -1163,33 +1163,16 @@ class TestEmitterBasic(unittest.TestCase
         # Android resource directories are ordered.
         expected = [
             mozpath.join(reader.config.topsrcdir, 'dir1'),
             mozpath.join(reader.config.topobjdir, 'dir2'),
             '/dir3',
         ]
         self.assertEquals([p.full_path for p in objs[0].paths], expected)
 
-    def test_binary_components(self):
-        """Test that IS_COMPONENT/NO_COMPONENTS_MANIFEST work properly."""
-        reader = self.reader('binary-components')
-        objs = self.read_topsrcdir(reader)
-
-        self.assertEqual(len(objs), 3)
-        self.assertIsInstance(objs[0], ChromeManifestEntry)
-        self.assertEqual(objs[0].path,
-                         'dist/bin/components/components.manifest')
-        self.assertIsInstance(objs[0].entry, manifest.ManifestBinaryComponent)
-        self.assertEqual(objs[0].entry.base, 'dist/bin/components')
-        self.assertEqual(objs[0].entry.relpath, objs[1].lib_name)
-        self.assertIsInstance(objs[1], SharedLibrary)
-        self.assertEqual(objs[1].basename, 'foo')
-        self.assertIsInstance(objs[2], SharedLibrary)
-        self.assertEqual(objs[2].basename, 'bar')
-
     def test_install_shared_lib(self):
         """Test that we can install a shared library with TEST_HARNESS_FILES"""
         reader = self.reader('test-install-shared-lib')
         objs = self.read_topsrcdir(reader)
         self.assertIsInstance(objs[0], TestHarnessFiles)
         self.assertIsInstance(objs[1], VariablePassthru)
         self.assertIsInstance(objs[2], SharedLibrary)
         for path, files in objs[0].files.walk():