Bug 1319563 - Move CompileDBBackend:_build_db_line to CommonBackend:_build_compiler_line; r?glandium draft
authorMike Shal <mshal@mozilla.com>
Mon, 26 Sep 2016 16:16:31 -0400
changeset 443147 62e8594733aaa9c708056268780b46ed64a49354
parent 442901 2a47a071271f61d69019aed92da55383fdc05cef
child 443148 a53afa33df5ade4be5fdde50f51c333c60b26f73
push id36915
push userbmo:mshal@mozilla.com
push dateWed, 23 Nov 2016 23:38:19 +0000
reviewersglandium
bugs1319563
milestone53.0a1
Bug 1319563 - Move CompileDBBackend:_build_db_line to CommonBackend:_build_compiler_line; r?glandium
python/mozbuild/mozbuild/backend/common.py
python/mozbuild/mozbuild/compilation/database.py
--- a/python/mozbuild/mozbuild/backend/common.py
+++ b/python/mozbuild/mozbuild/backend/common.py
@@ -3,16 +3,17 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 from __future__ import absolute_import, unicode_literals
 
 import cPickle as pickle
 import itertools
 import json
 import os
+import types
 
 import mozpack.path as mozpath
 
 from mozbuild.backend.base import BuildBackend
 
 from mozbuild.frontend.context import (
     Context,
     Path,
@@ -560,8 +561,68 @@ class CommonBackend(BuildBackend):
                     FinalTargetPreprocessedFiles(jar_context, files_pp))
 
             for m in jarinfo.chrome_manifests:
                 entry = parse_manifest_line(
                     mozpath.dirname(jarinfo.name),
                     m.replace('%', mozpath.basename(jarinfo.name) + '/'))
                 self.consume_object(ChromeManifestEntry(
                     jar_context, '%s.manifest' % jarinfo.name, entry))
+
+    COMPILERS = {
+        '.c': 'CC',
+        '.cpp': 'CXX',
+        '.m': 'CC',
+        '.mm': 'CXX',
+    }
+
+    CFLAGS = {
+        '.c': 'CFLAGS',
+        '.cpp': 'CXXFLAGS',
+        '.m': 'CFLAGS',
+        '.mm': 'CXXFLAGS',
+    }
+
+    def _build_compiler_line(self, objdir, reldir, cenv, filename, canonical_suffix):
+        if canonical_suffix not in self.COMPILERS:
+            return None
+        cmdline = cenv.substs[self.COMPILERS[canonical_suffix]].split() + ['-o', '/dev/null', '-c']
+        reldir = reldir or mozpath.relpath(objdir, cenv.topobjdir)
+
+        def append_var(name):
+            value = cenv.substs.get(name)
+            if not value:
+                return None
+            if isinstance(value, types.StringTypes):
+                value = value.split()
+            cmdline.extend(value)
+
+        if canonical_suffix in ('.mm', '.cpp'):
+            cmdline.append('$(STL_FLAGS)')
+
+        cmdline.extend((
+            '$(VISIBILITY_FLAGS)',
+            '$(DEFINES)',
+            '-I%s' % mozpath.join(cenv.topsrcdir, reldir),
+            '-I%s' % objdir,
+            '$(LOCAL_INCLUDES)',
+            '-I%s/dist/include' % cenv.topobjdir,
+            '$(EXTRA_INCLUDES)',
+        ))
+        append_var('DSO_CFLAGS')
+        append_var('DSO_PIC_CFLAGS')
+        if canonical_suffix in ('.c', '.cpp'):
+            cmdline.append('$(RTL_FLAGS)')
+        append_var('OS_COMPILE_%s' % self.CFLAGS[canonical_suffix])
+        append_var('OS_CPPFLAGS')
+        append_var('OS_%s' % self.CFLAGS[canonical_suffix])
+        append_var('MOZ_DEBUG_FLAGS')
+        append_var('MOZ_OPTIMIZE_FLAGS')
+        append_var('MOZ_FRAMEPTR_FLAGS')
+        cmdline.append('$(WARNINGS_AS_ERRORS)')
+        cmdline.append('$(MOZBUILD_%s)' % self.CFLAGS[canonical_suffix])
+        if canonical_suffix == '.m':
+            append_var('OS_COMPILE_CMFLAGS')
+            cmdline.append('$(MOZBUILD_CMFLAGS)')
+        elif canonical_suffix == '.mm':
+            append_var('OS_COMPILE_CMMFLAGS')
+            cmdline.append('$(MOZBUILD_CMMFLAGS)')
+        return cmdline
--- a/python/mozbuild/mozbuild/compilation/database.py
+++ b/python/mozbuild/mozbuild/compilation/database.py
@@ -185,68 +185,12 @@ class CompileDBBackend(CommonBackend):
 
     def _handle_webidl_build(self, bindings_dir, unified_source_mapping,
                              webidls, expected_build_output_files,
                              global_define_files):
         for f in unified_source_mapping:
             self._build_db_line(bindings_dir, None, self.environment, f[0],
                                 '.cpp')
 
