#
#  W A R N I N G
#  -------------
#
# This file is not part of the Qt API.  It exists purely as an
# implementation detail.  It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#

DOC_TARGETS = \
    install_html_docs uninstall_html_docs \
    install_qch_docs uninstall_qch_docs \
    install_docs uninstall_docs \
    qch_docs

prepare_docs {
    DOC_TARGETS += prepare_docs generate_docs
    html_docs.commands = $(MAKE) -f $(MAKEFILE) prepare_docs && $(MAKE) -f $(MAKEFILE) generate_docs
    QMAKE_EXTRA_TARGETS += html_docs
} else {
    DOC_TARGETS += html_docs
}

docs.commands = $(MAKE) -f $(MAKEFILE) html_docs && $(MAKE) -f $(MAKEFILE) qch_docs
QMAKE_EXTRA_TARGETS += docs

contains(TEMPLATE, subdirs) {
    for(inst, DOC_TARGETS): \
        prepareRecursiveTarget($$inst)
} else {
    !isEmpty(BUILDS):!build_pass {
        sub = $$first(BUILDS)
        for(inst, DOC_TARGETS) {
            $${inst}.CONFIG = recursive
            $${inst}.recurse = $$sub
        }
    }
    # Apps and libs request docs creation by setting QMAKE_DOCS.
    # This is a backwards compat hack - technically, the modules which need it
    # are supposed to load(qt_docs) themselves.
    !isEmpty(QMAKE_DOCS): load(qt_docs)
}
QMAKE_EXTRA_TARGETS += $$DOC_TARGETS
