summaryrefslogtreecommitdiff
path: root/giscanner/ccompiler.py
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2020-08-20 18:07:54 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2020-08-24 23:32:46 +0800
commitb0ffd96e08e2cf6ab81d878696d07746ff2834ef (patch)
tree726374bc49a1bb72e6ff33a8add6934d3bae9299 /giscanner/ccompiler.py
parentbf349e6f79ed24bedcf64cf262bbc87ff855064b (diff)
downloadgobject-introspection-b0ffd96e08e2cf6ab81d878696d07746ff2834ef.tar.gz
giscanner: Add support for using clang-cl
This adds quick support for using 'clang-cl' (CLang's emulation of the Visual Studio compiler) to run giscanner. This will still initialize things mostly in the MSVC fashion, except that it will also check whether both 'CC' and 'CXX' envvars are set to 'clang-cl [args]', as per the way that Meson supports using 'clang-cl'. Since we are using distutils to set up the compiler instance, when we enable 'clang-cl' support, we trick distutils that we have already initialized the MSVCCompiler parameters as needed. We just leave out the compiler flags as we don't really care about debug symbols nor optimization with the built dumper binary, as it is gone as soon as the .gir file is generated. This will build G-I successfully with all the tests passed.
Diffstat (limited to 'giscanner/ccompiler.py')
-rw-r--r--giscanner/ccompiler.py14
1 files changed, 8 insertions, 6 deletions
diff --git a/giscanner/ccompiler.py b/giscanner/ccompiler.py
index a81d4b86..bd1aa78e 100644
--- a/giscanner/ccompiler.py
+++ b/giscanner/ccompiler.py
@@ -163,9 +163,11 @@ class CCompiler(object):
elif os.environ.get('VCInstallDir'):
os.environ['MSSdk'] = os.environ.get('VCInstallDir')
- self.compiler_cmd = 'cl.exe'
-
- self._cflags_no_deprecation_warnings = "-wd4996"
+ if self.compiler.check_is_clang_cl():
+ self.compiler_cmd = os.environ.get('CC').split()[0]
+ else:
+ self.compiler_cmd = 'cl.exe'
+ self._cflags_no_deprecation_warnings = "-wd4996"
else:
if (isinstance(self.compiler, Mingw32CCompiler)):
self.compiler_cmd = self.compiler.compiler[0]
@@ -263,7 +265,7 @@ class CCompiler(object):
# Define these macros when using Visual C++ to silence many warnings,
# and prevent stepping on many Visual Studio-specific items, so that
# we don't have to handle them specifically in scannerlexer.l
- if self.check_is_msvc():
+ if self.check_is_msvc() and not self.compiler.check_is_clang_cl():
macros.append(('_USE_DECLSPECS_FOR_SAL', None))
macros.append(('_CRT_SECURE_NO_WARNINGS', None))
macros.append(('_CRT_NONSTDC_NO_WARNINGS', None))
@@ -318,7 +320,7 @@ class CCompiler(object):
args = []
libsearch = []
- # When we are using Visual C++...
+ # When we are using Visual C++ or clang-cl...
if self.check_is_msvc():
# The search path of the .lib's on Visual C++
# is dependent on the LIB environmental variable,
@@ -336,7 +338,7 @@ class CCompiler(object):
args.append('dumpbin.exe')
args.append('-symbols')
- # When we are not using Visual C++ (i.e. we are using GCC)...
+ # When we are not using Visual C++ nor clang-cl (i.e. we are using GCC)...
else:
libtool = utils.get_libtool_command(options)
if libtool: