You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

372 lines
12 KiB

19 years ago
16 years ago
  1. # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
  2. #
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; version 2 of the License.
  6. #
  7. # This program is distributed in the hope that it will be useful,
  8. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. # GNU General Public License for more details.
  11. #
  12. # You should have received a copy of the GNU General Public License
  13. # along with this program; if not, write to the Free Software
  14. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  15. # Build comp_sql - used for embedding SQL in C or C++ programs
  16. IF(NOT CMAKE_CROSSCOMPILING)
  17. ADD_EXECUTABLE(comp_sql comp_sql.c)
  18. TARGET_LINK_LIBRARIES(comp_sql)
  19. ENDIF()
  20. # Build mysql_fix_privilege_tables.sql (concatenate 2 sql scripts)
  21. IF(NOT WIN32 OR CMAKE_CROSSCOMPILING)
  22. FIND_PROGRAM(CAT_EXECUTABLE cat DOC "path to the executable")
  23. MARK_AS_ADVANCED(CAT_EXECUTABLE)
  24. ENDIF()
  25. IF(CAT_EXECUTABLE)
  26. SET(CAT_COMMAND COMMAND
  27. ${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_SOURCE_DIR}
  28. ${CAT_EXECUTABLE} mysql_system_tables.sql mysql_system_tables_fix.sql >
  29. ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables.sql
  30. )
  31. ELSEIF(WIN32)
  32. FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables.sql
  33. native_outfile )
  34. SET(CAT_COMMAND
  35. COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_SOURCE_DIR}
  36. cmd /c copy /b mysql_system_tables.sql + mysql_system_tables_fix.sql
  37. ${native_outfile} )
  38. ELSE()
  39. MESSAGE(FATAL_ERROR "Cannot concatenate files")
  40. ENDIF()
  41. # Build mysql_fix_privilege_tables.c
  42. ADD_CUSTOM_COMMAND(
  43. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables_sql.c
  44. ${CAT_COMMAND}
  45. COMMAND comp_sql
  46. mysql_fix_privilege_tables
  47. mysql_fix_privilege_tables.sql
  48. mysql_fix_privilege_tables_sql.c
  49. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  50. DEPENDS comp_sql
  51. ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql
  52. ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_fix.sql
  53. )
  54. # Add target for the above to be built
  55. ADD_CUSTOM_TARGET(GenFixPrivs
  56. ALL
  57. DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables_sql.c
  58. )
  59. IF(UNIX)
  60. FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution
  61. "cd ${CMAKE_BINARY_DIR} && '${CMAKE_CPACK_COMMAND}' -G TGZ --config CPackConfig.cmake" )
  62. EXECUTE_PROCESS(
  63. COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution
  64. )
  65. ENDIF()
  66. INSTALL(FILES
  67. ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql
  68. ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_data.sql
  69. ${CMAKE_CURRENT_SOURCE_DIR}/fill_help_tables.sql
  70. ${CMAKE_CURRENT_SOURCE_DIR}/mysql_test_data_timezone.sql
  71. ${FIX_PRIVILEGES_SQL}
  72. DESTINATION ${INSTALL_MYSQLSHAREDIR} COMPONENT Server
  73. )
  74. # TCMalloc hacks
  75. IF(MALLOC_LIB)
  76. MESSAGE("Using tcmalloc '${MALLOC_LIB}'")
  77. INSTALL(FILES ${MALLOC_LIB} DESTINATION ${INSTALL_LIBDIR} OPTIONAL)
  78. ENDIF()
  79. IF(CMAKE_GENERATOR MATCHES "Makefiles")
  80. # Strip maintainer mode options if necessary
  81. STRING(REPLACE "${MY_MAINTAINER_C_WARNINGS}" "" CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
  82. STRING(REPLACE "${MY_MAINTAINER_CXX_WARNINGS}" "" CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
  83. FOREACH(ARCH ${CMAKE_OSX_ARCHITECTURES})
  84. SET(CFLAGS "${CFLAGS} -arch ${ARCH}")
  85. SET(CXXFLAGS "${CXXFLAGS} -arch ${ARCH}")
  86. ENDFOREACH()
  87. ELSE()
  88. # Strip maintainer mode options if necessary
  89. STRING(REPLACE "${MY_MAINTAINER_C_WARNINGS}" "" CFLAGS "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
  90. STRING(REPLACE "${MY_MAINTAINER_CXX_WARNINGS}" "" CXXFLAGS "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
  91. ENDIF()
  92. IF(UNIX)
  93. # FIND_PROC and CHECK_PID are used by mysqld_safe
  94. IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  95. SET (FIND_PROC
  96. "ps wwwp $PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" > /dev/null")
  97. ENDIF()
  98. IF(NOT FIND_PROC AND CMAKE_SYSTEM_NAME MATCHES "SunOS")
  99. SET (FIND_PROC
  100. "ps -p $PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" > /dev/null")
  101. ENDIF()
  102. IF(NOT FIND_PROC)
  103. # BSD style
  104. EXECUTE_PROCESS(COMMAND ps -uaxww OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result)
  105. IF(result MATCHES 0)
  106. SET( FIND_PROC
  107. "ps -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" | grep \" $PID \" > /dev/null")
  108. ENDIF()
  109. ENDIF()
  110. IF(NOT FIND_PROC)
  111. # SysV style
  112. EXECUTE_PROCESS(COMMAND ps -ef OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result)
  113. IF(result MATCHES 0)
  114. SET( FIND_PROC "ps -ef | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" | grep \" $PID \" > /dev/null")
  115. ENDIF()
  116. ENDIF()
  117. EXECUTE_PROCESS(COMMAND sh -c "kill -0 $$" OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result)
  118. IF(result MATCHES 0)
  119. SET(CHECK_PID "kill -0 $PID > /dev/null 2> /dev/null")
  120. ELSE()
  121. SET(CHECK_PID "kill -s SIGCONT $PID > /dev/null 2> /dev/null")
  122. ENDIF()
  123. SET(HOSTNAME "hostname")
  124. SET(MYSQLD_USER "mysql")
  125. # Required for mysqlbug until autotools are deprecated, once done remove these
  126. # and expand default cmake variables
  127. SET(CC ${CMAKE_C_COMPILER})
  128. SET(CXX ${CMAKE_CXX_COMPILER})
  129. SET(SAVE_CC ${CMAKE_C_COMPILER})
  130. SET(SAVE_CXX ${CMAKE_CXX_COMPILER})
  131. SET(SAVE_CFLAGS ${CFLAGS})
  132. SET(SAVE_CXXFLAGS ${CXXFLAGS})
  133. # XXX no cmake equivalent for this, just make one up
  134. SET(CONFIGURE_LINE "Built using CMake")
  135. # Also required for mysqlbug, autoconf only supports --version so for now we
  136. # just explicitly require GNU
  137. IF(CMAKE_COMPILER_IS_GNUCC)
  138. EXECUTE_PROCESS(
  139. COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} --version
  140. COMMAND sed 1q
  141. OUTPUT_VARIABLE CC_VERSION)
  142. ELSE()
  143. SET(CC_VERSION "")
  144. ENDIF()
  145. IF(CMAKE_COMPILER_IS_GNUCXX)
  146. EXECUTE_PROCESS(
  147. COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} --version
  148. COMMAND sed 1q
  149. OUTPUT_VARIABLE CXX_VERSION)
  150. ELSE()
  151. SET(CXX_VERSION "")
  152. ENDIF()
  153. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysqlbug.sh
  154. ${CMAKE_CURRENT_BINARY_DIR}/mysqlbug ESCAPE_QUOTES @ONLY)
  155. INSTALL_SCRIPT(${CMAKE_CURRENT_BINARY_DIR}/mysqlbug
  156. DESTINATION ${INSTALL_BINDIR}
  157. COMPONENT Server
  158. )
  159. ENDIF(UNIX)
  160. # Really ugly, one script, "mysql_install_db", needs prefix set to ".",
  161. # i.e. makes access relative the current directory. This matches
  162. # the documentation, so better not change this.
  163. IF(INSTALL_LAYOUT MATCHES "STANDALONE")
  164. SET(prefix ".")
  165. ELSE()
  166. SET(prefix "${CMAKE_INSTALL_PREFIX}")
  167. ENDIF()
  168. SET(bindir ${prefix}/${INSTALL_BINDIR})
  169. SET(sbindir ${prefix}/${INSTALL_SBINDIR})
  170. SET(scriptdir ${prefix}/${INSTALL_BINDIR})
  171. SET(libexecdir ${prefix}/${INSTALL_SBINDIR})
  172. SET(pkgdatadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
  173. IF(INSTALL_LAYOUT MATCHES "STANDALONE")
  174. SET(localstatedir ${prefix}/data)
  175. ELSE()
  176. SET(localstatedir ${MYSQL_DATADIR})
  177. ENDIF()
  178. IF(UNIX)
  179. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_install_db.sh
  180. ${CMAKE_CURRENT_BINARY_DIR}/mysql_install_db ESCAPE_QUOTES @ONLY)
  181. SET(DEST ${INSTALL_SCRIPTDIR})
  182. SET(EXT)
  183. ELSE()
  184. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_install_db.pl.in
  185. ${CMAKE_CURRENT_BINARY_DIR}/mysql_install_db.pl ESCAPE_QUOTES @ONLY)
  186. SET(DEST ${INSTALL_SCRIPTDIR})
  187. SET(EXT ".pl")
  188. ENDIF()
  189. INSTALL_SCRIPT(
  190. "${CMAKE_CURRENT_BINARY_DIR}/mysql_install_db${EXT}"
  191. DESTINATION ${DEST}
  192. COMPONENT Server
  193. )
  194. SET(prefix "${CMAKE_INSTALL_PREFIX}")
  195. SET(sysconfdir ${prefix})
  196. SET(bindir ${prefix}/${INSTALL_BINDIR})
  197. SET(libexecdir ${prefix}/${INSTALL_SBINDIR})
  198. SET(scriptdir ${prefix}/${INSTALL_BINDIR})
  199. SET(datadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
  200. SET(pkgdatadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
  201. SET(pkgincludedir ${prefix}/${INSTALL_INCLUDEDIR})
  202. SET(pkglibdir ${prefix}/${INSTALL_LIBDIR})
  203. SET(pkgplugindir ${prefix}/${INSTALL_PLUGINDIR})
  204. SET(localstatedir ${MYSQL_DATADIR})
  205. # some scripts use @TARGET_LINUX@
  206. IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  207. SET(TARGET_LINUX "true")
  208. ELSE()
  209. SET(TARGET_LINUX "false")
  210. ENDIF()
  211. # Use cmake variables to inspect dependencies for
  212. # mysqlclient library (add -l stuff)
  213. SET(CLIENT_LIBS "")
  214. SET(LIBS "")
  215. # Avoid compatibility warning about lists with empty elements
  216. IF(POLICY CMP0011)
  217. CMAKE_POLICY(SET CMP0011 NEW)
  218. ENDIF()
  219. IF(POLICY CMP0007)
  220. CMAKE_POLICY(SET CMP0007 OLD)
  221. ENDIF()
  222. # Extract dependencies using CMake's internal ${target}_LIB_DEPENDS variable
  223. # returned string in ${var} is can be passed to linker's command line
  224. MACRO(EXTRACT_LINK_LIBRARIES target var)
  225. IF(${target}_LIB_DEPENDS)
  226. LIST(REMOVE_ITEM ${target}_LIB_DEPENDS "")
  227. LIST(REMOVE_DUPLICATES ${target}_LIB_DEPENDS)
  228. FOREACH(lib ${${target}_LIB_DEPENDS})
  229. # Filter out "general", it is not a library, just CMake hint
  230. # Also, remove duplicates
  231. IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
  232. IF (lib MATCHES "^\\-l")
  233. SET(${var} "${${var}} ${lib} ")
  234. ELSEIF(lib MATCHES "^/")
  235. # Full path, convert to just filename, strip "lib" prefix and extension
  236. GET_FILENAME_COMPONENT(lib "${lib}" NAME_WE)
  237. STRING(REGEX REPLACE "^lib" "" lib "${lib}")
  238. SET(${var} "${${var}}-l${lib} " )
  239. ELSE()
  240. SET(${var} "${${var}}-l${lib} " )
  241. ENDIF()
  242. ENDIF()
  243. ENDFOREACH()
  244. ENDIF()
  245. IF(MSVC)
  246. STRING(REPLACE "-l" "" ${var} "${${var}}")
  247. ENDIF()
  248. ENDMACRO()
  249. EXTRACT_LINK_LIBRARIES(mysqlclient CLIENT_LIBS)
  250. EXTRACT_LINK_LIBRARIES(mysqlserver LIBS)
  251. # mysql_config evaluates ${LIBDL}, we want to avoid it
  252. # as our CLIENT_LIBS and LIBS are already correct
  253. SET(LIBDL)
  254. SET(NON_THREADED_LIBS ${CLIENT_LIBS})
  255. SET(mysql_config_COMPONENT COMPONENT Development)
  256. IF(WIN32)
  257. # On Windows, some .sh and some .pl.in files are configured
  258. # The resulting files will have .pl extension (those are perl scripts)
  259. # Input files with pl.in extension
  260. SET(PLIN_FILES mysql_config mysql_secure_installation)
  261. # Input files with .sh extension
  262. SET(SH_FILES mysql_convert_table_format mysqld_multi mysqldumpslow
  263. mysqlhotcopy)
  264. FOREACH(file ${PLIN_FILES})
  265. IF(NOT ${file}_COMPONENT)
  266. SET(${file}_COMPONENT Server_Scripts)
  267. ENDIF()
  268. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.pl.in
  269. ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl ESCAPE_QUOTES @ONLY)
  270. INSTALL_SCRIPT(${CMAKE_CURRENT_BINARY_DIR}/${file}.pl COMPONENT ${${file}_COMPONENT})
  271. ENDFOREACH()
  272. FOREACH(file ${SH_FILES})
  273. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh
  274. ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl ESCAPE_QUOTES @ONLY)
  275. INSTALL_SCRIPT(${CMAKE_CURRENT_BINARY_DIR}/${file}.pl COMPONENT Server_Scripts)
  276. ENDFOREACH()
  277. ELSE()
  278. # On Unix, most of the files end up in the bin directory
  279. SET(mysql_config_COMPONENT COMPONENT Development)
  280. SET(BIN_SCRIPTS
  281. msql2mysql
  282. mysql_config
  283. mysql_fix_extensions
  284. mysql_setpermission
  285. mysql_secure_installation
  286. mysql_zap
  287. mysqlaccess
  288. mysqlaccess.conf
  289. mysql_convert_table_format
  290. mysql_find_rows
  291. mysqlhotcopy
  292. mysqldumpslow
  293. mysqld_multi
  294. mysqld_safe
  295. )
  296. FOREACH(file ${BIN_SCRIPTS})
  297. IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh)
  298. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh
  299. ${CMAKE_CURRENT_BINARY_DIR}/${file} ESCAPE_QUOTES @ONLY)
  300. ELSEIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file})
  301. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}
  302. ${CMAKE_CURRENT_BINARY_DIR}/${file} COPYONLY)
  303. ELSE()
  304. MESSAGE(FATAL_ERROR "Can not find ${file}.sh or ${file} in "
  305. "${CMAKE_CURRENT_SOURCE_DIR}" )
  306. ENDIF()
  307. EXECUTE_PROCESS(COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/${file})
  308. IF(NOT ${file}_COMPONENT)
  309. SET(${file}_COMPONENT Server)
  310. ENDIF()
  311. INSTALL_SCRIPT(
  312. ${CMAKE_CURRENT_BINARY_DIR}/${file}
  313. DESTINATION ${INSTALL_BINDIR}
  314. COMPONENT ${${file}_COMPONENT}
  315. )
  316. ENDFOREACH()
  317. ENDIF()
  318. # Install libgcc as mylibgcc.a
  319. IF(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_FLAGS MATCHES "-static")
  320. EXECUTE_PROCESS (
  321. COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}
  322. ${CMAKE_CXX_FLAGS} --print-libgcc
  323. OUTPUT_VARIABLE LIBGCC_LOCATION
  324. RESULT_VARIABLE RESULT
  325. OUTPUT_STRIP_TRAILING_WHITESPACE
  326. ERROR_QUIET
  327. )
  328. IF(${RESULT} EQUAL 0 AND EXISTS ${LIBGCC_LOCATION})
  329. INSTALL(FILES "${LIBGCC_LOCATION}" DESTINATION ${INSTALL_LIBDIR}
  330. COMPONENT Development)
  331. ENDIF()
  332. ENDIF()