# SPDX-FileCopyrightText: 2014-2015 Alex Merry # SPDX-FileCopyrightText: 2013 Stephen Kelly # SPDX-FileCopyrightText: 2012 David Faure # SPDX-FileCopyrightText: 2007 Matthias Kretz # SPDX-FileCopyrightText: 2006-2007 Laurent Montel # SPDX-FileCopyrightText: 2006-2013 Alex Neundorf # SPDX-FileCopyrightText: 2021 Volker Krause # SPDX-FileCopyrightText: 2021 Ahmad Samir # # 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_`` destination for files of a given type ``KDE_INSTALL_FULL_`` corresponding absolute path where ```` is one of (default values in parentheses): ``BUNDLEDIR`` application bundles (``/Applications/KDE``) ``EXECROOTDIR`` executables and libraries (````) ``BINDIR`` user executables (``EXECROOTDIR/bin``) ``SBINDIR`` system admin executables (``EXECROOTDIR/sbin``) ``LIBDIR`` object code libraries (``EXECROOTDIR/lib``, ``EXECROOTDIR/lib64`` or ``EXECROOTDIR/lib/`` variables 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_`` or ``CMAKE_INSTALL_`` variables can be changed using CMake command line variable definitions; in either case, both 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. 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). 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. #]=======================================================================] set(KDE_INSTALL_DIRS_NO_DEPRECATED TRUE) include(${CMAKE_CURRENT_LIST_DIR}/KDEInstallDirsCommon.cmake) if(WIN32) _define_non_cache(LIBEXECDIR_KF "${CMAKE_INSTALL_LIBEXECDIR}") else() _define_non_cache(LIBEXECDIR_KF "${CMAKE_INSTALL_LIBEXECDIR}/kf6") endif() include(${ECM_MODULE_DIR}/ECMQueryQt.cmake) ecm_query_qt(qt_install_prefix_dir QT_INSTALL_PREFIX) set(_qt_prefix_is_cmake_install_prefix FALSE) if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}") set(_qt_prefix_is_cmake_install_prefix TRUE) endif() set(_default_KDE_INSTALL_USE_QT_SYS_PATHS OFF) if(NOT DEFINED KDE_INSTALL_USE_QT_SYS_PATHS) if(_qt_prefix_is_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 6 install dir" "${_default_KDE_INSTALL_USE_QT_SYS_PATHS}" ) if(KDE_INSTALL_USE_QT_SYS_PATHS) # Qt-specific vars ecm_query_qt(qt_plugins_dir QT_INSTALL_PLUGINS) if(_qt_prefix_is_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") ecm_query_qt(qt_qml_dir QT_INSTALL_QML) if(_qt_prefix_is_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") else() set(_pluginsDirParent LIBDIR) if (ANDROID) set(_pluginsDirParent) #androiddeployqt wants plugins right in the prefix endif() _define_relative(QTPLUGINDIR "${_pluginsDirParent}" "plugins" "Qt plugins") _define_relative(QMLDIR LIBDIR "qml" "QtQuick2 imports") endif() _define_relative(PLUGINDIR QTPLUGINDIR "" "Plugins") _define_non_cache(INCLUDEDIR_KF "${CMAKE_INSTALL_INCLUDEDIR}/KF6") _define_non_cache(DATADIR_KF "${CMAKE_INSTALL_DATADIR}/kf6") # Qt-specific data vars if(KDE_INSTALL_USE_QT_SYS_PATHS) ecm_query_qt(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(KNOTIFYRCDIR DATAROOTDIR "knotifications6" "knotify description files") # TODO MOVE TO KXMLGUI _define_relative(KXMLGUIDIR DATAROOTDIR "kxmlgui5" "kxmlgui .rc files") _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. set(KDE_INSTALL_TARGETS_DEFAULT_ARGS RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" OBJECTS DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT Devel ) if(APPLE) set(KDE_INSTALL_TARGETS_DEFAULT_ARGS ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} BUNDLE DESTINATION "${KDE_INSTALL_BUNDLEDIR}" ) endif() set(KF_INSTALL_TARGETS_DEFAULT_ARGS RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" OBJECTS DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT Devel ) # on macOS support an extra install directory for application bundles if(APPLE) set(KF_INSTALL_TARGETS_DEFAULT_ARGS ${KF_INSTALL_TARGETS_DEFAULT_ARGS} BUNDLE DESTINATION "${KDE_INSTALL_BUNDLEDIR}" ) endif() include(${CMAKE_CURRENT_LIST_DIR}/KDESetupPrefixScript.cmake)