diff options
Diffstat (limited to 'kde-modules/KDEInstallDirs6.cmake')
-rw-r--r-- | kde-modules/KDEInstallDirs6.cmake | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/kde-modules/KDEInstallDirs6.cmake b/kde-modules/KDEInstallDirs6.cmake new file mode 100644 index 00000000..e0e03c10 --- /dev/null +++ b/kde-modules/KDEInstallDirs6.cmake @@ -0,0 +1,332 @@ +# 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-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> +# +# SPDX-License-Identifier: BSD-3-Clause + +#[=======================================================================[.rst: +KDEInstallDirs6 +--------------- + +Define KDE standard installation directories for Qt6/KF6 based software. + +Note that none of the variables defined by this module provide any +information about the location of already-installed KDE software. + +Also sets ``CMAKE_INSTALL_PREFIX`` to the installation prefix of ECM, +unless that variable has been already explicitly set by something else. + +Inclusion of this module defines the following variables: + +``KDE_INSTALL_<dir>`` + destination for files of a given type +``KDE_INSTALL_FULL_<dir>`` + corresponding absolute path + +where ``<dir>`` is one of (default values in parentheses and alternative, +deprecated variable name in square brackets): + +``BUNDLEDIR`` + application bundles (``/Applications/KDE``) [``BUNDLE_INSTALL_DIR``] +``EXECROOTDIR`` + executables and libraries (``<empty>``) [``EXEC_INSTALL_PREFIX``] +``BINDIR`` + user executables (``EXECROOTDIR/bin``) [``BIN_INSTALL_DIR``] +``SBINDIR`` + system admin executables (``EXECROOTDIR/sbin``) [``SBIN_INSTALL_DIR``] +``LIBDIR`` + object code libraries (``EXECROOTDIR/lib``, ``EXECROOTDIR/lib64`` or + ``EXECROOTDIR/lib/<multiarch-tuple`` on Debian) [``LIB_INSTALL_DIR``] +``LIBEXECDIR`` + executables for internal use by programs and libraries (``BINDIR`` on + Windows, ``LIBDIR/libexec`` otherwise) [``LIBEXEC_INSTALL_DIR``] +``CMAKEPACKAGEDIR`` + CMake packages, including config files (``LIBDIR/cmake``) + [``CMAKECONFIG_INSTALL_PREFIX``] +``QTPLUGINDIR`` + Qt plugins (``LIBDIR/plugins`` or qmake-qt5's ``QT_INSTALL_PLUGINS``) [``QT_PLUGIN_INSTALL_DIR``] +``PLUGINDIR`` + Plugins (``QTPLUGINDIR``) [``PLUGIN_INSTALL_DIR``] +``QMLDIR`` + QtQuick2 imports (``LIBDIR/qml`` or qmake-qt5's ``QT_INSTALL_QML``) [``QML_INSTALL_DIR``] +``INCLUDEDIR`` + C and C++ header files (``include``) [``INCLUDE_INSTALL_DIR``] +``LOCALSTATEDIR`` + modifiable single-machine data (``var``) +``SHAREDSTATEDIR`` + modifiable architecture-independent data (``com``) +``DATAROOTDIR`` + read-only architecture-independent data root (``share``) + [``SHARE_INSTALL_PREFIX``] +``DATADIR`` + read-only architecture-independent data (``DATAROOTDIR``) + [``DATA_INSTALL_DIR``] +``DOCBUNDLEDIR`` + documentation bundles generated using kdoctools + (``DATAROOTDIR/doc/HTML``) [``HTML_INSTALL_DIR``] +``KCFGDIR`` + kconfig description files (``DATAROOTDIR/config.kcfg``) + [``KCFG_INSTALL_DIR``] +``KCONFUPDATEDIR`` + kconf_update scripts (``DATAROOTDIR/kconf_update``) + [``KCONF_UPDATE_INSTALL_DIR``] +``KSERVICES6DIR`` + services for KDE Frameworks 6 (``DATAROOTDIR/kservices6``) + [``SERVICES_INSTALL_DIR``] +``KSERVICETYPES6DIR`` + service types for KDE Frameworks 6 (``DATAROOTDIR/kservicetypes6``) + [``SERVICETYPES_INSTALL_DIR``] +``KXMLGUI6DIR`` + knotify description files (``DATAROOTDIR/kxmlgui6``) + [``KXMLGUI_INSTALL_DIR``] +``KTEMPLATESDIR`` + Kapptemplate and Kdevelop templates (``kdevappwizard/templates``) +``KNOTIFY6RCDIR`` + knotify description files (``DATAROOTDIR/knotifications6``) + [``KNOTIFYRC_INSTALL_DIR``] +``ICONDIR`` + icons (``DATAROOTDIR/icons``) [``ICON_INSTALL_DIR``] +``LOCALEDIR`` + knotify description files (``DATAROOTDIR/locale``) + [``LOCALE_INSTALL_DIR``] +``SOUNDDIR`` + sound files (``DATAROOTDIR/sounds``) [``SOUND_INSTALL_DIR``] +``TEMPLATEDIR`` + templates (``DATAROOTDIR/templates``) [``TEMPLATES_INSTALL_DIR``] +``WALLPAPERDIR`` + desktop wallpaper images (``DATAROOTDIR/wallpapers``) + [``WALLPAPER_INSTALL_DIR``] +``APPDIR`` + application desktop files (``DATAROOTDIR/applications``) Since 1.1.0. + [``XDG_APPS_INSTALL_DIR``] +``DESKTOPDIR`` + desktop directories (``DATAROOTDIR/desktop-directories``) + [``XDG_DIRECTORY_INSTALL_DIR``] +``MIMEDIR`` + mime description files (``DATAROOTDIR/mime/packages``) + [``XDG_MIME_INSTALL_DIR``] +``METAINFODIR`` + AppStream component metadata files (``DATAROOTDIR/metainfo``) +``QTQCHDIR`` + documentation bundles in QCH format for Qt-extending libraries (``DATAROOTDIR/doc/qch`` or qmake-qt5's ``QT_INSTALL_DOCS``) +``QCHDIR`` + documentation bundles in QCH format (``DATAROOTDIR/doc/qch``) +``MANDIR`` + man documentation (``DATAROOTDIR/man``) [``MAN_INSTALL_DIR``] +``INFODIR`` + info documentation (``DATAROOTDIR/info``) +``DBUSDIR`` + D-Bus (``DATAROOTDIR/dbus-1``) +``DBUSINTERFACEDIR`` + D-Bus interfaces (``DBUSDIR/interfaces``) + [``DBUS_INTERFACES_INSTALL_DIR``] +``DBUSSERVICEDIR`` + D-Bus session services (``DBUSDIR/services``) + [``DBUS_SERVICES_INSTALL_DIR``] +``DBUSSYSTEMSERVICEDIR`` + D-Bus system services (``DBUSDIR/system-services``) + [``DBUS_SYSTEM_SERVICES_INSTALL_DIR``] +``SYSCONFDIR`` + read-only single-machine data + (``etc``, or ``/etc`` if ``CMAKE_INSTALL_PREFIX`` is ``/usr``) + [``SYSCONF_INSTALL_DIR``] +``CONFDIR`` + application configuration files (``SYSCONFDIR/xdg``) + [``CONFIG_INSTALL_DIR``] +``AUTOSTARTDIR`` + autostart files (``CONFDIR/autostart``) [``AUTOSTART_INSTALL_DIR``] +``LOGGINGCATEGORIESDIR`` + Qt logging categories files directory (``DATAROOTDIR/qlogging-categories6``) +``JARDIR`` + Java AAR/JAR files for Android. +``SYSTEMDUNITDIR`` + Systemd Units (``lib/systemd``) + [``SYSTEMD_UNIT_INSTALL_DIR``]. +``SYSTEMDUSERUNITDIR`` + Systemd User Units (``lib/systemd/user``) + [``SYSTEMD_USER_UNIT_INSTALL_DIR``]. + +TODO TODO TODO +If ``KDE_INSTALL_USE_QT_SYS_PATHS`` is set to TRUE before including this +module, the default values for some variables are instead queried from +Qt6's qmake (where mentioned in the parentheses above). +If not set, it will default to TRUE if Qt6's qmake is found and +it's ``QT_INSTALL_PREFIX`` is the same as ``CMAKE_INSTALL_PREFIX``, +otherwise default to FALSE. +This variable should NOT be set from within CMakeLists.txt files, instead +is intended to be set manually when configuring a project which uses +KDEInstallDirs (e.g. by packagers). + +If ``KDE_INSTALL_DIRS_NO_DEPRECATED`` is set to TRUE before including this +module, the deprecated variables (listed in the square brackets above) are +not defined. + +In addition, for each ``KDE_INSTALL_*`` variable, an equivalent +``CMAKE_INSTALL_*`` variable is defined. If +``KDE_INSTALL_DIRS_NO_DEPRECATED`` is set to TRUE, only those variables +defined by the ``GNUInstallDirs`` module (shipped with CMake) are defined. +If ``KDE_INSTALL_DIRS_NO_CMAKE_VARIABLES`` is set to TRUE, no variables with +a ``CMAKE_`` prefix will be defined by this module (other than +CMAKE_INSTALL_DEFAULT_COMPONENT_NAME - see below). + +The ``KDE_INSTALL_<dir>`` variables (or their ``CMAKE_INSTALL_<dir>`` or +deprecated counterparts) may be passed to the DESTINATION options of +``install()`` commands for the corresponding file type. They are set in the +CMake cache, and so the defaults above can be overridden by users. + +Note that the ``KDE_INSTALL_<dir>``, ``CMAKE_INSTALL_<dir>`` or deprecated +form of the variable can be changed using CMake command line variable +definitions; in either case, all forms of the variable will be affected. The +effect of passing multiple forms of the same variable on the command line +(such as ``KDE_INSTALL_BINDIR`` and ``CMAKE_INSTALL_BINDIR`` is undefined. + +The variable ``KDE_INSTALL_TARGETS_DEFAULT_ARGS`` is also defined (along with +the deprecated form ``INSTALL_TARGETS_DEFAULT_ARGS``). This should be used +when libraries or user-executable applications are installed, in the +following manner: + +.. code-block:: cmake + + install(TARGETS mylib myapp ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) + +It MUST NOT be used for installing plugins, system admin executables or +executables only intended for use internally by other code. Those should use +``KDE_INSTALL_PLUGINDIR``, ``KDE_INSTALL_SBINDIR`` or +``KDE_INSTALL_LIBEXECDIR`` respectively. + +Additionally, ``CMAKE_INSTALL_DEFAULT_COMPONENT_NAME`` will be set to +``${PROJECT_NAME}`` to provide a sensible default for this CMake option. + +Note that mixing absolute and relative paths, particularly for ``BINDIR``, +``LIBDIR`` and ``INCLUDEDIR``, can cause issues with exported targets. Given +that the default values for these are relative paths, relative paths should +be used on the command line when possible (eg: use +``-DKDE_INSTALL_LIBDIR=lib64`` instead of +``-DKDE_INSTALL_LIBDIR=/usr/lib/lib64`` to override the library directory). + +Since 5.82.0. + +The ``KDE_INSTALL_PREFIX_SCRIPT`` option will install a ${CMAKE_INSTALL_PREFIX}/prefix.sh +file that allows to easily incorporate the necessary environment variables +for the prefix into a process. +#]=======================================================================] + + +include(${CMAKE_CURRENT_LIST_DIR}/KDEInstallDirsCommon.cmake) + +if(WIN32) + _define_non_cache(LIBEXECDIR_KF6 "${CMAKE_INSTALL_LIBEXECDIR}") +else() + _define_non_cache(LIBEXECDIR_KF6 "${CMAKE_INSTALL_LIBEXECDIR}/kf6") +endif() + +# TODO TODO TODO +#include("${ECM_MODULE_DIR}/ECMQueryQmake.cmake") + +set(_default_KDE_INSTALL_USE_QT_SYS_PATHS OFF) +if(NOT DEFINED KDE_INSTALL_USE_QT_SYS_PATHS) + query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX TRY) + if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}") + message(STATUS "Installing in the same prefix as Qt, adopting their path scheme.") + set(_default_KDE_INSTALL_USE_QT_SYS_PATHS ON) + endif() +endif() + +option (KDE_INSTALL_USE_QT_SYS_PATHS "Install mkspecs files, QCH files for Qt-based libs, Plugins and Imports to the Qt 5 install dir" "${_default_KDE_INSTALL_USE_QT_SYS_PATHS}") +# TODO TODO TODO +#if(KDE_INSTALL_USE_QT_SYS_PATHS) +# # Qt-specific vars +# query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX TRY) +# query_qmake(qt_plugins_dir QT_INSTALL_PLUGINS) +# +# if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}") +# file(RELATIVE_PATH qt_plugins_dir ${qt_install_prefix_dir} ${qt_plugins_dir}) +# endif() +# _define_absolute(QTPLUGINDIR ${qt_plugins_dir} +# "Qt plugins" +# QT_PLUGIN_INSTALL_DIR) +# +# query_qmake(qt_qml_dir QT_INSTALL_QML) +# +# if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}") +# file(RELATIVE_PATH qt_qml_dir ${qt_install_prefix_dir} ${qt_qml_dir}) +# endif() +# _define_absolute(QMLDIR ${qt_qml_dir} +# "QtQuick2 imports" +# QML_INSTALL_DIR) +#else() + set(_pluginsDirParent LIBDIR) + if (ANDROID) + set(_pluginsDirParent) + #androiddeployqt wants plugins right in the prefix + endif() + _define_relative(QTPLUGINDIR "${_pluginsDirParent}" "plugins" + "Qt plugins" + QT_PLUGIN_INSTALL_DIR) + + _define_relative(QMLDIR LIBDIR "qml" + "QtQuick2 imports" + QML_INSTALL_DIR) +#endif() + +_define_non_cache(INCLUDEDIR_KF6 "${CMAKE_INSTALL_INCLUDEDIR}/KF6") + +_define_non_cache(DATADIR_KF5 "${CMAKE_INSTALL_DATADIR}/kf6") + +# TODO TODO TODO +# Qt-specific data vars +#if(KDE_INSTALL_USE_QT_SYS_PATHS) +# query_qmake(qt_docs_dir QT_INSTALL_DOCS) +# +# _define_absolute(QTQCHDIR ${qt_docs_dir} +# "documentation bundles in QCH format for Qt-extending libraries") +#else() + _define_relative(QTQCHDIR DATAROOTDIR "doc/qch" + "documentation bundles in QCH format for Qt-extending libraries") +#endif() + + +# KDE Framework-specific things +_define_relative(KSERVICES6DIR DATAROOTDIR "kservices6" + "services for KDE Frameworks 6" + SERVICES_INSTALL_DIR) +_define_relative(KSERVICETYPES6DIR DATAROOTDIR "kservicetypes6" + "service types for KDE Frameworks 6" + SERVICETYPES_INSTALL_DIR) +_define_relative(KNOTIFY6RCDIR DATAROOTDIR "knotifications6" + "knotify description files" + KNOTIFYRC_INSTALL_DIR) +_define_relative(KXMLGUI6DIR DATAROOTDIR "kxmlgui6" + "kxmlgui .rc files" + KXMLGUI_INSTALL_DIR) +_define_relative(LOGGINGCATEGORIESDIR DATAROOTDIR "qlogging-categories6" + "Qt Logging categories files") + + +# For more documentation see above. +# Later on it will be possible to extend this for installing OSX frameworks +# The COMPONENT Devel argument has the effect that static libraries belong to the +# "Devel" install component. If we use this also for all install() commands +# for header files, it will be possible to install +# -everything: make install OR cmake -P cmake_install.cmake +# -only the development files: cmake -DCOMPONENT=Devel -P cmake_install.cmake +# -everything except the development files: cmake -DCOMPONENT=Unspecified -P cmake_install.cmake +# This can then also be used for packaging with cpack. +# FIXME: why is INCLUDES (only) set for ARCHIVE targets? +set(KF6_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_KF6}" +) + +# on the Mac support an extra install directory for application bundles +if(APPLE) + set(KF6_INSTALL_TARGETS_DEFAULT_ARGS ${KF6_INSTALL_TARGETS_DEFAULT_ARGS} + BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" ) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/KDESetupPrefixScript.cmake) |