1############################################################################# 2# 3# ViSP, open source Visual Servoing Platform software. 4# Copyright (C) 2005 - 2019 by Inria. All rights reserved. 5# 6# This software is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 2 of the License, or 9# (at your option) any later version. 10# See the file LICENSE.txt at the root directory of this source 11# distribution for additional information about the GNU GPL. 12# 13# For using ViSP with software that can not be combined with the GNU 14# GPL, please contact Inria about acquiring a ViSP Professional 15# Edition License. 16# 17# See http://visp.inria.fr for more information. 18# 19# This software was developed at: 20# Inria Rennes - Bretagne Atlantique 21# Campus Universitaire de Beaulieu 22# 35042 Rennes Cedex 23# France 24# 25# If you have questions regarding the use of this file, please contact 26# Inria at visp@inria.fr 27# 28# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 29# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 30# 31# Description: 32# CMake package config file for ViSP. 33# 34# ** File generated automatically, do not modify ** 35# 36# This file will define the following CMake variables: 37# - VISP_LIBS : The list of all imported targets for VISP modules. 38# - VISP_INCLUDE_DIRS : ViSP and third-party include directories 39# - VISP_LIBRARIES : ViSP library to link against. Third-party libraries are 40# linked automatically thanks to cmake export file VISPModules.cmake 41# - VISP_VERSION_STRING : Full ViSP version that is build, "@VISP_VERSION@" 42# - VISP_VERSION_MAJOR : Major version part of VISP_VERSION: "@VISP_VERSION_MAJOR@" 43# - VISP_VERSION_MINOR : Minor version part of VISP_VERSION: "@VISP_VERSION_MINOR@" 44# - VISP_VERSION_PATCH : Patch version part of VISP_VERSION: "@VISP_VERSION_PATCH@" 45# 46# Advanced variables: 47# - VISP_SHARED : Use ViSP as shared library 48# - VISP_CONFIG_PATH : Path to this VISPConfig.cmake 49# - VISP_USE_FILE : File to include to use ViSP without specific cmake code 50# - VISP_LIB_COMPONENTS: Present VISP modules list 51# 52# Typical usage in user project: 53# 54# find_package(VISP REQUIRED) 55# include_directories(${VISP_INCLUDE_DIRS}) 56# target_link_libraries(MY_TARGET_NAME ${VISP_LIBRARIES}) 57# 58# It is also possible to build your project using VISP_USE_FILE. 59# 60# find_package(VISP) 61# if(VISP_FOUND) 62# include(${VISP_USE_FILE}) 63# endif() 64# 65# Or you can search for specific ViSP modules: 66# 67# find_package(VISP REQUIRED core io) 68# 69# If the module is found then VISP_<MODULE>_FOUND is set to TRUE. 70# 71# Authors: 72# Fabien Spindler 73# 74############################################################################# 75 76#if(VISP_FOUND) 77# return() 78#endif() 79 80#set(VISP_FOUND TRUE) 81 82# Set the version numbers 83set(VISP_VERSION_STRING "@VISP_VERSION@") 84set(VISP_VERSION_MAJOR "@VISP_VERSION_MAJOR@") 85set(VISP_VERSION_MINOR "@VISP_VERSION_MINOR@") 86set(VISP_VERSION_PATCH "@VISP_VERSION_PATCH@") 87 88set(VISP_LIB_COMPONENTS @VISP_MODULES_CONFIGCMAKE@) 89 90# Form list of modules (components) to find 91if(NOT VISP_FIND_COMPONENTS) 92 set(VISP_FIND_COMPONENTS ${VISP_LIB_COMPONENTS}) 93endif() 94 95# expand short module names and see if requested components exist 96set(VISP_FIND_COMPONENTS_ "") 97foreach(__vpcomponent ${VISP_FIND_COMPONENTS}) 98 if(NOT __vpcomponent MATCHES "^visp_") 99 set(__vpcomponent visp_${__vpcomponent}) 100 endif() 101 list(FIND VISP_LIB_COMPONENTS ${__vpcomponent} __vpcomponentIdx) 102 if(__vpcomponentIdx LESS 0) 103 #requested component is not found... 104 if(VISP_FIND_REQUIRED) 105 message(FATAL_ERROR "${__vpcomponent} is required but was not found") 106 elseif(NOT VISP_FIND_QUIETLY) 107 message(WARNING "${__vpcomponent} is required but was not found") 108 endif() 109 #indicate that module is NOT found 110 string(TOUPPER "${__vpcomponent}" __vpcomponentUP) 111 set(${__vpcomponentUP}_FOUND "${__vpcomponentUP}_FOUND-NOTFOUND") 112 else() 113 list(APPEND VISP_FIND_COMPONENTS_ ${__vpcomponent}) 114 # Not using list(APPEND) here, because VISP_LIBS may not exist yet. 115 # Also not clearing VISP_LIBS anywhere, so that multiple calls 116 # to find_package(VISP) with different component lists add up. 117 set(VISP_LIBS ${VISP_LIBS} "${__vpcomponent}") 118 #indicate that module is found 119 string(TOUPPER "${__vpcomponent}" __vpcomponentUP) 120 set(${__vpcomponentUP}_FOUND 1) 121 endif() 122endforeach() 123set(VISP_FIND_COMPONENTS ${VISP_FIND_COMPONENTS_}) 124#message("VISP_FIND_COMPONENTS: ${VISP_FIND_COMPONENTS}") 125 126# Resolve dependencies 127foreach(__opttype OPT DBG) 128 set(VISP_LIBS_${__opttype} "${VISP_LIBS}") 129endforeach() 130 131# Some additional settings are required if ViSP is built as static libs 132set(VISP_SHARED @BUILD_SHARED_LIBS@) 133 134# Extract the directory where *this* file has been installed (determined at cmake run-time) 135set(VISP_CONFIG_PATH ${VISP_DIR} CACHE PATH "ViSPConfig.cmake path location" FORCE) 136mark_as_advanced(VISP_CONFIG_PATH) 137 138if(NOT WIN32) 139 # Since this file is installed in ./${VISP_INSTALL_LIBDIR}/cmake/visp 140 # the first "../../" are here to go to ${VISP_INSTALL_LIBDIR}, and then 141 # VISP_INSTALL_LIBDIR_TO_PARENT goes to the parent dir "." 142 set(VISP_INSTALL_PATH "${VISP_CONFIG_PATH}/../../@VISP_INSTALL_LIBDIR_TO_PARENT@") 143 # Get the absolute path with no ../.. relative marks, to eliminate implicit linker warnings 144 if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 2.8) 145 get_filename_component(VISP_INSTALL_PATH "${VISP_INSTALL_PATH}" ABSOLUTE) 146 else() 147 get_filename_component(VISP_INSTALL_PATH "${VISP_INSTALL_PATH}" REALPATH) 148 endif() 149endif() 150 151# Tells the user project where to find ViSP headers 152set(VISP_INCLUDE_DIRS "@VISP_INCLUDE_DIRS_CONFIGCMAKE@") 153 154# Tells the user project ViSP library name 155set(VISP_LIBRARIES ${VISP_LIBS}) 156 157# need to be improved 158if(POLICY CMP0024) 159 # Fix to prevent multiple includes 160 if(NOT TARGET visp_core) 161 cmake_policy(PUSH) 162 cmake_policy(SET CMP0024 NEW) 163 # Our library dependencies (contains definitions for IMPORTED targets) 164 include("${CMAKE_CURRENT_LIST_DIR}/VISPModules.cmake") 165 cmake_policy(POP) 166 endif() 167else() 168 # Fix for cmake 2.8.7 to prevent multiple includes 169 if(NOT TARGET visp_core) 170 # Our library dependencies (contains definitions for IMPORTED targets) 171 include("${CMAKE_CURRENT_LIST_DIR}/VISPModules.cmake") 172 endif() 173endif() 174 175# where to find the USE file to be used by user project 176set(VISP_USE_FILE "${CMAKE_CURRENT_LIST_DIR}/VISPUse.cmake") 177 178if(BUILD_TEST_COVERAGE) 179 # Add build options for test coverage. Currently coverage is only supported 180 # on gcc compiler 181 # Because using -fprofile-arcs with shared lib can cause problems like: 182 # hidden symbol `__bb_init_func', we add this option only for static 183 # library build 184 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ftest-coverage -fprofile-arcs") 185endif() 186 187#---------------------------------------------------------------------- 188# Remember VISP' third party libs configuration: 189#---------------------------------------------------------------------- 190set(VISP_HAVE_AFMA4 "@VISP_HAVE_AFMA4@") 191set(VISP_HAVE_AFMA6 "@VISP_HAVE_AFMA6@") 192set(VISP_HAVE_APRILTAG "@VISP_HAVE_APRILTAG@") 193set(VISP_HAVE_ARSDK "@VISP_HAVE_ARSDK@") 194set(VISP_HAVE_ATIDAQ "@VISP_HAVE_ATIDAQ@") 195set(VISP_HAVE_ATLAS "@VISP_HAVE_ATLAS@") 196set(VISP_HAVE_BICLOPS "@VISP_HAVE_BICLOPS@") 197set(VISP_HAVE_CLIPPER "@VISP_HAVE_CLIPPER@") 198set(VISP_HAVE_CMU1394 "@VISP_HAVE_CMU1394@") 199set(VISP_HAVE_COIN3D "@VISP_HAVE_COIN3D@") 200set(VISP_HAVE_COIN3D_AND_GUI "@VISP_HAVE_COIN3D_AND_GUI@") 201set(VISP_HAVE_COMEDI "@VISP_HAVE_COMEDI@") 202set(VISP_HAVE_CPP11_COMPATIBILITY "@VISP_HAVE_CXX11@") # to keep compat with previous releases 203set(VISP_HAVE_CXX11 "@VISP_HAVE_CXX11@") 204set(VISP_CXX_STANDARD_98 "@VISP_CXX_STANDARD_98@") 205set(VISP_CXX_STANDARD_11 "@VISP_CXX_STANDARD_11@") 206set(VISP_CXX_STANDARD_14 "@VISP_CXX_STANDARD_14@") 207set(VISP_CXX_STANDARD_17 "@VISP_CXX_STANDARD_17@") 208set(VISP_CXX_STANDARD "@VISP_CXX_STANDARD@") 209set(VISP_HAVE_D3D9 "@VISP_HAVE_D3D9@") 210set(VISP_HAVE_DC1394 "@VISP_HAVE_DC1394@") 211set(VISP_HAVE_DIRECTSHOW "@VISP_HAVE_DIRECTSHOW@") 212set(VISP_HAVE_DISPLAY "@VISP_HAVE_DISPLAY@") 213set(VISP_HAVE_DMTX "@VISP_HAVE_DMTX@") 214set(VISP_HAVE_EIGEN3 "@VISP_HAVE_EIGEN3@") 215set(VISP_HAVE_FFMPEG "@VISP_HAVE_FFMPEG@") 216set(VISP_HAVE_FLIR_PTU_SDK "@VISP_HAVE_FLIR_PTU_SDK@") 217set(VISP_HAVE_FRANKA "@VISP_HAVE_FRANKA@") 218set(VISP_HAVE_FLYCAPTURE "@VISP_HAVE_FLYCAPTURE@") 219set(VISP_HAVE_FT_IIT_SDK "@VISP_HAVE_FT_IIT_SDK@") 220set(VISP_HAVE_GDI "@VISP_HAVE_GDI@") 221set(VISP_HAVE_GTK "@VISP_HAVE_GTK@") 222set(VISP_HAVE_GSL "@VISP_HAVE_GSL@") 223set(VISP_HAVE_JACOSDK "@VISP_HAVE_JACOSDK@") 224set(VISP_HAVE_JPEG "@VISP_HAVE_JPEG@") 225set(VISP_HAVE_LAPACK "@VISP_HAVE_LAPACK@") 226set(VISP_HAVE_LAPACK_BUILT_IN "@VISP_HAVE_LAPACK_BUILT_IN@") 227set(VISP_HAVE_LIBFREENECT "@VISP_HAVE_LIBFREENECT@") 228set(VISP_HAVE_LIBFREENECT_AND_DEPENDENCIES "@VISP_HAVE_LIBFREENECT_AND_DEPENDENCIES@") 229set(VISP_HAVE_LIBFREENECT_OLD "@VISP_HAVE_LIBFREENECT_OLD@") 230set(VISP_HAVE_LIBUSB_1 "@VISP_HAVE_LIBUSB_1@") 231set(VISP_HAVE_MKL "@VISP_HAVE_MKL@") 232set(VISP_HAVE_NETLIB "@VISP_HAVE_NETLIB@") 233set(VISP_HAVE_OGRE "@VISP_HAVE_OGRE@") 234set(VISP_HAVE_OIS "@VISP_HAVE_OIS@") 235set(VISP_HAVE_OPENBLAS "@VISP_HAVE_OPENBLAS@") 236set(VISP_HAVE_OPENCV "@VISP_HAVE_OPENCV@") 237set(VISP_HAVE_OPENCV_DNN "@VISP_HAVE_OPENCV_DNN@") 238set(VISP_HAVE_OPENCV_NONFREE "@VISP_HAVE_OPENCV_NONFREE@") 239set(VISP_HAVE_OPENCV_OBJDETECT "@VISP_HAVE_OPENCV_OBJDETECT@") 240set(VISP_HAVE_OPENCV_VERSION "@VISP_HAVE_OPENCV_VERSION@") 241set(VISP_HAVE_OPENGL "@VISP_HAVE_OPENGL@") 242set(VISP_HAVE_OPENMP "@VISP_HAVE_OPENMP@") 243set(VISP_HAVE_PARPORT "@VISP_HAVE_PARPORT@") 244set(VISP_HAVE_PCL "@VISP_HAVE_PCL@") 245set(VISP_HAVE_PIONEER "@VISP_HAVE_PIONEER@") 246set(VISP_HAVE_PNG "@VISP_HAVE_PNG@") 247set(VISP_HAVE_PTHREAD "@VISP_HAVE_PTHREAD@") 248set(VISP_HAVE_PTU46 "@VISP_HAVE_PTU46@") 249set(VISP_HAVE_PYLON "@VISP_HAVE_PYLON@") 250set(VISP_HAVE_QBDEVICE "@VISP_HAVE_QBDEVICE@") 251set(VISP_HAVE_QT "@VISP_HAVE_QT@") 252set(VISP_HAVE_REALSENSE "@VISP_HAVE_REALSENSE@") 253set(VISP_HAVE_REALSENSE2 "@VISP_HAVE_REALSENSE2@") 254set(VISP_HAVE_SOQT "@VISP_HAVE_SOQT@") 255set(VISP_HAVE_SOWIN "@VISP_HAVE_SOWIN@") 256set(VISP_HAVE_SOXT "@VISP_HAVE_SOXT@") 257set(VISP_HAVE_TAKKTILE2 "@VISP_HAVE_TAKKTILE2@") 258set(VISP_HAVE_UEYE "@VISP_HAVE_UEYE@") 259set(VISP_HAVE_V4L2 "@VISP_HAVE_V4L2@") 260set(VISP_HAVE_VIPER650 "@VISP_HAVE_VIPER650@") 261set(VISP_HAVE_VIPER850 "@VISP_HAVE_VIPER850@") 262set(VISP_HAVE_VIRTUOSE "@VISP_HAVE_VIRTUOSE@") 263set(VISP_HAVE_X11 "@VISP_HAVE_X11@") 264set(VISP_HAVE_XML2 "@VISP_HAVE_XML2@") 265set(VISP_HAVE_YARP "@VISP_HAVE_YARP@") 266set(VISP_HAVE_ZBAR "@VISP_HAVE_ZBAR@") 267 268@VISP_CONTRIB_MODULES_CONFIGCMAKE@ 269 270set(VISP_COMPILER_FAIL_REGEX 271 "command line option .* is valid for .* but not for C\\+\\+" # GNU 272 "command line option .* is valid for .* but not for C" # GNU 273 "unrecognized .*option" # GNU 274 "unknown .*option" # Clang 275 "ignoring unknown option" # MSVC 276 "warning D9002" # MSVC, any lang 277 "option .*not supported" # Intel 278 "[Uu]nknown option" # HP 279 "[Ww]arning: [Oo]ption" # SunPro 280 "command option .* is not recognized" # XL 281 "not supported in this configuration; ignored" # AIX 282 "File with unknown suffix passed to linker" # PGI 283 "WARNING: unknown flag:" # Open64 284 ) 285 286#---------------------------------------------------------------------- 287# Propagate c++ standard compiler option if enabled during ViSP build 288#---------------------------------------------------------------------- 289if(${VISP_CXX_STANDARD} EQUAL ${VISP_CXX_STANDARD_11}) 290 set(CMAKE_CXX_STANDARD 11) 291 set(CMAKE_CXX_STANDARD_REQUIRED FALSE) 292 set(CMAKE_CXX_EXTENSIONS OFF) # use -std=c++11 instead of -std=gnu++11 293 if(NOT CMAKE_CXX11_COMPILE_FEATURES) 294 set(CXX11_CXX_FLAGS @CXX11_CXX_FLAGS@) 295 if(CXX11_CXX_FLAGS) 296 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_CXX_FLAGS}") 297 endif() 298 endif() 299elseif(${VISP_CXX_STANDARD} EQUAL ${VISP_CXX_STANDARD_14}) 300 set(CMAKE_CXX_STANDARD 14) 301 set(CMAKE_CXX_STANDARD_REQUIRED FALSE) 302 set(CMAKE_CXX_EXTENSIONS OFF) # use -std=c++14 instead of -std=gnu++14 303 if(NOT CMAKE_CXX14_COMPILE_FEATURES) 304 set(CXX14_CXX_FLAGS @CXX14_CXX_FLAGS@) 305 if(CXX14_CXX_FLAGS) 306 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX14_CXX_FLAGS}") 307 endif() 308 endif() 309elseif(${VISP_CXX_STANDARD} EQUAL ${VISP_CXX_STANDARD_17}) 310 set(CMAKE_CXX_STANDARD 17) 311 set(CMAKE_CXX_STANDARD_REQUIRED FALSE) 312 set(CMAKE_CXX_EXTENSIONS OFF) # use -std=c++17 instead of -std=gnu++17 313 if(NOT CMAKE_CXX17_COMPILE_FEATURES) 314 set(CXX14_CXX_FLAGS @CXX14_CXX_FLAGS@) 315 if(CXX17_CXX_FLAGS) 316 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX17_CXX_FLAGS}") 317 endif() 318 endif() 319endif() 320 321#---------------------------------------------------------------------- 322# Propagate openmp compiler option if enabled during ViSP build 323#---------------------------------------------------------------------- 324if(VISP_HAVE_OPENMP) 325 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} @OpenMP_CXX_FLAGS@") 326endif() 327 328#---------------------------------------------------------------------- 329# Propagate -fPIC option requested with Qt5 that requires position independent 330# code if Qt was built with -reduce-relocations. 331#---------------------------------------------------------------------- 332if(UNIX) 333 if(CMAKE_COMPILER_IS_GNUCXX) 334 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") # Is needed for ANDROID too. 335 endif() 336endif() 337 338#---------------------------------------------------------------------- 339# Some useful macro to be able to build the tutorials along side ViSP 340#---------------------------------------------------------------------- 341# Create a target from the *.cpp file, link against ViSP libraries and add a dependency to ViSP library 342# tu ensure that the library is build before this target. 343macro(visp_add_target file_cpp) 344 if(POLICY CMP0020) 345 cmake_policy(PUSH) 346 cmake_policy(SET CMP0020 NEW) # For UsTK: Qt5 347 endif() 348 get_filename_component(target ${file_cpp} NAME_WE) 349 include_directories(${VISP_INCLUDE_DIRS}) 350 add_executable(${target} ${file_cpp} ${ARGN}) 351 target_link_libraries(${target} ${VISP_LIBRARIES}) 352 if(POLICY CMP0020) 353 cmake_policy(POP) #cmake_policy(SET CMP0020 NEW) # For UsTK: Qt5 354 endif() 355endmacro() 356 357# Create a dependency to the target extracted from the *.cpp file and put the target in the solution dependency folder. 358macro(visp_add_dependency file_cpp dependency) 359 get_filename_component(target ${file_cpp} NAME_WE) 360 if(TARGET visp_${dependency}) 361 add_dependencies(visp_${dependency} ${target}) 362 if(ENABLE_SOLUTION_FOLDERS) 363 set_target_properties(${target} PROPERTIES FOLDER "${dependency}") 364 endif() 365 endif() 366endmacro() 367 368# Copy the data files to the same location than the target associated to the cpp files 369# Since CMake 3.0.0 policy CMP0026 was introduced to disallow location property on target. 370# If CMake 3.0.0 is used, we use $<TARGET_FILE_DIR:tgt> to get the target location 371if (CMAKE_VERSION VERSION_GREATER 2.8.12) 372 macro(visp_copy_data file_cpp file_data) 373 get_filename_component(target ${file_cpp} NAME_WE) 374 get_filename_component(target_location "${target_location}" PATH) 375 add_custom_command( 376 TARGET ${target} 377 POST_BUILD 378 COMMAND ${CMAKE_COMMAND} -E copy "${file_data}" "$<TARGET_FILE_DIR:${target}>" 379 ) 380 endmacro() 381else() 382 macro(visp_copy_data file_cpp file_data) 383 get_filename_component(target ${file_cpp} NAME_WE) 384 get_target_property(target_location ${target} LOCATION) 385 get_filename_component(target_location "${target_location}" PATH) 386 add_custom_command( 387 TARGET ${target} 388 POST_BUILD 389 COMMAND ${CMAKE_COMMAND} -E copy "${file_data}" "${target_location}" 390 ) 391 endmacro() 392endif() 393 394# Copy the data files to the same location than the target associated to the cpp files 395# Since CMake 3.0.0 policy CMP0026 was introduced to disallow location property on target. 396# If CMake 3.0.0 is used, we use $<TARGET_FILE_DIR:tgt> to get the target location 397if (CMAKE_VERSION VERSION_GREATER 2.8.12) 398 macro(visp_copy_dir file_cpp root_dir rel_dir) 399 get_filename_component(target ${file_cpp} NAME_WE) 400 get_filename_component(target_location "${target_location}" PATH) 401 add_custom_command( 402 TARGET ${target} 403 POST_BUILD 404 COMMAND ${CMAKE_COMMAND} -E copy_directory "${root_dir}/${rel_dir}" "$<TARGET_FILE_DIR:${target}>/${rel_dir}" 405 ) 406 endmacro() 407else() 408 macro(visp_copy_data file_cpp root_dir rel_dir) 409 get_filename_component(target ${file_cpp} NAME_WE) 410 get_target_property(target_location ${target} LOCATION) 411 get_filename_component(target_location "${target_location}" PATH) 412 add_custom_command( 413 TARGET ${target} 414 POST_BUILD 415 COMMAND ${CMAKE_COMMAND} -E copy_directory "${root_dir}/${rel_dir}" "${target_location}/${rel_dir}" 416 ) 417 endmacro() 418endif() 419 420# Check dependencies for examples 421macro(visp_check_dependencies) 422 set(VP_DEPENDENCIES_FOUND TRUE) 423 foreach(d ${ARGN}) 424 if(NOT TARGET ${d}) 425 #message(WARNING "ViSP: Can't resolve dependency: ${d}") 426 set(VP_DEPENDENCIES_FOUND FALSE) 427 break() 428 endif() 429 endforeach() 430endmacro() 431 432# add subdirectory if dependencies are found 433# visp_add_subdirectory(<subdir> REQUIRED_DEPS <deps>) 434macro(visp_add_subdirectory subdir) 435 set(__deps "") 436 437 foreach(arg ${ARGN}) 438 if(arg STREQUAL "REQUIRED_DEPS") 439 set(__varname "__deps") 440 else() 441 list(APPEND ${__varname} ${arg}) 442 endif() 443 endforeach() 444 unset(__varname) 445 446 if(__deps STREQUAL "") 447 set(VP_DEPENDENCIES_FOUND TRUE) 448 else() 449 visp_check_dependencies(${__deps}) 450 endif() 451 452 if(VP_DEPENDENCIES_FOUND) 453 add_subdirectory(${subdir}) 454 endif() 455endmacro() 456 457# add specific compile flag useful to turn warning coming from 3rdparty 458macro(visp_set_source_file_compile_flag file) 459# if(DEFINED ACTIVATE_WARNING_3PARTY_MUTE) 460# if(ACTIVATE_WARNING_3PARTY_MUTE) 461 set(__cxxflags "") 462 set(__lang "CXX") 463 if("${file}" MATCHES "\\.(c)$") 464 set(__lang "C") 465 elseif("${file}" MATCHES "\\.(cpp|cc|cxx)$") 466 set(__lang "CXX") 467 elseif("${file}" MATCHES "\\.(f|F)$") 468 set(__lang "Fortran") 469 endif() 470 # Since cxx11 option makes try_compile() result wrong, we remove all the CXX_FLAGS 471 # when we check if an option is available or not 472 #set(CXX_FLAGS_BACKUP ${CMAKE_CXX_FLAGS}) 473 #set(CMAKE_CXX_FLAGS "") 474 foreach(cxxflag ${ARGN}) 475 visp_check_flag_support(${__lang} ${cxxflag} __support_flag "") 476 if(${__support_flag}) 477 set(__cxxflags "${__cxxflags} ${cxxflag}") 478 endif() 479 endforeach() 480 #set(CMAKE_CXX_FLAGS ${CXX_FLAGS_BACKUP}) 481 #unset(CXX_FLAGS_BACKUP) 482 if(NOT ${__cxxflags} STREQUAL "") 483 if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${file}") 484 set_source_files_properties("${CMAKE_CURRENT_LIST_DIR}/${file}" PROPERTIES COMPILE_FLAGS "${__cxxflags}") 485 elseif(EXISTS ${file}) # for files that are in the build tree (like those produced by qt moc) 486 set_source_files_properties("${file}" PROPERTIES COMPILE_FLAGS "${__cxxflags}") 487 endif() 488 endif() 489# endif() 490# endif() 491endmacro() 492 493# check if a compiler flag is supported 494macro(visp_check_flag_support lang flag varname base_options) 495 if(CMAKE_BUILD_TYPE) 496 set(CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE}) 497 endif() 498 499 if("_${lang}_" MATCHES "_CXX_") 500 set(_lang CXX) 501 elseif("_${lang}_" MATCHES "_C_") 502 set(_lang C) 503 elseif("_${lang}_" MATCHES "_Fortran_") 504 set(_lang Fortran) 505 else() 506 set(_lang ${lang}) 507 endif() 508 string(TOUPPER "${flag}" ${varname}) 509 string(REGEX REPLACE "^(/|-)" "HAVE_${_lang}_" ${varname} "${${varname}}") 510 string(REGEX REPLACE " -|-|=| |\\." "_" ${varname} "${${varname}}") 511 visp_check_compiler_flag("${_lang}" "${base_options} ${flag}" ${${varname}} ${ARGN}) 512endmacro() 513 514# test if a compiler flag is supported 515macro(visp_check_compiler_flag LANG FLAG RESULT) 516 set(_fname "${ARGN}") 517 if(NOT DEFINED ${RESULT}) 518 if(_fname) 519 # nothing 520 elseif("_${LANG}_" MATCHES "_CXX_") 521 set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx") 522 #if("${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror " OR "${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror=unknown-pragmas ") 523 file(WRITE "${_fname}" "int main() { return 0; }\n") 524 #else() 525 # file(WRITE "${_fname}" "#pragma\nint main() { return 0; }\n") 526 #endif() 527 elseif("_${LANG}_" MATCHES "_C_") 528 set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c") 529 #if("${CMAKE_C_FLAGS} ${FLAG} " MATCHES "-Werror " OR "${CMAKE_C_FLAGS} ${FLAG} " MATCHES "-Werror=unknown-pragmas ") 530 file(WRITE "${_fname}" "int main(void) { return 0; }\n") 531 #else() 532 # file(WRITE "${_fname}" "#pragma\nint main(void) { return 0; }\n") 533 #endif() 534 elseif("_${LANG}_" MATCHES "_OBJCXX_") 535 set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.mm") 536 #if("${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror " OR "${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror=unknown-pragmas ") 537 file(WRITE "${_fname}" "int main() { return 0; }\n") 538 #else() 539 # file(WRITE "${_fname}" "#pragma\nint main() { return 0; }\n") 540 #endif() 541 elseif("_${LANG}_" MATCHES "_Fortran_") 542 set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.f") 543 file(WRITE "${_fname}" " PROGRAM TEST\n RETURN\n END\n") 544 else() 545 unset(_fname) 546 endif() 547 if(_fname) 548 if(NOT "x${ARGN}" STREQUAL "x") 549 file(RELATIVE_PATH __msg "${CMAKE_SOURCE_DIR}" "${ARGN}") 550 set(__msg " (check file: ${__msg})") 551 else() 552 set(__msg "") 553 endif() 554 message(STATUS "Performing Test ${RESULT}${__msg}") 555 try_compile(${RESULT} 556 "${CMAKE_BINARY_DIR}" 557 "${_fname}" 558 CMAKE_FLAGS "-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}" # CMP0056 do this on new CMake 559 COMPILE_DEFINITIONS "${FLAG}" 560 OUTPUT_VARIABLE OUTPUT) 561 562 if(${RESULT}) 563 string(REPLACE ";" "," OUTPUT_LINES "${OUTPUT}") 564 string(REPLACE "\n" ";" OUTPUT_LINES "${OUTPUT_LINES}") 565 foreach(_regex ${VP_COMPILER_FAIL_REGEX}) 566 if(NOT ${RESULT}) 567 break() 568 endif() 569 foreach(_line ${OUTPUT_LINES}) 570 if("${_line}" MATCHES "${_regex}") 571 file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 572 "Build output check failed:\n" 573 " Regex: '${_regex}'\n" 574 " Output line: '${_line}'\n") 575 set(${RESULT} 0) 576 break() 577 endif() 578 endforeach() 579 endforeach() 580 endif() 581 582 if(${RESULT}) 583 set(${RESULT} 1 CACHE INTERNAL "Test ${RESULT}") 584 message(STATUS "Performing Test ${RESULT} - Success") 585 else() 586 message(STATUS "Performing Test ${RESULT} - Failed") 587 set(${RESULT} "" CACHE INTERNAL "Test ${RESULT}") 588 file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 589 "Compilation failed:\n" 590 " source file: '${_fname}'\n" 591 " check option: '${FLAG}'\n" 592 "===== BUILD LOG =====\n" 593 "${OUTPUT}\n" 594 "===== END =====\n\n") 595 endif() 596 else() 597 set(${RESULT} 0) 598 endif() 599 endif() 600endmacro() 601