diff options
Diffstat (limited to 'kde-modules/KDEInstallDirsCommon.cmake')
-rw-r--r-- | kde-modules/KDEInstallDirsCommon.cmake | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/kde-modules/KDEInstallDirsCommon.cmake b/kde-modules/KDEInstallDirsCommon.cmake new file mode 100644 index 00000000..a492a14d --- /dev/null +++ b/kde-modules/KDEInstallDirsCommon.cmake @@ -0,0 +1,392 @@ +# SPDX-FileCopyrightText: 2014-2015 Alex Merry <alex.merry@kde.org> +# SPDX-FileCopyrightText: 2013 Stephen Kelly <steveire@gmail.com> +# SPDX-FileCopyrightText: 2012 David Faure <faure@kde.org> +# SPDX-FileCopyrightText: 2007 Matthias Kretz <kretz@kde.org> +# SPDX-FileCopyrightText: 2006-2007 Laurent Montel <montel@kde.org> +# SPDX-FileCopyrightText: 2006-2013 Alex Neundorf <neundorf@kde.org> +# +# SPDX-License-Identifier: BSD-3-Clause +# +# Common implementation details of KDEInstallDirsX.cmake, not public API. +# + +# Figure out what the default install directory for libraries should be. +# This is based on the logic in GNUInstallDirs, but simplified (the +# GNUInstallDirs code deals with re-configuring, but that is dealt with +# by the _define_* macros in this module). +set(_LIBDIR_DEFAULT "lib") +# Override this default 'lib' with 'lib64' if: +# - we are on a Linux, kFreeBSD or Hurd system but NOT cross-compiling +# - we are NOT on debian +# - we are NOT on flatpak +# - we are on a 64 bits system +# reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf +# For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if +# CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu" +# See https://wiki.debian.org/Multiarch +if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU") + AND NOT CMAKE_CROSSCOMPILING + AND NOT EXISTS "/etc/arch-release" + AND NOT DEFINED ENV{FLATPAK_ID}) + if (EXISTS "/etc/debian_version") # is this a debian system ? + if(CMAKE_LIBRARY_ARCHITECTURE) + set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}") + endif() + else() # not debian, rely on CMAKE_SIZEOF_VOID_P: + if(NOT DEFINED CMAKE_SIZEOF_VOID_P) + message(AUTHOR_WARNING + "Unable to determine default LIB_INSTALL_LIBDIR directory because no target architecture is known. " + "Please enable at least one language before including KDEInstallDirs.") + else() + if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + set(_LIBDIR_DEFAULT "lib64") + endif() + endif() + endif() +endif() + +set(_gnu_install_dirs_vars + BINDIR + SBINDIR + LIBEXECDIR + SYSCONFDIR + SHAREDSTATEDIR + LOCALSTATEDIR + LIBDIR + INCLUDEDIR + OLDINCLUDEDIR + DATAROOTDIR + DATADIR + INFODIR + LOCALEDIR + MANDIR + DOCDIR) + +# Macro for variables that are relative to another variable. We store an empty +# value in the cache (for documentation/GUI cache editor purposes), and store +# the default value in a local variable. If the cache variable is ever set to +# something non-empty, the local variable will no longer be set. However, if +# the cache variable remains (or is set to be) empty, the value will be +# relative to that of the parent variable. +# +# varname: the variable name suffix (eg: BINDIR for KDE_INSTALL_BINDIR) +# parent: the variable suffix of the variable this is relative to +# (eg: DATAROOTDIR for KDE_INSTALL_DATAROOTDIR) +# subdir: the path of the default value of KDE_INSTALL_${varname} +# relative to KDE_INSTALL_${parent}: no leading / +# docstring: documentation about the variable (not including the default value) +# oldstylename (optional): the old-style name of the variable +macro(_define_relative varname parent subdir docstring) + set(_oldstylename) + if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED AND ${ARGC} GREATER 4) + set(_oldstylename "${ARGV4}") + endif() + set(_cmakename) + if(NOT KDE_INSTALL_DIRS_NO_CMAKE_VARIABLES) + list(FIND _gnu_install_dirs_vars "${varname}" _list_offset) + set(_cmakename_is_deprecated FALSE) + if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED OR NOT _list_offset EQUAL -1) + set(_cmakename CMAKE_INSTALL_${varname}) + if(_list_offset EQUAL -1) + set(_cmakename_is_deprecated TRUE) + endif() + endif() + endif() + + # Surprisingly complex logic to deal with joining paths. + # Note that we cannot use arg vars directly in if() because macro args are + # not proper variables. + set(_parent "${parent}") + set(_subdir "${subdir}") + if(_parent AND _subdir) + set(_docpath "${_parent}/${_subdir}") + if(KDE_INSTALL_${_parent}) + set(_realpath "${KDE_INSTALL_${_parent}}/${_subdir}") + else() + set(_realpath "${_subdir}") + endif() + elseif(_parent) + set(_docpath "${_parent}") + set(_realpath "${KDE_INSTALL_${_parent}}") + else() + set(_docpath "${_subdir}") + set(_realpath "${_subdir}") + endif() + + if(KDE_INSTALL_${varname}) + # make sure the cache documentation is set correctly + get_property(_iscached CACHE KDE_INSTALL_${varname} PROPERTY VALUE SET) + if (_iscached) + # make sure the docs are still set if it was passed on the command line + set_property(CACHE KDE_INSTALL_${varname} + PROPERTY HELPSTRING "${docstring} (${_docpath})") + # make sure the type is correct if it was passed on the command line + set_property(CACHE KDE_INSTALL_${varname} + PROPERTY TYPE PATH) + endif() + elseif(${_oldstylename}) + message(DEPRECATION "${_oldstylename} is deprecated, use KDE_INSTALL_${varname} instead.") + # The old name was given (probably on the command line): move + # it to the new name + set(KDE_INSTALL_${varname} "${${_oldstylename}}" + CACHE PATH + "${docstring} (${_docpath})" + FORCE) + elseif(${_cmakename}) + if(_cmakename_is_deprecated) + message(DEPRECATION "${_cmakename} is deprecated, use KDE_INSTALL_${varname} instead.") + endif() + # The CMAKE_ name was given (probably on the command line): move + # it to the new name + set(KDE_INSTALL_${varname} "${${_cmakename}}" + CACHE PATH + "${docstring} (${_docpath})" + FORCE) + else() + # insert an empty value into the cache, indicating the default + # should be used (including compatibility vars above) + set(KDE_INSTALL_${varname} "" + CACHE PATH "${docstring} (${_docpath})") + set(KDE_INSTALL_${varname} "${_realpath}") + endif() + + mark_as_advanced(KDE_INSTALL_${varname}) + + if(NOT IS_ABSOLUTE ${KDE_INSTALL_${varname}}) + set(KDE_INSTALL_FULL_${varname} + "${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_${varname}}") + else() + set(KDE_INSTALL_FULL_${varname} "${KDE_INSTALL_${varname}}") + endif() + + # Override compatibility vars at runtime, even though we don't touch + # them in the cache; this way, we keep the variables in sync where + # KDEInstallDirs is included, but don't interfere with, say, + # GNUInstallDirs in a parallel part of the CMake tree. + if(_cmakename) + set(${_cmakename} "${KDE_INSTALL_${varname}}") + set(CMAKE_INSTALL_FULL_${varname} "${KDE_INSTALL_FULL_${varname}}") + endif() + + if(_oldstylename) + set(${_oldstylename} "${KDE_INSTALL_${varname}}") + endif() +endmacro() + +# varname: the variable name suffix (eg: BINDIR for KDE_INSTALL_BINDIR) +# dir: the relative path of the default value of KDE_INSTALL_${varname} +# relative to CMAKE_INSTALL_PREFIX: no leading / +# docstring: documentation about the variable (not including the default value) +# oldstylename (optional): the old-style name of the variable +macro(_define_absolute varname dir docstring) + _define_relative("${varname}" "" "${dir}" "${docstring}" ${ARGN}) +endmacro() + +macro(_define_non_cache varname value) + set(KDE_INSTALL_${varname} "${value}") + if(NOT IS_ABSOLUTE ${KDE_INSTALL_${varname}}) + set(KDE_INSTALL_FULL_${varname} + "${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_${varname}}") + else() + set(KDE_INSTALL_FULL_${varname} "${KDE_INSTALL_${varname}}") + endif() + + if(NOT KDE_INSTALL_DIRS_NO_CMAKE_VARIABLES) + list(FIND _gnu_install_dirs_vars "${varname}" _list_offset) + if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED OR NOT _list_offset EQUAL -1) + set(CMAKE_INSTALL_${varname} "${KDE_INSTALL_${varname}}") + set(CMAKE_INSTALL_FULL_${varname} "${KDE_INSTALL_FULL_${varname}}") + endif() + endif() +endmacro() + +if(APPLE) + _define_absolute(BUNDLEDIR "/Applications/KDE" + "application bundles" + BUNDLE_INSTALL_DIR) +endif() + +# Only supported since cmake 3.7 +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${ECM_PREFIX}" CACHE PATH "Install path prefix" FORCE) +endif() + +_define_absolute(EXECROOTDIR "" + "executables and libraries" + EXEC_INSTALL_PREFIX) + +_define_relative(BINDIR EXECROOTDIR "bin" + "user executables" + BIN_INSTALL_DIR) +_define_relative(SBINDIR EXECROOTDIR "sbin" + "system admin executables" + SBIN_INSTALL_DIR) +_define_relative(LIBDIR EXECROOTDIR "${_LIBDIR_DEFAULT}" + "object code libraries" + LIB_INSTALL_DIR) + +if(WIN32) + _define_relative(LIBEXECDIR BINDIR "" + "executables for internal use by programs and libraries" + LIBEXEC_INSTALL_DIR) +else() + _define_relative(LIBEXECDIR LIBDIR "libexec" + "executables for internal use by programs and libraries" + LIBEXEC_INSTALL_DIR) +endif() + +_define_relative(CMAKEPACKAGEDIR LIBDIR "cmake" + "CMake packages, including config files" + CMAKECONFIG_INSTALL_PREFIX) + +_define_relative(PLUGINDIR QTPLUGINDIR "" + "Plugins" + PLUGIN_INSTALL_DIR) + +_define_absolute(INCLUDEDIR "include" + "C and C++ header files" + INCLUDE_INSTALL_DIR) + +_define_absolute(LOCALSTATEDIR "var" + "modifiable single-machine data") + +_define_absolute(SHAREDSTATEDIR "com" + "modifiable architecture-independent data") + +if (WIN32) + _define_relative(DATAROOTDIR BINDIR "data" + "read-only architecture-independent data root" + SHARE_INSTALL_PREFIX) +else() + _define_absolute(DATAROOTDIR "share" + "read-only architecture-independent data root" + SHARE_INSTALL_PREFIX) +endif() + +_define_relative(DATADIR DATAROOTDIR "" + "read-only architecture-independent data" + DATA_INSTALL_DIR) + +# KDE Framework-specific things +_define_relative(DOCBUNDLEDIR DATAROOTDIR "doc/HTML" + "documentation bundles generated using kdoctools" + HTML_INSTALL_DIR) +_define_relative(KCFGDIR DATAROOTDIR "config.kcfg" + "kconfig description files" + KCFG_INSTALL_DIR) +_define_relative(KCONFUPDATEDIR DATAROOTDIR "kconf_update" + "kconf_update scripts" + KCONF_UPDATE_INSTALL_DIR) +_define_relative(KAPPTEMPLATESDIR DATAROOTDIR "kdevappwizard/templates" + "KAppTemplate and KDevelop templates" + KDE_INSTALL_KTEMPLATESDIR + ) +_define_relative(KFILETEMPLATESDIR DATAROOTDIR "kdevfiletemplates/templates" + "KDevelop file templates") +_define_relative(JARDIR "" "jar" + "Java AAR/JAR files for Android") + + +# Cross-desktop or other system things +_define_relative(ICONDIR DATAROOTDIR "icons" + "icons" + ICON_INSTALL_DIR) +_define_relative(LOCALEDIR DATAROOTDIR "locale" + "knotify description files" + LOCALE_INSTALL_DIR) +_define_relative(SOUNDDIR DATAROOTDIR "sounds" + "sound files" + SOUND_INSTALL_DIR) +_define_relative(TEMPLATEDIR DATAROOTDIR "templates" + "templates" + TEMPLATES_INSTALL_DIR) +_define_relative(WALLPAPERDIR DATAROOTDIR "wallpapers" + "desktop wallpaper images" + WALLPAPER_INSTALL_DIR) +_define_relative(APPDIR DATAROOTDIR "applications" + "application desktop files" + XDG_APPS_INSTALL_DIR) +_define_relative(DESKTOPDIR DATAROOTDIR "desktop-directories" + "desktop directories" + XDG_DIRECTORY_INSTALL_DIR) +_define_relative(MIMEDIR DATAROOTDIR "mime/packages" + "mime description files" + XDG_MIME_INSTALL_DIR) +_define_relative(METAINFODIR DATAROOTDIR "metainfo" + "AppStream component metadata") +_define_relative(QCHDIR DATAROOTDIR "doc/qch" + "documentation bundles in QCH format") +_define_relative(MANDIR DATAROOTDIR "man" + "man documentation" + MAN_INSTALL_DIR) +_define_relative(INFODIR DATAROOTDIR "info" + "info documentation") +_define_relative(DBUSDIR DATAROOTDIR "dbus-1" + "D-Bus") +_define_relative(DBUSINTERFACEDIR DBUSDIR "interfaces" + "D-Bus interfaces" + DBUS_INTERFACES_INSTALL_DIR) +_define_relative(DBUSSERVICEDIR DBUSDIR "services" + "D-Bus session services" + DBUS_SERVICES_INSTALL_DIR) +_define_relative(DBUSSYSTEMSERVICEDIR DBUSDIR "system-services" + "D-Bus system services" + DBUS_SYSTEM_SERVICES_INSTALL_DIR) +_define_relative(SYSTEMDUNITDIR CMAKE_INSTALL_PREFIX "lib/systemd" + "Systemd units" + SYSTEMD_UNIT_INSTALL_DIR) +_define_relative(SYSTEMDUSERUNITDIR SYSTEMDUNITDIR "user" + "Systemd user units" + SYSTEMD_USER_UNIT_INSTALL_DIR) + + +set(_default_sysconf_dir "etc") +if (CMAKE_INSTALL_PREFIX STREQUAL "/usr") + set(_default_sysconf_dir "/etc") +endif() + +_define_absolute(SYSCONFDIR "${_default_sysconf_dir}" + "read-only single-machine data" + SYSCONF_INSTALL_DIR) +_define_relative(CONFDIR SYSCONFDIR "xdg" + "application configuration files" + CONFIG_INSTALL_DIR) +_define_relative(AUTOSTARTDIR CONFDIR "autostart" + "autostart files" + AUTOSTART_INSTALL_DIR) + + +set(_mixed_core_path_styles FALSE) +if (IS_ABSOLUTE "${KDE_INSTALL_BINDIR}") + if (NOT IS_ABSOLUTE "${KDE_INSTALL_LIBDIR}" OR NOT IS_ABSOLUTE "${KDE_INSTALL_INCLUDEDIR}") + set(_mixed_core_path_styles ) + endif() +else() + if (IS_ABSOLUTE "${KDE_INSTALL_LIBDIR}" OR IS_ABSOLUTE "${KDE_INSTALL_INCLUDEDIR}") + set(_mixed_core_path_styles TRUE) + endif() +endif() +if (_mixed_core_path_styles) + message(WARNING "KDE_INSTALL_BINDIR, KDE_INSTALL_LIBDIR and KDE_INSTALL_INCLUDEDIR should either all be absolute paths or all be relative paths.") +endif() + + +set(KDE_INSTALL_TARGETS_DEFAULT_ARGS RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT Devel + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) +if(APPLE) + set(KDE_INSTALL_TARGETS_DEFAULT_ARGS ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} + BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" ) +endif() + +if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED) + set(INSTALL_TARGETS_DEFAULT_ARGS ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) +endif() + +# new in cmake 2.8.9: this is used for all installed files which do not have a component set +# so set the default component name to the name of the project, if a project name has been set: +if(NOT "${PROJECT_NAME}" STREQUAL "Project") + set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "${PROJECT_NAME}") +endif() |