Added dependency checks, Debian packaging and fixes to various parts of the CMake build files.

This commit is contained in:
Markus Makela 2014-09-16 15:02:43 +03:00
parent 41226692ac
commit 0f5cfdbd1a
6 changed files with 86 additions and 63 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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 )