diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp index 8cc5a704a47b508bb175b133edc18f0a3c3975c2..5f29f222c7ea0aafe525196816b0fad5561c4efa 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);