summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomi Lähteenmäki <lihis@lihis.net>2025-03-28 11:53:14 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2025-04-05 22:37:52 +0300
commit4bc6b2701c39f88ba013c37856f1f90d4bbc9dca (patch)
treed6bb59360673abbf1a9ba177d1e6eb6ac09308c2
parent1dde32681a88e6272b53b62adfb18d12926be3e3 (diff)
downloadmeson-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
-rw-r--r--mesonbuild/cmake/interpreter.py3
-rw-r--r--test cases/cmake/28 include directories/main.c9
-rw-r--r--test cases/cmake/28 include directories/meson.build17
-rw-r--r--test cases/cmake/28 include directories/subprojects/cmTest/CMakeLists.txt6
-rw-r--r--test cases/cmake/28 include directories/subprojects/cmTest/include/cmTest.h3
-rw-r--r--test cases/cmake/28 include directories/subprojects/cmTest/src/cmTest.c7
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");
+}