Warning, /graphics/kst-plot/cmake/modules/KstMacros.cmake is written in an unsupported language. File is not indexed.
0001 # ***************************************************************************
0002 # * *
0003 # * Copyright : (C) 2010 The University of Toronto *
0004 # * email : netterfield@astro.utoronto.ca *
0005 # * *
0006 # * Copyright : (C) 2010 Peter Kümmel *
0007 # * email : syntheticpp@gmx.net *
0008 # * *
0009 # * This program is free software; you can redistribute it and/or modify *
0010 # * it under the terms of the GNU General Public License as published by *
0011 # * the Free Software Foundation; either version 2 of the License, or *
0012 # * (at your option) any later version. *
0013 # * *
0014 # ***************************************************************************
0015
0016 include(MergedFilesBuild)
0017 include(KstPchSupport)
0018
0019
0020 macro(kst_dbg)
0021 foreach(it ${ARGN})
0022 message(STATUS "dgb: ${it} = ${${it}}")
0023 endforeach()
0024 endmacro()
0025
0026
0027 macro(kst_init prefix name_base)
0028 set(kst_name ${prefix}${name_base})
0029 set(kst_name_base ${name_base})
0030 set(kst_${kst_name}_dont_merge)
0031 set(kst_${kst_name}_ignore)
0032 set(kst_${kst_name}_info_files)
0033 endmacro()
0034
0035
0036 macro(kst_revision_project_name name)
0037 set(kst_revision_project ${name})
0038 endmacro()
0039
0040
0041 macro(kst_revision_add_dependency)
0042 if(kst_revision_project)
0043 add_dependencies(${kst_name} ${kst_revision_project})
0044 endif()
0045 endmacro()
0046
0047
0048 macro(kst_files_find folder)
0049 set(_folder ${kst_dir}/${folder})
0050 file(GLOB _sources ${_folder}/*.c)
0051 file(GLOB _sources_cpp ${_folder}/*.cpp)
0052 file(GLOB _headers ${_folder}/*.h)
0053 file(GLOB _ui_files ${_folder}/*.ui)
0054 set(kst_${kst_name}_folder ${_folder})
0055 kst_files_remove(_sources ${kst_${kst_name}_ignore})
0056 kst_files_remove(_sources_cpp ${kst_${kst_name}_ignore})
0057 kst_files_remove(_headers ${kst_${kst_name}_ignore})
0058 set(_mocs)
0059 if(kst_qt5)
0060 qt5_wrap_cpp(_mocs ${_headers} OPTIONS "-nw")
0061 qt5_wrap_cpp(_mocs ${_headers} OPTIONS "-nw")
0062 set(_uis)
0063 qt5_wrap_ui(_uis ${_ui_files})
0064 else()
0065 qt4_wrap_cpp(_mocs ${_headers} OPTIONS "-nw")
0066 qt4_wrap_cpp(_mocs ${_headers} OPTIONS "-nw")
0067 set(_uis)
0068 qt4_wrap_ui(_uis ${_ui_files})
0069 endif()
0070 set(kst_${kst_name}_sources_not_generated ${_sources} ${_sources_cpp})
0071 set(kst_${kst_name}_sources ${_sources} ${_sources_cpp} ${_mocs} ${_uis})
0072 set(kst_${kst_name}_headers ${_headers})
0073 set(kst_${kst_name}_mocs ${_mocs})
0074 set(kst_${kst_name}_ui_files ${_ui_files})
0075 set(kst_${kst_name}_uis ${_uis})
0076 set(kst_${kst_name}_includes ${_folder} ${CMAKE_CURRENT_BINARY_DIR} CACHE STRING "Include dir for ${kst_name}" FORCE)
0077 source_group("Ui" FILES ${_mocs} ${_ui_files})
0078 source_group("Generated" FILES ${_mocs} ${_uis})
0079 endmacro()
0080
0081
0082 macro(kst_dont_merge)
0083 set(kst_${kst_name}_dont_merge)
0084 foreach(_it ${ARGV})
0085 set(kst_${kst_name}_dont_merge ${kst_${kst_name}_dont_merge} ${kst_${kst_name}_folder}/${_it})
0086 endforeach()
0087 endmacro()
0088
0089
0090
0091 macro(kst_add_executable)
0092 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${kst_build_dir}/bin)
0093 include_directories(${kst_${kst_name}_folder} ${CMAKE_CURRENT_BINARY_DIR})
0094 add_executable(${kst_name} ${ARGN} ${kst_${kst_name}_sources} ${kst_${kst_name}_headers} ${kst_${kst_name}_info_files})
0095 target_link_libraries(${kst_name} ${kst_qtmain_library})
0096 set_property(TARGET ${kst_name} PROPERTY DEBUG_POSTFIX ${kst_debug_postfix})
0097 kst_revision_add_dependency()
0098 kst_flat_source_group(${kst_${kst_name}_headers} ${kst_${kst_name}_sources_not_generated})
0099 endmacro()
0100
0101
0102 macro(kst_add_test _source_file)
0103 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${kst_build_dir}/bin)
0104 get_filename_component(_file_name ${_source_file} NAME)
0105 if(CMAKE_GENERATOR MATCHES Ninja)
0106 set(_moced ${CMAKE_CURRENT_BINARY_DIR}/moc_${_file_name}) # ninja generator bug
0107 else()
0108 set(_moced moc_${_file_name})
0109 endif()
0110 qt4_generate_moc(${_source_file} ${_moced})
0111 set_source_files_properties(${_source_file} PROPERTIES OBJECT_DEPENDS ${_moced}) # moc on source file changes
0112 add_executable(${kst_name} ${_source_file})
0113 set_target_properties(${kst_name} PROPERTIES DEPEND ${_moced})
0114 target_link_libraries(${kst_name} ${QT_QTTEST_LIBRARY})
0115 set_property(TARGET ${kst_name} PROPERTY DEBUG_POSTFIX ${kst_debug_postfix})
0116 kst_link(${libcore} ${libmath} ${libapp} ${libwidgets} ${QT_QTTEST_LIBRARY})
0117 if(kst_debug_postfix)
0118 set_target_properties(${kst_name} PROPERTIES DEBUG_POSTFIX ${kst_debug_postfix})
0119 endif()
0120 add_test(NAME ${kst_name} COMMAND ${kst_name})
0121 endmacro()
0122
0123
0124 macro(kst_install_executable)
0125 install(TARGETS ${kst_name}
0126 RUNTIME DESTINATION bin COMPONENT Runtime
0127 BUNDLE DESTINATION . COMPONENT Runtime)
0128 endmacro()
0129
0130
0131 macro(kst_add_library type)
0132 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${kst_build_dir}/bin)
0133 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${kst_build_dir}/${kst_install_libdir})
0134 include_directories(${kst_${kst_name}_folder} ${CMAKE_CURRENT_BINARY_DIR})
0135 string(TOUPPER BUILD_kst${kst_name_base} _build_macro)
0136 add_definitions(-D${_build_macro})
0137 if(kst_pch)
0138 set(pch kst${kst_name_base}_pch)
0139 configure_file(${kst_${kst_name}_folder}/${pch} ${CMAKE_CURRENT_BINARY_DIR}/${pch}.h COPYONLY)
0140 #add_definitions(-DKST_PCH_RECURSIVE) # only some percents faster
0141 kst_add_pch_rule(${CMAKE_CURRENT_BINARY_DIR}/${pch}.h kst_${kst_name}_sources ${type})
0142 endif()
0143 if(kst_merge_files)
0144 if(kst_merge_rebuild)
0145 set(merged_files_rebuild 1)
0146 endif()
0147 kst_files_remove(kst_${kst_name}_sources ${kst_${kst_name}_dont_merge})
0148 kst_files_remove(kst_${kst_name}_dont_merge ${kst_${kst_name}_ignore})
0149 kst_files_remove(kst_${kst_name}_sources_not_generated ${kst_${kst_name}_dont_merge})
0150 merged_files_build(merged kst_${kst_name}_sources)
0151 set(depends_moc_uic ${kst_${kst_name}_headers} ${kst_${kst_name}_uis} ${kst_${kst_name}_ui_files} ${kst_${kst_name}_mocs})
0152 set_source_files_properties(merged_const.cpp PROPERTIES OBJECT_DEPENDS "${depends_moc_uic}")
0153 set_source_files_properties(merged_touched.cpp PROPERTIES OBJECT_DEPENDS "${depends_moc_uic}")
0154 add_library(${kst_name} ${type} ${merged_files} ${kst_${kst_name}_dont_merge} ${kst_${kst_name}_headers} ${kst_${kst_name}_uis} ${kst_${kst_name}_sources_not_generated} ${svnversion_h})
0155 foreach(_it ${kst_${kst_name}_sources_not_generated})
0156 set_source_files_properties(${_it} PROPERTIES HEADER_FILE_ONLY TRUE)
0157 endforeach()
0158 source_group("Source Files" Files)
0159 source_group("Header Files" Files)
0160 else()
0161 add_library(${kst_name} ${type} ${kst_${kst_name}_sources} ${kst_${kst_name}_headers} ${svnversion_h})
0162 kst_flat_source_group(${kst_${kst_name}_headers} ${kst_${kst_name}_sources_not_generated})
0163 endif()
0164 set(lib${kst_name_base} ${kst_name} CACHE STRING "actual ${kst_name} name" FORCE)
0165 set_property(TARGET ${kst_name} PROPERTY DEBUG_POSTFIX ${kst_debug_postfix})
0166 set_target_properties(${kst_name} PROPERTIES VERSION ${kst_version} SOVERSION ${kst_version_major})
0167 kst_revision_add_dependency()
0168 if(WIN32)
0169 if(NOT ${type} STREQUAL "STATIC")
0170 install(TARGETS ${kst_name} RUNTIME DESTINATION bin)
0171 endif()
0172 elseif(NOT APPLE)
0173 install(TARGETS ${kst_name} DESTINATION ${kst_install_libdir})
0174 endif()
0175 endmacro()
0176
0177
0178 macro(kst_init_plugin dir)
0179 if(APPLE AND NOT CMAKE_GENERATOR STREQUAL Xcode)
0180 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${kst_build_dir}/bin/${kst_binary_name}.app/Contents/plugins)
0181 else()
0182 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${kst_build_dir}/${kst_install_plugins})
0183 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${kst_build_dir}/${kst_install_plugins})
0184 endif()
0185 include_directories(${CMAKE_BINARY_DIR}/${dir})
0186 include_directories(${CMAKE_BINARY_DIR}/cmake/${dir})
0187 kst_include_directories(core math widgets)
0188 set(kst_plugin_dir ${dir})
0189 set(kst_plugin_prefix ${ARGN})
0190 endmacro()
0191
0192
0193 macro(kst_add_plugin_internal folder name libtype postfix)
0194 set(_name _${kst_plugin_prefix}_${folder}_${name})
0195 string(REPLACE . _ _name ${_name})
0196 string(REPLACE / _ _name ${_name})
0197 string(REPLACE __ _ _name ${_name})
0198 string(REPLACE __ _ _name ${_name})
0199 kst_init(${kst_binary_name} ${_name})
0200 kst_files_find(${kst_plugin_dir}/${folder}/${name})
0201 add_library(${kst_name}${postfix} ${libtype} ${kst_${kst_name}_sources} ${kst_${kst_name}_headers})
0202 add_dependencies(${kst_binary_name} ${kst_name})
0203 kst_flat_source_group(${kst_${kst_name}_headers} ${kst_${kst_name}_sources_not_generated})
0204 if(kst_verbose)
0205 message(STATUS "Building plugin ${kst_name}")
0206 endif()
0207 endmacro()
0208
0209 macro(kst_add_plugin folder name)
0210 kst_add_plugin_internal(${folder} ${name} MODULE "")
0211 kst_link(${libcore} ${libmath} ${libwidgets})
0212 if(NOT APPLE)
0213 install(TARGETS ${kst_name} LIBRARY DESTINATION ${kst_install_plugins})
0214 endif()
0215 endmacro()
0216
0217 macro(kst_add_plugin_lib folder name)
0218 kst_add_plugin_internal(${folder} ${name} STATIC _lib)
0219 endmacro()
0220
0221 macro(kst_add_dependency name)
0222 add_dependencies(${kst_name} ${name})
0223 endmacro()
0224
0225 macro(kst_include_directories)
0226 foreach(_it ${ARGV})
0227 include_directories(${kst_${kst_binary_name}${_it}_includes})
0228 endforeach()
0229 endmacro()
0230
0231
0232 macro(kst_find_install_desktop_file folder)
0233 if(UNIX)
0234 file(GLOB _desktop_file ${kst_dir}/${folder}/*.desktop)
0235 install(FILES ${_desktop_file} DESTINATION ${kst_install_plugin_desktop_file_path})
0236 endif()
0237 endmacro()
0238
0239
0240 macro(kst_link)
0241 target_link_libraries(${kst_name} ${ARGV})
0242 if(kst_qt5)
0243 target_link_libraries(${kst_name} Qt5::Widgets Qt5::Xml Qt5::Network Qt5::PrintSupport Qt5::Svg)
0244 else()
0245 target_link_libraries(${kst_name}
0246 ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTNETWORK_LIBRARY})
0247 endif()
0248 endmacro()
0249
0250
0251 macro(kst_files_ignore)
0252 set(kst_${kst_name}_ignore ${kst_${kst_name}_ignore} ${ARGV})
0253 endmacro()
0254
0255
0256 macro(kst_files_remove list)
0257 foreach(_item ${ARGN})
0258 set(_file ${kst_${kst_name}_folder}/${_item})
0259 if(${list})
0260 list(REMOVE_ITEM ${list} ${_item} ${_file} ${_file}.cpp ${_file}.c ${_file}.h)
0261 endif()
0262 endforeach()
0263 endmacro()
0264
0265
0266 macro(kst_add_files)
0267 set(kst_${kst_name}_sources ${kst_${kst_name}_sources} ${ARGN})
0268 endmacro()
0269
0270
0271 macro(kst_add_resources filepath)
0272 if(kst_qt5)
0273 qt5_add_resources(_rcc ${kst_dir}/${filepath})
0274 else()
0275 qt4_add_resources(_rcc ${kst_dir}/${filepath})
0276 endif()
0277 kst_add_files(${_rcc})
0278 endmacro()
0279
0280
0281 macro(kst_option_init)
0282 set(kst_options)
0283 endmacro()
0284
0285
0286 macro(kst_option _type _default _sys _name _description)
0287 set(_msg OFF)
0288 if(${_sys} MATCHES "gcc")
0289 set(_system CMAKE_COMPILER_IS_GNUCXX)
0290 elseif(${_sys} MATCHES "win")
0291 set(_system WIN32)
0292 else()
0293 set(_system ${_sys})
0294 endif()
0295 if(${_type} MATCHES "string")
0296 if(DEFINED kst_${_name})
0297 set(_value ${kst_${_name}})
0298 else()
0299 set(_value ${_default})
0300 endif()
0301 set(_msg ON)
0302 set(kst_${_name} ${_value} CACHE STRING ${_description} FORCE)
0303 else()
0304 if(${_system} MATCHES "all")
0305 option(kst_${_name} ${_description} ${_default})
0306 set(_msg ON)
0307 else()
0308 if(${${_system}})
0309 option(kst_${_name} ${_description} ${_default})
0310 set(_msg ON)
0311 endif()
0312 endif()
0313 endif()
0314 list(APPEND kst_options kst_${_name})
0315 set(kst_${_name}_description ${_description})
0316 set(kst_${_name}_show_message ${_msg})
0317 set(kst_${_name}_type ${_type})
0318 endmacro()
0319
0320
0321 macro(kst_option_list_all)
0322 foreach(_option ${kst_options})
0323 if(${${_option}_show_message})
0324 string(SUBSTRING "${_option} " 0 25 _var)
0325 if(${_option}_type MATCHES "bool")
0326 if(${_option})
0327 set(_val "ON ")
0328 set(_tval "0")
0329 else()
0330 set(_val "OFF")
0331 set(_tval "1")
0332 endif()
0333 set(_toggle "Toggle with '-D${_option}=${_tval}'")
0334 else()
0335 set(_val ${${_option}})
0336 set(_toggle)
0337 endif()
0338 message(STATUS "${_var}= ${_val} : ${${_option}_description}. ${_toggle}")
0339 endif()
0340 endforeach()
0341 endmacro()
0342
0343
0344 macro(kst_add_info_files group)
0345 foreach(_it ${ARGN})
0346 if(NOT IS_DIRECTORY ${_it})
0347 get_filename_component(name ${_it} NAME)
0348 if(NOT ${_it} MATCHES "^/\\\\..*$;~$")
0349 set_source_files_properties(${_it} PROPERTIES HEADER_FILE_ONLY TRUE)
0350 set(kst_${group}_info_files ${kst_${group}_info_files} ${_it})
0351 endif()
0352 endif()
0353 endforeach()
0354 source_group(${group} FILES ${kst_${group}_info_files})
0355 set(kst_${kst_name}_info_files ${kst_${kst_name}_info_files} ${kst_${group}_info_files})
0356 endmacro()
0357
0358
0359 macro(kst_find_info_files group files)
0360 file(GLOB _filelist ${files})
0361 kst_add_info_files(${group} ${_filelist})
0362 endmacro()
0363
0364
0365 macro(kst_flat_source_group)
0366 source_group("Source Files" Files)
0367 source_group("Header Files" Files)
0368 source_group("CMakeLists" FILES CMakeLists.txt)
0369 source_group("Headers/Sources" FILES ${ARGN})
0370 endmacro()
0371
0372