diff options
| author | Tomi Lähteenmäki <lihis@lihis.net> | 2025-03-28 11:53:14 +0200 |
|---|---|---|
| committer | Jussi Pakkanen <jpakkane@gmail.com> | 2025-04-05 22:37:52 +0300 |
| commit | 4bc6b2701c39f88ba013c37856f1f90d4bbc9dca (patch) | |
| tree | d6bb59360673abbf1a9ba177d1e6eb6ac09308c2 | |
| parent | 1dde32681a88e6272b53b62adfb18d12926be3e3 (diff) | |
| download | meson-4bc6b2701c39f88ba013c37856f1f90d4bbc9dca.tar.gz | |
cmake/interpreter: Don't add __CMake_build to includes
Don't add "<project_source_dir>/<subproject>/__CMake_build" directory
to include directories.
Fixes #12351
6 files changed, 43 insertions, 2 deletions
diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py index 9cfb4fac2..929627661 100644 --- a/mesonbuild/cmake/interpreter.py +++ b/mesonbuild/cmake/interpreter.py @@ -432,9 +432,8 @@ class ConverterTarget: def non_optional(inputs: T.Iterable[T.Optional[Path]]) -> T.List[Path]: return [p for p in inputs if p is not None] - build_dir_rel = self.build_dir.relative_to(Path(self.env.get_build_dir()) / subdir) self.generated_raw = non_optional(rel_path(x, False, True) for x in self.generated_raw) - self.includes = non_optional(itertools.chain((rel_path(x, True, False) for x in OrderedSet(self.includes)), [build_dir_rel])) + self.includes = non_optional(itertools.chain((rel_path(x, True, False) for x in OrderedSet(self.includes)))) self.sys_includes = non_optional(rel_path(x, True, False) for x in OrderedSet(self.sys_includes)) self.sources = non_optional(rel_path(x, False, False) for x in self.sources) diff --git a/test cases/cmake/28 include directories/main.c b/test cases/cmake/28 include directories/main.c new file mode 100644 index 000000000..bb7fe2966 --- /dev/null +++ b/test cases/cmake/28 include directories/main.c @@ -0,0 +1,9 @@ +#include <stdint.h> +#include <cmTest.h> + +int main(void) +{ + cmTestFunc(); + return 0; +} + diff --git a/test cases/cmake/28 include directories/meson.build b/test cases/cmake/28 include directories/meson.build new file mode 100644 index 000000000..e2c92d70f --- /dev/null +++ b/test cases/cmake/28 include directories/meson.build @@ -0,0 +1,17 @@ +project('include directories test', 'c') + +cm = import('cmake') + +sub_pro = cm.subproject('cmTest') +sub_dep = sub_pro.dependency('cmTest') + +missing_inc_dir_arg = '-Werror=missing-include-dirs' +has_missing_inc_dir = meson.get_compiler('c').has_argument(missing_inc_dir_arg) +if not has_missing_inc_dir + error('MESON_SKIP_TEST: Compiler does not support ' + missing_inc_dir_arg) +else + add_project_arguments(missing_inc_dir_arg, language: 'c') +endif + +exe1 = executable('exe1', ['main.c'], dependencies: [sub_dep]) +test('test1', exe1) diff --git a/test cases/cmake/28 include directories/subprojects/cmTest/CMakeLists.txt b/test cases/cmake/28 include directories/subprojects/cmTest/CMakeLists.txt new file mode 100644 index 000000000..66ea3cb30 --- /dev/null +++ b/test cases/cmake/28 include directories/subprojects/cmTest/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION ${CMAKE_VERSION}) + +project(cmTest C) + +add_library(cmTest src/cmTest.c) +target_include_directories(cmTest PUBLIC include) diff --git a/test cases/cmake/28 include directories/subprojects/cmTest/include/cmTest.h b/test cases/cmake/28 include directories/subprojects/cmTest/include/cmTest.h new file mode 100644 index 000000000..3af821cc3 --- /dev/null +++ b/test cases/cmake/28 include directories/subprojects/cmTest/include/cmTest.h @@ -0,0 +1,3 @@ +#pragma once + +void cmTestFunc(void); diff --git a/test cases/cmake/28 include directories/subprojects/cmTest/src/cmTest.c b/test cases/cmake/28 include directories/subprojects/cmTest/src/cmTest.c new file mode 100644 index 000000000..f77b694cc --- /dev/null +++ b/test cases/cmake/28 include directories/subprojects/cmTest/src/cmTest.c @@ -0,0 +1,7 @@ +#include "include/cmTest.h" +#include <stdio.h> + +void cmTestFunc(void) +{ + printf ("Hello\n"); +} |
