--- a/python/mozbuild/mozbuild/frontend/context.py
+++ b/python/mozbuild/mozbuild/frontend/context.py
@@ -339,16 +339,66 @@ class HostCompileFlags(BaseCompileFlags)
optimize_flags = []
if self._context.config.substs.get('CROSS_COMPILE'):
optimize_flags += self._context.config.substs.get('HOST_OPTIMIZE_FLAGS')
elif self._context.config.substs.get('MOZ_OPTIMIZE'):
optimize_flags += self._context.config.substs.get('MOZ_OPTIMIZE_FLAGS')
return optimize_flags
+class LinkFlags(BaseCompileFlags):
+ def __init__(self, context):
+ self._context = context
+
+ self.flag_variables = (
+ ('OS', self._os_ldflags(), ('LDFLAGS',)),
+ ('LINKER', context.config.substs.get('LINKER_LDFLAGS'),
+ ('LDFLAGS',)),
+ ('DEFFILE', None, ('LDFLAGS',)),
+ ('MOZBUILD', None, ('LDFLAGS',)),
+ ('FIX_LINK_PATHS', context.config.substs.get('MOZ_FIX_LINK_PATHS'),
+ ('LDFLAGS',)),
+ ('OPTIMIZE', (context.config.substs.get('MOZ_OPTIMIZE_LDFLAGS', []) if
+ context.config.substs.get('MOZ_OPTIMIZE') else []),
+ ('LDFLAGS',)),
+ )
+ BaseCompileFlags.__init__(self, context)
+
+ def _os_ldflags(self):
+ flags = self._context.config.substs.get('OS_LDFLAGS', [])[:]
+
+ if (self._context.config.substs.get('MOZ_DEBUG') or
+ self._context.config.substs.get('MOZ_DEBUG_SYMBOLS')):
+ flags += self._context.config.substs.get('MOZ_DEBUG_LDFLAGS', [])
+
+ # TODO: This is pretty convoluted, and isn't really a per-context thing,
+ # configure would be a better place to aggregate these.
+ if all([self._context.config.substs.get('OS_ARCH') == 'WINNT',
+ not self._context.config.substs.get('GNU_CC'),
+ not self._context.config.substs.get('MOZ_DEBUG')]):
+
+ # MOZ_DEBUG_SYMBOLS generates debug symbols in separate PDB files.
+ # Used for generating an optimized build with debugging symbols.
+ # Used in the Windows nightlies to generate symbols for crash reporting.
+ if self._context.config.substs.get('MOZ_DEBUG_SYMBOLS'):
+ flags.append('-DEBUG')
+
+
+ if self._context.config.substs.get('MOZ_DMD'):
+ # On Windows Opt DMD builds we actually override everything
+ # from OS_LDFLAGS. Bug 1413728 is on file to figure out whether
+ # this is necessary.
+ flags = ['-DEBUG']
+
+ if self._context.config.substs.get('MOZ_OPTIMIZE'):
+ flags.append('-OPT:REF,ICF')
+
+ return flags
+
+
class CompileFlags(BaseCompileFlags):
def __init__(self, context):
main_src_dir = mozpath.dirname(context.main_path)
self._context = context
self.flag_variables = (
('STL', context.config.substs.get('STL_FLAGS'), ('CXXFLAGS',)),
('VISIBILITY', context.config.substs.get('VISIBILITY_FLAGS'),
@@ -1901,16 +1951,21 @@ VARIABLES = {
"""Directories containing Python packages that Sphinx documents.
"""),
'COMPILE_FLAGS': (CompileFlags, dict,
"""Recipe for compile flags for this context. Not to be manipulated
directly.
"""),
+ 'LINK_FLAGS': (LinkFlags, dict,
+ """Recipe for linker flags for this context. Not to be manipulated
+ directly.
+ """),
+
'CFLAGS': (List, list,
"""Flags passed to the C compiler for all of the C source files
declared in this directory.
Note that the ordering of flags matters here, these flags will be
added to the compiler's command line in the same order as they
appear in the moz.build file.
"""),
@@ -2351,16 +2406,17 @@ SPECIAL_VARIABLES = {
else TestDirsPlaceHolder, list,
"""Like DIRS but only for directories that contain test-only code.
If tests are not enabled, this variable will be ignored.
This variable may go away once the transition away from Makefiles is
complete.
"""),
+
}
# Deprecation hints.
DEPRECATION_HINTS = {
'CPP_UNIT_TESTS': '''
Please use'
CppUnitTests(['foo', 'bar'])
--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py
+++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py
@@ -183,106 +183,158 @@ class TestEmitterBasic(unittest.TestCase
self.assertIsInstance(objs[0], VariablePassthru)
wanted = {
'NO_DIST_INSTALL': True,
'RCFILE': 'foo.rc',
'RESFILE': 'bar.res',
'RCINCLUDE': 'bar.rc',
'DEFFILE': 'baz.def',
- 'MOZBUILD_LDFLAGS': ['-framework Foo', '-x', '-DELAYLOAD:foo.dll',
- '-DELAYLOAD:bar.dll'],
'WIN32_EXE_LDFLAGS': ['-subsystem:console'],
}
variables = objs[0].variables
maxDiff = self.maxDiff
self.maxDiff = None
self.assertEqual(wanted, variables)
self.maxDiff = maxDiff
def test_compile_flags(self):
reader = self.reader('compile-flags', extra_substs={
'WARNINGS_AS_ERRORS': '-Werror',
})
- sources, lib, flags = self.read_topsrcdir(reader)
+ sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['STL'], reader.config.substs['STL_FLAGS'])
self.assertEqual(flags.flags['VISIBILITY'], reader.config.substs['VISIBILITY_FLAGS'])
self.assertEqual(flags.flags['WARNINGS_AS_ERRORS'], ['-Werror'])
self.assertEqual(flags.flags['MOZBUILD_CFLAGS'], ['-Wall', '-funroll-loops'])
self.assertEqual(flags.flags['MOZBUILD_CXXFLAGS'], ['-funroll-loops', '-Wall'])
def test_debug_flags(self):
reader = self.reader('compile-flags', extra_substs={
'MOZ_DEBUG_FLAGS': '-g',
'MOZ_DEBUG_SYMBOLS': '1',
})
- sources, lib, flags = self.read_topsrcdir(reader)
+ sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['DEBUG'], ['-g'])
def test_disable_debug_flags(self):
reader = self.reader('compile-flags', extra_substs={
'MOZ_DEBUG_FLAGS': '-g',
'MOZ_DEBUG_SYMBOLS': '',
})
- sources, lib, flags = self.read_topsrcdir(reader)
+ sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['DEBUG'], [])
+ def test_link_flags(self):
+ reader = self.reader('link-flags', extra_substs={
+ 'OS_LDFLAGS': ['-Wl,rpath-link=/usr/lib'],
+ 'LINKER_LDFLAGS': ['-fuse-ld=gold'],
+ 'MOZ_OPTIMIZE': '',
+ 'MOZ_OPTIMIZE_LDFLAGS': ['-Wl,-dead_strip'],
+ 'MOZ_DEBUG_LDFLAGS': ['-framework ExceptionHandling'],
+ })
+ sources, ldflags, lib, compile_flags = self.read_topsrcdir(reader)
+ self.assertIsInstance(ldflags, ComputedFlags)
+ self.assertEqual(ldflags.flags['OS'], reader.config.substs['OS_LDFLAGS'])
+ self.assertEqual(ldflags.flags['LINKER'], reader.config.substs['LINKER_LDFLAGS'])
+ self.assertEqual(ldflags.flags['MOZBUILD'], ['-Wl,-U_foo', '-framework Foo', '-x'])
+ self.assertEqual(ldflags.flags['OPTIMIZE'], [])
+
+ def test_debug_ldflags(self):
+ reader = self.reader('link-flags', extra_substs={
+ 'MOZ_DEBUG_SYMBOLS': '1',
+ 'MOZ_DEBUG_LDFLAGS': ['-framework ExceptionHandling'],
+ })
+ sources, ldflags, lib, compile_flags = self.read_topsrcdir(reader)
+ self.assertIsInstance(ldflags, ComputedFlags)
+ self.assertEqual(ldflags.flags['OS'],
+ reader.config.substs['MOZ_DEBUG_LDFLAGS'])
+
+ def test_windows_opt_link_flags(self):
+ reader = self.reader('link-flags', extra_substs={
+ 'OS_ARCH': 'WINNT',
+ 'GNU_CC': '',
+ 'MOZ_OPTIMIZE': '1',
+ 'MOZ_DEBUG_SYMBOLS': '1',
+ 'MOZ_OPTIMIZE_FLAGS': [],
+ 'MOZ_OPTIMIZE_LDFLAGS': [],
+ })
+ sources, ldflags, lib, compile_flags = self.read_topsrcdir(reader)
+ self.assertIsInstance(ldflags, ComputedFlags)
+ self.assertIn('-DEBUG', ldflags.flags['OS'])
+ self.assertIn('-OPT:REF,ICF', ldflags.flags['OS'])
+
+ def test_windows_dmd_link_flags(self):
+ reader = self.reader('link-flags', extra_substs={
+ 'OS_ARCH': 'WINNT',
+ 'GNU_CC': '',
+ 'MOZ_DMD': '1',
+ 'MOZ_DEBUG_SYMBOLS': '1',
+ 'MOZ_OPTIMIZE': '1',
+ 'MOZ_OPTIMIZE_FLAGS': [],
+ 'OS_LDFLAGS': ['-Wl,-U_foo'],
+ })
+ sources, ldflags, lib, compile_flags = self.read_topsrcdir(reader)
+ self.assertIsInstance(ldflags, ComputedFlags)
+ self.assertEqual(ldflags.flags['OS'],
+ ['-DEBUG', '-OPT:REF,ICF'])
+
def test_host_compile_flags(self):
reader = self.reader('host-compile-flags', extra_substs={
'HOST_CXXFLAGS': ['-Wall', '-Werror'],
'HOST_CFLAGS': ['-Werror', '-Wall'],
})
- sources, flags, lib, target_flags = self.read_topsrcdir(reader)
+ sources, ldflags, flags, lib, target_flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['HOST_CXXFLAGS'], reader.config.substs['HOST_CXXFLAGS'])
self.assertEqual(flags.flags['HOST_CFLAGS'], reader.config.substs['HOST_CFLAGS'])
self.assertEqual(set(flags.flags['HOST_DEFINES']),
set(['-DFOO', '-DBAZ="abcd"', '-UQUX', '-DBAR=7', '-DVALUE=xyz']))
self.assertEqual(flags.flags['MOZBUILD_HOST_CFLAGS'], ['-funroll-loops', '-host-arg'])
self.assertEqual(flags.flags['MOZBUILD_HOST_CXXFLAGS'], [])
def test_host_no_optimize_flags(self):
reader = self.reader('host-compile-flags', extra_substs={
'MOZ_OPTIMIZE': '',
'MOZ_OPTIMIZE_FLAGS': ['-O2'],
})
- sources, flags, lib, target_flags = self.read_topsrcdir(reader)
+ sources, ldflags, flags, lib, target_flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['HOST_OPTIMIZE'], [])
def test_host_optimize_flags(self):
reader = self.reader('host-compile-flags', extra_substs={
'MOZ_OPTIMIZE': '1',
'MOZ_OPTIMIZE_FLAGS': ['-O2'],
})
- sources, flags, lib, target_flags = self.read_topsrcdir(reader)
+ sources, ldflags, flags, lib, target_flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['HOST_OPTIMIZE'], ['-O2'])
def test_cross_optimize_flags(self):
reader = self.reader('host-compile-flags', extra_substs={
'MOZ_OPTIMIZE': '1',
'MOZ_OPTIMIZE_FLAGS': ['-O2'],
'HOST_OPTIMIZE_FLAGS': ['-O3'],
'CROSS_COMPILE': '1',
})
- sources, flags, lib, target_flags = self.read_topsrcdir(reader)
+ sources, ldflags, flags, lib, target_flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['HOST_OPTIMIZE'], ['-O3'])
def test_host_rtl_flag(self):
reader = self.reader('host-compile-flags', extra_substs={
'OS_ARCH': 'WINNT',
'MOZ_DEBUG': '1',
})
- sources, flags, lib, target_flags = self.read_topsrcdir(reader)
+ sources, ldflags, flags, lib, target_flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['RTL'], ['-MDd'])
def test_compile_flags_validation(self):
reader = self.reader('compile-flags-field-validation')
with self.assertRaisesRegexp(BuildReaderError, 'Invalid value.'):
self.read_topsrcdir(reader)
@@ -296,73 +348,73 @@ class TestEmitterBasic(unittest.TestCase
reader = self.reader('compile-flags-templates', extra_substs={
'NSPR_CFLAGS': ['-I/nspr/path'],
'NSS_CFLAGS': ['-I/nss/path'],
'MOZ_JPEG_CFLAGS': ['-I/jpeg/path'],
'MOZ_PNG_CFLAGS': ['-I/png/path'],
'MOZ_ZLIB_CFLAGS': ['-I/zlib/path'],
'MOZ_PIXMAN_CFLAGS': ['-I/pixman/path'],
})
- sources, lib, flags = self.read_topsrcdir(reader)
+ sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['STL'], [])
self.assertEqual(flags.flags['VISIBILITY'], [])
self.assertEqual(flags.flags['OS_INCLUDES'], [
'-I/nspr/path',
'-I/nss/path',
'-I/jpeg/path',
'-I/png/path',
'-I/zlib/path',
'-I/pixman/path',
])
def test_disable_stl_wrapping(self):
reader = self.reader('disable-stl-wrapping')
- sources, lib, flags = self.read_topsrcdir(reader)
+ sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['STL'], [])
def test_visibility_flags(self):
reader = self.reader('visibility-flags')
- sources, lib, flags = self.read_topsrcdir(reader)
+ sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['VISIBILITY'], [])
def test_defines_in_flags(self):
reader = self.reader('compile-defines')
- defines, sources, lib, flags = self.read_topsrcdir(reader)
+ defines, sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['LIBRARY_DEFINES'],
['-DMOZ_LIBRARY_DEFINE=MOZ_TEST'])
self.assertEqual(flags.flags['DEFINES'],
['-DMOZ_TEST_DEFINE'])
def test_resolved_flags_error(self):
reader = self.reader('resolved-flags-error')
with self.assertRaisesRegexp(BuildReaderError,
"`DEFINES` may not be set in COMPILE_FLAGS from moz.build"):
self.read_topsrcdir(reader)
def test_includes_in_flags(self):
reader = self.reader('compile-includes')
- defines, sources, lib, flags = self.read_topsrcdir(reader)
+ defines, sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(flags, ComputedFlags)
self.assertEqual(flags.flags['BASE_INCLUDES'],
['-I%s' % reader.config.topsrcdir,
'-I%s' % reader.config.topobjdir])
self.assertEqual(flags.flags['EXTRA_INCLUDES'],
['-I%s/dist/include' % reader.config.topobjdir])
self.assertEqual(flags.flags['LOCAL_INCLUDES'],
['-I%s/subdir' % reader.config.topsrcdir])
def test_allow_compiler_warnings(self):
reader = self.reader('allow-compiler-warnings', extra_substs={
'WARNINGS_AS_ERRORS': '-Werror',
})
- sources, lib, flags = self.read_topsrcdir(reader)
+ sources, ldflags, lib, flags = self.read_topsrcdir(reader)
self.assertEqual(flags.flags['WARNINGS_AS_ERRORS'], [])
def test_use_yasm(self):
# When yasm is not available, this should raise.
reader = self.reader('use-yasm')
with self.assertRaisesRegexp(SandboxValidationError,
'yasm is not available'):
self.read_topsrcdir(reader)
@@ -538,25 +590,26 @@ class TestEmitterBasic(unittest.TestCase
icons = files._children['icons']
self.assertEqual(icons._strings, ['quux.icns'])
def test_program(self):
reader = self.reader('program')
objs = self.read_topsrcdir(reader)
- self.assertEqual(len(objs), 4)
+ self.assertEqual(len(objs), 5)
self.assertIsInstance(objs[0], ComputedFlags)
- self.assertIsInstance(objs[1], Program)
- self.assertIsInstance(objs[2], SimpleProgram)
+ self.assertIsInstance(objs[1], ComputedFlags)
+ self.assertIsInstance(objs[2], Program)
self.assertIsInstance(objs[3], SimpleProgram)
+ self.assertIsInstance(objs[4], SimpleProgram)
- self.assertEqual(objs[1].program, 'test_program.prog')
- self.assertEqual(objs[2].program, 'test_program1.prog')
- self.assertEqual(objs[3].program, 'test_program2.prog')
+ self.assertEqual(objs[2].program, 'test_program.prog')
+ self.assertEqual(objs[3].program, 'test_program1.prog')
+ self.assertEqual(objs[4].program, 'test_program2.prog')
def test_test_manifest_missing_manifest(self):
"""A missing manifest file should result in an error."""
reader = self.reader('test-manifest-missing-manifest')
with self.assertRaisesRegexp(BuildReaderError, 'IOError: Missing files'):
self.read_topsrcdir(reader)
@@ -931,17 +984,18 @@ class TestEmitterBasic(unittest.TestCase
self.read_topsrcdir(reader)
def test_library_defines(self):
"""Test that LIBRARY_DEFINES is propagated properly."""
reader = self.reader('library-defines')
objs = self.read_topsrcdir(reader)
libraries = [o for o in objs if isinstance(o,StaticLibrary)]
- library_flags = [o for o in objs if isinstance(o, ComputedFlags)]
+ library_flags = [o for o in objs if isinstance(o, ComputedFlags)
+ and 'LIBRARY_DEFINES' in o.flags]
expected = {
'liba': '-DIN_LIBA',
'libb': '-DIN_LIBA -DIN_LIBB',
'libc': '-DIN_LIBA -DIN_LIBB',
'libd': ''
}
defines = {}
for lib in libraries:
@@ -957,16 +1011,18 @@ class TestEmitterBasic(unittest.TestCase
reader = self.reader('sources')
objs = self.read_topsrcdir(reader)
computed_flags = objs.pop()
self.assertIsInstance(computed_flags, ComputedFlags)
# The second to last object is a Linkable.
linkable = objs.pop()
self.assertTrue(linkable.cxx_link)
+ ld_flags = objs.pop()
+ self.assertIsInstance(ld_flags, ComputedFlags)
self.assertEqual(len(objs), 6)
for o in objs:
self.assertIsInstance(o, Sources)
suffix_map = {obj.canonical_suffix: obj for obj in objs}
self.assertEqual(len(suffix_map), 6)
expected = {
@@ -1013,17 +1069,17 @@ class TestEmitterBasic(unittest.TestCase
reader = self.reader('generated-sources')
objs = self.read_topsrcdir(reader)
flags = objs.pop()
self.assertIsInstance(flags, ComputedFlags)
# The second to last object is a Linkable.
linkable = objs.pop()
self.assertTrue(linkable.cxx_link)
- self.assertEqual(len(objs), 6)
+ self.assertEqual(len(objs), 7)
generated_sources = [o for o in objs if isinstance(o, GeneratedSources)]
self.assertEqual(len(generated_sources), 6)
suffix_map = {obj.canonical_suffix: obj for obj in generated_sources}
self.assertEqual(len(suffix_map), 6)
expected = {
@@ -1047,18 +1103,21 @@ class TestEmitterBasic(unittest.TestCase
# This objdir will generate target flags.
flags = objs.pop()
self.assertIsInstance(flags, ComputedFlags)
# The second to last object is a Linkable
linkable = objs.pop()
self.assertTrue(linkable.cxx_link)
# This objdir will also generate host flags.
- flags = objs.pop()
- self.assertIsInstance(flags, ComputedFlags)
+ host_flags = objs.pop()
+ self.assertIsInstance(host_flags, ComputedFlags)
+ # ...and ldflags.
+ ldflags = objs.pop()
+ self.assertIsInstance(ldflags, ComputedFlags)
self.assertEqual(len(objs), 3)
for o in objs:
self.assertIsInstance(o, HostSources)
suffix_map = {obj.canonical_suffix: obj for obj in objs}
self.assertEqual(len(suffix_map), 3)
expected = {
@@ -1073,18 +1132,18 @@ class TestEmitterBasic(unittest.TestCase
[mozpath.join(reader.config.topsrcdir, f) for f in files])
def test_unified_sources(self):
"""Test that UNIFIED_SOURCES works properly."""
reader = self.reader('unified-sources')
objs = self.read_topsrcdir(reader)
# The last object is a Linkable, the second to last ComputedFlags,
- # ignore them.
- objs = objs[:-2]
+ # followed by ldflags, ignore them.
+ objs = objs[:-3]
self.assertEqual(len(objs), 3)
for o in objs:
self.assertIsInstance(o, UnifiedSources)
suffix_map = {obj.canonical_suffix: obj for obj in objs}
self.assertEqual(len(suffix_map), 3)
expected = {
@@ -1100,18 +1159,18 @@ class TestEmitterBasic(unittest.TestCase
self.assertTrue(sources.have_unified_mapping)
def test_unified_sources_non_unified(self):
"""Test that UNIFIED_SOURCES with FILES_PER_UNIFIED_FILE=1 works properly."""
reader = self.reader('unified-sources-non-unified')
objs = self.read_topsrcdir(reader)
# The last object is a Linkable, the second to last ComputedFlags,
- # ignore them.
- objs = objs[:-2]
+ # followed by ldflags, ignore them.
+ objs = objs[:-3]
self.assertEqual(len(objs), 3)
for o in objs:
self.assertIsInstance(o, UnifiedSources)
suffix_map = {obj.canonical_suffix: obj for obj in objs}
self.assertEqual(len(suffix_map), 3)
expected = {
@@ -1327,42 +1386,45 @@ class TestEmitterBasic(unittest.TestCase
self.assertEquals([p.full_path for p in objs[0].paths], expected)
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)
- self.assertIsInstance(objs[3], ComputedFlags)
+ self.assertIsInstance(objs[2], ComputedFlags)
+ self.assertIsInstance(objs[3], SharedLibrary)
+ self.assertIsInstance(objs[4], ComputedFlags)
for path, files in objs[0].files.walk():
for f in files:
self.assertEqual(str(f), '!libfoo.so')
self.assertEqual(path, 'foo/bar')
def test_symbols_file(self):
"""Test that SYMBOLS_FILE works"""
reader = self.reader('test-symbols-file')
- genfile, shlib, flags = self.read_topsrcdir(reader)
+ genfile, ldflags, shlib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(genfile, GeneratedFile)
self.assertIsInstance(flags, ComputedFlags)
+ self.assertIsInstance(ldflags, ComputedFlags)
self.assertIsInstance(shlib, SharedLibrary)
# This looks weird but MockConfig sets DLL_{PREFIX,SUFFIX} and
# the reader method in this class sets OS_TARGET=WINNT.
self.assertEqual(shlib.symbols_file, 'libfoo.so.def')
def test_symbols_file_objdir(self):
"""Test that a SYMBOLS_FILE in the objdir works"""
reader = self.reader('test-symbols-file-objdir')
- genfile, shlib, flags = self.read_topsrcdir(reader)
+ genfile, ldflags, shlib, flags = self.read_topsrcdir(reader)
self.assertIsInstance(genfile, GeneratedFile)
self.assertEqual(genfile.script,
mozpath.join(reader.config.topsrcdir, 'foo.py'))
self.assertIsInstance(flags, ComputedFlags)
+ self.assertIsInstance(ldflags, ComputedFlags)
self.assertIsInstance(shlib, SharedLibrary)
self.assertEqual(shlib.symbols_file, 'foo.symbols')
def test_symbols_file_objdir_missing_generated(self):
"""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')