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