Bug 1398897 - Do not emit compile flags for directories only containing rust libraries.
MozReview-Commit-ID: 94PFyi5VQux
--- a/python/mozbuild/mozbuild/frontend/emitter.py
+++ b/python/mozbuild/mozbuild/frontend/emitter.py
@@ -754,17 +754,22 @@ class TreeMetadataEmitter(LoggingMixin):
lib.lib_defines.update(lib_defines)
# Only emit sources if we have linkables defined in the same context.
# Note the linkables are not emitted in this function, but much later,
# after aggregation (because of e.g. USE_LIBS processing).
if not (linkables or host_linkables):
return
- self._compile_dirs.add(context.objdir)
+ # Avoid emitting compile flags for directories only containing rust
+ # libraries. Emitted compile flags are only relevant to C/C++ sources
+ # for the time being.
+ if not all(isinstance(l, (RustLibrary, HostRustLibrary))
+ for l in linkables + host_linkables):
+ self._compile_dirs.add(context.objdir)
sources = defaultdict(list)
gen_sources = defaultdict(list)
all_flags = {}
for symbol in ('SOURCES', 'HOST_SOURCES', 'UNIFIED_SOURCES'):
srcs = sources[symbol]
gen_srcs = gen_sources[symbol]
context_srcs = context.get(symbol, [])
--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py
+++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py
@@ -1089,19 +1089,18 @@ class TestEmitterBasic(unittest.TestCase
self.read_topsrcdir(reader)
def test_rust_library_dash_folding(self):
'''Test that on-disk names of RustLibrary objects convert dashes to underscores.'''
reader = self.reader('rust-library-dash-folding',
extra_substs=dict(RUST_TARGET='i686-pc-windows-msvc'))
objs = self.read_topsrcdir(reader)
- self.assertEqual(len(objs), 2)
- flags, lib = objs
- self.assertIsInstance(flags, ComputedFlags)
+ self.assertEqual(len(objs), 1)
+ lib = objs[0]
self.assertIsInstance(lib, RustLibrary)
self.assertRegexpMatches(lib.lib_name, "random_crate")
self.assertRegexpMatches(lib.import_name, "random_crate")
self.assertRegexpMatches(lib.basename, "random-crate")
def test_multiple_rust_libraries(self):
'''Test that linking multiple Rust libraries throws an error'''
reader = self.reader('multiple-rust-libraries',
@@ -1110,19 +1109,18 @@ class TestEmitterBasic(unittest.TestCase
'Cannot link multiple Rust libraries'):
self.read_topsrcdir(reader)
def test_rust_library_features(self):
'''Test that RustLibrary features are correctly emitted.'''
reader = self.reader('rust-library-features',
extra_substs=dict(RUST_TARGET='i686-pc-windows-msvc'))
objs = self.read_topsrcdir(reader)
- self.assertEqual(len(objs), 2)
- flags, lib = objs
- self.assertIsInstance(flags, ComputedFlags)
+ self.assertEqual(len(objs), 1)
+ lib = objs[0]
self.assertIsInstance(lib, RustLibrary)
self.assertEqual(lib.features, ['musthave', 'cantlivewithout'])
def test_rust_library_duplicate_features(self):
'''Test that duplicate RustLibrary features are rejected.'''
reader = self.reader('rust-library-duplicate-features')
with self.assertRaisesRegexp(SandboxValidationError,
'features for .* should not contain duplicates'):
@@ -1181,29 +1179,29 @@ class TestEmitterBasic(unittest.TestCase
self.assertEqual(objs[0].name, 'some')
def test_host_rust_libraries(self):
'''Test HOST_RUST_LIBRARIES emission.'''
reader = self.reader('host-rust-libraries',
extra_substs=dict(RUST_HOST_TARGET='i686-pc-windows-msvc',
HOST_BIN_SUFFIX='.exe'))
objs = self.read_topsrcdir(reader)
- self.assertEqual(len(objs), 2)
- self.assertIsInstance(objs[1], HostRustLibrary)
- self.assertRegexpMatches(objs[1].lib_name, 'host_lib')
- self.assertRegexpMatches(objs[1].import_name, 'host_lib')
+ self.assertEqual(len(objs), 1)
+ self.assertIsInstance(objs[0], HostRustLibrary)
+ self.assertRegexpMatches(objs[0].lib_name, 'host_lib')
+ self.assertRegexpMatches(objs[0].import_name, 'host_lib')
def test_crate_dependency_path_resolution(self):
'''Test recursive dependencies resolve with the correct paths.'''
reader = self.reader('crate-dependency-path-resolution',
extra_substs=dict(RUST_TARGET='i686-pc-windows-msvc'))
objs = self.read_topsrcdir(reader)
- self.assertEqual(len(objs), 2)
- self.assertIsInstance(objs[1], RustLibrary)
+ self.assertEqual(len(objs), 1)
+ self.assertIsInstance(objs[0], RustLibrary)
def test_android_res_dirs(self):
"""Test that ANDROID_RES_DIRS works properly."""
reader = self.reader('android-res-dirs')
objs = self.read_topsrcdir(reader)
self.assertEqual(len(objs), 1)
self.assertIsInstance(objs[0], AndroidResDirs)