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