File: CMakeLists.txt

package info (click to toggle)
tango 10.0.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 89,484 kB
  • sloc: cpp: 201,245; sh: 1,645; python: 953; java: 800; perl: 467; javascript: 447; xml: 325; makefile: 269; sql: 72; ruby: 24
file content (153 lines) | stat: -rw-r--r-- 5,745 bytes parent folder | download | duplicates (2)
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()