diff --git a/src/qdoc/config.cpp b/src/qdoc/config.cpp
index 7b96ebdd7af1528ba39dad1fbfb54da14e456b87..1ffcdd39abe25c62717f1732ac9dcdadedd5ab42 100644
--- a/src/qdoc/config.cpp
+++ b/src/qdoc/config.cpp
@@ -261,12 +261,14 @@ QMap<QString, QStringList> Config::includeFilesMap_;
 
 /*!
   The constructor sets the \a programName and initializes all
-  internal state variables to empty values.
+  internal state variables to either default values or to ones
+  defined in command line arguments \a args.
  */
-Config::Config(const QString &programName)
+Config::Config(const QString &programName, const QStringList &args)
     : prog(programName)
 {
     numInstances++;
+    processCommandLineOptions(args);
     reset();
 }
 
@@ -299,26 +301,51 @@ void Config::reset()
     setStringList(CONFIG_LANGUAGE, QStringList("Cpp")); // i.e. C++
     setStringList(CONFIG_OUTPUTFORMATS, QStringList("HTML"));
     setStringList(CONFIG_TABSIZE, QStringList("8"));
+
+    // Publish options from the command line as config variables
+    const auto setListFlag = [this](const QString &key, bool test) {
+        setStringList(key, QStringList(test ? QStringLiteral("true") : QStringLiteral("false")));
+    };
+#define SET(opt, test) setListFlag(opt, m_parser.isSet(m_parser.test))
+    SET(CONFIG_SYNTAXHIGHLIGHTING, highlightingOption);
+    SET(CONFIG_SHOWINTERNAL, showInternalOption);
+    SET(CONFIG_SINGLEEXEC, singleExecOption);
+    SET(CONFIG_WRITEQAPAGES, writeQaPagesOption);
+    SET(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL, redirectDocumentationToDevNullOption);
+    SET(CONFIG_AUTOLINKERRORS, autoLinkErrorsOption);
+    SET(CONFIG_OBSOLETELINKS, obsoleteLinksOption);
+#undef SET
+    setListFlag(CONFIG_NOLINKERRORS,
+                m_parser.isSet(m_parser.noLinkErrorsOption)
+                || qEnvironmentVariableIsSet("QDOC_NOLINKERRORS"));
+
+    // CONFIG_DEFINES and CONFIG_INCLUDEPATHS are set in load()
 }
 
 /*!
   Loads and parses the qdoc configuration file \a fileName.
-  This function first resets the Config instance, then
-  calls the other load() function, which does the loading,
-  parsing, and processing of the configuration file.
-
-  Intializes the location variables returned by location()
-  and lastLocation().
+  If a previous project was loaded, this function first resets the
+  Config instance. Then it calls the other load() function, which
+  does the loading, parsing, and processing of the configuration file.
  */
 void Config::load(const QString &fileName)
 {
-    reset();
+    // Reset if a previous project was loaded
+    if (configVars_.contains(CONFIG_PROJECT))
+        reset();
+
     load(Location::null, fileName);
     if (loc.isEmpty())
         loc = Location(fileName);
     else
         loc.setEtc(true);
     lastLocation_ = Location::null;
+
+    // Add defines and includepaths from command line to their
+    // respective configuration variables. Values set here are
+    // always added to what's defined in configuration file.
+    insertStringList(CONFIG_DEFINES, m_defines);
+    insertStringList(CONFIG_INCLUDEPATHS, m_includePaths);
 }
 
 /*!
@@ -339,40 +366,77 @@ void Config::insertStringList(const QString &var, const QStringList &values)
 }
 
 /*!
-   Set configuration options from \a qdocGlobals.
+  Process and store variables from the command line.
  */
-void Config::setOptions(const QDocGlobals &qdocGlobals)
+void Config::processCommandLineOptions(const QStringList &args)
 {
-    setStringList(CONFIG_SYNTAXHIGHLIGHTING, QStringList(qdocGlobals.highlighting() ? "true" : "false"));
-    setStringList(CONFIG_SHOWINTERNAL, QStringList(qdocGlobals.showInternal() ? "true" : "false"));
-    setStringList(CONFIG_SINGLEEXEC, QStringList(qdocGlobals.singleExec() ? "true" : "false"));
-    setStringList(CONFIG_WRITEQAPAGES, QStringList(qdocGlobals.writeQaPages() ? "true" : "false"));
-    setStringList(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL, QStringList(qdocGlobals.redirectDocumentationToDevNull() ? "true" : "false"));
-    setStringList(CONFIG_NOLINKERRORS, QStringList(qdocGlobals.noLinkErrors() ? "true" : "false"));
-    setStringList(CONFIG_AUTOLINKERRORS, QStringList(qdocGlobals.autolinkErrors() ? "true" : "false"));
-    setStringList(CONFIG_OBSOLETELINKS, QStringList(qdocGlobals.obsoleteLinks() ? "true" : "false"));
-}
+    m_parser.process(args);
 
