diff options
author | Alexis Jeandet <alexis.jeandet@member.fsf.org> | 2018-04-28 23:36:05 +0200 |
---|---|---|
committer | Alexis Jeandet <alexis.jeandet@member.fsf.org> | 2018-04-28 23:36:05 +0200 |
commit | f784ee62eab752ca9b8c14281a0c6edbcde2c7b2 (patch) | |
tree | bacecbd3bfd9ad3f5688b672590597c7c1d636c6 | |
parent | b380251305c24a5ce4c70b9c9861293fe12a470c (diff) | |
download | meson-f784ee62eab752ca9b8c14281a0c6edbcde2c7b2.zip meson-f784ee62eab752ca9b8c14281a0c6edbcde2c7b2.tar.gz meson-f784ee62eab752ca9b8c14281a0c6edbcde2c7b2.tar.bz2 |
Fixed private headers on OSX with framework stuff
Removed Qt4 private headers test since it's hard to get Qt4 private
headers installed on CI.
Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>
-rw-r--r-- | mesonbuild/dependencies/ui.py | 75 | ||||
-rw-r--r-- | test cases/frameworks/4 qt/main.cpp | 6 |
2 files changed, 52 insertions, 29 deletions
diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py index 342b1da..99346ec 100644 --- a/mesonbuild/dependencies/ui.py +++ b/mesonbuild/dependencies/ui.py @@ -147,6 +147,46 @@ class GnuStepDependency(ConfigToolDependency): return version +def _qt_get_private_includes(mod_inc_dir, module, qt_version): + # usually Qt5 puts private headers in /QT_INSTALL_HEADERS/module/VERSION/module/private + # except for at least QtWebkit and Enginio where the module version doesn't match Qt version + # as an example with Qt 5.10.1 on linux you would get: + # /usr/include/qt5/QtCore/5.10.1/QtCore/private/ + # /usr/include/qt5/QtWidgets/5.10.1/QtWidgets/private/ + # /usr/include/qt5/Enginio/1.6.2/Enginio/private/ + + # on Qt4 when available private folder is directly in module folder + if int(qt_version.split('.')[0]) < 5: + return tuple() + + private_dir = os.path.join(mod_inc_dir, qt_version) + # fallback, let's try to find a directory with the latest version + if not os.path.exists(private_dir): + dirs = [filename for filename in os.listdir(mod_inc_dir) + if os.path.isdir(os.path.join(mod_inc_dir, filename))] + dirs.sort(reverse=True) + + for dirname in dirs: + if len(dirname.split('.')) == 3: + private_dir = dirname + break + return (private_dir, + os.path.join(private_dir, 'Qt' + module)) + +class QtExtraFrameworkDependency(ExtraFrameworkDependency): + def __init__(self, name, required, path, env, lang, kwargs): + super().__init__(name, required, path, env, lang, kwargs) + self.mod_name = name[2:] + + def get_compile_args(self, with_private_headers=False, qt_version="0"): + if self.found(): + mod_inc_dir = os.path.join(self.path, self.name, 'Headers') + args = ['-I' + mod_inc_dir] + if with_private_headers: + args += ['-I' + dirname for dirname in _qt_get_private_includes(mod_inc_dir, self.mod_name, qt_version)] + return args + return [] + class QtBaseDependency(ExternalDependency): def __init__(self, name, env, kwargs): super().__init__(name, env, 'cpp', kwargs) @@ -301,7 +341,7 @@ class QtBaseDependency(ExternalDependency): mincdir = os.path.join(incdir, 'Qt' + module) self.compile_args.append('-I' + mincdir) if self.private_headers: - priv_inc = self.get_private_includes(incdir, module) + priv_inc = self.get_private_includes(mincdir, module) for dir in priv_inc: self.compile_args.append('-I' + dir) if for_windows(self.env.is_cross_build(), self.env): @@ -335,11 +375,12 @@ class QtBaseDependency(ExternalDependency): for m in modules: fname = 'Qt' + m - fwdep = ExtraFrameworkDependency(fname, False, libdir, self.env, - self.language, fw_kwargs) + fwdep = QtExtraFrameworkDependency(fname, False, libdir, self.env, + self.language, fw_kwargs) self.compile_args.append('-F' + libdir) if fwdep.found(): - self.compile_args += fwdep.get_compile_args() + self.compile_args += fwdep.get_compile_args(with_private_headers=self.private_headers, + qt_version=self.version) self.link_args += fwdep.get_link_args() else: break @@ -369,7 +410,7 @@ class QtBaseDependency(ExternalDependency): # for you, patches are welcome. return compiler.get_pic_args() - def get_private_includes(self, incdir, module): + def get_private_includes(self, mod_inc_dir, module): return tuple() @@ -397,28 +438,8 @@ class Qt5Dependency(QtBaseDependency): def get_pkgconfig_host_bins(self, core): return core.get_pkgconfig_variable('host_bins', {}) - def get_private_includes(self, incdir, module): - # usually Qt5 puts private headers in /QT_INSTALL_HEADERS/module/VERSION/module/private - # except for at least QtWebkit and Enginio where the module version doesn't match Qt version - # as an example with Qt 5.10.1 on linux you would get: - # /usr/include/qt5/QtCore/5.10.1/QtCore/private/ - # /usr/include/qt5/QtWidgets/5.10.1/QtWidgets/private/ - # /usr/include/qt5/Enginio/1.6.2/Enginio/private/ - - mod_inc_dir = os.path.join(incdir, 'Qt' + module) - private_dir = os.path.join(mod_inc_dir, self.version) - # fallback, let's try to find a directory with the latest version - if not os.path.exists(private_dir): - dirs = [filename for filename in os.listdir(mod_inc_dir) - if os.path.isdir(os.path.join(mod_inc_dir, filename))] - dirs.sort(reverse=True) - - for dirname in dirs: - if len(dirname.split('.')) == 3: - private_dir = dirname - break - return (private_dir, - os.path.join(private_dir, 'Qt' + module)) + def get_private_includes(self, mod_inc_dir, module): + return _qt_get_private_includes(mod_inc_dir, module, self.version) # There are three different ways of depending on SDL2: diff --git a/test cases/frameworks/4 qt/main.cpp b/test cases/frameworks/4 qt/main.cpp index e546d25..1efd165 100644 --- a/test cases/frameworks/4 qt/main.cpp +++ b/test cases/frameworks/4 qt/main.cpp @@ -1,8 +1,10 @@ #include <QApplication> #include "mainWindow.h" -// include some random private headers -#include <private/qobject_p.h> +#if QT_VERSION > 0x050000 +// include some random private headers + #include <private/qobject_p.h> +#endif int main(int argc, char **argv) { #ifndef UNITY_BUILD |