From a262fe0917364cb003f7319b3d17c46280d75927 Mon Sep 17 00:00:00 2001 From: Nikita Krupen'ko Date: Wed, 23 Feb 2011 09:17:21 -0500 Subject: [PATCH 1/3] Add GNUInstallDirs module to define GNU layout (#3976) Provide CMAKE_INSTALL_* variables to help install files according to the GNU standard layout: http://www.gnu.org/prep/standards/html_node/Directory-Variables.html --- Modules/GNUInstallDirs.cmake | 166 +++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 Modules/GNUInstallDirs.cmake diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake new file mode 100644 index 000000000..8bed2e912 --- /dev/null +++ b/Modules/GNUInstallDirs.cmake @@ -0,0 +1,166 @@ +# - Define the installation directories conforming to GNU standards. +# This module defines installation directories, as described by GNU standards. +# For more information about this standards, see the following site: +# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html +# +# Module defines variables for installation directories and for resulting paths +# of this directories. +# +# Installation directories appointed to use during install. If such variable +# contains relative path, during install resulting path will be created by +# prepending it with CMAKE_INSTALL_PREFIX. If it contains absolute path, it +# would be taken as is. +# This variables only set if not defined already, thus allowing to override them +# and are stored in cache. +# CMAKE_INSTALL_BINDIR - user executables (bin) +# CMAKE_INSTALL_SBINDIR - system admin executables (sbin) +# CMAKE_INSTALL_LIBEXECDIR - program executables (libexec) +# CMAKE_INSTALL_SYSCONFDIR - read-only single-machine data (etc) +# CMAKE_INSTALL_SHAREDSTATEDIR - modifiable architecture-independent data (com) +# CMAKE_INSTALL_LOCALSTATEDIR - modifiable single-machine data (var) +# CMAKE_INSTALL_LIBDIR - object code libraries (lib) +# CMAKE_INSTALL_INCLUDEDIR - C header files (include) +# CMAKE_INSTALL_OLDINCLUDEDIR - C header files for non-gcc (/usr/include) +# CMAKE_INSTALL_DATAROOTDIR - read-only architecture-independent data root (share) +# CMAKE_INSTALL_DATADIR - read-only architecture-independent data (DATAROOTDIR) +# CMAKE_INSTALL_INFODIR - info documentation (DATAROOTDIR/info) +# CMAKE_INSTALL_LOCALEDIR - locale-dependent data (DATAROOTDIR/locale) +# CMAKE_INSTALL_MANDIR - man documentation (DATAROOTDIR/man) +# CMAKE_INSTALL_DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME) +# Resulting directories derived from installation directories and always +# contains absolute paths. +# This variables computed in runtime and not stored in cache. +# CMAKE_INSTALL_FULL_BINDIR - user executables full path (PREFIX/BINDIR) +# CMAKE_INSTALL_FULL_SBINDIR - system admin executables full path (PREFIX/SBINDIR) +# CMAKE_INSTALL_FULL_LIBEXECDIR - program executables full path (PREFIX/LIBEXECDIR) +# CMAKE_INSTALL_FULL_SYSCONFDIR - read-only single-machine data fill path (PREFIX/SYSCONFDIR) +# CMAKE_INSTALL_FULL_SHAREDSTATEDIR - modifiable architecture-independent data full path (PREFIX/SHAREDSTATEDIR) +# CMAKE_INSTALL_FULL_LOCALSTATEDIR - modifiable single-machine data full path (PREFIX/LOCALSTATEDIR) +# CMAKE_INSTALL_FULL_LIBDIR - object code libraries full path (PREFIX/LIBDIR) +# CMAKE_INSTALL_FULL_INCLUDEDIR - C header files full path (PREFIX/INCLUDEDIR) +# CMAKE_INSTALL_FULL_OLDINCLUDEDIR - C header files for non-gcc full path (/usr/include) +# CMAKE_INSTALL_FULL_DATAROOTDIR - read-only architecture-independent data root full path (PREFIX/DATAROOTDIR) +# CMAKE_INSTALL_FULL_DATADIR - read-only architecture-independent data full path (PREFIX/DATADIR) +# CMAKE_INSTALL_FULL_INFODIR - info documentation full path (PREFIX/INFODIR) +# CMAKE_INSTALL_FULL_LOCALEDIR - locale-dependent data full path (PREFIX/LOCALEDIR) +# CMAKE_INSTALL_FULL_MANDIR - man documentation full path (PREFIX/MANDIR) +# CMAKE_INSTALL_FULL_DOCDIR - documentation root full path (PREFIX/DOCDIR) + +#============================================================================= +# Copyright 2011 Nikita Krupen'ko +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Installation directories +# +if(NOT DEFINED CMAKE_INSTALL_BINDIR) + set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SBINDIR) + set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR) + set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR) + set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR) + set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR) + set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LIBDIR) + set(CMAKE_INSTALL_LIBDIR "lib" CACHE PATH "object code libraries (lib)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR) + set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR) + set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR) + set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_DATADIR) + set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_INFODIR) + set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info" CACHE PATH "info documentation (DATAROOTDIR/info)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LOCALEDIR) + set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_MANDIR) + set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man" CACHE PATH "man documentation (DATAROOTDIR/man)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_DOCDIR) + set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)") +endif() + +mark_as_advanced( + CMAKE_INSTALL_BINDIR + CMAKE_INSTALL_SBINDIR + CMAKE_INSTALL_LIBEXECDIR + CMAKE_INSTALL_SYSCONFDIR + CMAKE_INSTALL_SHAREDSTATEDIR + CMAKE_INSTALL_LOCALSTATEDIR + CMAKE_INSTALL_LIBDIR + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_OLDINCLUDEDIR + CMAKE_INSTALL_DATAROOTDIR + CMAKE_INSTALL_DATADIR + CMAKE_INSTALL_INFODIR + CMAKE_INSTALL_LOCALEDIR + CMAKE_INSTALL_MANDIR + CMAKE_INSTALL_DOCDIR + ) + +# Result directories +# +foreach(dir + BINDIR + SBINDIR + LIBEXECDIR + SYSCONFDIR + SHAREDSTATEDIR + LOCALSTATEDIR + LIBDIR + INCLUDEDIR + OLDINCLUDEDIR + DATAROOTDIR + DATADIR + INFODIR + LOCALEDIR + MANDIR + DOCDIR + ) + if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) + set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}") + else() + set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}") + endif() +endforeach() From 11431c67c6ec6c545d23b9615cb8dd249b4c3aaa Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 25 Feb 2011 12:21:22 -0500 Subject: [PATCH 2/3] GNUInstallDirs: Simplify and clarify documentation --- Modules/GNUInstallDirs.cmake | 77 ++++++++++++++---------------------- 1 file changed, 30 insertions(+), 47 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 8bed2e912..bd85e1d94 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -1,53 +1,36 @@ -# - Define the installation directories conforming to GNU standards. -# This module defines installation directories, as described by GNU standards. -# For more information about this standards, see the following site: -# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html -# -# Module defines variables for installation directories and for resulting paths -# of this directories. -# -# Installation directories appointed to use during install. If such variable -# contains relative path, during install resulting path will be created by -# prepending it with CMAKE_INSTALL_PREFIX. If it contains absolute path, it -# would be taken as is. -# This variables only set if not defined already, thus allowing to override them -# and are stored in cache. -# CMAKE_INSTALL_BINDIR - user executables (bin) -# CMAKE_INSTALL_SBINDIR - system admin executables (sbin) -# CMAKE_INSTALL_LIBEXECDIR - program executables (libexec) -# CMAKE_INSTALL_SYSCONFDIR - read-only single-machine data (etc) -# CMAKE_INSTALL_SHAREDSTATEDIR - modifiable architecture-independent data (com) -# CMAKE_INSTALL_LOCALSTATEDIR - modifiable single-machine data (var) -# CMAKE_INSTALL_LIBDIR - object code libraries (lib) -# CMAKE_INSTALL_INCLUDEDIR - C header files (include) -# CMAKE_INSTALL_OLDINCLUDEDIR - C header files for non-gcc (/usr/include) -# CMAKE_INSTALL_DATAROOTDIR - read-only architecture-independent data root (share) -# CMAKE_INSTALL_DATADIR - read-only architecture-independent data (DATAROOTDIR) -# CMAKE_INSTALL_INFODIR - info documentation (DATAROOTDIR/info) -# CMAKE_INSTALL_LOCALEDIR - locale-dependent data (DATAROOTDIR/locale) -# CMAKE_INSTALL_MANDIR - man documentation (DATAROOTDIR/man) -# CMAKE_INSTALL_DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME) -# Resulting directories derived from installation directories and always -# contains absolute paths. -# This variables computed in runtime and not stored in cache. -# CMAKE_INSTALL_FULL_BINDIR - user executables full path (PREFIX/BINDIR) -# CMAKE_INSTALL_FULL_SBINDIR - system admin executables full path (PREFIX/SBINDIR) -# CMAKE_INSTALL_FULL_LIBEXECDIR - program executables full path (PREFIX/LIBEXECDIR) -# CMAKE_INSTALL_FULL_SYSCONFDIR - read-only single-machine data fill path (PREFIX/SYSCONFDIR) -# CMAKE_INSTALL_FULL_SHAREDSTATEDIR - modifiable architecture-independent data full path (PREFIX/SHAREDSTATEDIR) -# CMAKE_INSTALL_FULL_LOCALSTATEDIR - modifiable single-machine data full path (PREFIX/LOCALSTATEDIR) -# CMAKE_INSTALL_FULL_LIBDIR - object code libraries full path (PREFIX/LIBDIR) -# CMAKE_INSTALL_FULL_INCLUDEDIR - C header files full path (PREFIX/INCLUDEDIR) -# CMAKE_INSTALL_FULL_OLDINCLUDEDIR - C header files for non-gcc full path (/usr/include) -# CMAKE_INSTALL_FULL_DATAROOTDIR - read-only architecture-independent data root full path (PREFIX/DATAROOTDIR) -# CMAKE_INSTALL_FULL_DATADIR - read-only architecture-independent data full path (PREFIX/DATADIR) -# CMAKE_INSTALL_FULL_INFODIR - info documentation full path (PREFIX/INFODIR) -# CMAKE_INSTALL_FULL_LOCALEDIR - locale-dependent data full path (PREFIX/LOCALEDIR) -# CMAKE_INSTALL_FULL_MANDIR - man documentation full path (PREFIX/MANDIR) -# CMAKE_INSTALL_FULL_DOCDIR - documentation root full path (PREFIX/DOCDIR) +# - Define GNU standard installation directories +# Provides install directory variables as defined for GNU software: +# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html +# Inclusion of this module defines the following variables: +# CMAKE_INSTALL_ - destination for files of a given type +# CMAKE_INSTALL_FULL_ - corresponding absolute path +# where is one of: +# BINDIR - user executables (bin) +# SBINDIR - system admin executables (sbin) +# LIBEXECDIR - program executables (libexec) +# SYSCONFDIR - read-only single-machine data (etc) +# SHAREDSTATEDIR - modifiable architecture-independent data (com) +# LOCALSTATEDIR - modifiable single-machine data (var) +# LIBDIR - object code libraries (lib) +# INCLUDEDIR - C header files (include) +# OLDINCLUDEDIR - C header files for non-gcc (/usr/include) +# DATAROOTDIR - read-only architecture-independent data root (share) +# DATADIR - read-only architecture-independent data (DATAROOTDIR) +# INFODIR - info documentation (DATAROOTDIR/info) +# LOCALEDIR - locale-dependent data (DATAROOTDIR/locale) +# MANDIR - man documentation (DATAROOTDIR/man) +# DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME) +# Each CMAKE_INSTALL_ value may be passed to the DESTINATION options of +# install() commands for the corresponding file type. If the includer does +# not define a value the above-shown default will be used and the value will +# appear in the cache for editing by the user. +# Each CMAKE_INSTALL_FULL_ value contains an absolute path constructed +# from the corresponding destination by prepending (if necessary) the value +# of CMAKE_INSTALL_PREFIX. #============================================================================= # Copyright 2011 Nikita Krupen'ko +# Copyright 2011 Kitware, Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. From c2bf48ef57a9ded10c4e8470e56d0dbdcdb51284 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 25 Feb 2011 12:28:52 -0500 Subject: [PATCH 3/3] GNUInstallDirs: Propagate DATAROOTDIR changes to dependent defaults --- Modules/GNUInstallDirs.cmake | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index bd85e1d94..bb651dec7 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -84,26 +84,38 @@ if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR) set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)") endif() -if(NOT DEFINED CMAKE_INSTALL_DATADIR) - set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)") +#----------------------------------------------------------------------------- +# Values whose defaults are relative to DATAROOTDIR. Store empty values in +# the cache and store the defaults in local variables if the cache values are +# not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. + +if(NOT CMAKE_INSTALL_DATADIR) + set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)") + set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}") endif() -if(NOT DEFINED CMAKE_INSTALL_INFODIR) - set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info" CACHE PATH "info documentation (DATAROOTDIR/info)") +if(NOT CMAKE_INSTALL_INFODIR) + set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)") + set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info") endif() -if(NOT DEFINED CMAKE_INSTALL_LOCALEDIR) - set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)") +if(NOT CMAKE_INSTALL_LOCALEDIR) + set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)") + set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale") endif() -if(NOT DEFINED CMAKE_INSTALL_MANDIR) - set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man" CACHE PATH "man documentation (DATAROOTDIR/man)") +if(NOT CMAKE_INSTALL_MANDIR) + set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)") + set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man") endif() -if(NOT DEFINED CMAKE_INSTALL_DOCDIR) - set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)") +if(NOT CMAKE_INSTALL_DOCDIR) + set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)") + set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}") endif() +#----------------------------------------------------------------------------- + mark_as_advanced( CMAKE_INSTALL_BINDIR CMAKE_INSTALL_SBINDIR