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.

317 lines
12 KiB

7 years ago
  1. IF(RPM)
  2. SET(CPACK_GENERATOR "RPM")
  3. SET(CPACK_RPM_PACKAGE_DEBUG 1)
  4. SET(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
  5. CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)
  6. SET(CPACK_RPM_COMPONENT_INSTALL ON)
  7. SET(CPACK_COMPONENT_SERVER_GROUP "server")
  8. SET(CPACK_COMPONENT_MANPAGESSERVER_GROUP "server")
  9. SET(CPACK_COMPONENT_INIFILES_GROUP "server")
  10. SET(CPACK_COMPONENT_SERVER_SCRIPTS_GROUP "server")
  11. SET(CPACK_COMPONENT_SUPPORTFILES_GROUP "server")
  12. SET(CPACK_COMPONENT_DEVELOPMENT_GROUP "devel")
  13. SET(CPACK_COMPONENT_MANPAGESDEVELOPMENT_GROUP "devel")
  14. SET(CPACK_COMPONENT_TEST_GROUP "test")
  15. SET(CPACK_COMPONENT_MANPAGESTEST_GROUP "test")
  16. SET(CPACK_COMPONENT_CLIENT_GROUP "client")
  17. SET(CPACK_COMPONENT_MANPAGESCLIENT_GROUP "client")
  18. SET(CPACK_COMPONENT_README_GROUP "server")
  19. SET(CPACK_COMPONENT_SHAREDLIBRARIES_GROUP "shared")
  20. SET(CPACK_COMPONENT_COMMON_GROUP "common")
  21. SET(CPACK_COMPONENT_CLIENTPLUGINS_GROUP "common")
  22. SET(CPACK_COMPONENT_COMPAT_GROUP "compat")
  23. SET(CPACK_COMPONENT_BACKUP_GROUP "backup")
  24. SET(CPACK_COMPONENTS_ALL Server ManPagesServer IniFiles Server_Scripts
  25. SupportFiles Development ManPagesDevelopment
  26. ManPagesTest Readme ManPagesClient Test
  27. Common Client SharedLibraries ClientPlugins
  28. backup
  29. )
  30. SET(CPACK_RPM_PACKAGE_NAME ${CPACK_PACKAGE_NAME})
  31. SET(CPACK_RPM_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
  32. IF(CMAKE_VERSION VERSION_LESS "3.6.0")
  33. SET(CPACK_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${RPM}-${CMAKE_SYSTEM_PROCESSOR}")
  34. ELSE()
  35. SET(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
  36. OPTION(CPACK_RPM_DEBUGINFO_PACKAGE "" ON)
  37. MARK_AS_ADVANCED(CPACK_RPM_DEBUGINFO_PACKAGE)
  38. SET(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX "/usr/src/debug/${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}")
  39. ENDIF()
  40. SET(CPACK_RPM_PACKAGE_RELEASE "1%{?dist}")
  41. SET(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
  42. SET(CPACK_RPM_PACKAGE_RELOCATABLE FALSE)
  43. SET(CPACK_PACKAGE_RELOCATABLE FALSE)
  44. SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
  45. SET(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_URL})
  46. SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}")
  47. SET(CPACK_RPM_shared_PACKAGE_VENDOR "MariaDB Corporation Ab")
  48. SET(CPACK_RPM_shared_PACKAGE_LICENSE "LGPLv2.1")
  49. SET(CPACK_RPM_shared_PACKAGE_SUMMARY "LGPL MariaDB client library")
  50. SET(CPACK_RPM_shared_PACKAGE_DESCRIPTION "
  51. This is LGPL MariaDB client library that can be used to connect to MySQL
  52. or MariaDB.
  53. This code is based on the LGPL libmysql client library from MySQL 3.23
  54. and PHP's mysqlnd extension.
  55. This product includes PHP software, freely available from
  56. <http://www.php.net/software/>
  57. ")
  58. SET(CPACK_RPM_SPEC_MORE_DEFINE "
  59. %define mysql_vendor ${CPACK_PACKAGE_VENDOR}
  60. %define mysqlversion ${MYSQL_NO_DASH_VERSION}
  61. %define mysqlbasedir ${CMAKE_INSTALL_PREFIX}
  62. %define mysqldatadir ${INSTALL_MYSQLDATADIR}
  63. %define mysqld_user mysql
  64. %define mysqld_group mysql
  65. %define _bindir ${INSTALL_BINDIRABS}
  66. %define _sbindir ${INSTALL_SBINDIRABS}
  67. %define _sysconfdir ${INSTALL_SYSCONFDIR}
  68. %define restart_flag_dir %{_localstatedir}/lib/rpm-state/mariadb
  69. %define restart_flag %{restart_flag_dir}/need-restart
  70. %{?filter_setup:
  71. %filter_provides_in \\\\.\\\\(test\\\\|result\\\\|h\\\\|cc\\\\|c\\\\|inc\\\\|opt\\\\|ic\\\\|cnf\\\\|rdiff\\\\|cpp\\\\)$
  72. %filter_requires_in \\\\.\\\\(test\\\\|result\\\\|h\\\\|cc\\\\|c\\\\|inc\\\\|opt\\\\|ic\\\\|cnf\\\\|rdiff\\\\|cpp\\\\)$
  73. %filter_from_provides /perl(\\\\(mtr\\\\|My::\\\\)/d
  74. %filter_from_requires /\\\\(lib\\\\(ft\\\\|lzma\\\\|tokuportability\\\\)\\\\)\\\\|\\\\(perl(\\\\(.*mtr\\\\|My::\\\\|.*HandlerSocket\\\\|Mysql\\\\)\\\\)/d
  75. %filter_setup
  76. }
  77. ")
  78. # this creative hack is described here: http://www.cmake.org/pipermail/cmake/2012-January/048416.html
  79. # both /etc and /etc/init.d should be ignored as of 2.8.7
  80. # only /etc/init.d as of 2.8.8
  81. # and eventually this hack should go away completely
  82. SET(CPACK_RPM_SPEC_MORE_DEFINE "${CPACK_RPM_SPEC_MORE_DEFINE}
  83. %define ignore \#
  84. ")
  85. SET(CPACK_RPM_PACKAGE_REQUIRES "MariaDB-common")
  86. SET(ignored
  87. "%ignore /etc"
  88. "%ignore /etc/init.d"
  89. "%ignore /etc/logrotate.d"
  90. "%ignore /etc/security"
  91. "%ignore /etc/systemd"
  92. "%ignore /etc/systemd/system"
  93. "%ignore /lib"
  94. "%ignore /lib/security"
  95. "%ignore /lib64"
  96. "%ignore /lib64/security"
  97. "%ignore ${CMAKE_INSTALL_PREFIX}"
  98. "%ignore ${CMAKE_INSTALL_PREFIX}/bin"
  99. "%ignore ${CMAKE_INSTALL_PREFIX}/include"
  100. "%ignore ${CMAKE_INSTALL_PREFIX}/lib"
  101. "%ignore ${CMAKE_INSTALL_PREFIX}/lib/systemd"
  102. "%ignore ${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
  103. "%ignore ${CMAKE_INSTALL_PREFIX}/lib/tmpfiles.d"
  104. "%ignore ${CMAKE_INSTALL_PREFIX}/lib/sysusers.d"
  105. "%ignore ${CMAKE_INSTALL_PREFIX}/lib64"
  106. "%ignore ${CMAKE_INSTALL_PREFIX}/lib64/pkgconfig"
  107. "%ignore ${CMAKE_INSTALL_PREFIX}/sbin"
  108. "%ignore ${CMAKE_INSTALL_PREFIX}/share"
  109. "%ignore ${CMAKE_INSTALL_PREFIX}/share/aclocal"
  110. "%ignore ${CMAKE_INSTALL_PREFIX}/share/doc"
  111. "%ignore ${CMAKE_INSTALL_PREFIX}/share/man"
  112. "%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1"
  113. "%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8"
  114. "%ignore ${CMAKE_INSTALL_PREFIX}/share/pkgconfig"
  115. )
  116. SET(CPACK_RPM_server_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
  117. SET(CPACK_RPM_common_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONFDIR}/my.cnf")
  118. SET(CPACK_RPM_shared_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
  119. SET(CPACK_RPM_client_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
  120. SET(CPACK_RPM_compat_USER_FILELIST ${ignored})
  121. SET(CPACK_RPM_devel_USER_FILELIST ${ignored})
  122. SET(CPACK_RPM_test_USER_FILELIST ${ignored})
  123. SET(CPACK_RPM_backup_USER_FILELIST ${ignored})
  124. # "set/append array" - append a set of strings, separated by a space
  125. MACRO(SETA var)
  126. FOREACH(v ${ARGN})
  127. SET(${var} "${${var}} ${v}")
  128. ENDFOREACH()
  129. ENDMACRO(SETA)
  130. SETA(CPACK_RPM_client_PACKAGE_OBSOLETES
  131. "mysql-client"
  132. "MySQL-client")
  133. SETA(CPACK_RPM_client_PACKAGE_PROVIDES
  134. "MySQL-client"
  135. "mysql-client")
  136. SETA(CPACK_RPM_devel_PACKAGE_OBSOLETES
  137. "MySQL-devel")
  138. SETA(CPACK_RPM_devel_PACKAGE_PROVIDES
  139. "MySQL-devel")
  140. SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
  141. "MariaDB"
  142. "MySQL"
  143. "mysql-server"
  144. "MySQL-server"
  145. "MariaDB-Galera-server")
  146. SETA(CPACK_RPM_server_PACKAGE_PROVIDES
  147. "MariaDB"
  148. "MySQL"
  149. "MySQL-server"
  150. "msqlormysql"
  151. "mysql-server")
  152. SETA(CPACK_RPM_test_PACKAGE_OBSOLETES
  153. "MySQL-test")
  154. SETA(CPACK_RPM_test_PACKAGE_PROVIDES
  155. "MySQL-test")
  156. SETA(CPACK_RPM_server_PACKAGE_REQUIRES
  157. "${CPACK_RPM_PACKAGE_REQUIRES}"
  158. "MariaDB-client")
  159. IF(WITH_WSREP)
  160. SETA(CPACK_RPM_server_PACKAGE_REQUIRES
  161. "galera-4" "rsync" "lsof" "grep" "gawk" "iproute"
  162. "coreutils" "findutils" "tar")
  163. ENDIF()
  164. SET(CPACK_RPM_server_PRE_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-prein.sh)
  165. SET(CPACK_RPM_server_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-preun.sh)
  166. SET(CPACK_RPM_server_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-postin.sh)
  167. SET(CPACK_RPM_server_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-postun.sh)
  168. SET(CPACK_RPM_server_POST_TRANS_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-posttrans.sh)
  169. SET(CPACK_RPM_shared_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/shared-post.sh)
  170. SET(CPACK_RPM_shared_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/shared-post.sh)
  171. SET(CPACK_RPM_compat_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/shared-post.sh)
  172. SET(CPACK_RPM_compat_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/shared-post.sh)
  173. MACRO(ALTERNATIVE_NAME real alt)
  174. IF(${ARGC} GREATER 2)
  175. SET(ver ${ARGV2})
  176. ELSE()
  177. SET(ver "${epoch}%{version}-%{release}")
  178. ENDIF()
  179. SET(p "CPACK_RPM_${real}_PACKAGE_PROVIDES")
  180. SET(${p} "${${p}} ${alt} = ${ver} ${alt}%{?_isa} = ${ver} config(${alt}) = ${ver}")
  181. SET(o "CPACK_RPM_${real}_PACKAGE_OBSOLETES")
  182. SET(${o} "${${o}} ${alt}")
  183. ENDMACRO(ALTERNATIVE_NAME)
  184. ALTERNATIVE_NAME("devel" "mysql-devel")
  185. ALTERNATIVE_NAME("server" "mysql-server")
  186. ALTERNATIVE_NAME("test" "mysql-test")
  187. # Argh! Different distributions call packages differently, to be a drop-in
  188. # replacement we have to fake distribution-specific dependencies
  189. # NOTE, use ALTERNATIVE_NAME when a package has a different name
  190. # in some distribution, it's not for adding new PROVIDES
  191. IF(RPM MATCHES "(rhel|centos)6")
  192. ALTERNATIVE_NAME("client" "mysql")
  193. ELSEIF(RPM MATCHES "fedora" OR RPM MATCHES "(rhel|centos)7")
  194. SET(epoch 1:) # this is fedora
  195. ALTERNATIVE_NAME("client" "mariadb")
  196. ALTERNATIVE_NAME("client" "mysql")
  197. ALTERNATIVE_NAME("devel" "mariadb-devel")
  198. ALTERNATIVE_NAME("server" "mariadb-server")
  199. ALTERNATIVE_NAME("server" "mysql-compat-server")
  200. ALTERNATIVE_NAME("test" "mariadb-test")
  201. ELSEIF(RPM MATCHES "(rhel|centos)8")
  202. SET(epoch 3:)
  203. ALTERNATIVE_NAME("backup" "mariadb-backup")
  204. ALTERNATIVE_NAME("client" "mariadb")
  205. ALTERNATIVE_NAME("common" "mariadb-common")
  206. ALTERNATIVE_NAME("common" "mariadb-errmsg")
  207. ALTERNATIVE_NAME("server" "mariadb-server")
  208. ALTERNATIVE_NAME("server" "mariadb-server-utils")
  209. ALTERNATIVE_NAME("shared" "mariadb-connector-c" ${MARIADB_CONNECTOR_C_VERSION}-1)
  210. ALTERNATIVE_NAME("shared" "mariadb-connector-c-config" ${MARIADB_CONNECTOR_C_VERSION}-1)
  211. SETA(CPACK_RPM_client_PACKAGE_PROVIDES "mariadb-galera = 3:%{version}-%{release}")
  212. SETA(CPACK_RPM_common_PACKAGE_PROVIDES "mariadb-galera-common = 3:%{version}-%{release}")
  213. SETA(CPACK_RPM_common_PACKAGE_REQUIRES "MariaDB-shared")
  214. ELSEIF(RPM MATCHES "sles")
  215. ALTERNATIVE_NAME("server" "mariadb")
  216. SETA(CPACK_RPM_server_PACKAGE_PROVIDES
  217. "mysql = %{version}-%{release}"
  218. "mariadb_${MAJOR_VERSION}${MINOR_VERSION} = %{version}-%{release}"
  219. "mariadb-${MAJOR_VERSION}${MINOR_VERSION} = %{version}-%{release}"
  220. "mariadb-server = %{version}-%{release}"
  221. )
  222. ENDIF()
  223. SET(PYTHON_SHEBANG "/usr/bin/python3" CACHE STRING "python shebang")
  224. # If we want to build build MariaDB-shared-compat,
  225. # extract compat libraries from MariaDB-shared-5.3 rpm
  226. FILE(GLOB compat53 RELATIVE ${CMAKE_SOURCE_DIR}
  227. "${CMAKE_SOURCE_DIR}/../MariaDB-shared-5.3.*.rpm")
  228. FILE(GLOB compat101 RELATIVE ${CMAKE_SOURCE_DIR}
  229. "${CMAKE_SOURCE_DIR}/../MariaDB-shared-10.1.*.rpm")
  230. IF(compat53 AND compat101)
  231. FOREACH(compat_rpm "${compat53}" "${compat101}")
  232. MESSAGE("Using ${compat_rpm} to build MariaDB-compat")
  233. INSTALL(CODE "EXECUTE_PROCESS(
  234. COMMAND rpm2cpio ${CMAKE_SOURCE_DIR}/${compat_rpm}
  235. COMMAND cpio --extract --make-directories */libmysqlclient*.so.* -
  236. WORKING_DIRECTORY \$ENV{DESTDIR})
  237. EXECUTE_PROCESS(
  238. COMMAND chmod -R a+rX .
  239. WORKING_DIRECTORY \$ENV{DESTDIR})"
  240. COMPONENT Compat)
  241. ENDFOREACH()
  242. EXECUTE_PROCESS(
  243. COMMAND rpm -q --provides -p "${CMAKE_SOURCE_DIR}/${compat101}"
  244. ERROR_QUIET
  245. OUTPUT_VARIABLE compat_provides)
  246. EXECUTE_PROCESS(
  247. COMMAND rpm -q --obsoletes -p "${CMAKE_SOURCE_DIR}/${compat101}"
  248. ERROR_QUIET
  249. OUTPUT_VARIABLE compat_obsoletes)
  250. STRING(REPLACE "\n" " " compat_provides "${compat_provides}")
  251. STRING(REPLACE "\n" " " compat_obsoletes "${compat_obsoletes}")
  252. STRING(REGEX REPLACE "[^ ]+\\([^ ]+ *" "" compat_obsoletes "${compat_obsoletes}")
  253. SETA(CPACK_RPM_compat_PACKAGE_PROVIDES "${compat_provides}")
  254. SETA(CPACK_RPM_compat_PACKAGE_OBSOLETES "${compat_obsoletes}")
  255. SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} Compat)
  256. # RHEL6/CentOS6 install Postfix by default, and it requires
  257. # libmysqlclient.so.16 that pulls in mysql-libs-5.1.x
  258. # And the latter conflicts with our rpms.
  259. # Make sure that for these distribuions all our rpms require
  260. # MariaDB-compat, that will replace mysql-libs-5.1
  261. IF(RPM MATCHES "(rhel|centos)[67]")
  262. SET(CPACK_RPM_common_PACKAGE_REQUIRES "MariaDB-compat")
  263. SET(CPACK_RPM_compat_PACKAGE_CONFLICTS "mariadb-libs < 1:10.1.0")
  264. ENDIF()
  265. ENDIF()
  266. ################
  267. IF(CMAKE_VERSION VERSION_GREATER "3.9.99")
  268. SET(CPACK_SOURCE_GENERATOR "RPM")
  269. SETA(CPACK_RPM_SOURCE_PKG_BUILD_PARAMS "-DRPM=${RPM}")
  270. MACRO(ADDIF var)
  271. IF(DEFINED ${var})
  272. SETA(CPACK_RPM_SOURCE_PKG_BUILD_PARAMS "-D${var}=${${var}}")
  273. ENDIF()
  274. ENDMACRO()
  275. ADDIF(CMAKE_BUILD_TYPE)
  276. ADDIF(BUILD_CONFIG)
  277. ADDIF(WITH_SSL)
  278. ENDIF()
  279. ENDIF(RPM)