From ba507be622a34a49bf5fcf344529f03c43a54398 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 26 Nov 2015 17:07:37 +0900 Subject: [PATCH] Bug 1227892 - Add basic tests for IS_COMPONENT/NO_COMPONENTS_MANIFEST. r=gps --- .../mozbuild/mozbuild/test/backend/common.py | 8 +++++ .../data/binary-components/bar/moz.build | 2 ++ .../data/binary-components/foo/moz.build | 1 + .../backend/data/binary-components/moz.build | 10 ++++++ .../test/backend/test_recursivemake.py | 34 +++++++++++++++++++ python/mozbuild/mozbuild/test/common.py | 6 +++- .../data/binary-components/bar/moz.build | 2 ++ .../data/binary-components/foo/moz.build | 1 + .../frontend/data/binary-components/moz.build | 10 ++++++ .../mozbuild/test/frontend/test_emitter.py | 21 ++++++++++++ 10 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 python/mozbuild/mozbuild/test/backend/data/binary-components/bar/moz.build create mode 100644 python/mozbuild/mozbuild/test/backend/data/binary-components/foo/moz.build create mode 100644 python/mozbuild/mozbuild/test/backend/data/binary-components/moz.build create mode 100644 python/mozbuild/mozbuild/test/frontend/data/binary-components/bar/moz.build create mode 100644 python/mozbuild/mozbuild/test/frontend/data/binary-components/foo/moz.build create mode 100644 python/mozbuild/mozbuild/test/frontend/data/binary-components/moz.build diff --git a/python/mozbuild/mozbuild/test/backend/common.py b/python/mozbuild/mozbuild/test/backend/common.py index 9de6b1d8cf58..6a27a2059070 100644 --- a/python/mozbuild/mozbuild/test/backend/common.py +++ b/python/mozbuild/mozbuild/test/backend/common.py @@ -42,6 +42,14 @@ CONFIGS = defaultdict(lambda: { ('ANDROID_TARGET_SDK', '16'), ], }, + 'binary-components': { + 'defines': [], + 'non_global_defines': [], + 'substs': [ + ('LIB_PREFIX', 'lib'), + ('LIB_SUFFIX', 'a'), + ], + }, 'stub0': { 'defines': [ ('MOZ_TRUE_1', '1'), diff --git a/python/mozbuild/mozbuild/test/backend/data/binary-components/bar/moz.build b/python/mozbuild/mozbuild/test/backend/data/binary-components/bar/moz.build new file mode 100644 index 000000000000..2946e42aa574 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/binary-components/bar/moz.build @@ -0,0 +1,2 @@ +Component('bar') +NO_COMPONENTS_MANIFEST = True diff --git a/python/mozbuild/mozbuild/test/backend/data/binary-components/foo/moz.build b/python/mozbuild/mozbuild/test/backend/data/binary-components/foo/moz.build new file mode 100644 index 000000000000..8611a74be908 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/binary-components/foo/moz.build @@ -0,0 +1 @@ +Component('foo') diff --git a/python/mozbuild/mozbuild/test/backend/data/binary-components/moz.build b/python/mozbuild/mozbuild/test/backend/data/binary-components/moz.build new file mode 100644 index 000000000000..1776d0514247 --- /dev/null +++ b/python/mozbuild/mozbuild/test/backend/data/binary-components/moz.build @@ -0,0 +1,10 @@ +@template +def Component(name): + LIBRARY_NAME = name + FORCE_SHARED_LIB = True + IS_COMPONENT = True + +DIRS += [ + 'foo', + 'bar', +] diff --git a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py index 877d1a1b64e0..983a01044558 100644 --- a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py +++ b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py @@ -826,6 +826,40 @@ class TestRecursiveMakeBackend(BackendTester): # 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', + ]) + + 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', + ]) + if __name__ == '__main__': main() diff --git a/python/mozbuild/mozbuild/test/common.py b/python/mozbuild/mozbuild/test/common.py index 99154b64e34a..3602e4d6f3c2 100644 --- a/python/mozbuild/mozbuild/test/common.py +++ b/python/mozbuild/mozbuild/test/common.py @@ -36,4 +36,8 @@ class MockConfig(object): self.external_source_dir = None self.lib_prefix = 'lib' - self.lib_suffix = '.so' + self.lib_suffix = '.a' + self.import_prefix = 'lib' + self.import_suffix = '.so' + self.dll_prefix = 'lib' + self.dll_suffix = '.so' diff --git a/python/mozbuild/mozbuild/test/frontend/data/binary-components/bar/moz.build b/python/mozbuild/mozbuild/test/frontend/data/binary-components/bar/moz.build new file mode 100644 index 000000000000..2946e42aa574 --- /dev/null +++ b/python/mozbuild/mozbuild/test/frontend/data/binary-components/bar/moz.build @@ -0,0 +1,2 @@ +Component('bar') +NO_COMPONENTS_MANIFEST = True diff --git a/python/mozbuild/mozbuild/test/frontend/data/binary-components/foo/moz.build b/python/mozbuild/mozbuild/test/frontend/data/binary-components/foo/moz.build new file mode 100644 index 000000000000..8611a74be908 --- /dev/null +++ b/python/mozbuild/mozbuild/test/frontend/data/binary-components/foo/moz.build @@ -0,0 +1 @@ +Component('foo') diff --git a/python/mozbuild/mozbuild/test/frontend/data/binary-components/moz.build b/python/mozbuild/mozbuild/test/frontend/data/binary-components/moz.build new file mode 100644 index 000000000000..1776d0514247 --- /dev/null +++ b/python/mozbuild/mozbuild/test/frontend/data/binary-components/moz.build @@ -0,0 +1,10 @@ +@template +def Component(name): + LIBRARY_NAME = name + FORCE_SHARED_LIB = True + IS_COMPONENT = True + +DIRS += [ + 'foo', + 'bar', +] diff --git a/python/mozbuild/mozbuild/test/frontend/test_emitter.py b/python/mozbuild/mozbuild/test/frontend/test_emitter.py index 4cd0fd149471..a02ced0d6d23 100644 --- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py +++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py @@ -12,6 +12,7 @@ from mozunit import main from mozbuild.frontend.data import ( AndroidResDirs, BrandingFiles, + ChromeManifestEntry, ConfigFileSubstitution, Defines, DistFiles, @@ -27,6 +28,7 @@ from mozbuild.frontend.data import ( LocalInclude, Program, Resources, + SharedLibrary, SimpleProgram, Sources, StaticLibrary, @@ -41,6 +43,7 @@ from mozbuild.frontend.reader import ( BuildReaderError, SandboxValidationError, ) +from mozpack.chrome import manifest from mozbuild.test.common import MockConfig @@ -921,5 +924,23 @@ class TestEmitterBasic(unittest.TestCase): ] 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') + + if __name__ == '__main__': main()