diff options
author | Martin Smith <martin.smith@qt.io> | 2016-09-30 09:51:10 +0200 |
---|---|---|
committer | Martin Smith <martin.smith@qt.io> | 2017-08-10 07:33:08 +0000 |
commit | c95cba39a68bea4dc4c3c003e768412f0640e24f (patch) | |
tree | 848a2d100acbc7a10452ec4f7e72eddb7d40465c /src/qdoc/main.cpp | |
parent | 0c79d9b16b150a7457caa998fd304af35e407b2d (diff) | |
download | qttools-c95cba39a68bea4dc4c3c003e768412f0640e24f.tar.gz |
qdoc: Find the system include path if not provided
clang needs the path to the system include files. There is
an option to pass system include paths to qdoc on the command
line, but currently there is no way to get the information
from the build system.
With this change, clangqdoc asks if the system include paths
have been provided. If not, it uses the path to <locale.h> as
the system include path, which it passes to clang using the
-isystem option.
Thanks to Edward Welbourne for this solution.
Change-Id: I2716505126d7780fc616b8ffd7cd2865576bae16
Reviewed-by: Topi Reiniƶ <topi.reinio@qt.io>
Diffstat (limited to 'src/qdoc/main.cpp')
-rw-r--r-- | src/qdoc/main.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp index 8cc5a704a..5f29f222c 100644 --- a/src/qdoc/main.cpp +++ b/src/qdoc/main.cpp @@ -26,6 +26,15 @@ ** ****************************************************************************/ +// There must be no #include before this ! +#define setlocale locale_file_name_for_clang_qdoc() { \ + static char data[] = __FILE__; \ + return data; \ + } \ + extern char *setlocale +#include <locale.h> +#undef setlocale + #include <qglobal.h> #include <qhashfunctions.h> #include <stdlib.h> @@ -636,6 +645,20 @@ QDocCommandLineParser::QDocCommandLineParser() addOption(frameworkOption); } +/*! + Return the system include directory used when compiling this file. + */ +static QByteArray getSystemIncludePath() +{ + const char *raw = locale_file_name_for_clang_qdoc(); + const char *slash = strrchr(raw, '/'); + if (slash == NULL) + slash = strrchr(raw, '\\'); + if (slash == NULL) + return QByteArray(); + return QByteArray(raw, slash - raw); +} + void QDocCommandLineParser::process(const QCoreApplication &app) { QCommandLineParser::process(app); @@ -683,7 +706,9 @@ void QDocCommandLineParser::process(const QCoreApplication &app) const auto paths = values(includePathOption); for (const auto &i : paths) includesPaths << "-I" << currentDir.absoluteFilePath(i); - const auto paths2 = values(includePathSystemOption); + auto paths2 = values(includePathSystemOption); + if (paths2.isEmpty()) + paths2 << QString(getSystemIncludePath()); for (const auto &i : paths2) includesPaths << "-isystem" << currentDir.absoluteFilePath(i); const auto paths3 = values(frameworkOption); |