Warning, /pim/trojita/cmake/TrojitaOption.cmake is written in an unsupported language. File is not indexed.
0001 # Based on CMakeDependentOption.cmake
0002 #=============================================================================
0003 # Copyright 2006-2009 Kitware, Inc.
0004 # Copyright 2013 Pali Rohár <pali.rohar@gmail.com>
0005 #
0006 # Distributed under the OSI-approved BSD License (the "License");
0007 # see accompanying file Copyright.txt for details.
0008 #
0009 # This software is distributed WITHOUT ANY WARRANTY; without even the
0010 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
0011 # See the License for more information.
0012 #=============================================================================
0013 # (To distribute this file outside of CMake, substitute the full
0014 # License text for the above reference.)
0015
0016 include(FeatureSummary)
0017
0018 # trojita_string_option(option description default depends force [options...])
0019 macro(trojita_string_option option description default depends force)
0020 if(${option}_ISSET MATCHES "^${option}_ISSET$")
0021 set(${option}_AVAILABLE 1)
0022 foreach(d ${depends})
0023 string(REGEX REPLACE " +" ";" CMAKE_DEPENDENT_OPTION_DEP "${d}")
0024 if(NOT (${CMAKE_DEPENDENT_OPTION_DEP}))
0025 set(${option}_AVAILABLE 0)
0026 message(STATUS "Disabling ${option} because of ${CMAKE_DEPENDENT_OPTION_DEP}")
0027 endif()
0028 endforeach()
0029 if(${option}_AVAILABLE)
0030 if(${option} MATCHES "^${option}$")
0031 set(${option} "${default}" CACHE STRING "${description}" FORCE)
0032 else()
0033 set(${option} "${${option}}" CACHE STRING "${description}" FORCE)
0034 endif()
0035 set_property(CACHE ${option} PROPERTY STRINGS ${ARGN})
0036 else()
0037 if(NOT ${option} MATCHES "^${option}$")
0038 set(${option} "${${option}}" CACHE INTERNAL "${description}")
0039 endif()
0040 set(${option} ${force})
0041 endif()
0042 else()
0043 set(${option} "${${option}_ISSET}")
0044 endif()
0045 endmacro()
0046
0047 # trojita_option(option description default [depends])
0048 macro(trojita_option option description default)
0049 set(depends ${ARGN})
0050 trojita_string_option(${option} "${description}" ${default} "${depends}" OFF AUTO ON OFF)
0051 add_feature_info(${option} ${option} "${description}")
0052 endmacro()
0053
0054 # trojita_plugin_option(option description [depends] [STATIC])
0055 macro(trojita_plugin_option option description)
0056 set(depends)
0057 set(default "AUTO")
0058 foreach(arg ${ARGN})
0059 if("${arg}" STREQUAL "STATIC")
0060 set(default "STATIC")
0061 else()
0062 list(APPEND depends "${arg}")
0063 endif()
0064 endforeach()
0065 trojita_string_option(${option} "${description}" ${default} "${depends}" OFF AUTO STATIC ON OFF)
0066 if(NOT WITH_SHARED_PLUGINS)
0067 if("${${option}}" STREQUAL "AUTO")
0068 if(NOT ${option} MATCHES "^${option}$")
0069 set(${option} "${${option}}" CACHE INTERNAL "${description}")
0070 endif()
0071 set(${option} "STATIC")
0072 elseif(NOT "${${option}}" STREQUAL "STATIC")
0073 message(STATUS "Disabling ${option} because of NOT WITH_SHARED_PLUGINS")
0074 if("${${option}}" STREQUAL "ON")
0075 message(FATAL_ERROR "Plugin ${option} is disabled")
0076 endif()
0077 if(NOT ${option} MATCHES "^${option}$")
0078 set(${option} "${${option}}" CACHE INTERNAL "${description}")
0079 endif()
0080 set(${option} OFF)
0081 endif()
0082 endif()
0083 add_feature_info(${option} ${option} "${description}")
0084 endmacro()
0085
0086 # trojita_add_plugin(target type [sources...])
0087 macro(trojita_add_plugin target type)
0088 if("${${type}}" STREQUAL "STATIC")
0089 message(STATUS "Building static plugin ${target}")
0090 add_library(${target} STATIC ${ARGN})
0091 set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS QT_STATICPLUGIN)
0092 set_property(GLOBAL APPEND PROPERTY TROJITA_STATIC_PLUGINS ${target})
0093 else()
0094 message(STATUS "Building shared plugin ${target}")
0095 add_library(${target} MODULE ${ARGN})
0096 install(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_PLUGIN_DIR})
0097 set_property(GLOBAL APPEND PROPERTY TROJITA_SHARED_PLUGINS ${target})
0098 endif()
0099 set_target_properties(${target} PROPERTIES PREFIX "")
0100 set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS BUILD_PLUGIN)
0101 target_link_libraries(${target} Plugins)
0102 if (WITH_QT5)
0103 qt5_use_modules(${target} Core)
0104 else()
0105 target_link_libraries(${target} ${QT_QTCORE_LIBRARY})
0106 endif()
0107 endmacro()
0108
0109 # trojita_find_package(package version url description purpose [options...])
0110 macro(trojita_find_package package version url description purpose)
0111 set(type OPTIONAL)
0112 foreach(arg ${ARGN})
0113 if("${${arg}}" STREQUAL "ON" OR "${arg}" STREQUAL REQUIRED)
0114 message(STATUS "Package ${package} is required because of ${arg}")
0115 set(type REQUIRED)
0116 endif()
0117 endforeach()
0118 if ("${type}" STREQUAL REQUIRED)
0119 find_package(${package} ${version} REQUIRED)
0120 else()
0121 find_package(${package} ${version})
0122 endif()
0123 set_package_properties(${package} PROPERTIES URL "${url}" DESCRIPTION "${description}" TYPE ${type} PURPOSE "${purpose}")
0124 if(NOT ${package}_FOUND)
0125 foreach(arg ${ARGN})
0126 if("${${arg}}" STREQUAL "AUTO")
0127 message(STATUS "Disabling ${arg} because package ${package} was not found")
0128 if(NOT ${arg} MATCHES "^${arg}$")
0129 set(${arg} "${${arg}}" CACHE INTERNAL "")
0130 endif()
0131 set(${arg} OFF)
0132 get_property(features GLOBAL PROPERTY ENABLED_FEATURES)
0133 list(REMOVE_ITEM features ${arg})
0134 set_property(GLOBAL PROPERTY ENABLED_FEATURES "${features}")
0135 get_property(features GLOBAL PROPERTY DISABLED_FEATURES)
0136 list(FIND features ${arg} id)
0137 if(id EQUAL -1)
0138 set_property(GLOBAL APPEND PROPERTY DISABLED_FEATURES "${arg}")
0139 endif()
0140 endif()
0141 endforeach()
0142 endif()
0143 endmacro()