1# Copyright (c) 2010, 2020, Oracle and/or its affiliates. All rights reserved. 2# 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License, version 2.0, 5# as published by the Free Software Foundation. 6# 7# This program is also distributed with certain software (including 8# but not limited to OpenSSL) that is licensed under separate terms, 9# as designated in a particular file or component or in included license 10# documentation. The authors of MySQL hereby grant you an additional 11# permission to link the program and your derivative works with the 12# separately licensed software that they have included with MySQL. 13# 14# This program is distributed in the hope that it will be useful, 15# but WITHOUT ANY WARRANTY; without even the implied warranty of 16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17# GNU General Public License, version 2.0, for more details. 18# 19# You should have received a copy of the GNU General Public License 20# along with this program; if not, write to the Free Software 21# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 22 23# The purpose of this file is to set the default installation layout. 24# 25# The current choices of installation layout are: 26# 27# STANDALONE 28# Build with prefix=/usr/local/xtrabackup, create tarball with install prefix="." 29# and relative links. 30# 31# RPM 32# Build as per default RPM layout, with prefix=/usr 33# 34# DEB 35# Similar to RPM layout. 36# 37# SVR4 38# Solaris package layout suitable for pkg* tools, prefix=/opt/mysql/xtrabackup 39# 40# TARGZ 41# Build with prefix=/usr/local/mysql, create tarball with install prefix="." 42# and relative links. 43# 44# To force a directory layout, use -DINSTALL_LAYOUT=<layout>. 45# 46# The default is STANDALONE. 47# 48# There is the possibility to further fine-tune installation directories. 49# Several variables can be overwritten: 50# 51# - INSTALL_BINDIR (directory with innobackupex and XtraBackup binaries) 52# - INSTALL_SBINDIR (directory with mysqld) 53# 54# - INSTALL_LIBDIR (directory with client libraries) 55# - INSTALL_PRIV_LIBDIR (directory with mysql private libraries) 56# - INSTALL_PLUGINDIR (directory for plugins) 57# 58# - INSTALL_INCLUDEDIR (directory for MySQL headers) 59# 60# - INSTALL_DOCDIR (documentation) 61# - INSTALL_DOCREADMEDIR (readme and similar) 62# - INSTALL_MANDIR (man pages) 63# - INSTALL_INFODIR (info pages) 64# 65# - INSTALL_SHAREDIR (location of aclocal/mysql.m4) 66# - INSTALL_MYSQLSHAREDIR (MySQL character sets and localized error messages) 67# - INSTALL_MYSQLTESTDIR (XtraBackup test suite) 68# - INSTALL_SUPPORTFILESDIR (various extra support files) 69# 70# - INSTALL_MYSQLDATADIR (data directory) 71# - INSTALL_MYSQLKEYRING (keyring directory) 72# - INSTALL_SECURE_FILE_PRIVDIR (--secure-file-priv directory) 73# - INSTALL_PARTIAL_REVOKES (--partial-revokes) 74# 75# When changing this page, _please_ do not forget to update public Wiki 76# https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html#option_cmake_install_layout 77 78IF(NOT INSTALL_LAYOUT) 79 SET(DEFAULT_INSTALL_LAYOUT "STANDALONE") 80ENDIF() 81 82SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}" 83 CACHE STRING "Installation directory layout. Options are: TARGZ (as in tar.gz installer), STANDALONE, RPM, DEB, SVR4" 84 ) 85 86IF(UNIX) 87 IF(INSTALL_LAYOUT MATCHES "RPM") 88 SET(default_prefix "/usr") 89 ELSEIF(INSTALL_LAYOUT MATCHES "DEB") 90 SET(default_prefix "/usr") 91 ELSEIF(INSTALL_LAYOUT MATCHES "SVR4") 92 SET(default_prefix "/opt/mysql/xtrabackup") 93 ELSE() 94 SET(default_prefix "/usr/local/xtrabackup") 95 ENDIF() 96 IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 97 SET(CMAKE_INSTALL_PREFIX ${default_prefix} 98 CACHE PATH "install prefix" FORCE) 99 ENDIF() 100 SET(VALID_INSTALL_LAYOUTS 101 "RPM" "DEB" "SVR4" "TARGZ" "STANDALONE") 102 LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind) 103 IF(ind EQUAL -1) 104 MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}." 105 " Choose between ${VALID_INSTALL_LAYOUTS}" ) 106 ENDIF() 107 108 SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc" 109 CACHE PATH "config directory (for my.cnf)") 110 MARK_AS_ADVANCED(SYSCONFDIR) 111ENDIF() 112 113IF(LINUX AND INSTALL_LAYOUT MATCHES "STANDALONE") 114 SET(LINUX_STANDALONE 1) 115ENDIF() 116 117IF(LINUX AND INSTALL_LAYOUT MATCHES "RPM") 118 SET(LINUX_RPM 1) 119ENDIF() 120 121IF(WIN32) 122 SET(VALID_INSTALL_LAYOUTS "TARGZ" "STANDALONE") 123 LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind) 124 IF(ind EQUAL -1) 125 MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}." 126 " Choose between ${VALID_INSTALL_LAYOUTS}" ) 127 ENDIF() 128ENDIF() 129 130# 131# DEFAULT_SECURE_FILE_PRIV_DIR 132# 133IF(INSTALL_LAYOUT MATCHES "STANDALONE") 134 SET(secure_file_priv_path "NULL") 135ELSEIF(INSTALL_LAYOUT MATCHES "RPM" OR 136 INSTALL_LAYOUT MATCHES "SVR4" OR 137 INSTALL_LAYOUT MATCHES "DEB") 138 SET(secure_file_priv_path "/var/lib/mysql-files") 139ELSE() 140 SET(secure_file_priv_path "${default_prefix}/mysql-files") 141ENDIF() 142 143# 144# STANDALONE layout 145# 146SET(INSTALL_BINDIR_STANDALONE "bin") 147SET(INSTALL_SBINDIR_STANDALONE "bin") 148# 149SET(INSTALL_LIBDIR_STANDALONE "lib") 150SET(INSTALL_PRIV_LIBDIR_STANDALONE "lib/private") 151SET(INSTALL_PLUGINDIR_STANDALONE "lib/plugin") 152# 153SET(INSTALL_INCLUDEDIR_STANDALONE "include") 154# 155SET(INSTALL_DOCDIR_STANDALONE "docs") 156SET(INSTALL_DOCREADMEDIR_STANDALONE ".") 157SET(INSTALL_MANDIR_STANDALONE "man") 158SET(INSTALL_INFODIR_STANDALONE "docs") 159# 160SET(INSTALL_SHAREDIR_STANDALONE "share") 161SET(INSTALL_MYSQLSHAREDIR_STANDALONE "share") 162# SET(INSTALL_MYSQLTESTDIR_STANDALONE "xtrabackup-test") 163SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files") 164# 165SET(INSTALL_MYSQLDATADIR_STANDALONE "data") 166SET(INSTALL_MYSQLKEYRINGDIR_STANDALONE "keyring") 167SET(INSTALL_SECURE_FILE_PRIVDIR_STANDALONE ${secure_file_priv_path}) 168 169# 170# TARGZ layout 171# 172SET(INSTALL_BINDIR_TARGZ "bin") 173SET(INSTALL_SBINDIR_TARGZ "bin") 174# 175SET(INSTALL_LIBDIR_TARGZ "lib") 176SET(INSTALL_PRIV_LIBDIR_TARGZ "lib/mysql/private") 177SET(INSTALL_PLUGINDIR_TARGZ "lib/plugin") 178# 179SET(INSTALL_INCLUDEDIR_TARGZ "include") 180# 181SET(INSTALL_DOCDIR_TARGZ "docs") 182SET(INSTALL_DOCREADMEDIR_TARGZ ".") 183SET(INSTALL_MANDIR_TARGZ "man") 184SET(INSTALL_INFODIR_TARGZ "docs") 185# 186SET(INSTALL_SHAREDIR_TARGZ "share") 187SET(INSTALL_MYSQLSHAREDIR_TARGZ "share") 188SET(INSTALL_MYSQLTESTDIR_TARGZ "xtrabackup-test") 189SET(INSTALL_SUPPORTFILESDIR_TARGZ "support-files") 190# 191SET(INSTALL_MYSQLDATADIR_TARGZ "data") 192SET(INSTALL_MYSQLKEYRINGDIR_TARGZ "keyring") 193SET(INSTALL_SECURE_FILE_PRIVDIR_TARGZ ${secure_file_priv_path}) 194 195# 196# RPM layout 197# 198SET(INSTALL_BINDIR_RPM "bin") 199SET(INSTALL_SBINDIR_RPM "sbin") 200# 201IF(CMAKE_SYSTEM_PROCESSOR IN_LIST KNOWN_64BIT_ARCHITECTURES) 202 SET(INSTALL_LIBDIR_RPM "lib64/mysql") 203 SET(INSTALL_PRIV_LIBDIR_RPM "lib64/mysql/private") 204 IF(CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG") 205 SET(INSTALL_PLUGINDIR_RPM "lib64/mysql/plugin/debug") 206 ELSE() 207 SET(INSTALL_PLUGINDIR_RPM "lib64/mysql/plugin") 208 ENDIF() 209ELSE() 210 SET(INSTALL_LIBDIR_RPM "lib/mysql") 211 SET(INSTALL_PRIV_LIBDIR_RPM "lib/mysql/private") 212 IF(CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG") 213 SET(INSTALL_PLUGINDIR_RPM "lib/mysql/plugin/debug") 214 ELSE() 215 SET(INSTALL_PLUGINDIR_RPM "lib/mysql/plugin") 216 ENDIF() 217ENDIF() 218# 219SET(INSTALL_INCLUDEDIR_RPM "include/mysql") 220# 221#SET(INSTALL_DOCDIR_RPM unset - installed directly by RPM) 222#SET(INSTALL_DOCREADMEDIR_RPM unset - installed directly by RPM) 223SET(INSTALL_INFODIR_RPM "share/info") 224SET(INSTALL_MANDIR_RPM "share/man") 225# 226SET(INSTALL_SHAREDIR_RPM "share") 227SET(INSTALL_MYSQLSHAREDIR_RPM "share/mysql-${MYSQL_BASE_VERSION}") 228SET(INSTALL_MYSQLTESTDIR_RPM "share/xtrabackup-test") 229SET(INSTALL_SUPPORTFILESDIR_RPM "share/mysql-${MYSQL_BASE_VERSION}") 230# 231SET(INSTALL_MYSQLDATADIR_RPM "/var/lib/mysql") 232SET(INSTALL_MYSQLKEYRINGDIR_RPM "/var/lib/mysql-keyring") 233SET(INSTALL_SECURE_FILE_PRIVDIR_RPM ${secure_file_priv_path}) 234 235# 236# DEB layout 237# 238SET(INSTALL_BINDIR_DEB "bin") 239SET(INSTALL_SBINDIR_DEB "sbin") 240# 241SET(INSTALL_LIBDIR_DEB "lib") 242SET(INSTALL_PRIV_LIBDIR_DEB "lib/mysql/private") 243IF(CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG") 244 SET(INSTALL_PLUGINDIR_DEB "lib/mysql/plugin/debug") 245ELSE() 246 SET(INSTALL_PLUGINDIR_DEB "lib/mysql/plugin") 247ENDIF() 248# 249SET(INSTALL_INCLUDEDIR_DEB "include/mysql") 250# 251SET(INSTALL_DOCDIR_DEB "share/mysql-${MYSQL_BASE_VERSION}/docs") 252SET(INSTALL_DOCREADMEDIR_DEB "share/mysql-${MYSQL_BASE_VERSION}") 253SET(INSTALL_MANDIR_DEB "share/man") 254SET(INSTALL_INFODIR_DEB "share/mysql/docs") 255# 256SET(INSTALL_SHAREDIR_DEB "share") 257SET(INSTALL_MYSQLSHAREDIR_DEB "share/mysql-${MYSQL_BASE_VERSION}") 258SET(INSTALL_MYSQLTESTDIR_DEB "lib/xtrabackup-test") 259SET(INSTALL_SUPPORTFILESDIR_DEB "share/mysql-${MYSQL_BASE_VERSION}") 260# 261SET(INSTALL_MYSQLDATADIR_DEB "/var/lib/mysql") 262SET(INSTALL_MYSQLKEYRINGDIR_DEB "/var/lib/mysql-keyring") 263SET(INSTALL_SECURE_FILE_PRIVDIR_DEB ${secure_file_priv_path}) 264 265# 266# SVR4 layout 267# 268SET(INSTALL_BINDIR_SVR4 "bin") 269SET(INSTALL_SBINDIR_SVR4 "bin") 270# 271SET(INSTALL_LIBDIR_SVR4 "lib") 272SET(INSTALL_PRIV_LIBDIR_SVR4 "lib/private") 273SET(INSTALL_PLUGINDIR_SVR4 "lib/plugin") 274# 275SET(INSTALL_INCLUDEDIR_SVR4 "include") 276# 277SET(INSTALL_DOCDIR_SVR4 "docs") 278SET(INSTALL_DOCREADMEDIR_SVR4 ".") 279SET(INSTALL_MANDIR_SVR4 "man") 280SET(INSTALL_INFODIR_SVR4 "docs") 281# 282SET(INSTALL_SHAREDIR_SVR4 "share") 283SET(INSTALL_MYSQLSHAREDIR_SVR4 "share") 284SET(INSTALL_MYSQLTESTDIR_SVR4 "xtrabackup-test") 285SET(INSTALL_SUPPORTFILESDIR_SVR4 "support-files") 286# 287SET(INSTALL_MYSQLDATADIR_SVR4 "/var/lib/mysql") 288SET(INSTALL_MYSQLKEYRINGDIR_SVR4 "/var/lib/mysql-keyring") 289SET(INSTALL_SECURE_FILE_PRIVDIR_SVR4 ${secure_file_priv_path}) 290 291 292# Clear cached variables if install layout was changed 293IF(OLD_INSTALL_LAYOUT) 294 IF(NOT OLD_INSTALL_LAYOUT STREQUAL INSTALL_LAYOUT) 295 SET(FORCE FORCE) 296 ENDIF() 297ENDIF() 298SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "") 299 300# Set INSTALL_FOODIR variables for chosen layout (for example, INSTALL_BINDIR 301# will be defined as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE 302# layout is chosen) 303FOREACH(var 304 BIN 305 DOC 306 DOCREADME 307 INCLUDE 308 INFO 309 LIB 310 MAN 311 MYSQLDATA 312 MYSQLKEYRING 313 MYSQLSHARE 314 MYSQLTEST 315 PLUGIN 316 PLUGINTEST 317 PRIV_LIB 318 SBIN 319 SECURE_FILE_PRIV 320 SHARE 321 SUPPORTFILES 322 ) 323 SET(INSTALL_${var}DIR 324 ${INSTALL_${var}DIR_${INSTALL_LAYOUT}} 325 CACHE STRING "${var} installation directory" ${FORCE}) 326 MARK_AS_ADVANCED(INSTALL_${var}DIR) 327ENDFOREACH() 328 329# 330# Set DEFAULT_SECURE_FILE_PRIV_DIR 331# This is used as default value for --secure-file-priv 332# 333IF(INSTALL_SECURE_FILE_PRIVDIR) 334 SET(DEFAULT_SECURE_FILE_PRIV_DIR "\"${INSTALL_SECURE_FILE_PRIVDIR}\"" 335 CACHE INTERNAL "default --secure-file-priv directory" FORCE) 336ELSE() 337 SET(DEFAULT_SECURE_FILE_PRIV_DIR \"\" 338 CACHE INTERNAL "default --secure-file-priv directory" FORCE) 339ENDIF() 340 341# 342# Set DEFAULT_PARTIAL_REVOKES 343# This is used as default value for --partial-revokes 344# 345IF(PARTIAL_REVOKES_DEFAULT) 346 SET(DEFAULT_PARTIAL_REVOKES 1 347 CACHE INTERNAL "default --partial-revokes" FORCE) 348ELSE() 349 SET(DEFAULT_PARTIAL_REVOKES 0 350 CACHE INTERNAL "default --partial-revokes" FORCE) 351ENDIF() 352 353 354# Install layout for router, follows the same pattern as above. 355# 356 357IF("${ROUTER_INSTALL_DOCDIR}" STREQUAL "") 358 SET(ROUTER_INSTALL_DOCDIR "${INSTALL_DOCDIR}") 359ENDIF() 360 361IF(NOT ROUTER_INSTALL_LAYOUT) 362 SET(DEFAULT_ROUTER_INSTALL_LAYOUT "${INSTALL_LAYOUT}") 363ENDIF() 364 365SET(ROUTER_INSTALL_LAYOUT "${DEFAULT_ROUTER_INSTALL_LAYOUT}" 366 CACHE 367 STRING 368 "Installation directory layout. Options are: STANDALONE RPM DEB SVR4 TARGZ") 369 370# If we are shared STANDALONE with the the server, we shouldn't write 371# into the server's data/ as that would create a "schemadir" in 372# mysql-servers sense 373# 374# STANDALONE layout 375# 376SET(ROUTER_INSTALL_CONFIGDIR_STANDALONE ".") 377SET(ROUTER_INSTALL_DATADIR_STANDALONE "var/lib/mysqlrouter") 378SET(ROUTER_INSTALL_LOGDIR_STANDALONE ".") 379SET(ROUTER_INSTALL_RUNTIMEDIR_STANDALONE "run") 380 381SET(ROUTER_INSTALL_BINDIR_STANDALONE "bin") 382IF(LINUX) 383 SET(ROUTER_INSTALL_LIBDIR_STANDALONE "lib/mysqlrouter/private") 384ELSE() 385 SET(ROUTER_INSTALL_LIBDIR_STANDALONE "lib") 386ENDIF() 387IF(WIN32) 388 SET(ROUTER_INSTALL_PLUGINDIR_STANDALONE "lib") 389ELSE() 390 SET(ROUTER_INSTALL_PLUGINDIR_STANDALONE "lib/mysqlrouter") 391ENDIF() 392 393# 394# TARGZ layout 395# 396FOREACH(var 397 CONFIG 398 DATA 399 LOG 400 RUNTIME 401 BIN 402 LIB 403 PLUGIN 404 ) 405 SET(ROUTER_INSTALL_${var}DIR_TARGZ ${ROUTER_INSTALL_${var}DIR_STANDALONE}) 406ENDFOREACH() 407 408# 409# RPM layout 410# 411SET(ROUTER_INSTALL_CONFIGDIR_RPM "/etc/mysqlrouter") 412SET(ROUTER_INSTALL_DATADIR_RPM "/var/lib/mysqlrouter") 413SET(ROUTER_INSTALL_LOGDIR_RPM "/var/log/mysqlrouter") 414IF (LINUX_FEDORA) 415 SET(ROUTER_INSTALL_RUNTIMEDIR_RPM "/run/mysqlrouter") 416ELSE() 417 SET(ROUTER_INSTALL_RUNTIMEDIR_RPM "/var/run/mysqlrouter") 418ENDIF() 419 420SET(ROUTER_INSTALL_BINDIR_RPM "bin") 421IF(CMAKE_SYSTEM_PROCESSOR IN_LIST KNOWN_64BIT_ARCHITECTURES) 422 SET(ROUTER_INSTALL_LIBDIR_RPM "lib64/mysqlrouter/private") 423 SET(ROUTER_INSTALL_PLUGINDIR_RPM "lib64/mysqlrouter") 424ELSE() 425 SET(ROUTER_INSTALL_LIBDIR_RPM "lib/mysqlrouter/private") 426 SET(ROUTER_INSTALL_PLUGINDIR_RPM "lib/mysqlrouter") 427ENDIF() 428 429# 430# DEB layout 431# 432SET(ROUTER_INSTALL_CONFIGDIR_DEB "/etc/mysqlrouter") 433SET(ROUTER_INSTALL_DATADIR_DEB "/var/lib/mysqlrouter") 434SET(ROUTER_INSTALL_LOGDIR_DEB "/var/log/mysqlrouter") 435SET(ROUTER_INSTALL_RUNTIMEDIR_DEB "/var/run/mysqlrouter") 436 437SET(ROUTER_INSTALL_BINDIR_DEB "bin") 438SET(ROUTER_INSTALL_LIBDIR_DEB "lib/mysqlrouter/private") 439SET(ROUTER_INSTALL_PLUGINDIR_DEB "lib/mysqlrouter/plugin") 440 441# 442# SVR4 layout 443# 444FOREACH(var 445 CONFIG 446 DATA 447 LOG 448 RUNTIME 449 BIN 450 LIB 451 PLUGIN 452 ) 453 SET(ROUTER_INSTALL_${var}DIR_SVR4 ${ROUTER_INSTALL_${var}DIR_STANDALONE}) 454ENDFOREACH() 455 456# Set ROUTER_INSTALL_FOODIR variables for chosen layout for example, 457# ROUTER_INSTALL_CONFIGDIR will be defined as 458# ${ROUTER_INSTALL_CONFIGDIR_STANDALONE} by default if STANDALONE 459# layout is chosen. 460FOREACH(directory 461 CONFIG 462 DATA 463 LOG 464 RUNTIME 465 BIN 466 LIB 467 PLUGIN 468 ) 469 SET(ROUTER_INSTALL_${directory}DIR 470 ${ROUTER_INSTALL_${directory}DIR_${ROUTER_INSTALL_LAYOUT}} 471 CACHE STRING "Router ${directory} installation directory") 472 MARK_AS_ADVANCED(ROUTER_INSTALL_${directory}DIR) 473ENDFOREACH() 474