summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2019-08-26 16:19:35 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2019-08-28 11:17:07 +0000
commit9d5887fbc6fe0b20c4faf7eb42f1b71130e95120 (patch)
treee231a6d1eb0a3008a31bc0478cad4b85b6770e58
parentc6ea47a5ad799c5d4fa6e0458987dc8edaf3970b (diff)
downloadqttools-9d5887fbc6fe0b20c4faf7eb42f1b71130e95120.tar.gz
Port qdoc to CMake
Needed small conversion adjustments in the project, as well as porting of qtConfTest_libclang to CMake, which is encaspulated via FindWrapLibClang. Task-number: QTBUG-76002 Task-number: QTBUG-77831 Change-Id: I107f90a3292d97c68b7049bc69f571a0b7227da2 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--cmake/FindWrapLibClang.cmake408
-rw-r--r--src/CMakeLists.txt16
-rw-r--r--src/qdoc/.prev_CMakeLists.txt113
-rw-r--r--src/qdoc/CMakeLists.txt117
-rw-r--r--src/qdoc/configure.cmake27
5 files changed, 678 insertions, 3 deletions
diff --git a/cmake/FindWrapLibClang.cmake b/cmake/FindWrapLibClang.cmake
new file mode 100644
index 000000000..33fc29837
--- /dev/null
+++ b/cmake/FindWrapLibClang.cmake
@@ -0,0 +1,408 @@
+function(qt_tools_find_llvm_version_from_lib_dir lib_dir out_var)
+ set(candidate_version "")
+
+ file(GLOB version_dirs LIST_DIRECTORIES true "${lib_dir}/clang/*")
+ foreach(version_dir ${version_dirs})
+ get_filename_component(file_name "${version_dir}" NAME)
+ if(file_name MATCHES "^([0-9]+\.[0-9]+\.[0-9]+)$")
+ if(NOT candidate_version)
+ set(candidate_version "${CMAKE_MATCH_1}")
+ else()
+ if("${CMAKE_MATCH_1}" VERSION_GREATER_EQUAL "${candidate_version}")
+ set(candidate_version "${CMAKE_MATCH_1}")
+ endif()
+ endif()
+ endif()
+ endforeach()
+ set(${out_var} "${candidate_version}" PARENT_SCOPE)
+endfunction()
+
+function(qt_tools_find_lib_clang)
+ # We already looked up all the libclang information before, just create the target
+ # and exit early.
+ if(QT_LIB_CLANG_LIBS)
+ qt_tools_create_lib_clang_target()
+ set(WrapLibClang_FOUND TRUE PARENT_SCOPE)
+ return()
+ endif()
+
+ if(NOT QDOC_USE_STATIC_LIBCLANG AND DEFINED ENV{QDOC_USE_STATIC_LIBCLANG})
+ set(QDOC_USE_STATIC_LIBCLANG "$ENV{QDOC_USE_STATIC_LIBCLANG}")
+ endif()
+
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ # on Windows we have only two host compilers, MSVC or mingw. The former we never
+ # use for cross-compilation where it isn't also the target compiler. The latter
+ # is not detectable as this .prf file is evaluated against the target configuration
+ # and therefore checking for "mingw" won't work when the target compiler is clang (Android)
+ # or qcc (QNX).
+ if(MSVC)
+ if(NOT LLVM_INSTALL_DIR)
+ set(LLVM_INSTALL_DIR "$ENV{LLVM_INSTALL_DIR_MSVC}")
+ endif()
+ else()
+ if(NOT LLVM_INSTALL_DIR)
+ set(LLVM_INSTALL_DIR "$ENV{LLVM_INSTALL_DIR_MINGW}")
+ endif()
+ endif()
+ endif()
+
+ if(NOT LLVM_INSTALL_DIR)
+ set(LLVM_INSTALL_DIR "$ENV{LLVM_INSTALL_DIR}")
+ endif()
+
+ # Assume libclang is installed on the target system
+ if(NOT LLVM_INSTALL_DIR)
+ set(llvm_config_candidates
+ llvm-config-9
+ llvm-config-8
+ llvm-config-7
+ llvm-config-6.0
+ llvm-config-5.0
+ llvm-config-4.0
+ llvm-config-3.9
+ llvm-config)
+ foreach(candidate ${llvm_config_candidates})
+ execute_process(
+ COMMAND ${candidate} --prefix
+ OUTPUT_VARIABLE LLVM_INSTALL_DIR
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(LLVM_INSTALL_DIR)
+ execute_process(
+ COMMAND ${candidate} --includedir
+ OUTPUT_VARIABLE CLANG_INCLUDE_PATH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set(LIBCLANG_MAIN_HEADER "${CLANG_INCLUDE_PATH}/clang-c/Index.h")
+ if(NOT EXISTS "${LIBCLANG_MAIN_HEADER}")
+ if(LLVM_INSTALL_DIR)
+ message(STATUS "Cannot find libclang's main header file, "
+ "candidate: ${LIBCLANG_MAIN_HEADER}.")
+ continue()
+ endif()
+ else()
+ message(STATUS "QDoc: "
+ "Using Clang installation found in ${LLVM_INSTALL_DIR}. "
+ "Set the LLVM_INSTALL_DIR environment variable to override.")
+ break()
+ endif()
+ endif()
+ endforeach()
+ endif()
+ if(EXISTS "${LLVM_INSTALL_DIR}")
+ get_filename_component(LLVM_INSTALL_DIR "${LLVM_INSTALL_DIR}" ABSOLUTE)
+ endif()
+
+ if(TEST_architecture_arch MATCHES "x86_64")
+ set(replace_value "64")
+ else()
+ set(replace_value "32")
+ endif()
+ string(REPLACE "_ARCH_" "${replace_value}" clang_install_dir "${LLVM_INSTALL_DIR}")
+
+ if(NOT LLVM_INSTALL_DIR)
+ if(WIN32)
+ return()
+ endif()
+ if(APPLE)
+ # Default to homebrew llvm on macOS. The CLANG_VERSION test below will complain if
+ # missing.
+ execute_process(
+ COMMAND brew --prefix llvm
+ OUTPUT_VARIABLE clang_install_dir
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ else()
+ set(clang_install_dir "/usr")
+ endif()
+ endif()
+
+ # note: llvm_config only exits on unix
+ set(llvm_config "${clang_install_dir}/bin/llvm-config")
+ if(EXISTS "${llvm_config}")
+ execute_process(
+ COMMAND "${llvm_config}" --libdir
+ OUTPUT_VARIABLE QT_LIB_CLANG_LIBDIR
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(
+ COMMAND "${llvm_config}" --includedir
+ OUTPUT_VARIABLE QT_LIB_CLANG_INCLUDEPATH
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(
+ COMMAND "${llvm_config}" --version
+ OUTPUT_VARIABLE QT_LIB_CLANG_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ else()
+ set(QT_LIB_CLANG_LIBDIR "${clang_install_dir}/lib")
+ set(QT_LIB_CLANG_INCLUDEPATH "${clang_install_dir}/include")
+ qt_tools_find_llvm_version_from_lib_dir("${QT_LIB_CLANG_LIBDIR}" QT_LIB_CLANG_VERSION)
+ endif()
+
+ if(NOT QT_LIB_CLANG_VERSION AND LLVM_INSTALL_DIR)
+ message(STATUS "Cannot determine version of clang installation in ${clang_install_dir}.")
+ return()
+ endif()
+
+ if(QT_LIB_CLANG_VERSION VERSION_LESS "3.9.0")
+ message(STATUS "LLVM/Clang version >= 3.9.0 required, version provided: ${QT_LIB_CLANG_VERSION}.")
+ return()
+ endif()
+
+ set(LIBCLANG_MAIN_HEADER "${QT_LIB_CLANG_INCLUDEPATH}/clang-c/Index.h")
+ if(NOT EXISTS "${LIBCLANG_MAIN_HEADER}" AND LLVM_INSTALL_DIR)
+ message(STATUS "Cannot find libclang's main header file, "
+ "candidate: ${LIBCLANG_MAIN_HEADER}.")
+ return()
+ endif()
+
+ # FIXME: What's the use case and how to handle it properly? Aka when would the default libdirs
+ # contain already a flag pointing to clang libdir.
+ # !contains(QMAKE_DEFAULT_LIBDIRS, $$CLANG_LIBDIR): CLANG_LIBS = -L$${CLANG_LIBDIR}
+ set(QT_LIB_CLANG_LIBS "")
+ set(QT_LIB_CLANG_DEFINES "")
+
+ if(NOT QDOC_USE_STATIC_LIBCLANG)
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ list(APPEND QT_LIB_CLANG_LIBS -llibclang -ladvapi32 -lshell32)
+ else()
+ list(APPEND QT_LIB_CLANG_LIBS -lclang)
+ endif()
+ else()
+ if(MSVC)
+ list(APPEND QT_LIB_CLANG_DEFINES "CINDEX_LINKAGE=")
+ list(APPEND QT_LIB_CLANG_LIBS -llibclang_static -ladvapi32 -lshell32 -lMincore)
+ else()
+ if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ list(APPEND QT_LIB_CLANG_LIBS -Wl,--start-group)
+ endif()
+ qt_tools_get_flag_list_of_llvm_static_libs(llvm_static_libs)
+ list(APPEND QT_LIB_CLANG_LIBS ${llvm_static_libs})
+ if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ list(APPEND QT_LIB_CLANG_LIBS -Wl,--end-group)
+ endif()
+ list(APPEND QT_LIB_CLANG_LIBS -lz)
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ list(APPEND QT_LIB_CLANG_LIBS -lpsapi -lshell32 -lole32 -luuid -ladvapi32 -lversion)
+ else()
+ list(APPEND QT_LIB_CLANG_LIBS -ldl)
+ endif()
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ list(APPEND QT_LIB_CLANG_LIBS -lcurses -lm -lxml2)
+ endif()
+ endif() # MSVC
+ endif() # QDOC_USE_STATIC_LIBCLANG
+
+ qt_tools_create_lib_clang_target()
+ set(QT_LIB_CLANG_LIBS "${QT_LIB_CLANG_LIBS}" CACHE STRING "" FORCE)
+ set(QT_LIB_CLANG_LIBDIR "${QT_LIB_CLANG_LIBDIR}" CACHE STRING "" FORCE)
+ set(QT_LIB_CLANG_INCLUDEPATH "${QT_LIB_CLANG_INCLUDEPATH}" CACHE STRING "" FORCE)
+ set(QT_LIB_CLANG_DEFINES "${QT_LIB_CLANG_DEFINES}" CACHE STRING "" FORCE)
+ set(QT_LIB_CLANG_VERSION "${QT_LIB_CLANG_VERSION}" CACHE STRING "" FORCE)
+ set(QT_LIBCLANG_RESOURCE_DIR "\"${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}/include\""
+ CACHE STRING "Qt libclang resource dir.")
+ set(WrapLibClang_FOUND TRUE PARENT_SCOPE)
+endfunction()
+
+function(qt_tools_create_lib_clang_target)
+ add_library(WrapLibClang::WrapLibClang INTERFACE IMPORTED)
+ target_link_libraries(WrapLibClang::WrapLibClang INTERFACE ${QT_LIB_CLANG_LIBS})
+ target_link_directories(WrapLibClang::WrapLibClang INTERFACE ${QT_LIB_CLANG_LIBDIR})
+ target_include_directories(WrapLibClang::WrapLibClang INTERFACE ${QT_LIB_CLANG_INCLUDEPATH})
+ target_compile_definitions(WrapLibClang::WrapLibClang INTERFACE ${QT_LIB_CLANG_DEFINES})
+endfunction()
+
+function(qt_tools_get_flag_list_of_llvm_static_libs out_var)
+ set(${out_var}
+ -lclangAnalysis
+ -lclangApplyReplacements
+ -lclangARCMigrate
+ -lclangAST
+ -lclangASTMatchers
+ -lclangBasic
+ -lclangChangeNamespace
+ -lclangCodeGen
+ -lclangCrossTU
+ -lclangDaemon
+ -lclangDriver
+ -lclangDynamicASTMatchers
+ -lclangEdit
+ -lclangFormat
+ -lclangFrontend
+ -lclangFrontendTool
+ -lclangHandleCXX
+ -lclangIncludeFixer
+ -lclangIncludeFixerPlugin
+ -lclangIndex
+ -lclangLex
+ -lclangMove
+ -lclangParse
+ -lclangQuery
+ -lclangReorderFields
+ -lclangRewrite
+ -lclangRewriteFrontend
+ -lclangSema
+ -lclangSerialization
+ -lclang_static
+ -lclangStaticAnalyzerCheckers
+ -lclangStaticAnalyzerCore
+ -lclangStaticAnalyzerFrontend
+ -lclangTidy
+ -lclangTidyAndroidModule
+ -lclangTidyBoostModule
+ -lclangTidyBugproneModule
+ -lclangTidyCERTModule
+ -lclangTidyCppCoreGuidelinesModule
+ -lclangTidyFuchsiaModule
+ -lclangTidyGoogleModule
+ -lclangTidyHICPPModule
+ -lclangTidyLLVMModule
+ -lclangTidyMiscModule
+ -lclangTidyModernizeModule
+ -lclangTidyMPIModule
+ -lclangTidyObjCModule
+ -lclangTidyPerformanceModule
+ -lclangTidyPlugin
+ -lclangTidyReadabilityModule
+ -lclangTidyUtils
+ -lclangTooling
+ -lclangToolingASTDiff
+ -lclangToolingCore
+ -lclangToolingRefactor
+ -lfindAllSymbols
+ -lLLVMAArch64AsmParser
+ -lLLVMAArch64AsmPrinter
+ -lLLVMAArch64CodeGen
+ -lLLVMAArch64Desc
+ -lLLVMAArch64Disassembler
+ -lLLVMAArch64Info
+ -lLLVMAArch64Utils
+ -lLLVMAMDGPUAsmParser
+ -lLLVMAMDGPUAsmPrinter
+ -lLLVMAMDGPUCodeGen
+ -lLLVMAMDGPUDesc
+ -lLLVMAMDGPUDisassembler
+ -lLLVMAMDGPUInfo
+ -lLLVMAMDGPUUtils
+ -lLLVMAnalysis
+ -lLLVMARMAsmParser
+ -lLLVMARMAsmPrinter
+ -lLLVMARMCodeGen
+ -lLLVMARMDesc
+ -lLLVMARMDisassembler
+ -lLLVMARMInfo
+ -lLLVMARMUtils
+ -lLLVMAsmParser
+ -lLLVMAsmPrinter
+ -lLLVMBinaryFormat
+ -lLLVMBitReader
+ -lLLVMBitWriter
+ -lLLVMBPFAsmParser
+ -lLLVMBPFAsmPrinter
+ -lLLVMBPFCodeGen
+ -lLLVMBPFDesc
+ -lLLVMBPFDisassembler
+ -lLLVMBPFInfo
+ -lLLVMCodeGen
+ -lLLVMCore
+ -lLLVMCoroutines
+ -lLLVMCoverage
+ -lLLVMDebugInfoCodeView
+ -lLLVMDebugInfoDWARF
+ -lLLVMDebugInfoMSF
+ -lLLVMDebugInfoPDB
+ -lLLVMDemangle
+ -lLLVMDlltoolDriver
+ -lLLVMExecutionEngine
+ -lLLVMFuzzMutate
+ -lLLVMGlobalISel
+ -lLLVMHexagonAsmParser
+ -lLLVMHexagonCodeGen
+ -lLLVMHexagonDesc
+ -lLLVMHexagonDisassembler
+ -lLLVMHexagonInfo
+ -lLLVMInstCombine
+ -lLLVMInstrumentation
+ -lLLVMInterpreter
+ -lLLVMipo
+ -lLLVMIRReader
+ -lLLVMLanaiAsmParser
+ -lLLVMLanaiAsmPrinter
+ -lLLVMLanaiCodeGen
+ -lLLVMLanaiDesc
+ -lLLVMLanaiDisassembler
+ -lLLVMLanaiInfo
+ -lLLVMLibDriver
+ -lLLVMLineEditor
+ -lLLVMLinker
+ -lLLVMLTO
+ -lLLVMMC
+ -lLLVMMCDisassembler
+ -lLLVMMCJIT
+ -lLLVMMCParser
+ -lLLVMMipsAsmParser
+ -lLLVMMipsAsmPrinter
+ -lLLVMMipsCodeGen
+ -lLLVMMipsDesc
+ -lLLVMMipsDisassembler
+ -lLLVMMipsInfo
+ -lLLVMMIRParser
+ -lLLVMMSP430AsmPrinter
+ -lLLVMMSP430CodeGen
+ -lLLVMMSP430Desc
+ -lLLVMMSP430Info
+ -lLLVMNVPTXAsmPrinter
+ -lLLVMNVPTXCodeGen
+ -lLLVMNVPTXDesc
+ -lLLVMNVPTXInfo
+ -lLLVMObjCARCOpts
+ -lLLVMObject
+ -lLLVMObjectYAML
+ -lLLVMOption
+ -lLLVMOrcJIT
+ -lLLVMPasses
+ -lLLVMPowerPCAsmParser
+ -lLLVMPowerPCAsmPrinter
+ -lLLVMPowerPCCodeGen
+ -lLLVMPowerPCDesc
+ -lLLVMPowerPCDisassembler
+ -lLLVMPowerPCInfo
+ -lLLVMProfileData
+ -lLLVMRuntimeDyld
+ -lLLVMScalarOpts
+ -lLLVMSelectionDAG
+ -lLLVMSparcAsmParser
+ -lLLVMSparcAsmPrinter
+ -lLLVMSparcCodeGen
+ -lLLVMSparcDesc
+ -lLLVMSparcDisassembler
+ -lLLVMSparcInfo
+ -lLLVMSupport
+ -lLLVMSymbolize
+ -lLLVMSystemZAsmParser
+ -lLLVMSystemZAsmPrinter
+ -lLLVMSystemZCodeGen
+ -lLLVMSystemZDesc
+ -lLLVMSystemZDisassembler
+ -lLLVMSystemZInfo
+ -lLLVMTableGen
+ -lLLVMTarget
+ -lLLVMTransformUtils
+ -lLLVMVectorize
+ -lLLVMWindowsManifest
+ -lLLVMX86AsmParser
+ -lLLVMX86AsmPrinter
+ -lLLVMX86CodeGen
+ -lLLVMX86Desc
+ -lLLVMX86Disassembler
+ -lLLVMX86Info
+ -lLLVMX86Utils
+ -lLLVMXCoreAsmPrinter
+ -lLLVMXCoreCodeGen
+ -lLLVMXCoreDesc
+ -lLLVMXCoreDisassembler
+ -lLLVMXCoreInfo
+ -lLLVMXRay
+ PARENT_SCOPE)
+endfunction()
+
+# Tries to find libclang. If successful, creates an imported target called
+# WrapLibClang::WrapLibClang.
+qt_tools_find_lib_clang()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 041525e13..7729f8551 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,9 +13,19 @@ endif()
#if(QT_FEATURE_library AND (android_app OR NOT ANDROID))
#add_subdirectory(qtplugininfo)
#endif()
-#if(QT_FEATURE_qdoc AND QT_FEATURE_thread)
- #add_subdirectory(qdoc)
-#endif()
+# special case begin
+qt_feature_module_begin(
+ NO_MODULE
+ PUBLIC_FILE "qdoc/qtqdoc-config.h"
+ PRIVATE_FILE "qdoc/qtqdoc-config_p.h"
+)
+include(qdoc/configure.cmake)
+qt_feature_module_end(NO_MODULE)
+# special case end
+
+if(QT_FEATURE_qdoc AND QT_FEATURE_thread)
+ add_subdirectory(qdoc)
+endif()
#if(android_app OR NOT ANDROID)
#add_subdirectory(qtpaths)
#endif()
diff --git a/src/qdoc/.prev_CMakeLists.txt b/src/qdoc/.prev_CMakeLists.txt
new file mode 100644
index 000000000..ef28cd764
--- /dev/null
+++ b/src/qdoc/.prev_CMakeLists.txt
@@ -0,0 +1,113 @@
+# Generated from qdoc.pro.
+
+#####################################################################
+## qdoc Tool:
+#####################################################################
+
+add_qt_tool(qdoc
+ SOURCES
+ atom.cpp atom.h
+ clangcodeparser.cpp clangcodeparser.h
+ codechunk.cpp codechunk.h
+ codemarker.cpp codemarker.h
+ codeparser.cpp codeparser.h
+ config.cpp config.h
+ cppcodemarker.cpp cppcodemarker.h
+ cppcodeparser.cpp cppcodeparser.h
+ doc.cpp doc.h
+ editdistance.cpp editdistance.h
+ generator.cpp generator.h
+ helpprojectwriter.cpp helpprojectwriter.h
+ htmlgenerator.cpp htmlgenerator.h
+ jscodemarker.cpp jscodemarker.h
+ location.cpp location.h
+ loggingcategory.h
+ main.cpp
+ node.cpp node.h
+ openedlist.cpp openedlist.h
+ parameters.cpp parameters.h
+ puredocparser.cpp puredocparser.h
+ qdoccommandlineparser.cpp qdoccommandlineparser.h
+ qdocdatabase.cpp qdocdatabase.h
+ qdocglobals.cpp qdocglobals.h
+ qdocindexfiles.cpp qdocindexfiles.h
+ qdoctagfiles.cpp qdoctagfiles.h
+ qmlcodemarker.cpp qmlcodemarker.h
+ qmlcodeparser.cpp qmlcodeparser.h
+ qmlmarkupvisitor.cpp qmlmarkupvisitor.h
+ qmlvisitor.cpp qmlvisitor.h
+ quoter.cpp quoter.h
+ sections.cpp sections.h
+ separator.cpp separator.h
+ text.cpp text.h
+ tokenizer.cpp tokenizer.h
+ tree.cpp tree.h
+ webxmlgenerator.cpp webxmlgenerator.h
+ yyindent.cpp
+ DEFINES
+ QDOC2_COMPAT
+ join(CLANG_RESOURCE_DIR=\"/clang//include\")
+ INCLUDE_DIRECTORIES
+ ${QT_SOURCE_TREE}/src/tools/qdoc
+ ${QT_SOURCE_TREE}/src/tools/qdoc/qmlparser
+)
+
+#### Keys ignored in scope 1:.:.:qdoc.pro:<TRUE>:
+# CMAKE_BIN_DIR = "join($$[QT_HOST_BINS],$$[QT_INSTALL_PREFIX])"
+# CMAKE_INSTALL_LIBS_DIR = "join($$[QT_INSTALL_LIBS])"
+# CMAKE_LIB_DIR = "join($$[QT_INSTALL_LIBS],$$[QT_INSTALL_PREFIX])"
+# CMAKE_PACKAGE_VERSION = "$$MODULE_VERSION"
+# INSTALLS = "cmake_qdoc_tools_files"
+# QMAKE_SUBSTITUTES = "cmake_qdoc_config_file" "cmake_qdoc_config_version_file"
+# QMAKE_TARGET_DESCRIPTION = "Qt Documentation Compiler"
+# TR_EXCLUDE = "$$PWD/*"
+# _LOADED = "qt_tool" "cmake_functions" "qt_build_paths"
+# _OPTION = "host_build"
+# cmake_qdoc_config_file.input = "$$PWD/Qt5DocToolsConfig.cmake.in"
+# cmake_qdoc_config_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfig.cmake"
+# cmake_qdoc_config_version_file.input = "$$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in"
+# cmake_qdoc_config_version_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfigVersion.cmake"
+# cmake_qdoc_tools_files.CONFIG = "no_check_exist"
+# cmake_qdoc_tools_files.files = "$$cmake_qdoc_config_file.output" "$$cmake_qdoc_config_version_file.output"
+# cmake_qdoc_tools_files.path = "$$[QT_INSTALL_LIBS]/cmake/Qt5DocTools"
+
+## Scopes:
+#####################################################################
+
+extend_target(qdoc CONDITION TARGET Qt::QmlDevToolsPrivate
+ LIBRARIES
+ Qt::QmlDevToolsPrivate
+ PUBLIC_LIBRARIES
+ Qt::QmlDevTools
+)
+
+extend_target(qdoc CONDITION NOT TARGET Qt::QmlDevToolsPrivate
+ DEFINES
+ QT_NO_DECLARATIVE
+)
+
+#### Keys ignored in scope 6:.:.:qdoc.pro:NOT QMAKE_DEFAULT_LIBDIRS___contains____ss_CLANG_LIBDIR AND NOT disable_external_rpath:
+# QMAKE_RPATHDIR = "$$CLANG_LIBDIR"
+
+extend_target(qdoc CONDITION win32-icc_x_ OR win32-msvc_x_
+ LINK_OPTIONS
+ "/STACK:4194304"
+)
+
+#### Keys ignored in scope 8:.:.:qdoc.pro:CMAKE_INSTALL_LIBS_DIR___contains___^(/usr?/lib(64)?._x_):
+# CMAKE_USR_MOVE_WORKAROUND = "$$CMAKE_INSTALL_LIBS_DIR"
+
+#### Keys ignored in scope 9:.:.:qdoc.pro:NOT CMAKE_LIB_DIR___contains___^\\.\\./._x_:
+# CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
+# CMAKE_RELATIVE_INSTALL_LIBS_DIR = "join($$[QT_INSTALL_PREFIX],$$[QT_INSTALL_LIBS])"
+
+#### Keys ignored in scope 10:.:.:qdoc.pro:else:
+# CMAKE_LIB_DIR_IS_ABSOLUTE = "True"
+
+#### Keys ignored in scope 11:.:.:qdoc.pro:CMAKE_BIN_DIR___contains___^\\.\\./._x_:
+# CMAKE_BIN_DIR = "$$[QT_HOST_BINS]/"
+# CMAKE_BIN_DIR_IS_ABSOLUTE = "True"
+add_qt_docs(
+ doc/config/qdoc.qdocconf
+)
+
diff --git a/src/qdoc/CMakeLists.txt b/src/qdoc/CMakeLists.txt
new file mode 100644
index 000000000..5c3dabd87
--- /dev/null
+++ b/src/qdoc/CMakeLists.txt
@@ -0,0 +1,117 @@
+# Generated from qdoc.pro.
+
+#####################################################################
+## qdoc Tool:
+#####################################################################
+
+
+add_qt_tool(qdoc
+ SOURCES
+ atom.cpp atom.h
+ clangcodeparser.cpp clangcodeparser.h
+ codechunk.cpp codechunk.h
+ codemarker.cpp codemarker.h
+ codeparser.cpp codeparser.h
+ config.cpp config.h
+ cppcodemarker.cpp cppcodemarker.h
+ cppcodeparser.cpp cppcodeparser.h
+ doc.cpp doc.h
+ editdistance.cpp editdistance.h
+ generator.cpp generator.h
+ helpprojectwriter.cpp helpprojectwriter.h
+ htmlgenerator.cpp htmlgenerator.h
+ jscodemarker.cpp jscodemarker.h
+ location.cpp location.h
+ loggingcategory.h
+ main.cpp
+ node.cpp node.h
+ openedlist.cpp openedlist.h
+ parameters.cpp parameters.h
+ puredocparser.cpp puredocparser.h
+ qdoccommandlineparser.cpp qdoccommandlineparser.h
+ qdocdatabase.cpp qdocdatabase.h
+ qdocglobals.cpp qdocglobals.h
+ qdocindexfiles.cpp qdocindexfiles.h
+ qdoctagfiles.cpp qdoctagfiles.h
+ qmlcodemarker.cpp qmlcodemarker.h
+ qmlcodeparser.cpp qmlcodeparser.h
+ qmlmarkupvisitor.cpp qmlmarkupvisitor.h
+ qmlvisitor.cpp qmlvisitor.h
+ quoter.cpp quoter.h
+ sections.cpp sections.h
+ separator.cpp separator.h
+ text.cpp text.h
+ tokenizer.cpp tokenizer.h
+ tree.cpp tree.h
+ webxmlgenerator.cpp webxmlgenerator.h
+ yyindent.cpp
+ LIBRARIES # special case
+ WrapLibClang::WrapLibClang # special case
+ DEFINES
+ QDOC2_COMPAT
+ # join(CLANG_RESOURCE_DIR=\"/clang//include\") # special case remove
+ CLANG_RESOURCE_DIR=${QT_LIBCLANG_RESOURCE_DIR}
+ INCLUDE_DIRECTORIES
+ ${QT_SOURCE_TREE}/src/tools/qdoc
+ ${QT_SOURCE_TREE}/src/tools/qdoc/qmlparser
+)
+
+#### Keys ignored in scope 1:.:.:qdoc.pro:<TRUE>:
+# CMAKE_BIN_DIR = "join($$[QT_HOST_BINS],$$[QT_INSTALL_PREFIX])"
+# CMAKE_INSTALL_LIBS_DIR = "join($$[QT_INSTALL_LIBS])"
+# CMAKE_LIB_DIR = "join($$[QT_INSTALL_LIBS],$$[QT_INSTALL_PREFIX])"
+# CMAKE_PACKAGE_VERSION = "$$MODULE_VERSION"
+# INSTALLS = "cmake_qdoc_tools_files"
+# QMAKE_SUBSTITUTES = "cmake_qdoc_config_file" "cmake_qdoc_config_version_file"
+# QMAKE_TARGET_DESCRIPTION = "Qt Documentation Compiler"
+# TR_EXCLUDE = "$$PWD/*"
+# _LOADED = "qt_tool" "cmake_functions" "qt_build_paths"
+# _OPTION = "host_build"
+# cmake_qdoc_config_file.input = "$$PWD/Qt5DocToolsConfig.cmake.in"
+# cmake_qdoc_config_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfig.cmake"
+# cmake_qdoc_config_version_file.input = "$$[QT_HOST_DATA/src]/mkspecs/features/data/cmake/Qt5ConfigVersion.cmake.in"
+# cmake_qdoc_config_version_file.output = "$$MODULE_BASE_OUTDIR/lib/cmake/Qt5DocTools/Qt5DocToolsConfigVersion.cmake"
+# cmake_qdoc_tools_files.CONFIG = "no_check_exist"
+# cmake_qdoc_tools_files.files = "$$cmake_qdoc_config_file.output" "$$cmake_qdoc_config_version_file.output"
+# cmake_qdoc_tools_files.path = "$$[QT_INSTALL_LIBS]/cmake/Qt5DocTools"
+
+## Scopes:
+#####################################################################
+
+extend_target(qdoc CONDITION TARGET Qt::QmlDevToolsPrivate
+ LIBRARIES
+ Qt::QmlDevToolsPrivate
+ PUBLIC_LIBRARIES
+ Qt::QmlDevTools
+)
+
+extend_target(qdoc CONDITION NOT TARGET Qt::QmlDevToolsPrivate
+ DEFINES
+ QT_NO_DECLARATIVE
+)
+
+#### Keys ignored in scope 6:.:.:qdoc.pro:NOT QMAKE_DEFAULT_LIBDIRS___contains____ss_CLANG_LIBDIR AND NOT disable_external_rpath:
+# QMAKE_RPATHDIR = "$$CLANG_LIBDIR"
+
+extend_target(qdoc CONDITION win32-icc_x_ OR win32-msvc_x_
+ LINK_OPTIONS
+ "/STACK:4194304"
+)
+
+#### Keys ignored in scope 8:.:.:qdoc.pro:CMAKE_INSTALL_LIBS_DIR___contains___^(/usr?/lib(64)?._x_):
+# CMAKE_USR_MOVE_WORKAROUND = "$$CMAKE_INSTALL_LIBS_DIR"
+
+#### Keys ignored in scope 9:.:.:qdoc.pro:NOT CMAKE_LIB_DIR___contains___^\\.\\./._x_:
+# CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
+# CMAKE_RELATIVE_INSTALL_LIBS_DIR = "join($$[QT_INSTALL_PREFIX],$$[QT_INSTALL_LIBS])"
+
+#### Keys ignored in scope 10:.:.:qdoc.pro:else:
+# CMAKE_LIB_DIR_IS_ABSOLUTE = "True"
+
+#### Keys ignored in scope 11:.:.:qdoc.pro:CMAKE_BIN_DIR___contains___^\\.\\./._x_:
+# CMAKE_BIN_DIR = "$$[QT_HOST_BINS]/"
+# CMAKE_BIN_DIR_IS_ABSOLUTE = "True"
+add_qt_docs(
+ doc/config/qdoc.qdocconf
+)
+
diff --git a/src/qdoc/configure.cmake b/src/qdoc/configure.cmake
new file mode 100644
index 000000000..b358b7ece
--- /dev/null
+++ b/src/qdoc/configure.cmake
@@ -0,0 +1,27 @@
+
+
+#### Inputs
+
+
+
+#### Libraries
+
+
+
+#### Tests
+
+# libclang
+qt_find_package(WrapLibClang PROVIDED_TARGETS WrapLibClang::WrapLibClang)
+
+if(TARGET WrapLibClang::WrapLibClang)
+ set(TEST_libclang "ON" CACHE BOOL "Required libclang version found." FORCE)
+endif()
+
+
+
+#### Features
+
+qt_feature("qdoc" PRIVATE
+ LABEL "QDoc"
+ CONDITION TEST_libclang
+)