diff --git a/mesonbuild/modules/qt.py b/mesonbuild/modules/qt.py index d5c327368..83dcf31bd 100644 --- a/mesonbuild/modules/qt.py +++ b/mesonbuild/modules/qt.py @@ -23,7 +23,7 @@ from . import ModuleReturnValue, ExtensionModule from .. import build from .. import coredata from .. import mlog -from ..dependencies import find_external_dependency, Dependency, ExternalLibrary +from ..dependencies import find_external_dependency, Dependency, ExternalLibrary, InternalDependency from ..mesonlib import MesonException, File, version_compare, Popen_safe from ..interpreter import extract_required_kwarg from ..interpreter.type_checking import INSTALL_DIR_KW, INSTALL_KW, NoneType @@ -457,7 +457,10 @@ class QtBaseModule(ExtensionModule): inc = state.get_include_args(include_dirs=kwargs['include_directories']) compile_args: T.List[str] = [] for dep in kwargs['dependencies']: - compile_args.extend([a for a in dep.get_all_compile_args() if a.startswith(('-I', '-D'))]) + compile_args.extend(a for a in dep.get_all_compile_args() if a.startswith(('-I', '-D'))) + if isinstance(dep, InternalDependency): + for incl in dep.include_directories: + compile_args.extend(f'-I{i}' for i in incl.to_string_list(self.interpreter.source_root, self.interpreter.environment.build_dir)) output: T.List[build.GeneratedList] = [] diff --git a/test cases/frameworks/4 qt/manualinclude.cpp b/test cases/frameworks/4 qt/manualinclude.cpp index 60b94e510..ef151a44a 100644 --- a/test cases/frameworks/4 qt/manualinclude.cpp +++ b/test cases/frameworks/4 qt/manualinclude.cpp @@ -1,4 +1,5 @@ #include"manualinclude.h" +#include #include #include diff --git a/test cases/frameworks/4 qt/meson.build b/test cases/frameworks/4 qt/meson.build index 825cd5766..04a5288bf 100644 --- a/test cases/frameworks/4 qt/meson.build +++ b/test cases/frameworks/4 qt/meson.build @@ -2,6 +2,9 @@ project('qt4, qt5, and qt6 build test', 'cpp', # Qt6 requires C++ 17 support default_options : ['cpp_std=c++17']) +# Visit the subdir before entering the loop +subdir('mocdep') + qt5_modules = ['Widgets'] qt6_modules = ['Widgets'] foreach qt : ['qt4', 'qt5', 'qt6'] @@ -114,17 +117,21 @@ foreach qt : ['qt4', 'qt5', 'qt6'] moc_extra_arguments : ['-DMOC_EXTRA_FLAG'], # This is just a random macro to test `extra_arguments` moc_sources : 'manualinclude.cpp', moc_headers : 'manualinclude.h', - method : get_option('method')) + method : get_option('method'), + dependencies: mocdep, + ) manpreprocessed = qtmodule.compile_moc( extra_args : ['-DMOC_EXTRA_FLAG'], # This is just a random macro to test `extra_arguments` sources : 'manualinclude.cpp', headers : 'manualinclude.h', - method : get_option('method')) + method : get_option('method'), + dependencies: mocdep, + ) qtmaninclude = executable(qt + 'maninclude', sources : ['manualinclude.cpp', manpreprocessed], - dependencies : qtcore) + dependencies : [qtcore, mocdep]) test(qt + 'maninclude', qtmaninclude) diff --git a/test cases/frameworks/4 qt/mocdep/meson.build b/test cases/frameworks/4 qt/mocdep/meson.build new file mode 100644 index 000000000..174b42679 --- /dev/null +++ b/test cases/frameworks/4 qt/mocdep/meson.build @@ -0,0 +1,3 @@ +mocdep = declare_dependency( + include_directories: include_directories('.'), +) diff --git a/test cases/frameworks/4 qt/mocdep/mocdep.h b/test cases/frameworks/4 qt/mocdep/mocdep.h new file mode 100644 index 000000000..357a52c3d --- /dev/null +++ b/test cases/frameworks/4 qt/mocdep/mocdep.h @@ -0,0 +1 @@ +#define MOC_DEP 1