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