cmake: fix missing languages from CMake (fixes #8132)

pull/8152/head
Daniel Mensinger 4 years ago committed by Jussi Pakkanen
parent 67ee65f47e
commit 6b515c4321
  1. 1
      cross/linux-mingw-w64-32bit.txt
  2. 1
      cross/linux-mingw-w64-64bit.txt
  3. 37
      mesonbuild/cmake/interpreter.py
  4. 5
      test cases/cmake/24 mixing languages/main.c
  5. 13
      test cases/cmake/24 mixing languages/meson.build
  6. 8
      test cases/cmake/24 mixing languages/subprojects/cmTest/CMakeLists.txt
  7. 13
      test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.c
  8. 3
      test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.h
  9. 7
      test cases/cmake/24 mixing languages/subprojects/cmTest/cmTest.m

@ -1,6 +1,7 @@
[binaries]
c = '/usr/bin/i686-w64-mingw32-gcc'
cpp = '/usr/bin/i686-w64-mingw32-g++'
objc = '/usr/bin/i686-w64-mingw32-gcc'
ar = '/usr/bin/i686-w64-mingw32-ar'
strip = '/usr/bin/i686-w64-mingw32-strip'
pkgconfig = '/usr/bin/i686-w64-mingw32-pkg-config'

@ -1,6 +1,7 @@
[binaries]
c = '/usr/bin/x86_64-w64-mingw32-gcc'
cpp = '/usr/bin/x86_64-w64-mingw32-g++'
objc = '/usr/bin/x86_64-w64-mingw32-gcc'
ar = '/usr/bin/x86_64-w64-mingw32-ar'
strip = '/usr/bin/x86_64-w64-mingw32-strip'
pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config'

@ -231,7 +231,7 @@ class ConverterTarget:
if target.install_paths:
self.install_dir = target.install_paths[0]
self.languages = [] # type: T.List[str]
self.languages = set() # type: T.Set[str]
self.sources = [] # type: T.List[Path]
self.generated = [] # type: T.List[Path]
self.generated_ctgt = [] # type: T.List[CustomTargetReference]
@ -250,19 +250,40 @@ class ConverterTarget:
self.name = _sanitize_cmake_name(self.name)
self.generated_raw = [] # type: T.List[Path]
for i in target.files:
# Determine the meson language
languages = set() # type: T.Set[str]
src_suffixes = set() # type: T.Set[str]
# Insert suffixes
for j in i.sources:
if not j.suffix:
continue
src_suffixes.add(j.suffix[1:])
# Determine the meson language(s)
# Extract the default language from the explicit CMake field
lang_cmake_to_meson = {val.lower(): key for key, val in language_map.items()}
lang = lang_cmake_to_meson.get(i.language.lower(), 'c')
if lang not in self.languages:
self.languages += [lang]
if lang not in self.compile_opts:
self.compile_opts[lang] = []
languages.add(lang_cmake_to_meson.get(i.language.lower(), 'c'))
# Determine missing languages from the source suffixes
for sfx in src_suffixes:
for key, val in lang_suffixes.items():
if sfx in val:
languages.add(key)
break
# Register the new languages and initialize the compile opts array
for lang in languages:
self.languages.add(lang)
if lang not in self.compile_opts:
self.compile_opts[lang] = []
# Add arguments, but avoid duplicates
args = i.flags
args += ['-D{}'.format(x) for x in i.defines]
self.compile_opts[lang] += [x for x in args if x not in self.compile_opts[lang]]
for lang in languages:
self.compile_opts[lang] += [x for x in args if x not in self.compile_opts[lang]]
# Handle include directories
self.includes += [x.path for x in i.includes if x.path not in self.includes and not x.isSystem]

@ -0,0 +1,5 @@
#include <cmTest.h>
int main(void) {
return doStuff();
}

@ -0,0 +1,13 @@
project('CMake mix', ['c', 'cpp'])
if not add_languages('objc', required : false)
error('MESON_SKIP_TEST: No ObjC compiler')
endif
cm = import('cmake')
sub_pro = cm.subproject('cmTest')
sub_dep = sub_pro.dependency('cmTest', include_type: 'system')
exe1 = executable('exe1', ['main.c'], dependencies: [sub_dep])
test('test1', exe1)

@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.5)
project(cmTest)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_library(cmTest STATIC cmTest.c cmTest.m)
target_compile_definitions(cmTest PUBLIC SOME_MAGIC_DEFINE=42)

@ -0,0 +1,13 @@
#include "cmTest.h"
#include <stdio.h>
#if SOME_MAGIC_DEFINE != 42
#error "SOME_MAGIC_DEFINE != 42"
#endif
int foo(int x);
int doStuff(void) {
printf("Hello World\n");
return foo(42);
}

@ -0,0 +1,7 @@
#if SOME_MAGIC_DEFINE != 42
#error "SOME_MAGIC_DEFINE != 42"
#endif
int foo(int x) {
return 42 - x;
}
Loading…
Cancel
Save