# - Find pcre
# Find the native PCRE2 headers and libraries.
#
# PCRE2_INCLUDE_DIRS    - where to find pcre.h, etc.
# PCRE2_LIBRARIES   - List of libraries when using pcre.
# PCRE2_FOUND   - True if pcre found.
include(FindPackageHandleStandardArgs)

if(PCRE2_LIBRARIES AND PCRE2_INCLUDE_DIRS)
    # in cache already
    set(PCRE2_FOUND TRUE)
else()
    find_path(PCRE2_INCLUDE_DIR
        NAMES
        pcre2.h
        PATHS
        /usr/include
        /usr/local/include
        /opt/local/include
        /sw/include
        ${CMAKE_INCLUDE_PATH}
        ${CMAKE_INSTALL_PREFIX}/include)

    # Look for the library.
    find_library(PCRE2_LIBRARY
        NAMES
        libpcre2.a
        pcre2-8
        PATHS
        /usr/lib
        /usr/lib64
        /usr/local/lib
        /usr/local/lib64
        /opt/local/lib
        /sw/lib
        ${CMAKE_LIBRARY_PATH}
        ${CMAKE_INSTALL_PREFIX}/lib)

    if(PCRE2_INCLUDE_DIR AND PCRE2_LIBRARY)
        # learn pcre2 version
        file(STRINGS ${PCRE2_INCLUDE_DIR}/pcre2.h PCRE2_VERSION_MAJOR
            REGEX "#define[ ]+PCRE2_MAJOR[ ]+[0-9]+")
        string(REGEX MATCH " [0-9]+" PCRE2_VERSION_MAJOR ${PCRE2_VERSION_MAJOR})
        string(STRIP "${PCRE2_VERSION_MAJOR}" PCRE2_VERSION_MAJOR)

        file(STRINGS ${PCRE2_INCLUDE_DIR}/pcre2.h PCRE2_VERSION_MINOR
            REGEX "#define[ ]+PCRE2_MINOR[ ]+[0-9]+")
        string(REGEX MATCH " [0-9]+" PCRE2_VERSION_MINOR ${PCRE2_VERSION_MINOR})
        string(STRIP "${PCRE2_VERSION_MINOR}" PCRE2_VERSION_MINOR)

        set(PCRE2_VERSION ${PCRE2_VERSION_MAJOR}.${PCRE2_VERSION_MINOR})
    endif()

    set(PCRE2_INCLUDE_DIRS ${PCRE2_INCLUDE_DIR})
    set(PCRE2_LIBRARIES ${PCRE2_LIBRARY})
    mark_as_advanced(PCRE2_INCLUDE_DIRS PCRE2_LIBRARIES)

    # Handle the QUIETLY and REQUIRED arguments and set PCRE2_FOUND to TRUE if all listed variables are TRUE.
    find_package_handle_standard_args(PCRE2 FOUND_VAR PCRE2_FOUND
        REQUIRED_VARS PCRE2_LIBRARY PCRE2_INCLUDE_DIR
        VERSION_VAR PCRE2_VERSION)
endif()
