1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../TangoCMakeModules)
include(GNUInstallDirs)
find_package(MySQL REQUIRED OPTIONAL_COMPONENTS exe)
find_package(Tango REQUIRED)
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT CMAKE_BUILD_TYPE AND NOT IS_MULTI_CONFIG)
message(STATUS "No build type specified - default is DEBUG")
set(CMAKE_BUILD_TYPE DEBUG)
endif()
option(BUILD_TESTING "Build tests" OFF)
include(CTest)
if (BUILD_TESTING AND WIN32)
message(WARNING "BUILD_TESTING not supported on Windows. Forcing OFF")
set(BUILD_TESTING OFF)
endif()
option(TDB_DATABASE_SCHEMA "Create the tango database schema" OFF)
if (TDB_DATABASE_SCHEMA AND WIN32)
message(WARNING "TDB_DATABASE_SCHEMA not supported on Windows. Forcing OFF")
set(TDB_DATABASE_SCHEMA OFF)
endif()
set(MYSQL_ADMIN "" CACHE STRING "Database user")
set(MYSQL_ADMIN_PASSWD "" CACHE STRING "Database user password")
set(MYSQL_HOST "localhost" CACHE STRING "Database server host")
if(BUILD_TESTING)
set(TANGO_DB_NAME tango_database_ci CACHE STRING "Name of the tango database" FORCE)
message(STATUS "Forcing TANGO_DB_NAME to ${TANGO_DB_NAME} for testing")
else()
set(TANGO_DB_NAME tango CACHE STRING "Name of the tango database")
endif()
if(NOT MYSQL)
if(MySQL_exe_FOUND)
message(STATUS "No MySQL client program specified using -DMYSQL - default is ${MySQL_EXECUTABLE}")
set(MYSQL ${MySQL_EXECUTABLE})
else()
message(STATUS "No MySQL client program specified using -DMYSQL and we could not find one.\nDatabase schema creation will not possible.")
set(TDB_DATABASE_SCHEMA FALSE)
endif()
endif()
if(BUILD_TESTING AND (NOT MYSQL_ADMIN OR NOT MYSQL_ADMIN_PASSWD))
message(FATAL_ERROR "For building and running the tests you have to supply both MYSQL_ADMIN and MYSQL_ADMIN_PASSWD.")
endif()
option(TDB_ENABLE_COVERAGE "Instrument code for coverage analysis" OFF)
if(TDB_ENABLE_COVERAGE AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang"))
message(WARNING "TDB_ENABLE_COVERAGE is not supported for selected compiler ${CMAKE_CXX_COMPILER_ID}. Forcing OFF")
set(TDB_ENABLE_COVERAGE OFF)
endif()
set(DB_SCRIPTS create_db.sql
create_db_tables.sql
migrate_db_tables_innodb.sql
my.cnf
rem_history.sql
stored_proc.sql
update_db_from_5_to_9.3.4.sql
update_db_from_6_to_9.3.4.sql
update_db_from_7_to_9.3.4.sql
update_db_from_8_to_9.3.4.sql
update_db_from_9.2.5_to_9.3.4.sql
update_db_from_5.23_to_5.24.sql
update_db.sql)
if (NOT WIN32)
set(DB_SCRIPTS ${DB_SCRIPTS} create_db.sh update_db.sh)
endif()
foreach(DB_SCRIPT_FILE ${DB_SCRIPTS})
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DB_SCRIPT_FILE}.in)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${DB_SCRIPT_FILE}.in
${CMAKE_CURRENT_BINARY_DIR}/${DB_SCRIPT_FILE})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DB_SCRIPT_FILE}
DESTINATION "${CMAKE_INSTALL_DATADIR}/tango/db")
endif()
endforeach(DB_SCRIPT_FILE)
if (WIN32)
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/create_db.bat
${CMAKE_CURRENT_SOURCE_DIR}/update_db.bat
DESTINATION
"${CMAKE_INSTALL_DATADIR}/tango/db")
endif()
if(MYSQL)
execute_process(COMMAND ${MYSQL} "--execute=SELECT * FROM ENGINES;" --user=${MYSQL_ADMIN} --password=${MYSQL_ADMIN_PASSWD} --host=${MYSQL_HOST} information_schema
RESULT_VARIABLE DB_CONNECTION_RESULT
OUTPUT_VARIABLE DB_CONNECTION_CHECK_OUTPUT
ERROR_VARIABLE DB_CONNECTION_CHECK_ERROR)
if(NOT DB_CONNECTION_RESULT EQUAL 0)
message(WARNING "DB Connection check failed with: ${DB_CONNECTION_CHECK_ERROR}")
else()
message(STATUS "DB Connection check was successfull")
endif()
execute_process(COMMAND ${MYSQL} "--execute=SELECT VERSION();" --user=${MYSQL_ADMIN} --password=${MYSQL_ADMIN_PASSWD} --host=${MYSQL_HOST} information_schema
RESULT_VARIABLE DB_VERSION_RESULT
OUTPUT_VARIABLE DB_VERSION_CHECK_OUTPUT
ERROR_VARIABLE DB_VERSION_CHECK_ERROR)
if(NOT DB_VERSION_RESULT EQUAL 0)
message(WARNING "DB version check failed with: ${DB_VERSION_CHECK_ERROR}")
else()
message(STATUS "DB version check was successfull")
endif()
if(TDB_DATABASE_SCHEMA)
execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/create_db.sh
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
RESULT_VARIABLE DB_CREATE_SCHEMA_RESULT
OUTPUT_VARIABLE DB_CREATE_SCHEMA_OUTPUT
ERROR_VARIABLE DB_CREATE_SCHEMA_ERROR)
if(NOT DB_CREATE_SCHEMA_RESULT EQUAL 0)
message(FATAL_ERROR "DB schema creation failed with: ${DB_CREATE_SCHEMA_ERROR}")
else()
message(STATUS "DB schema creation was successfull.")
endif()
endif()
else()
set(DB_CONNECTION_RESULT 1)
set(DB_VERSION_RESULT 1)
endif()
# From https://stackoverflow.com/a/41773727
function(invert varName varValue)
if(${varValue})
set(${varName} FALSE PARENT_SCOPE)
else()
set(${varName} TRUE PARENT_SCOPE)
endif()
endfunction()
invert("DB_CONNECTION_RESULT" ${DB_CONNECTION_RESULT})
set(TDB_DB_CONNECTION_RESULT ${DB_CONNECTION_RESULT} CACHE INTERNAL "Result of the database connection test")
if(DB_VERSION_RESULT EQUAL 0)
string(REPLACE "VERSION()" "" DB_VERSION_CHECK_OUTPUT ${DB_VERSION_CHECK_OUTPUT})
string(STRIP ${DB_VERSION_CHECK_OUTPUT} DB_VERSION_CHECK_OUTPUT)
set(TDB_DB_VERSION ${DB_VERSION_CHECK_OUTPUT} CACHE INTERNAL "Database server version")
else()
set(TDB_DB_VERSION "unknown" CACHE INTERNAL "Database server version")
endif()
|