Added dependency checks, Debian packaging and fixes to various parts of the CMake build files.
This commit is contained in:
parent
41226692ac
commit
0f5cfdbd1a
@ -1,11 +1,14 @@
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
|
||||
include(macros.cmake)
|
||||
enable_testing()
|
||||
|
||||
|
||||
enable_testing()
|
||||
set_variables()
|
||||
set_maxscale_version()
|
||||
|
||||
set(CMAKE_INSTALL_PREFIX "${INSTALL_DIR}" CACHE INTERNAL "Prefix prepended to install directories." FORCE)
|
||||
|
||||
if(NOT ( BUILD_TYPE STREQUAL "None" ) )
|
||||
set(CMAKE_BUILD_TYPE "${BUILD_TYPE}" CACHE INTERNAL "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel. " FORCE)
|
||||
else()
|
||||
@ -14,6 +17,11 @@ endif()
|
||||
|
||||
project(MaxScale)
|
||||
|
||||
if(NOT DEPS_OK)
|
||||
check_deps()
|
||||
else()
|
||||
message(STATUS "Dependencies ok")
|
||||
endif()
|
||||
|
||||
|
||||
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH}:${CMAKE_INSTALL_PREFIX}/lib:${CMAKE_INSTALL_PREFIX}/modules)
|
||||
@ -22,20 +30,6 @@ configure_file(${CMAKE_SOURCE_DIR}/server/include/version.h.in ${CMAKE_SOURCE_DI
|
||||
configure_file(${CMAKE_SOURCE_DIR}/maxscale.conf.in ${CMAKE_SOURCE_DIR}/maxscale.conf)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/etc/init.d/maxscale.in ${CMAKE_SOURCE_DIR}/etc/init.d/maxscale)
|
||||
|
||||
if(NOT MYSQL_DIR)
|
||||
find_path(MYSQL_DIR mysql.h PATH_SUFFIXES mysql mariadb)
|
||||
if(MYSQL_DIR-NOTFOUND)
|
||||
message(FATAL_ERROR "Fatal Error: MySQL headers were not found.")
|
||||
endif(MYSQL_DIR-NOTFOUND)
|
||||
endif()
|
||||
|
||||
if(NOT ERRMSG)
|
||||
find_file(ERRMSG errmsg.sys PATHS /usr/share/mysql /usr/local/share/mysql ${CUSTOM_ERRMSG} PATH_SUFFIXES english)
|
||||
if(ERRMSG-NOTFOUND)
|
||||
message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found.")
|
||||
endif(ERRMSG-NOTFOUND)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
|
||||
@ -45,28 +39,6 @@ if(GCOV)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov")
|
||||
endif()
|
||||
|
||||
if((NOT EMBEDDED_LIB) AND STATIC_EMBEDDED)
|
||||
|
||||
find_file(EMBEDDED_LIB libmysqld.a PATHS /usr/lib /usr/lib64 PATH_SUFFIXES mysql mariadb)
|
||||
|
||||
if(EMBEDDED_LIB-NOTFOUND)
|
||||
message(WARNING "Warning: Static library not found, looking for dynamic version")
|
||||
find_library(EMBEDDED_LIB mysqld PATHS /usr/lib /usr/lib64 PATH_SUFFIXES mysql mariadb)
|
||||
get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} REALPATH)
|
||||
endif()
|
||||
|
||||
elseif( NOT STATIC_EMBEDDED)
|
||||
|
||||
find_library(EMBEDDED_LIB mysqld PATHS /usr/lib /usr/lib64 PATH_SUFFIXES mysql mariadb)
|
||||
get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} REALPATH)
|
||||
|
||||
endif()
|
||||
|
||||
if(EMBEDDED_LIB-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()
|
||||
|
||||
include_directories(${MYSQL_DIR})
|
||||
include_directories(${MYSQL_DIR}/private)
|
||||
@ -115,9 +87,8 @@ install(FILES ${ERRMSG} DESTINATION mysql)
|
||||
install(FILES ${EMBEDDED_LIB} DESTINATION lib)
|
||||
install(FILES ${DOCS} DESTINATION Documentation)
|
||||
|
||||
set(CPACK_GENERATOR "RPM")
|
||||
set(CPACK_GENERATOR RPM DEB)
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MaxScale")
|
||||
set(CPACK_PACKAGE_NAME "MaxScale")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "${MAXSCALE_VERSION_MAJOR}")
|
||||
set(CPACK_PACKAGE_VERSION_MINOR "${MAXSCALE_VERSION_MINOR}")
|
||||
set(CPACK_PACKAGE_VERSION_PATCH "${MAXSCALE_VERSION_PATCH}")
|
||||
@ -127,6 +98,7 @@ set(CPACK_PACKAGE_NAME "maxscale")
|
||||
set(CPACK_PACKAGE_VENDOR "SkySQL Ab")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "x86_64")
|
||||
set(CPACK_RPM_SPEC_INSTALL_POST "/sbin/ldconfig")
|
||||
set(CPACK_RPM_PACKAGE_NAME "maxscale")
|
||||
set(CPACK_RPM_PACKAGE_VENDOR "SkySQL Ab")
|
||||
@ -139,11 +111,11 @@ set(CPACK_RPM_USER_FILELIST "%ignore /etc/ld.so.conf.d")
|
||||
set(CPACK_RPM_USER_FILELIST "%ignore /etc")
|
||||
include(CPack)
|
||||
|
||||
#add_test(PrepareTests ${CMAKE_COMMAND} -DBUILD_TESTS=Y -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DINSTALL_SYSTEM_FILES=N ${CMAKE_SOURCE_DIR})
|
||||
#add_test(PrepareTests ${CMAKE_COMMAND} -DDEPS_OK=Y -DBUILD_TESTS=Y -DBUILD_TYPE=Debug -DINSTALL_DIR=${CMAKE_BINARY_DIR} -DINSTALL_SYSTEM_FILES=N ${CMAKE_SOURCE_DIR})
|
||||
#set_tests_properties(PrepareTests PROPERTIES WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
#set_tests_properties(PrepareTests PROPERTIES COST 1000)
|
||||
#set_tests_properties(PrepareTests PROPERTIES COST 2000.0)
|
||||
|
||||
#add_test(BuildTests ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target install)
|
||||
#set_tests_properties(BuildTests PROPERTIES WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
#set_tests_properties(BuildTests PROPERTIES DEPENDS PrepareTests)
|
||||
#set_tests_properties(BuildTests PROPERTIES COST 900)
|
||||
#set_tests_properties(PrepareTests PROPERTIES COST 1999.0)
|
69
macros.cmake
69
macros.cmake
@ -38,7 +38,7 @@ macro(set_variables)
|
||||
set(TEST_PASSWORD "maxpwd" CACHE STRING "password of MaxScale user")
|
||||
|
||||
# Use static version of libmysqld
|
||||
set(STATIC_EMBEDDED FALSE CACHE BOOL "Use static version of libmysqld")
|
||||
set(STATIC_EMBEDDED TRUE CACHE BOOL "Use static version of libmysqld")
|
||||
|
||||
# Build RabbitMQ components
|
||||
set(BUILD_RABBITMQ FALSE CACHE BOOL "Build RabbitMQ components")
|
||||
@ -54,3 +54,70 @@ macro(set_variables)
|
||||
|
||||
|
||||
endmacro()
|
||||
|
||||
macro(check_deps)
|
||||
|
||||
# Check for libraries MaxScale depends on
|
||||
set(MAXSCALE_DEPS aio ssl crypt crypto z m dl rt pthread)
|
||||
foreach(LIB ${MAXSCALE_DEPS})
|
||||
find_library(LIB${LIB} ${LIB})
|
||||
if((DEFINED LIB${LIB}) AND (${LIB${LIB}} STREQUAL "LIB${LIB}-NOTFOUND"))
|
||||
set(DEPS_ERROR TRUE CACHE INTERNAL " ")
|
||||
set(FAILED_DEPS "${FAILED_DEPS} lib${LIB}" CACHE INTERNAL " ")
|
||||
endif()
|
||||
set(LIB${LIB} "" CACHE INTERNAL "library")
|
||||
endforeach()
|
||||
|
||||
if(DEPS_ERROR)
|
||||
message(FATAL_ERROR "Cannot find dependencies: ${FAILED_DEPS}")
|
||||
endif()
|
||||
|
||||
# Find the MySQL headers if they were not defined
|
||||
if(NOT ( DEFINED MYSQL_DIR ) )
|
||||
find_path(MYSQL_DIR mysql.h PATH_SUFFIXES mysql mariadb)
|
||||
if(${MYSQL_DIR} STREQUAL "MYSQL_DIR-NOTFOUND")
|
||||
message(FATAL_ERROR "Fatal Error: MySQL headers were not found.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Find the errmsg.sys file if it was not defied
|
||||
if( NOT ( DEFINED ERRMSG ) )
|
||||
find_file(ERRMSG errmsg.sys PATHS /usr/share/mysql /usr/local/share/mysql ${CUSTOM_ERRMSG} PATH_SUFFIXES english)
|
||||
if(${ERRMSG} STREQUAL "ERRMSG-NOTFOUND")
|
||||
message(FATAL_ERROR "Fatal Error: The errmsg.sys file was not found.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Find the embedded mysql library
|
||||
if( NOT ( DEFINED EMBEDDED_LIB ) )
|
||||
|
||||
if(STATIC_EMBEDDED)
|
||||
|
||||
find_file(EMBEDDED_LIB libmysqld.a PATHS /usr/lib /usr/lib64 PATH_SUFFIXES mysql mariadb)
|
||||
|
||||
if(${EMBEDDED_LIB} STREQUAL "EMBEDDED_LIB-NOTFOUND")
|
||||
|
||||
message(WARNING "Warning: Static library not found, looking for dynamic version")
|
||||
find_library(EMBEDDED_LIB mysqld PATHS /usr/lib /usr/lib64 PATH_SUFFIXES mysql mariadb)
|
||||
|
||||
endif()
|
||||
else()
|
||||
|
||||
find_library(EMBEDDED_LIB mysqld PATHS /usr/lib /usr/lib64 PATH_SUFFIXES mysql mariadb)
|
||||
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
# Inform the user about the embedded library
|
||||
if(${EMBEDDED_LIB} STREQUAL "EMBEDDED_LIB-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()
|
||||
get_filename_component(EMBEDDED_LIB ${EMBEDDED_LIB} REALPATH)
|
||||
message(STATUS "Using embedded library: ${EMBEDDED_LIB}")
|
||||
endif()
|
||||
|
||||
set(DEPS_OK TRUE)
|
||||
|
||||
endmacro()
|
@ -1,6 +1,6 @@
|
||||
file(COPY ${ERRMSG} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||
add_executable(canonizer canonizer.c)
|
||||
target_link_libraries(canonizer pthread query_classifier z dl ssl aio crypt crypto rt m ${EMBEDDED_LIB} fullcore)
|
||||
target_link_libraries(canonizer pthread query_classifier z dl ssl aio crypt crypto rt m ${EMBEDDED_LIB} fullcore stdc++)
|
||||
add_test(NAME TestCanonicalQuery COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/canontest.sh
|
||||
$<TARGET_FILE:canonizer>
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/input.sql
|
||||
|
@ -1,10 +1,6 @@
|
||||
cmake_minimum_required (VERSION 2.8)
|
||||
|
||||
project (consumer)
|
||||
|
||||
find_library(MYSQL_CLIENT_LIB NAMES mysqlclient PATHS /usr/lib /usr/lib64 PATH_SUFFIXES mysql mariadb)
|
||||
|
||||
if( ( RABBITMQ_LIB AND RABBITMQ_HEADERS ) AND MYSQL_CLIENT_LIB )
|
||||
if( ( RABBITMQ_LIB AND RABBITMQ_HEADERS ) AND ( NOT ( ${MYSQL_CLIENT_LIB} STREQUAL "MYSQL_CLIENT_LIB-NOTFOUND" ) ) )
|
||||
|
||||
add_executable (consumer consumer.c)
|
||||
target_link_libraries(consumer ${MYSQL_CLIENT_LIB} rabbitmq inih)
|
||||
@ -17,15 +13,3 @@ else()
|
||||
message(FATAL_ERROR "Error: Can not find requred libraries and headers: librabbitmq libmysqlclient")
|
||||
|
||||
endif()
|
||||
|
||||
# Packaging of RabbitMQ disabled for now
|
||||
|
||||
#set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "RabbitMQ Consumer Client")
|
||||
#set(CPACK_PACKAGE_NAME "RabbitMQ Consumer")
|
||||
#set(CPACK_GENERATOR "RPM")
|
||||
#set(CPACK_PACKAGE_VERSION_MAJOR "1")
|
||||
#set(CPACK_PACKAGE_VERSION_MINOR "0")
|
||||
#set(CPACK_RPM_PACKAGE_NAME "rabbitmq-consumer")
|
||||
#set(CPACK_RPM_PACKAGE_VENDOR "SkySQL Ab")
|
||||
#set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")
|
||||
#include(CPack)
|
@ -6,7 +6,7 @@ add_executable(maxscale atomic.c buffer.c spinlock.c gateway.c
|
||||
gw_utils.c utils.c dcb.c load_utils.c session.c service.c server.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 housekeeper.c)
|
||||
target_link_libraries(maxscale utils log_manager ssl aio pthread crypt dl ${EMBEDDED_LIB} crypto inih z rt m)
|
||||
target_link_libraries(maxscale utils log_manager ssl aio pthread crypt dl ${EMBEDDED_LIB} crypto inih z rt m stdc++)
|
||||
install(TARGETS maxscale DESTINATION bin)
|
||||
|
||||
add_executable(maxkeys maxkeys.c secrets.c utils.c)
|
||||
|
@ -5,4 +5,4 @@ set_tests_properties(RunExecutable PROPERTIES TIMEOUT 5)
|
||||
set_tests_properties(RunExecutable PROPERTIES WILL_FAIL TRUE)
|
||||
|
||||
add_test(NAME KillExecutable COMMAND killall -KILL maxscale)
|
||||
set_tests_properties(KillExecutable PROPERTIES COST 100000)
|
||||
set_tests_properties(KillExecutable PROPERTIES DEPENDS StackHintTest )
|
||||
|
Loading…
x
Reference in New Issue
Block a user