-    COMPILERS = {
-        '.c': 'CC',
-        '.cpp': 'CXX',
-        '.m': 'CC',
-        '.mm': 'CXX',
-    }
-
-    CFLAGS = {
-        '.c': 'CFLAGS',
-        '.cpp': 'CXXFLAGS',
-        '.m': 'CFLAGS',
-        '.mm': 'CXXFLAGS',
-    }
-
     def _build_db_line(self, objdir, reldir, cenv, filename, canonical_suffix):
-        if canonical_suffix not in self.COMPILERS:
-            return
-        db = self._db.setdefault((objdir, filename),
-            cenv.substs[self.COMPILERS[canonical_suffix]].split() +
-            ['-o', '/dev/null', '-c'])
-        reldir = reldir or mozpath.relpath(objdir, cenv.topobjdir)
-
-        def append_var(name):
-            value = cenv.substs.get(name)
-            if not value:
-                return
-            if isinstance(value, types.StringTypes):
-                value = value.split()
-            db.extend(value)
-
-        if canonical_suffix in ('.mm', '.cpp'):
-            db.append('$(STL_FLAGS)')
-
-        db.extend((
-            '$(VISIBILITY_FLAGS)',
-            '$(DEFINES)',
-            '-I%s' % mozpath.join(cenv.topsrcdir, reldir),
-            '-I%s' % objdir,
-            '$(LOCAL_INCLUDES)',
-            '-I%s/dist/include' % cenv.topobjdir,
-            '$(EXTRA_INCLUDES)',
-        ))
-        append_var('DSO_CFLAGS')
-        append_var('DSO_PIC_CFLAGS')
-        if canonical_suffix in ('.c', '.cpp'):
-            db.append('$(RTL_FLAGS)')
-        append_var('OS_COMPILE_%s' % self.CFLAGS[canonical_suffix])
-        append_var('OS_CPPFLAGS')
-        append_var('OS_%s' % self.CFLAGS[canonical_suffix])
-        append_var('MOZ_DEBUG_FLAGS')
-        append_var('MOZ_OPTIMIZE_FLAGS')
-        append_var('MOZ_FRAMEPTR_FLAGS')
-        db.append('$(WARNINGS_AS_ERRORS)')
-        db.append('$(MOZBUILD_%s)' % self.CFLAGS[canonical_suffix])
-        if canonical_suffix == '.m':
-            append_var('OS_COMPILE_CMFLAGS')
-            db.append('$(MOZBUILD_CMFLAGS)')
-        elif canonical_suffix == '.mm':
-            append_var('OS_COMPILE_CMMFLAGS')
-            db.append('$(MOZBUILD_CMMFLAGS)')
+        cmdline = self._build_compiler_line(objdir, reldir, cenv, filename, canonical_suffix)
+        if cmdline:
+            self._db[(objdir, filename)] = cmdline