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