diff options
| -rw-r--r-- | kde-modules/KDEInstallDirs.cmake | 203 | ||||
| -rw-r--r-- | tests/CMakeLists.txt | 45 | ||||
| -rw-r--r-- | tests/KDEInstallDirsTest/not_cache_variable/CMakeLists.txt | 39 | ||||
| -rw-r--r-- | tests/KDEInstallDirsTest/vars_in_sync/CMakeLists.txt | 174 | ||||
| -rw-r--r-- | tests/KDEInstallDirsTest/vars_in_sync/main.c | 4 | 
5 files changed, 387 insertions, 78 deletions
| diff --git a/kde-modules/KDEInstallDirs.cmake b/kde-modules/KDEInstallDirs.cmake index 46d3a5c6..e4378dca 100644 --- a/kde-modules/KDEInstallDirs.cmake +++ b/kde-modules/KDEInstallDirs.cmake @@ -9,9 +9,9 @@  #  # Inclusion of this module defines the following variables:  # -# ``CMAKE_INSTALL_<dir>`` +# ``KDE_INSTALL_<dir>``  #     destination for files of a given type -# ``CMAKE_INSTALL_FULL_<dir>`` +# ``KDE_INSTALL_FULL_<dir>``  #     corresponding absolute path  #  # where ``<dir>`` is one of (default values in parentheses and alternative, @@ -115,7 +115,7 @@  #     [``DBUS_SYSTEM_SERVICES_INSTALL_DIR``]  # ``SYSCONFDIR``  #     read-only single-machine data -#     (``etc``, or ``/etc`` if ``CMAKE_INSTALL_DIR`` is ``/usr``) +#     (``etc``, or ``/etc`` if ``CMAKE_INSTALL_PREFIX`` is ``/usr``)  #     [``SYSCONF_INSTALL_DIR``]  # ``CONFDIR``  #     application configuration files (``SYSCONFDIR/xdg``) @@ -123,28 +123,44 @@  # ``AUTOSTARTDIR``  #     autostart files (``CONFDIR/autostart``) [``AUTOSTART_INSTALL_DIR``]  # -# The ``CMAKE_INSTALL_<dir>`` variables (or their 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. +# 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.  # -# Note that either the ``CMAKE_INSTALL_<dir>`` form of the variable or the -# deprecated form can be changed using CMake command line variable definitions; -# in either case, both forms of the variable will be affected. The effect of -# passing both forms on the command line is undefined. +# 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.  # -# The variable ``INSTALL_TARGETS_DEFAULT_ARGS`` is also defined.  This should -# be used when libraries or user-executable applications are installed, in the +# 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 ${INSTALL_TARGETS_DEFAULT_ARGS}) +#   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 -# ``CMAKE_INSTALL_PLUGINDIR``, ``CMAKE_INSTALL_SBINDIR`` or -# ``CMAKE_INSTALL_LIBEXECDIR`` respectively. +# ``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.  #=============================================================================  # Copyright 2014      Alex Merry <alex.merry@kde.org> @@ -196,6 +212,23 @@ if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GN    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 @@ -203,18 +236,25 @@ endif()  # 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 CMAKE_INSTALL_BINDIR) +# 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 CMAKE_INSTALL_DATAROOTDIR) -# subdir:    the path of the default value of CMAKE_INSTALL_${varname} -#            relative to CMAKE_INSTALL_${parent}: no leading / +#            (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(${ARGC} GREATER 4) +    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) +        if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED OR NOT _list_offset EQUAL -1) +            set(_cmakename CMAKE_INSTALL_${varname}) +        endif() +    endif()      # Surprisingly complex logic to deal with joining paths.      # Note that we cannot use arg vars directly in if() because macro args are @@ -223,14 +263,14 @@ macro(_define_relative varname parent subdir docstring)      set(_subdir "${subdir}")      if(_parent AND _subdir)          set(_docpath "${_parent}/${_subdir}") -        if(CMAKE_INSTALL_${_parent}) -            set(_realpath "${CMAKE_INSTALL_${_parent}}/${_subdir}") +        if(KDE_INSTALL_${_parent}) +            set(_realpath "${KDE_INSTALL_${_parent}}/${_subdir}")          else()              set(_realpath "${_subdir}")          endif()      elseif(_parent)          set(_docpath "${_parent}") -        set(_realpath "${CMAKE_INSTALL_${_parent}}") +        set(_realpath "${KDE_INSTALL_${_parent}}")      else()          set(_docpath "${_subdir}")          set(_realpath "${_subdir}") @@ -239,43 +279,59 @@ macro(_define_relative varname parent subdir docstring)      if(${_oldstylename})          # The old name was given (probably on the command line): move          # it to the new name -        set(CMAKE_INSTALL_${varname} "${${_oldstylename}}" +        set(KDE_INSTALL_${varname} "${${_oldstylename}}"              CACHE PATH                    "${docstring} (${_docpath})"                    FORCE)          unset(${_oldstylename} CACHE) -    elseif(NOT CMAKE_INSTALL_${varname}) -        set(CMAKE_INSTALL_${varname} "" +        if(_cmakename AND ${_cmakename}) +            unset(${_cmakename} CACHE) +        endif() +    elseif(${_cmakename}) +        # 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) +        unset(${_cmakename} CACHE) +    elseif(NOT KDE_INSTALL_${varname}) +        set(KDE_INSTALL_${varname} ""              CACHE PATH "${docstring} (${_docpath})") -        set(CMAKE_INSTALL_${varname} "${_realpath}") +        set(KDE_INSTALL_${varname} "${_realpath}")      else() -        get_property(_iscached CACHE CMAKE_INSTALL_${varname} PROPERTY VALUE SET) +        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 CMAKE_INSTALL_${varname} +            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 CMAKE_INSTALL_${varname} +            set_property(CACHE KDE_INSTALL_${varname}                  PROPERTY TYPE PATH)          endif()      endif() -    if(_oldstylename) -        set(${_oldstylename} "${CMAKE_INSTALL_${varname}}") +    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() -    mark_as_advanced(CMAKE_INSTALL_${varname}) +    if(_cmakename) +        set(${_cmakename} "${KDE_INSTALL_${varname}}") +        set(CMAKE_INSTALL_FULL_${varname} "${KDE_INSTALL_FULL_${varname}}") +    endif() -    if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${varname}}) -        set(CMAKE_INSTALL_FULL_${varname} -            "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${varname}}") -    else() -        set(CMAKE_INSTALL_FULL_${varname} "${CMAKE_INSTALL_${varname}}") +    if(_oldstylename) +        set(${_oldstylename} "${KDE_INSTALL_${varname}}")      endif()  endmacro() -# varname:   the variable name suffix (eg: BINDIR for CMAKE_INSTALL_BINDIR) -# dir:       the relative path of the default value of CMAKE_INSTALL_${varname} +# 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 @@ -283,6 +339,24 @@ 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" @@ -309,16 +383,16 @@ if(WIN32)      _define_relative(LIBEXECDIR BINDIR ""          "executables for internal use by programs and libraries"          LIBEXEC_INSTALL_DIR) -    set(CMAKE_INSTALL_LIBEXECDIR_KF5 "${CMAKE_INSTALL_LIBEXECDIR}") -    set(CMAKE_INSTALL_FULL_LIBEXECDIR_KF5 "${CMAKE_INSTALL_FULL_LIBEXECDIR}") +    _define_non_cache(LIBEXECDIR_KF5 "${CMAKE_INSTALL_LIBEXECDIR}")  else()      _define_relative(LIBEXECDIR LIBDIR "libexec"          "executables for internal use by programs and libraries"          LIBEXEC_INSTALL_DIR) -    set(CMAKE_INSTALL_LIBEXECDIR_KF5 "${CMAKE_INSTALL_LIBEXECDIR}/kf5") -    set(CMAKE_INSTALL_FULL_LIBEXECDIR_KF5 "${CMAKE_INSTALL_FULL_LIBEXECDIR}/kf5") +    _define_non_cache(LIBEXECDIR_KF5 "${CMAKE_INSTALL_LIBEXECDIR}/kf5") +endif() +if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED) +    set(KF5_LIBEXEC_INSTALL_DIR "${CMAKE_INSTALL_LIBEXECDIR_KF5}")  endif() -set(KF5_LIBEXEC_INSTALL_DIR "${CMAKE_INSTALL_LIBEXECDIR_KF5}")  _define_relative(CMAKEPACKAGEDIR LIBDIR "cmake"      "CMake packages, including config files"      CMAKECONFIG_INSTALL_PREFIX) @@ -366,9 +440,10 @@ _define_relative(PLUGINDIR QTPLUGINDIR ""  _define_absolute(INCLUDEDIR "include"      "C and C++ header files"      INCLUDE_INSTALL_DIR) -set(CMAKE_INSTALL_INCLUDEDIR_KF5 "${CMAKE_INSTALL_INCLUDEDIR}/KF5") -set(CMAKE_INSTALL_FULL_INCLUDEDIR_KF5 "${CMAKE_INSTALL_FULL_INCLUDEDIR}/KF5") -set(KF5_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR_KF5}") +_define_non_cache(INCLUDEDIR_KF5 "${CMAKE_INSTALL_INCLUDEDIR}/kf5") +if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED) +    set(KF5_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR_KF5}") +endif()  _define_absolute(LOCALSTATEDIR "var"      "modifiable single-machine data") @@ -386,9 +461,10 @@ _define_absolute(DATAROOTDIR "share"  _define_relative(DATADIR DATAROOTDIR ""      "read-only architecture-independent data"      DATA_INSTALL_DIR) -set(CMAKE_INSTALL_DATADIR_KF5 "${CMAKE_INSTALL_DATADIR}/kf5") -set(CMAKE_INSTALL_FULL_DATADIR_KF5 "${CMAKE_INSTALL_FULL_DATADIR}/kf5") -set(KF5_DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR_KF5}") +_define_non_cache(DATADIR_KF5 "${CMAKE_INSTALL_DATADIR}/kf5") +if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED) +    set(KF5_DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR_KF5}") +endif()  # KDE Framework-specific things  _define_relative(DOCBUNDLEDIR DATAROOTDIR "doc/HTML" @@ -488,10 +564,10 @@ _define_relative(AUTOSTARTDIR CONFDIR "autostart"  #   -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(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}" +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}"  )  set(KF5_INSTALL_TARGETS_DEFAULT_ARGS  RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"                                        LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" @@ -499,17 +575,20 @@ set(KF5_INSTALL_TARGETS_DEFAULT_ARGS  RUNTIME DESTINATION "${CMAKE_INSTALL_BINDI                                        INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR_KF5}"  ) -  # on the Mac support an extra install directory for application bundles  if(APPLE) -  set(INSTALL_TARGETS_DEFAULT_ARGS  ${INSTALL_TARGETS_DEFAULT_ARGS} -                                    BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" ) -  set(KF5_INSTALL_TARGETS_DEFAULT_ARGS  ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} -                                    BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" ) +    set(KDE_INSTALL_TARGETS_DEFAULT_ARGS  ${INSTALL_TARGETS_DEFAULT_ARGS} +                                          BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" ) +    set(KF5_INSTALL_TARGETS_DEFAULT_ARGS  ${KF5_INSTALL_TARGETS_DEFAULT_ARGS} +                                          BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" )  endif(APPLE) +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}") +    set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "${PROJECT_NAME}")  endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0ee544a5..fe160b8c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,20 +10,24 @@ add_subdirectory(ECMGeneratePkgConfigFile)  # a macro for tests that have a simple format where the name matches the  # directory and project -macro(ADD_TEST_MACRO NAME COMMAND) -  string(REPLACE "." "/" dir "${NAME}") -  string(REGEX REPLACE "[^.]*\\." "" proj "${NAME}") -  add_test(${NAME} ${CMAKE_CTEST_COMMAND} -    --build-and-test -    "${CMAKE_CURRENT_SOURCE_DIR}/${dir}" -    "${CMAKE_CURRENT_BINARY_DIR}/${dir}" -    --build-two-config -    --build-generator ${CMAKE_GENERATOR} -    --build-makeprogram ${CMAKE_MAKE_PROGRAM} -    --build-project ${proj} -    ${${NAME}_EXTRA_OPTIONS} -    --test-command ${COMMAND} ${ARGN}) -endmacro(ADD_TEST_MACRO) +macro(add_test_variant NAME BASE COMMAND) +    string(REPLACE "." "/" src_dir "${BASE}") +    string(REPLACE "." "/" build_dir "${NAME}") +    string(REGEX REPLACE "[^.]*\\." "" proj "${NAME}") +    add_test(${NAME} ${CMAKE_CTEST_COMMAND} +        --build-and-test +        "${CMAKE_CURRENT_SOURCE_DIR}/${src_dir}" +        "${CMAKE_CURRENT_BINARY_DIR}/${build_dir}" +        --build-two-config +        --build-generator ${CMAKE_GENERATOR} +        --build-makeprogram ${CMAKE_MAKE_PROGRAM} +        --build-project ${proj} +        ${${NAME}_EXTRA_OPTIONS} +        --test-command ${COMMAND} ${ARGN}) +endmacro() +macro(add_test_macro NAME) +    add_test_variant("${NAME}" "${NAME}" ${ARGN}) +endmacro()  find_package(Qt5LinguistTools CONFIG) @@ -32,9 +36,22 @@ add_test_macro(ExecuteKDEModules dummy)  add_test_macro(KDEInstallDirsTest.vars_defined dummy)  add_test_macro(KDEInstallDirsTest.not_cache_variable dummy) + +add_test_variant(KDEInstallDirsTest.vars_in_sync_no_args +                 KDEInstallDirsTest.vars_in_sync dummy) + +set(KDEInstallDirsTest.vars_in_sync_args_EXTRA_OPTIONS +    --build-options -DCMAKE_INSTALL_DATADIR=altdata +                    -DKDE_INSTALL_BINDIR=altbin +                    -DLIB_INSTALL_DIR=altlib +    ) +add_test_variant(KDEInstallDirsTest.vars_in_sync_args +                 KDEInstallDirsTest.vars_in_sync dummy) +  set(KDEInstallDirsTest.usr_vars_defined_EXTRA_OPTIONS      --build-options -DCMAKE_INSTALL_PREFIX=/usr)  add_test_macro(KDEInstallDirsTest.usr_vars_defined dummy) +  find_package(Qt5Core QUIET)  if (TARGET Qt5::qmake)      set(KDEInstallDirsTest.qt_vars_defined_EXTRA_OPTIONS diff --git a/tests/KDEInstallDirsTest/not_cache_variable/CMakeLists.txt b/tests/KDEInstallDirsTest/not_cache_variable/CMakeLists.txt index ea62d95b..8ddbb27a 100644 --- a/tests/KDEInstallDirsTest/not_cache_variable/CMakeLists.txt +++ b/tests/KDEInstallDirsTest/not_cache_variable/CMakeLists.txt @@ -4,9 +4,44 @@ cmake_minimum_required(VERSION 2.8)  set(ECM_KDE_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../kde-modules)  set(ECM_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../modules) +set(CMAKE_MODULE_PATH "${ECM_KDE_MODULE_DIR}") -set(CMAKE_INSTALL_LIBDIR "foo") -include(${ECM_KDE_MODULE_DIR}/KDEInstallDirs.cmake) +set(KDE_INSTALL_BINDIR "altbin") +set(CMAKE_INSTALL_DATADIR "altdata") +set(LIB_INSTALL_DIR "altlib") + +include(KDEInstallDirs) + + +include(../var_list.cmake) +include(../../test_helpers.cmake) + +message(STATUS "Checking result of setting KDE_INSTALL_BINDIR") +assert_var_str_value(KDE_INSTALL_BINDIR "altbin") +if(should_set_CMAKE_INSTALL_BINDIR) +    assert_var_str_value(CMAKE_INSTALL_BINDIR "altbin") +endif() +if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED) +    assert_var_str_value(BIN_INSTALL_DIR "altbin") +endif() + +if(should_set_CMAKE_INSTALL_DATADIR) +    message(STATUS "Checking result of setting CMAKE_INSTALL_DATADIR") +    assert_var_str_value(KDE_INSTALL_DATADIR "altdata") +    assert_var_str_value(CMAKE_INSTALL_DATADIR "altdata") +    if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED) +        assert_var_str_value(DATA_INSTALL_DIR "altdata") +    endif() +endif() + +if(NOT KDE_INSTALL_DIRS_NO_DEPRECATED) +    message(STATUS "Checking result of setting LIB_INSTALL_DIR") +    assert_var_str_value(KDE_INSTALL_LIBDIR "altlib") +    if(should_set_CMAKE_INSTALL_LIBDIR) +        assert_var_str_value(CMAKE_INSTALL_LIBDIR "altlib") +    endif() +    assert_var_str_value(LIB_INSTALL_DIR "altlib") +endif()  add_executable(dummy main.c)  set_target_properties(dummy PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/tests/KDEInstallDirsTest/vars_in_sync/CMakeLists.txt b/tests/KDEInstallDirsTest/vars_in_sync/CMakeLists.txt new file mode 100644 index 00000000..4249ed0d --- /dev/null +++ b/tests/KDEInstallDirsTest/vars_in_sync/CMakeLists.txt @@ -0,0 +1,174 @@ +project(KDEInstallDirs.vars_in_sync) +cmake_minimum_required(VERSION 2.8.12) + +set(ECM_KDE_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../kde-modules) +set(ECM_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../modules) +set(CMAKE_MODULE_PATH "${ECM_KDE_MODULE_DIR}") +include(KDEInstallDirs) + +set(var_suffixes +    APPDIR +    AUTOSTARTDIR +    BINDIR +    CMAKEPACKAGEDIR +    CONFDIR +    DATADIR +    DATADIR_KF5 +    DATAROOTDIR +    DBUSDIR +    DBUSINTERFACEDIR +    DBUSSERVICEDIR +    DBUSSYSTEMSERVICEDIR +    DESKTOPDIR +    DOCBUNDLEDIR +    EXECROOTDIR +    ICONDIR +    INCLUDEDIR +    INCLUDEDIR_KF5 +    INFODIR +    KCFGDIR +    KCONFUPDATEDIR +    KNOTIFY5RCDIR +    KXMLGUI5DIR +    KSERVICES5DIR +    KSERVICETYPES5DIR +    LIBDIR +    LIBEXECDIR +    LIBEXECDIR_KF5 +    LOCALEDIR +    LOCALSTATEDIR +    MANDIR +    MIMEDIR +    METAINFODIR +    PLUGINDIR +    QMLDIR +    QTPLUGINDIR +    QTQUICKIMPORTSDIR +    SBINDIR +    SHAREDSTATEDIR +    SOUNDDIR +    SYSCONFDIR +    TEMPLATEDIR +    WALLPAPERDIR) + +set(COMPAT_APPDIR XDG_APPS_INSTALL_DIR) +set(COMPAT_AUTOSTARTDIR AUTOSTART_INSTALL_DIR) +set(COMPAT_BINDIR BIN_INSTALL_DIR) +set(COMPAT_CMAKEPACKAGEDIR CMAKECONFIG_INSTALL_PREFIX) +set(COMPAT_CONFDIR CONFIG_INSTALL_DIR) +set(COMPAT_DATADIR DATA_INSTALL_DIR) +set(COMPAT_DATADIR_KF5 KF5_DATA_INSTALL_DIR) +set(COMPAT_DATAROOTDIR SHARE_INSTALL_PREFIX) +set(COMPAT_DBUSINTERFACEDIR DBUS_INTERFACES_INSTALL_DIR) +set(COMPAT_DBUSSERVICEDIR DBUS_SERVICES_INSTALL_DIR) +set(COMPAT_DBUSSYSTEMSERVICEDIR DBUS_SYSTEM_SERVICES_INSTALL_DIR) +set(COMPAT_DESKTOPDIR XDG_DIRECTORY_INSTALL_DIR) +set(COMPAT_DOCBUNDLEDIR HTML_INSTALL_DIR) +set(COMPAT_EXECROOTDIR EXEC_INSTALL_PREFIX) +set(COMPAT_ICONDIR ICON_INSTALL_DIR) +set(COMPAT_INCLUDEDIR INCLUDE_INSTALL_DIR) +set(COMPAT_INCLUDEDIR_KF5 KF5_INCLUDE_INSTALL_DIR) +set(COMPAT_KCFGDIR KCFG_INSTALL_DIR) +set(COMPAT_KCONFUPDATEDIR KCONF_UPDATE_INSTALL_DIR) +set(COMPAT_KNOTIFY5RCDIR KNOTIFYRC_INSTALL_DIR) +set(COMPAT_KXMLGUI5DIR KXMLGUI_INSTALL_DIR) +set(COMPAT_KSERVICES5DIR SERVICES_INSTALL_DIR) +set(COMPAT_KSERVICETYPES5DIR SERVICETYPES_INSTALL_DIR) +set(COMPAT_LIBDIR LIB_INSTALL_DIR) +set(COMPAT_LIBEXECDIR LIBEXEC_INSTALL_DIR) +set(COMPAT_LIBEXECDIR_KF5 KF5_LIBEXEC_INSTALL_DIR) +set(COMPAT_LOCALEDIR LOCALE_INSTALL_DIR) +set(COMPAT_MANDIR MAN_INSTALL_DIR) +set(COMPAT_MIMEDIR XDG_MIME_INSTALL_DIR) +set(COMPAT_PLUGINDIR PLUGIN_INSTALL_DIR) +set(COMPAT_QMLDIR QML_INSTALL_DIR) +set(COMPAT_QTPLUGINDIR QT_PLUGIN_INSTALL_DIR) +set(COMPAT_QTQUICKIMPORTSDIR IMPORTS_INSTALL_DIR) +set(COMPAT_SBINDIR SBIN_INSTALL_DIR) +set(COMPAT_SOUNDDIR SOUND_INSTALL_DIR) +set(COMPAT_SYSCONFDIR SYSCONF_INSTALL_DIR) +set(COMPAT_TEMPLATEDIR TEMPLATES_INSTALL_DIR) +set(COMPAT_WALLPAPERDIR WALLPAPER_INSTALL_DIR) +if(APPLE) +    set(COMPAT_BUNDLEDIR BUNDLE_INSTALL_DIR) +    list(APPEND var_suffixes BUNDLEDIR) +endif() + +set(gnu_install_dirs_suffixes +    BINDIR +    SBINDIR +    LIBEXECDIR +    SYSCONFDIR +    SHAREDSTATEDIR +    LOCALSTATEDIR +    LIBDIR +    INCLUDEDIR +    OLDINCLUDEDIR +    DATAROOTDIR +    DATADIR +    INFODIR +    LOCALEDIR +    MANDIR +    DOCDIR) + +macro(assert_defined varname) +    if(NOT DEFINED ${varname}) +        message(SEND_ERROR "${varname} is not defined.") +    endif() +endmacro() +macro(assert_non_empty varname) +    assert_defined(${varname}) +    if(NOT ${varname}) +        message(SEND_ERROR "${varname} is empty") +    endif() +endmacro() +macro(assert_str_equal varname exp_varname) +    assert_defined(${varname}) +    if(NOT ${varname} STREQUAL ${exp_varname}) +        message(SEND_ERROR "${varname} is '${${varname}}', expecting '${${exp_varname}}'.") +    endif() +endmacro() +set(FOO bax) +assert_defined(FOO) +set(BAR bax) +assert_str_equal(FOO BAR) + +foreach(suffix ${var_suffixes}) +    assert_defined(KDE_INSTALL_${suffix}) +    assert_defined(KDE_INSTALL_FULL_${suffix}) + +    set(should_have_cmake_var TRUE) +    if(KDE_INSTALL_DIRS_NO_CMAKE_VARIABLES) +        set(should_have_cmake_var FALSE) +    elseif(KDE_INSTALL_DIRS_NO_DEPRECATED) +        list(FIND gnu_install_dirs_suffixes "${suffix}" _list_offset) +        if(_list_offset EQUAL -1) +            set(should_have_cmake_var FALSE) +        endif() +    endif() +    if(should_have_cmake_var) +        assert_str_equal(CMAKE_INSTALL_${suffix} KDE_INSTALL_${suffix}) +        assert_str_equal(CMAKE_INSTALL_FULL_${suffix} KDE_INSTALL_FULL_${suffix}) +    endif() + +    set(should_have_compat_var TRUE) +    if(NOT DEFINED COMPAT_${suffix}) +        set(should_have_compat_var FALSE) +    elseif(KDE_INSTALL_DIRS_NO_DEPRECATED) +        set(should_have_compat_var FALSE) +    endif() +    if(should_have_compat_var) +        assert_str_equal(${COMPAT_${suffix}} KDE_INSTALL_${suffix}) +    endif() +endforeach() + +assert_defined(KF5_INSTALL_TARGETS_DEFAULT_ARGS) +assert_defined(KDE_INSTALL_TARGETS_DEFAULT_ARGS) +if(NOT KDE_INSTALL_DIRS_NO_CMAKE_VARIABLES AND +   NOT KDE_INSTALL_DIRS_NO_DEPRECATED) +    assert_str_equal(INSTALL_TARGETS_DEFAULT_ARGS +                     KDE_INSTALL_TARGETS_DEFAULT_ARGS) +endif() + +add_executable(dummy main.c) +set_target_properties(dummy PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/tests/KDEInstallDirsTest/vars_in_sync/main.c b/tests/KDEInstallDirsTest/vars_in_sync/main.c new file mode 100644 index 00000000..c13815ce --- /dev/null +++ b/tests/KDEInstallDirsTest/vars_in_sync/main.c @@ -0,0 +1,4 @@ +int main() +{ +   return 0; +} | 
