diff options
author | Chun-wei Fan <fanchunwei@src.gnome.org> | 2020-08-20 18:07:54 +0800 |
---|---|---|
committer | Chun-wei Fan <fanchunwei@src.gnome.org> | 2020-08-24 23:32:46 +0800 |
commit | b0ffd96e08e2cf6ab81d878696d07746ff2834ef (patch) | |
tree | 726374bc49a1bb72e6ff33a8add6934d3bae9299 /giscanner/ccompiler.py | |
parent | bf349e6f79ed24bedcf64cf262bbc87ff855064b (diff) | |
download | gobject-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.py | 14 |
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: |