# This CMake file tries to find the the mysql_version.h header
# and to parse it for version and provider strings
# The following variables are set:
# MYSQL_VERSION - The MySQL version number
# MYSQL_PROVIDER - The MySQL provider e.g. MariaDB
# EMBEDDED_LIB - The MySQL embedded library

find_file(MYSQL_VERSION_H mysql_version.h PATH_SUFFIXES mysql)
find_path(MYSQL_HEADERS mysql.h PATH_SUFFIXES mysql)
if(MYSQL_VERSION_H MATCHES "MYSQL_VERSION_H-NOTFOUND")
  message(FATAL_ERROR "Cannot find the mysql_version.h header")
else()
  message(STATUS "Found mysql_version.h: ${MYSQL_VERSION_H}")
endif()

file(READ ${MYSQL_VERSION_H} MYSQL_VERSION_CONTENTS)
string(REGEX REPLACE ".*MYSQL_SERVER_VERSION[^0-9.]+([0-9.]+).*" "\\1" MYSQL_VERSION ${MYSQL_VERSION_CONTENTS})
string(REGEX REPLACE ".*MYSQL_COMPILATION_COMMENT[[:space:]]+\"(.+)\".*" "\\1" MYSQL_PROVIDER ${MYSQL_VERSION_CONTENTS})
string(TOLOWER ${MYSQL_PROVIDER} MYSQL_PROVIDER)
if(MYSQL_PROVIDER MATCHES "[mM]aria[dD][bB]")
  set(MYSQL_PROVIDER "MariaDB" CACHE INTERNAL "The MySQL provider")
elseif(MYSQL_PROVIDER MATCHES "mysql")
  set(MYSQL_PROVIDER "MySQL" CACHE INTERNAL "The MySQL provider")
elseif(MYSQL_PROVIDER MATCHES "percona")
  set(MYSQL_PROVIDER "Percona" CACHE INTERNAL "The MySQL provider")
else()
  set(MYSQL_PROVIDER "Unknown" CACHE INTERNAL "The MySQL provider")
endif()
message(STATUS "MySQL version: ${MYSQL_VERSION}")
message(STATUS "MySQL provider: ${MYSQL_PROVIDER}")

if(NOT MYSQL_PROVIDER STREQUAL "MariaDB")
message(WARNING "Not using a release version of MariaDB server. If this is intentional, please ignore this warning. Otherwise make sure the right libraries are installed and CMake finds the right libraries.")
endif()
if(MYSQL_VERSION VERSION_LESS 5.5.41)
message(WARNING "MySQL version is ${MYSQL_VERSION}. Minimum supported version is 5.5.41.")
endif()

if(NOT (MYSQL_VERSION VERSION_LESS 10.1))

  # 10.1 needs lzma
  find_library(HAVE_LIBLZMA NAMES lzma)
  if(NOT HAVE_LIBLZMA)
    message(FATAL_ERROR "Could not find liblzma")
  endif()
  set(LZMA_LINK_FLAGS "lzma" CACHE STRING "liblzma link flags")
endif()


if (DEFINED EMBEDDED_LIB)
  if( NOT (IS_DIRECTORY ${EMBEDDED_LIB}) )

	if(${CMAKE_VERSION} VERSION_LESS 2.8.12 )
	  set(COMP_VAR PATH)
	else()
	  set(COMP_VAR DIRECTORY)
	endif()
	get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} ${COMP_VAR})

  endif()

endif()

if(STATIC_EMBEDDED)


  set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
  set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
  if (DEFINED EMBEDDED_LIB)

	find_library(EMBEDDED_LIB_STATIC libmysqld.a PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
  else()
	find_library(EMBEDDED_LIB_STATIC libmysqld.a PATH_SUFFIXES mysql mariadb)
  endif()


  set(EMBEDDED_LIB ${EMBEDDED_LIB_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE)
  set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})

else()

  set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
  set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
  if (DEFINED EMBEDDED_LIB)

	find_library(EMBEDDED_LIB_DYNAMIC mysqld PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
  else()
	find_library(EMBEDDED_LIB_DYNAMIC mysqld PATH_SUFFIXES mysql mariadb)
  endif()

  set(EMBEDDED_LIB ${EMBEDDED_LIB_DYNAMIC} CACHE FILEPATH "Path to libmysqld" FORCE)
  set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})

endif()

unset(EMBEDDED_LIB_DYNAMIC)
unset(EMBEDDED_LIB_STATIC)
unset(OLD_SUFFIXES)

check_library_exists(${EMBEDDED_LIB} pcre_stack_guard ${EMBEDDED_LIB} HAVE_EMBEDDED_PCRE)

if(HAVE_EMBEDDED_PCRE)
  set(PCRE_LINK_FLAGS "" CACHE INTERNAL "pcre linker flags")
else()
  if(PCRE_FOUND)
    set(PCRE_LINK_FLAGS "pcre" CACHE INTERNAL "pcre linker flags")
    message(STATUS "Embedded mysqld does not have pcre_stack_guard, linking with system pcre.")
  else()
    message(FATAL_ERROR "Could not find PCRE libraries.")
  endif()
endif()
if( (${EMBEDDED_LIB} MATCHES "NOTFOUND") OR (${EMBEDDED_LIB} MATCHES "NOTFOUND"))
  message(FATAL_ERROR "Library not found: libmysqld. If your install of MySQL is in a non-default location, please provide the location with -DEMBEDDED_LIB=<path to library>")
else()
  message(STATUS "Using embedded library: ${EMBEDDED_LIB}")
endif()

# Find the errmsg.sys file if it was not defied                                                                                                                                                                  
if( DEFINED ERRMSG )
  if(NOT(IS_DIRECTORY ${ERRMSG}))
    get_filename_component(ERRMSG ${ERRMSG} PATH)
  endif()
  find_file(ERRMSG_FILE errmsg.sys PATHS ${ERRMSG} NO_DEFAULT_PATH)
  if(${ERRMSG_FILE} MATCHES "NOTFOUND")
    message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found at ${ERRMSG}")
  else()
    message(STATUS "Using custom errmsg.sys found at: ${ERRMSG_FILE}")
  endif()
else()
  find_file(ERRMSG_FILE errmsg.sys PATHS /usr/share /usr/share/mysql /usr/local/share/mysql PATH_SUFFIXES english mysql/english)
  if(${ERRMSG_FILE} MATCHES "NOTFOUND")
    message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found, please define the path to it by using -DERRMSG=<path>")
  else()
    message(STATUS "Using errmsg.sys found at: ${ERRMSG_FILE}")
  endif()
endif()
set(ERRMSG ${ERRMSG_FILE} CACHE FILEPATH "Path to the errmsg.sys file." FORCE)
unset(ERRMSG_FILE)