-/*!
-   Set configuration options from \a parser.
- */
-void Config::setOptions(const QDocCommandLineParser &parser)
-{
-    generateExamples = !parser.isSet(parser.noExamplesOption);
-    if (parser.isSet(parser.installDirOption))
-        installDir = parser.value(parser.installDirOption);
-    if (parser.isSet(parser.outputDirOption))
-        overrideOutputDir = parser.value(parser.outputDirOption);
+    m_defines = m_parser.values(m_parser.defineOption);
+    m_dependModules = m_parser.values(m_parser.dependsOption);
+    setIndexDirs();
+    setIncludePaths();
+
+    generateExamples = !m_parser.isSet(m_parser.noExamplesOption);
+    if (m_parser.isSet(m_parser.installDirOption))
+        installDir = m_parser.value(m_parser.installDirOption);
+    if (m_parser.isSet(m_parser.outputDirOption))
+        overrideOutputDir = m_parser.value(m_parser.outputDirOption);
 
-    const auto outputFormats = parser.values(parser.outputFormatOption);
+    const auto outputFormats = m_parser.values(m_parser.outputFormatOption);
     for (const auto &format : outputFormats)
         overrideOutputFormats.insert(format);
 
-    debug_ = parser.isSet(parser.debugOption);
+    debug_ = m_parser.isSet(m_parser.debugOption);
+
+    // TODO: Make Generator use Config instead of storing these separately
+    if (m_parser.isSet(m_parser.prepareOption))
+        Generator::setQDocPass(Generator::Prepare);
+    if (m_parser.isSet(m_parser.generateOption))
+        Generator::setQDocPass(Generator::Generate);
+    if (m_parser.isSet(m_parser.singleExecOption))
+        Generator::setSingleExec();
+    if (m_parser.isSet(m_parser.writeQaPagesOption))
+        Generator::setWriteQaPages();
+    if (m_parser.isSet(m_parser.logProgressOption))
+        Location::startLoggingProgress();
+    if (m_parser.isSet(m_parser.timestampsOption))
+        Generator::setUseTimestamps();
+}
+
+void Config::setIncludePaths()
+{
+    QDir currentDir = QDir::current();
+    const auto addIncludePaths = [this, currentDir](const char *flag, const QStringList &paths) {
+        for (const auto &path : paths)
+            m_includePaths << currentDir.absoluteFilePath(path).insert(0, flag);
+    };
+
+    addIncludePaths("-I", m_parser.values(m_parser.includePathOption));
+#ifdef QDOC_PASS_ISYSTEM
+    addIncludePaths("-isystem", m_parser.values(m_parser.includePathSystemOption));
+#endif
+    addIncludePaths("-F", m_parser.values(m_parser.frameworkOption));
+}
+
+/*!
+  Stores paths from -indexdir command line option(s).
+ */
+void Config::setIndexDirs()
+{
+    m_indexDirs = m_parser.values(m_parser.indexDirOption);
+    auto it = std::remove_if(m_indexDirs.begin(), m_indexDirs.end(),
+        [](const QString &s) { return !QFile::exists(s); });
+
+    std::for_each(it, m_indexDirs.end(),
+        [](const QString &s) {
+            Location::logToStdErrAlways(tr("Cannot find index directory: %1").arg(s));
+        });
+    m_indexDirs.erase(it, m_indexDirs.end());
 }
 
 /*!
-  Looks up the configuarion variable \a var in the string
+  Looks up the configuration variable \a var in the string
   map and returns the boolean value.
  */
 bool Config::getBool(const QString &var) const
diff --git a/src/qdoc/config.h b/src/qdoc/config.h
index 615387f736f7d1f1eda277d4e0cffe18546a1145..61ed53d87aa870d199f925ee1810d86357869ee6 100644
--- a/src/qdoc/config.h
+++ b/src/qdoc/config.h
@@ -35,7 +35,6 @@
 
 #include "location.h"
 #include "qdoccommandlineparser.h"
-#include "qdocglobals.h"
 
 #include <QtCore/qmap.h>
 #include <QtCore/qpair.h>
@@ -75,7 +74,7 @@ class Config
     Q_DECLARE_TR_FUNCTIONS(QDoc::Config)
 
 public:
-    Config(const QString &programName);
+    Config(const QString &programName, const QStringList &args);
     ~Config();
 
     bool getDebug() const { return debug_; }
@@ -86,8 +85,8 @@ public:
     void setStringList(const QString &var, const QStringList &values);
     void insertStringList(const QString &var, const QStringList &values);
 
-    void setOptions(const QDocGlobals &qdocGlobals);
-    void setOptions(const QDocCommandLineParser &parser);
+    void showHelp(int exitCode = 0) { m_parser.showHelp(exitCode); }
+    QStringList qdocFiles() const { return m_parser.positionalArguments(); }
     const QString &programName() const { return prog; }
     const Location &location() const { return loc; }
     const Location &lastLocation() const { return lastLocation_; }
@@ -146,7 +145,28 @@ public:
     static QString overrideOutputDir;
     static QSet<QString> overrideOutputFormats;
 
