Added the platform check back and added linker flags for PCRE if the embedded library does not have them.

This commit is contained in:
Markus Makela
2015-04-03 22:14:51 +03:00
parent 2471ebf55f
commit e9aa692acd
5 changed files with 134 additions and 69 deletions

View File

@ -19,7 +19,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
project(MaxScale) project(MaxScale)
#Disabled for now pending evaluation #Disabled for now pending evaluation
#include(CheckPlatform.cmake) include(cmake/CheckPlatform.cmake)
check_deps() check_deps()
check_dirs() check_dirs()

View File

@ -1,6 +1,7 @@
#Checks for all the C system headers found in all the files #Checks for all the C system headers found in all the files
include(CheckFunctionExists) include(CheckFunctionExists)
include(CheckLibraryExists)
include(CheckIncludeFiles) include(CheckIncludeFiles)
check_include_files(arpa/inet.h HAVE_ARPA_INET) check_include_files(arpa/inet.h HAVE_ARPA_INET)

View File

@ -3,7 +3,7 @@
# The following variables are set: # The following variables are set:
# MYSQL_VERSION - The MySQL version number # MYSQL_VERSION - The MySQL version number
# MYSQL_PROVIDER - The MySQL provider e.g. MariaDB # 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_file(MYSQL_VERSION_H mysql_version.h PATH_SUFFIXES mysql)
if(MYSQL_VERSION_H MATCHES "MYSQL_VERSION_H-NOTFOUND") if(MYSQL_VERSION_H MATCHES "MYSQL_VERSION_H-NOTFOUND")
@ -33,5 +33,69 @@ if(NOT MYSQL_PROVIDER STREQUAL "MariaDB")
message(WARNING "Not using MariaDB server.") message(WARNING "Not using MariaDB server.")
endif() endif()
if(MYSQL_VERSION VERSION_LESS 5.5.41) if(MYSQL_VERSION VERSION_LESS 5.5.41)
message(WARNING "MySQL version is ${MYSQL_VERSION}. Minimum supported version is 5.5.41") message(WARNING "MySQL version is ${MYSQL_VERSION}. Minimum supported version is 5.5.41.")
endif()
if (DEFINED EMBEDDED_LIB)
if( NOT (IS_DIRECTORY ${EMBEDDED_LIB}) )
debugmsg("EMBEDDED_LIB is not a 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})
debugmsg("EMBEDDED_LIB directory component: ${EMBEDDED_LIB}")
endif()
debugmsg("Searching for the embedded library at: ${EMBEDDED_LIB}")
endif()
if(STATIC_EMBEDDED)
debugmsg("Using the static embedded library...")
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
if (DEFINED EMBEDDED_LIB)
debugmsg("Searching for libmysqld.a at: ${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()
debugmsg("Search returned: ${EMBEDDED_LIB_STATIC}")
set(EMBEDDED_LIB ${EMBEDDED_LIB_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
else()
debugmsg("Using the dynamic embedded library...")
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
if (DEFINED EMBEDDED_LIB)
debugmsg("Searching for libmysqld.so at: ${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()
debugmsg("Search returned: ${EMBEDDED_LIB_DYNAMIC}")
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()
message(STATUS "Embedded mysqld does not have pcre_stack_guard, linking with system pcre.")
set(PCRE_LINK_FLAGS "pcre" CACHE INTERNAL "pcre linker flags")
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() endif()

View File

@ -147,64 +147,64 @@ debugmsg("Search returned: ${MYSQL_DIR_LOC}")
# Find the embedded mysql library # Find the embedded mysql library
if (DEFINED EMBEDDED_LIB) # if (DEFINED EMBEDDED_LIB)
if( NOT (IS_DIRECTORY ${EMBEDDED_LIB}) ) # if( NOT (IS_DIRECTORY ${EMBEDDED_LIB}) )
debugmsg("EMBEDDED_LIB is not a directory: ${EMBEDDED_LIB}") # debugmsg("EMBEDDED_LIB is not a directory: ${EMBEDDED_LIB}")
if(${CMAKE_VERSION} VERSION_LESS 2.8.12 ) # if(${CMAKE_VERSION} VERSION_LESS 2.8.12 )
set(COMP_VAR PATH) # set(COMP_VAR PATH)
else() # else()
set(COMP_VAR DIRECTORY) # set(COMP_VAR DIRECTORY)
endif() # endif()
get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} ${COMP_VAR}) # get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} ${COMP_VAR})
debugmsg("EMBEDDED_LIB directory component: ${EMBEDDED_LIB}") # debugmsg("EMBEDDED_LIB directory component: ${EMBEDDED_LIB}")
endif() # endif()
debugmsg("Searching for the embedded library at: ${EMBEDDED_LIB}") # debugmsg("Searching for the embedded library at: ${EMBEDDED_LIB}")
endif() # endif()
if(STATIC_EMBEDDED) # if(STATIC_EMBEDDED)
debugmsg("Using the static embedded library...") # debugmsg("Using the static embedded library...")
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) # set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") # set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
if (DEFINED EMBEDDED_LIB) # if (DEFINED EMBEDDED_LIB)
debugmsg("Searching for libmysqld.a at: ${EMBEDDED_LIB}") # debugmsg("Searching for libmysqld.a at: ${EMBEDDED_LIB}")
find_library(EMBEDDED_LIB_STATIC libmysqld.a PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH) # find_library(EMBEDDED_LIB_STATIC libmysqld.a PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
else() # else()
find_library(EMBEDDED_LIB_STATIC libmysqld.a PATH_SUFFIXES mysql mariadb) # find_library(EMBEDDED_LIB_STATIC libmysqld.a PATH_SUFFIXES mysql mariadb)
endif() # endif()
debugmsg("Search returned: ${EMBEDDED_LIB_STATIC}") # debugmsg("Search returned: ${EMBEDDED_LIB_STATIC}")
set(EMBEDDED_LIB ${EMBEDDED_LIB_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE) # set(EMBEDDED_LIB ${EMBEDDED_LIB_STATIC} CACHE FILEPATH "Path to libmysqld" FORCE)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES}) # set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
else() # else()
debugmsg("Using the dynamic embedded library...") # debugmsg("Using the dynamic embedded library...")
set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) # set(OLD_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so") # set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
if (DEFINED EMBEDDED_LIB) # if (DEFINED EMBEDDED_LIB)
debugmsg("Searching for libmysqld.so at: ${EMBEDDED_LIB}") # debugmsg("Searching for libmysqld.so at: ${EMBEDDED_LIB}")
find_library(EMBEDDED_LIB_DYNAMIC mysqld PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH) # find_library(EMBEDDED_LIB_DYNAMIC mysqld PATHS ${EMBEDDED_LIB} PATH_SUFFIXES mysql mariadb NO_DEFAULT_PATH)
else() # else()
find_library(EMBEDDED_LIB_DYNAMIC mysqld PATH_SUFFIXES mysql mariadb) # find_library(EMBEDDED_LIB_DYNAMIC mysqld PATH_SUFFIXES mysql mariadb)
endif() # endif()
debugmsg("Search returned: ${EMBEDDED_LIB_DYNAMIC}") # debugmsg("Search returned: ${EMBEDDED_LIB_DYNAMIC}")
set(EMBEDDED_LIB ${EMBEDDED_LIB_DYNAMIC} CACHE FILEPATH "Path to libmysqld" FORCE) # set(EMBEDDED_LIB ${EMBEDDED_LIB_DYNAMIC} CACHE FILEPATH "Path to libmysqld" FORCE)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES}) # set(CMAKE_FIND_LIBRARY_SUFFIXES ${OLD_SUFFIXES})
endif() # endif()
unset(EMBEDDED_LIB_DYNAMIC) # unset(EMBEDDED_LIB_DYNAMIC)
unset(EMBEDDED_LIB_STATIC) # unset(EMBEDDED_LIB_STATIC)
unset(OLD_SUFFIXES) # unset(OLD_SUFFIXES)
# Inform the user about the embedded library # # Inform the user about the embedded library
if( (${EMBEDDED_LIB} MATCHES "NOTFOUND") OR (${EMBEDDED_LIB} MATCHES "NOTFOUND")) # if( (${EMBEDDED_LIB} MATCHES "NOTFOUND") OR (${EMBEDDED_LIB} MATCHES "NOTFOUND"))
set(DEPS_OK FALSE CACHE BOOL "If all the dependencies were found.") # set(DEPS_OK FALSE CACHE BOOL "If all the dependencies were found.")
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>") # 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() # else()
get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} REALPATH) # get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} REALPATH)
message(STATUS "Using embedded library: ${EMBEDDED_LIB}") # message(STATUS "Using embedded library: ${EMBEDDED_LIB}")
endif() # endif()
# Check which init.d script to install # Check which init.d script to install

