defineReplace(extractVersion)      { return($$replace(1, ^(\\d+\\.\\d+\\.\\d+)(svn|git)?$, \\1)) }
defineReplace(extractMajorVersion) { return($$replace(1, ^(\\d+)\\.\\d+\\.\\d+(svn|git)?$, \\1)) }
defineReplace(extractMinorVersion) { return($$replace(1, ^\\d+\\.(\\d+)\\.\\d+(svn|git)?$, \\1)) }
defineReplace(extractPatchVersion) { return($$replace(1, ^\\d+\\.\\d+\\.(\\d+)(svn|git)?$, \\1)) }

defineTest(versionIsAtLeast) {
    actual_major_version = $$extractMajorVersion($$1)
    actual_minor_version = $$extractMinorVersion($$1)
    actual_patch_version = $$extractPatchVersion($$1)
    required_min_major_version = $$extractMajorVersion($$2)
    required_min_minor_version = $$extractMinorVersion($$2)
    required_min_patch_version = $$extractPatchVersion($$2)

    isEqual(actual_major_version, $$required_min_major_version) {
        isEqual(actual_minor_version, $$required_min_minor_version) {
            isEqual(actual_patch_version, $$required_min_patch_version): return(true)
            greaterThan(actual_patch_version, $$required_min_patch_version): return(true)
        }
        greaterThan(actual_minor_version, $$required_min_minor_version): return(true)
    }
    greaterThan(actual_major_version, $$required_min_major_version): return(true)

    return(false)
}