+    inline bool singleExec() const;
+    QStringList &defines() { return m_defines; }
+    QStringList &dependModules() { return m_dependModules; }
+    QStringList &includePaths() { return m_includePaths; }
+    QStringList &indexDirs() { return m_indexDirs; }
+    QString currentDir() const { return m_currentDir; }
+    void setCurrentDir(const QString &path) { m_currentDir = path; }
+    QString previousCurrentDir() const { return m_previousCurrentDir; }
+    void setPreviousCurrentDir(const QString &path) { m_previousCurrentDir = path; }
+
 private:
+    void processCommandLineOptions(const QStringList &args);
+    void setIncludePaths();
+    void setIndexDirs();
+
+    QStringList m_dependModules;
+    QStringList m_defines;
+    QStringList m_includePaths;
+    QStringList m_indexDirs;
+    QString m_currentDir;
+    QString m_previousCurrentDir;
+
     static bool debug_;
     static bool isMetaKeyChar(QChar ch);
     void load(Location location, const QString &fileName);
@@ -161,6 +181,7 @@ private:
     static int numInstances;
     static QStack<QString> workingDirs_;
     static QMap<QString, QStringList> includeFilesMap_;
+    QDocCommandLineParser m_parser;
 };
 
 struct ConfigStrings
@@ -326,6 +347,11 @@ struct ConfigStrings
 #define CONFIG_WARNINGLIMIT ConfigStrings::WARNINGLIMIT
 #define CONFIG_WRITEQAPAGES ConfigStrings::WRITEQAPAGES
 
+inline bool Config::singleExec() const
+{
+    return getBool(CONFIG_SINGLEEXEC);
+}
+
 QT_END_NAMESPACE
 
 #endif
diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp
index e2ae550c1579e6147f8f9d78f045db791c9c3915..48166257d2acd0348785670e20ce93a901233a07 100644
--- a/src/qdoc/main.cpp
+++ b/src/qdoc/main.cpp
@@ -38,9 +38,7 @@
 #include "location.h"
 #include "loggingcategory.h"
 #include "puredocparser.h"
-#include "qdoccommandlineparser.h"
 #include "qdocdatabase.h"
-#include "qdocglobals.h"
 #include "qmlcodemarker.h"
 #include "qmlcodeparser.h"
 #include "utilities.h"
@@ -79,7 +77,6 @@ static QList<Translator> translators;
 #endif
 
 static ClangCodeParser* clangParser_ = nullptr;
-static QDocGlobals qdocGlobals;
 
 /*!
   Read some XML indexes containing definitions from other
@@ -103,8 +100,8 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats)
             Location::null.warning(QString("Index file not found: %1").arg(index));
     }
 
-    qdocGlobals.dependModules() += config.getStringList(CONFIG_DEPENDS);
-    qdocGlobals.dependModules().removeDuplicates();
+    config.dependModules() += config.getStringList(CONFIG_DEPENDS);
+    config.dependModules().removeDuplicates();
     QSet<QString> subDirs;
 
     for (const auto &format : formats) {
@@ -118,41 +115,41 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats)
         }
     }
 
-    if (qdocGlobals.dependModules().size() > 0) {
-        if (qdocGlobals.indexDirs().size() > 0) {
-            for (int i = 0; i < qdocGlobals.indexDirs().size(); i++) {
-                if (qdocGlobals.indexDirs()[i].startsWith("..")) {
-                    const QString prefix(QDir(qdocGlobals.currentDir()).relativeFilePath(qdocGlobals.previousCurrentDir()));
+    if (config.dependModules().size() > 0) {
+        if (config.indexDirs().size() > 0) {
+            for (int i = 0; i < config.indexDirs().size(); i++) {
+                if (config.indexDirs()[i].startsWith("..")) {
+                    const QString prefix(QDir(config.currentDir()).relativeFilePath(config.previousCurrentDir()));
                     if (!prefix.isEmpty())
-                        qdocGlobals.indexDirs()[i].prepend(prefix + QLatin1Char('/'));
+                        config.indexDirs()[i].prepend(prefix + QLatin1Char('/'));
                 }
             }
             /*
               Add all subdirectories of the indexdirs as dependModules,
               when an asterisk is used in the 'depends' list.
             */