View File

@ -1,7 +1,7 @@
if(BUILD_TESTS OR BUILD_TOOLS) if(BUILD_TESTS OR BUILD_TOOLS)
file(GLOB FULLCORE_SRC *.c) file(GLOB FULLCORE_SRC *.c)
add_library(fullcore STATIC ${FULLCORE_SRC}) add_library(fullcore STATIC ${FULLCORE_SRC})
target_link_libraries(fullcore ${CURL_LIBRARIES} log_manager utils pthread ${EMBEDDED_LIB} ssl aio rt crypt dl crypto inih z m stdc++) target_link_libraries(fullcore ${CURL_LIBRARIES} log_manager utils pthread ${EMBEDDED_LIB} ${PCRE_LINK_FLAGS} ssl aio rt crypt dl crypto inih z m stdc++)
endif() endif()
add_executable(maxscale atomic.c buffer.c spinlock.c gateway.c add_executable(maxscale atomic.c buffer.c spinlock.c gateway.c
@ -9,7 +9,7 @@ add_executable(maxscale atomic.c buffer.c spinlock.c gateway.c
poll.c config.c users.c hashtable.c dbusers.c thread.c gwbitmask.c poll.c config.c users.c hashtable.c dbusers.c thread.c gwbitmask.c
monitor.c adminusers.c secrets.c filter.c modutil.c hint.c monitor.c adminusers.c secrets.c filter.c modutil.c hint.c
housekeeper.c memlog.c resultset.c) housekeeper.c memlog.c resultset.c)
target_link_libraries(maxscale ${EMBEDDED_LIB} ${CURL_LIBRARIES} log_manager utils ssl aio pthread crypt dl crypto inih z rt m stdc++) target_link_libraries(maxscale ${EMBEDDED_LIB} ${PCRE_LINK_FLAGS} ${CURL_LIBRARIES} log_manager utils ssl aio pthread crypt dl crypto inih z rt m stdc++)
install(TARGETS maxscale DESTINATION bin) install(TARGETS maxscale DESTINATION bin)
add_executable(maxkeys maxkeys.c secrets.c utils.c) add_executable(maxkeys maxkeys.c secrets.c utils.c)