defineReplace(findLLVMVersionFromLibDir) {
    libdir = $$1
    version_dirs = $$files($$libdir/clang/*)
    for (version_dir, version_dirs) {
        fileName = $$basename(version_dir)
        version = $$find(fileName, ^(\\d+\\.\\d+\\.\\d+)$)
        !isEmpty(version) {
            isEmpty(candidateVersion): candidateVersion = $$version
            else: versionIsAtLeast($$version, $$candidateVersion): candidateVersion = $$version
        }
    }
    return($$candidateVersion)
}

defineTest(qtConfTest_libclang) {
    isEmpty(QDOC_USE_STATIC_LIBCLANG): QDOC_USE_STATIC_LIBCLANG = $$(QDOC_USE_STATIC_LIBCLANG)

    equals(QMAKE_HOST.os, 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).
        msvc {
            isEmpty(LLVM_INSTALL_DIR): LLVM_INSTALL_DIR = $$(LLVM_INSTALL_DIR_MSVC)
        } else {
            isEmpty(LLVM_INSTALL_DIR): LLVM_INSTALL_DIR = $$(LLVM_INSTALL_DIR_MINGW)
        }
    }
    isEmpty(LLVM_INSTALL_DIR): LLVM_INSTALL_DIR = $$(LLVM_INSTALL_DIR)

    # Assume libclang is installed on the target system
    isEmpty(LLVM_INSTALL_DIR) {
        llvmConfigCandidates = \
            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

        for (candidate, llvmConfigCandidates) {
            LLVM_INSTALL_DIR = $$system("$$candidate --prefix 2>$$QMAKE_SYSTEM_NULL_DEVICE")
            !isEmpty(LLVM_INSTALL_DIR) {
                CLANG_INCLUDEPATH = $$system("$$candidate --includedir 2>/dev/null")
                LIBCLANG_MAIN_HEADER = $$CLANG_INCLUDEPATH/clang-c/Index.h
                !exists($$LIBCLANG_MAIN_HEADER) {
                    !isEmpty(LLVM_INSTALL_DIR): \
                        qtLog("Cannot find libclang's main header file, candidate: $${LIBCLANG_MAIN_HEADER}.")
                        continue
                } else {
                    qtLog("QDoc:" \
                          "Using Clang installation found in $${LLVM_INSTALL_DIR}." \
                          "Set the LLVM_INSTALL_DIR environment variable to override.")
                    break()
                }
            }
        }
    }
    LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR)

    contains(QMAKE_HOST.arch, x86_64): \
        clangInstallDir = $$replace(LLVM_INSTALL_DIR, _ARCH_, 64)
    else: \
        clangInstallDir = $$replace(LLVM_INSTALL_DIR, _ARCH_, 32)
    isEmpty(LLVM_INSTALL_DIR) {
        win32 {
            return(false)
        }
        macos {
            # Default to homebrew llvm on macOS. The CLANG_VERSION test below will complain if missing.
            clangInstallDir = $$system("brew --prefix llvm")
        } else {
            clangInstallDir = /usr
        }
    }

    # note: llvm_config only exits on unix
    llvm_config = $$clangInstallDir/bin/llvm-config
    exists($$llvm_config) {
        CLANG_LIBDIR = $$system("$$llvm_config --libdir 2>/dev/null")
        CLANG_INCLUDEPATH = $$system("$$llvm_config --includedir 2>/dev/null")
        output = $$system("$$llvm_config --version 2>/dev/null")
        CLANG_VERSION = $$extractVersion($$output)
    } else {
        CLANG_LIBDIR = $$clangInstallDir/lib
        CLANG_INCLUDEPATH = $$clangInstallDir/include
        CLANG_VERSION = $$findLLVMVersionFromLibDir($$CLANG_LIBDIR)
    }
    isEmpty(CLANG_VERSION) {
        !isEmpty(LLVM_INSTALL_DIR): \
            qtLog("Cannot determine version of clang installation in $${clangInstallDir}.")
        return(false)
    }

    LIBCLANG_MAIN_HEADER = $$CLANG_INCLUDEPATH/clang-c/Index.h
    !exists($$LIBCLANG_MAIN_HEADER) {
        !isEmpty(LLVM_INSTALL_DIR): \
            qtLog("Cannot find libclang's main header file, candidate: $${LIBCLANG_MAIN_HEADER}.")
        return(false)
    }

    !contains(QMAKE_DEFAULT_LIBDIRS, $$CLANG_LIBDIR): CLANG_LIBS = -L$${CLANG_LIBDIR}

    CLANG_DEFINES =

    isEmpty(QDOC_USE_STATIC_LIBCLANG) {
        equals(QMAKE_HOST.os, Windows): \
            CLANG_LIBS += -llibclang -ladvapi32 -lshell32
        else: \
            CLANG_LIBS += -lclang
    } else {
        msvc {
            CLANG_DEFINES += CINDEX_LINKAGE=
            CLANG_LIBS += -llibclang_static -ladvapi32 -lshell32 -lMincore
        } else {
            !equals(QMAKE_HOST.os, Darwin): CLANG_LIBS+=-Wl,--start-group
            CLANG_LIBS += -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
            !equals(QMAKE_HOST.os, Darwin): CLANG_LIBS+=-Wl,--end-group
            CLANG_LIBS += -lz
            equals(QMAKE_HOST.os, Windows): CLANG_LIBS += -lpsapi -lshell32 -lole32 -luuid -ladvapi32 -lversion
            else: CLANG_LIBS += -ldl
            equals(QMAKE_HOST.os, Darwin): CLANG_LIBS += -lcurses -lm -lxml2
        }
    }

    !versionIsAtLeast($$CLANG_VERSION, "3.9.0") {
        log("LLVM/Clang version >= 3.9.0 required, version provided: $${CLANG_VERSION}.$$escape_expand(\\n)")
        return(false)
    }

    $${1}.libs = $$CLANG_LIBS
    export($${1}.libs)
    $${1}.cache += libs

    $${1}.includepath = $$CLANG_INCLUDEPATH
    export($${1}.includepath)
    $${1}.cache += includepath

    $${1}.libdir = $$CLANG_LIBDIR
    export($${1}.libdir)
    $${1}.cache += libdir

    $${1}.defines = $$CLANG_DEFINES
    export($${1}.defines)
    $${1}.cache += defines

    $${1}.version = $$CLANG_VERSION
    export($${1}.version)
    $${1}.cache += version

    export($${1}.cache)

    return(true)
}