-            if (qdocGlobals.dependModules().contains("*")) {
-                qdocGlobals.dependModules().removeOne("*");
-                for (int i = 0; i < qdocGlobals.indexDirs().size(); i++) {
-                    QDir scanDir = QDir(qdocGlobals.indexDirs()[i]);
+            if (config.dependModules().contains("*")) {
+                config.dependModules().removeOne("*");
+                for (int i = 0; i < config.indexDirs().size(); i++) {
+                    QDir scanDir = QDir(config.indexDirs()[i]);
                     scanDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
                     QFileInfoList dirList = scanDir.entryInfoList();
                     for (int j = 0; j < dirList.size(); j++) {
                         if (dirList[j].fileName().toLower() != config.getString(CONFIG_PROJECT).toLower())
-                            qdocGlobals.dependModules().append(dirList[j].fileName());
+                            config.dependModules().append(dirList[j].fileName());
                     }
                 }
             }
-            for (int i = 0; i < qdocGlobals.dependModules().size(); i++) {
+            for (int i = 0; i < config.dependModules().size(); i++) {
                 QString indexToAdd;
                 QList<QFileInfo> foundIndices;
                 // Always look in module-specific subdir, even with *.nosubdirs config
-                subDirs << qdocGlobals.dependModules()[i];
-                for (int j = 0; j < qdocGlobals.indexDirs().size(); j++) {
+                subDirs << config.dependModules()[i];
+                for (int j = 0; j < config.indexDirs().size(); j++) {
                     for (const auto &subDir : subDirs) {
-                        QString fileToLookFor = qdocGlobals.indexDirs()[j]
+                        QString fileToLookFor = config.indexDirs()[j]
                                 + QLatin1Char('/') + subDir
-                                + QLatin1Char('/') + qdocGlobals.dependModules()[i] + ".index";
+                                + QLatin1Char('/') + config.dependModules()[i] + ".index";
                         if (QFile::exists(fileToLookFor)) {
                             QFileInfo tempFileInfo(fileToLookFor);
                             if (!foundIndices.contains(tempFileInfo))
@@ -160,7 +157,7 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats)
                         }
                     }
                 }
-                subDirs.remove(qdocGlobals.dependModules()[i]);
+                subDirs.remove(config.dependModules()[i]);
                 std::sort(foundIndices.begin(), foundIndices.end(), creationTimeBefore);
                 if (foundIndices.size() > 1) {
                     /*
@@ -173,10 +170,10 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats)
                     for (const auto &found : qAsConst(foundIndices))
                         indexPaths << found.absoluteFilePath();
                     Location::null.warning(QString("Multiple index files found for dependency \"%1\":\n%2").arg(
-                                               qdocGlobals.dependModules()[i], indexPaths.join('\n')));
+                                               config.dependModules()[i], indexPaths.join('\n')));
                     Location::null.warning(QString("Using %1 as index file for dependency \"%2\"").arg(
                                                foundIndices[foundIndices.size() - 1].absoluteFilePath(),
-                                               qdocGlobals.dependModules()[i]));
+                                               config.dependModules()[i]));
                     indexToAdd = foundIndices[foundIndices.size() - 1].absoluteFilePath();
                 }
                 else if (foundIndices.size() == 1) {
@@ -188,7 +185,7 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats)
                 }
                 else {
                     Location::null.warning(QString("\"%1\" Cannot locate index file for dependency \"%2\"").arg(
-                                               config.getString(CONFIG_PROJECT), qdocGlobals.dependModules()[i]));
+                                               config.getString(CONFIG_PROJECT), config.dependModules()[i]));
                 }
             }
         }
@@ -206,7 +203,7 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats)
  */
 static void processQdocconfFile(const QString &fileName, Config &config)
 {
-    qdocGlobals.setPreviousCurrentDir(QDir::currentPath());
+    config.setPreviousCurrentDir(QDir::currentPath());
 
     /*
       With the default configuration values in place, load
@@ -224,16 +221,11 @@ static void processQdocconfFile(const QString &fileName, Config &config)
         Location::logToStdErrAlways(QLatin1String("qdoc can't run; no project set in qdocconf file"));
         exit(1);
     }
-    /*
-      Add the defines and includepaths to their respective configuration variables.
-     */
-    config.insertStringList(CONFIG_DEFINES, qdocGlobals.defines());
-    config.insertStringList(CONFIG_INCLUDEPATHS, qdocGlobals.includesPaths());
     Location::terminate();
 
-    qdocGlobals.setCurrentDir(QFileInfo(fileName).path());
-    if (!qdocGlobals.currentDir().isEmpty())
-        QDir::setCurrent(qdocGlobals.currentDir());
+    config.setCurrentDir(QFileInfo(fileName).path());
+    if (!config.currentDir().isEmpty())
+        QDir::setCurrent(config.currentDir());
 
     QString phase = " in ";
     if (Generator::singleExec())
@@ -344,9 +336,9 @@ static void processQdocconfFile(const QString &fileName, Config &config)
     else
         clangParser_->setModuleHeader(project);
 
-    qdocGlobals.dependModules() = config.getStringList(CONFIG_DEPENDS);
-    qdocGlobals.dependModules().removeDuplicates();
-    qdb->setSearchOrder(qdocGlobals.dependModules());
+    config.dependModules() = config.getStringList(CONFIG_DEPENDS);
+    config.dependModules().removeDuplicates();
+    qdb->setSearchOrder(config.dependModules());
 
     // Store the title of the index (landing) page
     NamespaceNode *root = qdb->primaryTreeRoot();
@@ -500,31 +492,11 @@ static void processQdocconfFile(const QString &fileName, Config &config)
     Doc::terminate();
     Tokenizer::terminate();
     Location::terminate();
-    QDir::setCurrent(qdocGlobals.previousCurrentDir());
+    QDir::setCurrent(config.previousCurrentDir());
 
     qCDebug(lcQdoc, "qdoc classes terminated");
 }
 
-/* This method is an extremely ugly hack;
-   some or all of these settings must be set before the call to
-   various initialize() methods in main's processQdocconfFile().
-*/
-void postProcess(const QDocCommandLineParser &parser)
-{
-    if (parser.isSet(parser.prepareOption))
-        Generator::setQDocPass(Generator::Prepare);
-    if (parser.isSet(parser.generateOption))
-        Generator::setQDocPass(Generator::Generate);
-    if (parser.isSet(parser.singleExecOption))
-        Generator::setSingleExec();
-    if (parser.isSet(parser.writeQaPagesOption))
-        Generator::setWriteQaPages();
-    if (parser.isSet(parser.logProgressOption))
-        Location::startLoggingProgress();
-    if (parser.isSet(parser.timestampsOption))
-        Generator::setUseTimestamps();
-}
-
 QT_END_NAMESPACE
 
 int main(int argc, char **argv)
@@ -566,41 +538,33 @@ int main(int argc, char **argv)
     HtmlGenerator htmlGenerator;
     WebXMLGenerator webXMLGenerator;
 
-    Config config(QCoreApplication::translate("QDoc", "qdoc"));
-
-    // Set the globals declared at the top of this file:
-    QDocCommandLineParser parser;
-    parser.process(app.arguments());
-    qdocGlobals.setOptions(parser);
-    config.setOptions(parser);
-    postProcess(parser);
-    config.setOptions(qdocGlobals);
+    Config config(QCoreApplication::translate("QDoc", "qdoc"), app.arguments());
 
     // Get the list of files to act on:
-    QStringList qdocFiles = parser.positionalArguments();
+    QStringList qdocFiles = config.qdocFiles();
     if (qdocFiles.isEmpty())
-        parser.showHelp();
+        config.showHelp();
 
-    if (qdocGlobals.singleExec())
+    if (config.singleExec())
         qdocFiles = Config::loadMaster(qdocFiles.at(0));
 
     if (Generator::singleExec()) {
         // single qdoc process for prepare and generate phases
         Generator::setQDocPass(Generator::Prepare);
         for (const auto &file : qAsConst(qdocFiles)) {
-            qdocGlobals.dependModules().clear();
+            config.dependModules().clear();
             processQdocconfFile(file, config);
         }
         Generator::setQDocPass(Generator::Generate);
         QDocDatabase::qdocDB()->processForest();
         for (const auto &file : qAsConst(qdocFiles)) {
-            qdocGlobals.dependModules().clear();
+            config.dependModules().clear();
             processQdocconfFile(file, config);
         }
     } else {
         // separate qdoc processes for prepare and generate phases
         for (const auto &file : qAsConst(qdocFiles)) {
-            qdocGlobals.dependModules().clear();
+            config.dependModules().clear();
             processQdocconfFile(file, config);
         }
     }
diff --git a/src/qdoc/qdoc.pro b/src/qdoc/qdoc.pro
index 0f9159bc7384af0f7bc61aa5362bcc60fdbdef51..df9123b09543d2c6d8cd76308d83f815b5efa2b2 100644
--- a/src/qdoc/qdoc.pro
+++ b/src/qdoc/qdoc.pro
@@ -59,7 +59,6 @@ HEADERS += atom.h \
            tokenizer.h \
            tree.h \
            webxmlgenerator.h \
-           qdocglobals.h \
            qdoccommandlineparser.h \
            utilities.h
 
@@ -93,7 +92,6 @@ SOURCES += atom.cpp \
            tree.cpp \
            yyindent.cpp \
            webxmlgenerator.cpp \
-           qdocglobals.cpp \
            qdoccommandlineparser.cpp \
            utilities.cpp
 
diff --git a/src/qdoc/qdocglobals.cpp b/src/qdoc/qdocglobals.cpp
deleted file mode 100644
index 05fa3a96f44ea6a2c6f7dd0b4fcbc4b87d511fc9..0000000000000000000000000000000000000000
--- a/src/qdoc/qdocglobals.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdocglobals.h"
-#include "qdoccommandlineparser.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qdir.h>
-#include <QtCore/qfile.h>
-
-bool QDocGlobals::highlighting() const
-{
-    return m_highlighting;
-}
-
-void QDocGlobals::enableHighlighting(bool value)
-{
-    m_highlighting = value;
-}
-
-bool QDocGlobals::showInternal() const
-{
-    return m_showInternal;
-}
-
-void QDocGlobals::setShowInternal(bool value)
-{
-    m_showInternal = value;
-}
-
-bool QDocGlobals::singleExec() const
-{
-    return m_singleExec;
-}
-void QDocGlobals::setSingleExec(bool value)
-{
-    m_singleExec = value;
-}
-
-bool QDocGlobals::writeQaPages() const
-{
-    return m_writeQaPages;
-}
-void QDocGlobals::setWriteQaPages(bool value)
-{
-    m_writeQaPages = value;
-}
-
-bool QDocGlobals::redirectDocumentationToDevNull() const
-{
-    return m_redirectDocumentationToDevNull;
-}
-
-void QDocGlobals::setRedirectDocumentationToDevNull(bool value)
-{
-    m_redirectDocumentationToDevNull = value;
-}
-
-bool QDocGlobals::noLinkErrors() const
-{
-    return m_noLinkErrors;
-}
-
-void QDocGlobals::setNoLinkErrors(bool value)
-{
-    m_noLinkErrors = value;
-}
-
-bool QDocGlobals::autolinkErrors() const
-{
-    return m_autolinkErrors;
-}
-
-void QDocGlobals::setAutolinkErrors(bool value)
-{
-    m_autolinkErrors = value;
-}
-
-bool QDocGlobals::obsoleteLinks() const
-{
-    return m_obsoleteLinks;
-}
-
-void QDocGlobals::setObsoleteLinks(bool value)
-{
-    m_obsoleteLinks = value;
-}
-
-QStringList QDocGlobals::defines() const
-{
-    return m_defines;
-}
-
-void QDocGlobals::addDefine(const QStringList &valueList)
-{
-    m_defines += valueList;
-}
-
-QStringList QDocGlobals::includesPaths() const
-{
-    return m_includesPaths;
-}
-
-void QDocGlobals::addIncludePath(const QString &flag, const QString &path)
-{
-    QString includePath = flag + path;
-    m_includesPaths << includePath;
-}
-
-QStringList &QDocGlobals::dependModules()
-{
-    return m_dependModules;
-}
-
-QStringList QDocGlobals::indexDirs() const
-{
-    return m_indexDirs;
-}
-
-void QDocGlobals::appendToIndexDirs(const QString &path)
-{
-    m_indexDirs += path;
-}
-
-QString QDocGlobals::currentDir() const
-{
-    return m_currentDir;
-}
-
-void QDocGlobals::setCurrentDir(const QString &path)
-{
-    m_currentDir = path;
-}
-
-QString QDocGlobals::previousCurrentDir() const
-{
-    return m_previousCurrentDir;
-}
-
-void QDocGlobals::setPreviousCurrentDir(const QString &path)
-{
-    m_previousCurrentDir = path;
-}
-
-void QDocGlobals::setIncludePaths(const QDocCommandLineParser &parser)
-{
-    QDir currentDir = QDir::current();
-    auto includePaths = parser.values(parser.includePathOption);
-    for (const auto &path : qAsConst(includePaths))
-        addIncludePath("-I", currentDir.absoluteFilePath(path));
-
-#ifdef QDOC_PASS_ISYSTEM
-    includePaths = parser.values(parser.includePathSystemOption);
-    for (const auto &path : qAsConst(includePaths))
-        addIncludePath("-isystem", currentDir.absoluteFilePath(path));
-#endif
-    includePaths = parser.values(parser.frameworkOption);
-    for (const auto &path : qAsConst(includePaths))
-        addIncludePath("-F", currentDir.absoluteFilePath(path));
-}
-
-void QDocGlobals::setIndexDirs(const QDocCommandLineParser &parser)
-{
-    const auto indexDirs = parser.values(parser.indexDirOption);
-    for (const auto &indexDir : indexDirs) {
-        if (QFile::exists(indexDir))
-            appendToIndexDirs(indexDir);
-        else
-            qDebug() << "Cannot find index directory" << indexDir;
-    }
-}
-
-void QDocGlobals::setOptions(const QDocCommandLineParser &parser)
-{
-    addDefine(parser.values(parser.defineOption));
-    m_dependModules += parser.values(parser.dependsOption);
-    enableHighlighting(parser.isSet(parser.highlightingOption));
-    setShowInternal(parser.isSet(parser.showInternalOption));
-    setSingleExec(parser.isSet(parser.singleExecOption));
-    setWriteQaPages(parser.isSet(parser.writeQaPagesOption));
-    setRedirectDocumentationToDevNull(parser.isSet(parser.redirectDocumentationToDevNullOption));
-    setIndexDirs(parser);
-    setObsoleteLinks(parser.isSet(parser.obsoleteLinksOption));
-    setNoLinkErrors(parser.isSet(parser.noLinkErrorsOption) ||
-                    qEnvironmentVariableIsSet("QDOC_NOLINKERRORS"));
-    setAutolinkErrors(parser.isSet(parser.autoLinkErrorsOption));
-    setIncludePaths(parser);
-}
diff --git a/src/qdoc/qdocglobals.h b/src/qdoc/qdocglobals.h
deleted file mode 100644
index 640dd6bf64035b5e6be9562f7f1ace40ebc4ff7a..0000000000000000000000000000000000000000
--- a/src/qdoc/qdocglobals.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDOCGLOBALS_H
-#define QDOCGLOBALS_H
-
-#include <QtCore/qstringlist.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qtranslator.h>
-
-QT_BEGIN_NAMESPACE
-
-struct QDocCommandLineParser;
-
-class QDocGlobals
-{
-public:
-    bool highlighting() const;
-    void enableHighlighting(bool value);
-
-    bool showInternal() const;
-    void setShowInternal(bool value);
-
-    bool singleExec() const;
-    void setSingleExec(bool value);
-
-    bool writeQaPages() const;
-    void setWriteQaPages(bool value);
-
-    bool redirectDocumentationToDevNull() const;
-    void setRedirectDocumentationToDevNull(bool value);
-
-    bool noLinkErrors() const;
-    void setNoLinkErrors(bool value);
-
-    bool autolinkErrors() const;
-    void setAutolinkErrors(bool value);
-
-    bool obsoleteLinks() const;
-    void setObsoleteLinks(bool value);
-
-    QStringList defines() const;
-    void addDefine(const QStringList &valueList);
-
-    QStringList includesPaths() const;
-    void addIncludePath(const QString &flag, const QString &path);
-
-    QStringList &dependModules();
-
-    QStringList indexDirs() const;
-    void appendToIndexDirs(const QString &path);
-
-    QString currentDir() const;
-    void setCurrentDir(const QString &path);
-
-    QString previousCurrentDir() const;
-    void setPreviousCurrentDir(const QString &path);
-
-    void setOptions(const QDocCommandLineParser &parser);
-
-private:
-    void setIncludePaths(const QDocCommandLineParser &parser);
-    void setIndexDirs(const QDocCommandLineParser &parser);
-
-    bool m_highlighting = false;
-    bool m_showInternal = false;
-    bool m_singleExec = false;
-    bool m_writeQaPages = false;
-    bool m_redirectDocumentationToDevNull = false;
-    bool m_noLinkErrors = false;
-    bool m_autolinkErrors = false;
-    bool m_obsoleteLinks = false;
-
-    QStringList m_defines;
-    QStringList m_includesPaths;
-    QStringList m_dependModules;
-    QStringList m_indexDirs;
-    QString m_currentDir;
-    QString m_previousCurrentDir;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDOCGLOBALS_H
diff --git a/tests/auto/qdoc/qdoc.pro b/tests/auto/qdoc/qdoc.pro
index 74c6e77871efe05e15e202f767c9c0babcd658ad..97117dc6f9748324d194946b329778027c66f4d9 100644
--- a/tests/auto/qdoc/qdoc.pro
+++ b/tests/auto/qdoc/qdoc.pro
@@ -1,5 +1,4 @@
 TEMPLATE = subdirs
 
 SUBDIRS = \
-    generatedoutput \
-    qdocglobals
+    generatedoutput
diff --git a/tests/auto/qdoc/qdocglobals/qdocglobals.pro b/tests/auto/qdoc/qdocglobals/qdocglobals.pro
deleted file mode 100644
index fa7ddb8e0cc2d625495af79a5f584e12534cfafc..0000000000000000000000000000000000000000
--- a/tests/auto/qdoc/qdocglobals/qdocglobals.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG += testcase
-QT = core testlib
-TARGET = tst_qdocglobals
-INCLUDEPATH += $$PWD/../../../../src/qdoc
-
-HEADERS += $$PWD/../../../../src/qdoc/qdocglobals.h
-
-SOURCES += $$PWD/../../../../src/qdoc/qdocglobals.cpp \
-           tst_qdocglobals.cpp
diff --git a/tests/auto/qdoc/qdocglobals/tst_qdocglobals.cpp b/tests/auto/qdoc/qdocglobals/tst_qdocglobals.cpp
deleted file mode 100644
index fca46911f8410df7feadf2dcf9fdc429ad13c87b..0000000000000000000000000000000000000000
--- a/tests/auto/qdoc/qdocglobals/tst_qdocglobals.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdocglobals.h"
-
-#include <QtCore/qhash.h>
-#include <QtCore/qstringlist.h>
-#include <QtTest/QtTest>
-
-class testQDocGlobals : public QObject
-{
-    Q_OBJECT
-
-private slots:
-    void testClassMembersInitializeToFalseOrEmpty();
-    void testEnableHighlighting();
-    void testSetShowInternal();
-    void testSetSingleExec();
-    void testSetWriteQaPages();
-    void testRedirectDocumentationToDevNull();
-    void testSetNoLinkErrors();
-    void testSetAutoLinkErrors();
-    void testSetObsoleteLinks();
-
-    void testAddDefine();
-    void testAddIncludePath();
-    void testDependModules();
-    void testAppendToIndexDirs();
-    void testSetCurrentDir();
-    void testPreviousCurrentDir();
-};
-
-void testQDocGlobals::testClassMembersInitializeToFalseOrEmpty()
-{
-    QDocGlobals qdocTestGlobals;
-    QCOMPARE(qdocTestGlobals.highlighting(), false);
-    QCOMPARE(qdocTestGlobals.showInternal(), false);
-    QCOMPARE(qdocTestGlobals.singleExec(), false);
-    QCOMPARE(qdocTestGlobals.writeQaPages(), false);
-    QCOMPARE(qdocTestGlobals.redirectDocumentationToDevNull(), false);
-    QCOMPARE(qdocTestGlobals.noLinkErrors(), false);
-    QCOMPARE(qdocTestGlobals.autolinkErrors(), false);
-    QCOMPARE(qdocTestGlobals.obsoleteLinks(), false);
-
-    QVERIFY(qdocTestGlobals.defines().isEmpty());
-    QVERIFY(qdocTestGlobals.includesPaths().isEmpty());
-    QVERIFY(qdocTestGlobals.dependModules().isEmpty());
-    QVERIFY(qdocTestGlobals.indexDirs().isEmpty());
-    QVERIFY(qdocTestGlobals.currentDir().isEmpty());
-    QVERIFY(qdocTestGlobals.previousCurrentDir().isEmpty());
-}
-
-void testQDocGlobals::testEnableHighlighting()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.enableHighlighting(true);
-    QVERIFY(qdocTestGlobals.highlighting());
-}
-
-void testQDocGlobals::testSetShowInternal()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.setShowInternal(true);
-    QVERIFY(qdocTestGlobals.showInternal());
-}
-
-void testQDocGlobals::testSetSingleExec()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.setSingleExec(true);
-    QVERIFY(qdocTestGlobals.singleExec());
-}
-
-void testQDocGlobals::testSetWriteQaPages()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.setWriteQaPages(true);
-    QVERIFY(qdocTestGlobals.writeQaPages());
-}
-
-void testQDocGlobals::testRedirectDocumentationToDevNull()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.setRedirectDocumentationToDevNull(true);
-    QVERIFY(qdocTestGlobals.redirectDocumentationToDevNull());
-}
-
-void testQDocGlobals::testSetNoLinkErrors()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.setNoLinkErrors(true);
-    QVERIFY(qdocTestGlobals.noLinkErrors());
-}
-
-void testQDocGlobals::testSetAutoLinkErrors()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.setAutolinkErrors(true);
-    QVERIFY(qdocTestGlobals.autolinkErrors());
-}
-
-void testQDocGlobals::testSetObsoleteLinks()
-{
-    QDocGlobals qdocTestGlobals;
-    qdocTestGlobals.setObsoleteLinks(true);
-    QVERIFY(qdocTestGlobals.obsoleteLinks());
-}
-
-void testQDocGlobals::testAddDefine()
-{
-    QDocGlobals qdocTestGlobals;
-    QStringList defineTestList1 = { QStringLiteral("qtforpython") };
-    QStringList defineTestList2 = { QStringLiteral("example") };
-    QStringList expected;
-    expected << defineTestList1 << defineTestList2;
-
-    qdocTestGlobals.addDefine(defineTestList1);
-    QCOMPARE(qdocTestGlobals.defines().size(), 1);
-    qdocTestGlobals.addDefine(defineTestList2);
-    QCOMPARE(qdocTestGlobals.defines().size(), 2);
-    QCOMPARE(qdocTestGlobals.defines(), expected);
-}
-
-void testQDocGlobals::testAddIncludePath()
-{
-    QDocGlobals qdocTestGlobals;
-    QString testFlag = "-I";
-    QString testPath0 = "/qt5/qtdoc/doc/.";
-    QString testPath1 = "/qt5/qtbase/mkspecs/linux-g++";
-    QStringList expected = { "-I/qt5/qtdoc/doc/.",
-                             "-I/qt5/qtbase/mkspecs/linux-g++" };
-
-    qdocTestGlobals.addIncludePath(testFlag, testPath0);
-    qdocTestGlobals.addIncludePath(testFlag, testPath1);
-    QStringList result = qdocTestGlobals.includesPaths();
-    QCOMPARE(result, expected);
-}
-
-void testQDocGlobals::testDependModules()
-{
-    QDocGlobals qdocTestGlobals;
-    QStringList expected = { "qdoc", "qmake", "qtcore", "qthelp",  "qtqml" };
-
-    qdocTestGlobals.dependModules() = expected;
-    QCOMPARE(qdocTestGlobals.dependModules().size(), 5);
-    QCOMPARE(qdocTestGlobals.dependModules(), expected);
-}
-
-void testQDocGlobals::testAppendToIndexDirs()
-{
-    QDocGlobals qdocTestGlobals;
-    QString testPath = "/qt5/qtbase/doc";
-    QStringList expected;
-    expected << testPath;
-
-    qdocTestGlobals.appendToIndexDirs(testPath);
-    QCOMPARE(qdocTestGlobals.indexDirs(), expected);
-}
-
-void testQDocGlobals::testSetCurrentDir()
-{
-    QDocGlobals qdocTestGlobals;
-    QString expected = "/qt5/qtdoc/doc/config";
-
-    qdocTestGlobals.setCurrentDir(expected);
-    QCOMPARE(qdocTestGlobals.currentDir(), expected);
-}
-
-void testQDocGlobals::testPreviousCurrentDir()
-{
-    QDocGlobals qdocTestGlobals;
-    QString expected = "/qt5/qtdoc/doc";
-
-    qdocTestGlobals.setCurrentDir(expected);
-    QCOMPARE(qdocTestGlobals.currentDir(), expected);
-}
-
-QTEST_APPLESS_MAIN(testQDocGlobals)
-
-#include "tst_qdocglobals.moc"