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