123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #############################################################
- function(get_resources_source_list target var)
- get_property(RESOURCE_LIST GLOBAL PROPERTY _${target}_RESOURCE_LIST)
- foreach(RF ${RESOURCE_LIST})
- string(REPLACE "|" ";" PARTS "${RF}")
- list(GET PARTS 0 SOURCE_FILE)
- list(APPEND _SF ${SOURCE_FILE})
- endforeach()
- set(${var} ${_SF} PARENT_SCOPE)
- endfunction()
- #############################################################
- function(copy_resources target)
- if(XCODE)
- return()
- endif()
-
- get_property(RESOURCE_LIST GLOBAL PROPERTY _${target}_RESOURCE_LIST)
- # we read the LOCATION from the target instead of using a generator
- # here since add_custom_command doesn't support generator expresessions
- # in the output field, and this is still cleaner than hardcoding the path
- # of the output binary.
- #
- get_property(TARGET_LOC TARGET ${target} PROPERTY LOCATION)
- get_filename_component(TARGET_DIR ${TARGET_LOC} DIRECTORY)
- if(APPLE)
- set(TARGET_LOC ${TARGET_DIR}/..)
- else()
- set(TARGET_LOC ${TARGET_DIR})
- endif()
-
- if(RESOURCE_LIST)
- foreach(RF ${RESOURCE_LIST})
- string(REPLACE "|" ";" PARTS "${RF}")
- list(GET PARTS 0 SOURCE_FILE)
- list(GET PARTS 1 _TARGET_FILE)
- set(TARGET_FILE ${TARGET_LOC}/${_TARGET_FILE})
- add_custom_command(OUTPUT ${TARGET_FILE}
- COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_FILE}" "${TARGET_FILE}"
- DEPENDS ${SOURCE_FILE}
- COMMENT "CopyResource (${target}): ${TARGET_FILE}")
- list(APPEND RESOURCES ${TARGET_FILE})
- endforeach()
- add_custom_target(${target}_CopyResources DEPENDS ${RESOURCES})
- add_dependencies(${target} ${target}_CopyResources)
- endif(RESOURCE_LIST)
- endfunction()
- #############################################################
- function(add_resources)
- set(args1 TARGET)
- set(args2 SOURCES DEST EXCLUDE)
- cmake_parse_arguments(BD "" "${args1}" "${args2}" ${ARGN})
-
- foreach(_BDFILE ${BD_SOURCES})
- if(IS_DIRECTORY ${_BDFILE})
- file(GLOB _DIRCONTENTS ${_BDFILE}/*)
- foreach(_BDDFILE ${_DIRCONTENTS})
- get_filename_component(_BDFILE_NAME ${_BDDFILE} NAME)
- set(PROCESS_FILE 1)
- foreach(EX_FILE ${BD_EXCLUDE})
- string(REGEX MATCH ${EX_FILE} DID_MATCH ${_BDDFILE})
- if(NOT "${DID_MATCH}" STREQUAL "")
- set(PROCESS_FILE 0)
- endif(NOT "${DID_MATCH}" STREQUAL "")
- endforeach(EX_FILE ${BD_EXCLUDE})
- if(PROCESS_FILE STREQUAL "1")
- if(IS_DIRECTORY ${_BDDFILE})
- set(DEST ${BD_DEST}/${_BDFILE_NAME})
- else()
- set(DEST ${BD_DEST})
- endif()
-
- add_resources(SOURCES ${_BDDFILE} DEST ${DEST} EXCLUDE ${BD_EXCLUDE} TARGET ${BD_TARGET})
- endif()
- endforeach()
- else()
- get_filename_component(_BDFILE_NAME ${_BDFILE} NAME)
- set_property(GLOBAL APPEND PROPERTY _${BD_TARGET}_RESOURCE_LIST "${_BDFILE}|${BD_DEST}/${_BDFILE_NAME}")
- if(XCODE)
- set_source_files_properties(${_BDFILE} PROPERTIES MACOSX_PACKAGE_LOCATION ${BD_DEST})
- endif()
- endif()
- endforeach()
- endfunction()
- #############################################################
- macro(find_all_sources DIRECTORY VARIABLE)
- aux_source_directory(${DIRECTORY} ${VARIABLE})
- file(GLOB headers ${DIRECTORY}/*h)
- list(APPEND ${VARIABLE} ${headers})
- endmacro()
- #############################################################
- # function to collect all the sources from sub-directories
- # into a single list
- function(add_sources)
- get_property(is_defined GLOBAL PROPERTY SRCS_LIST DEFINED)
- if(NOT is_defined)
- define_property(GLOBAL PROPERTY SRCS_LIST
- BRIEF_DOCS "List of source files"
- FULL_DOCS "List of source files to be compiled in one library")
- endif()
- # make absolute paths
- set(SRCS)
- foreach(s IN LISTS ARGN)
- if(NOT IS_ABSOLUTE "${s}")
- get_filename_component(s "${s}" ABSOLUTE)
- endif()
- list(APPEND SRCS "${s}")
- endforeach()
- string(REPLACE ${CMAKE_SOURCE_DIR}/src/ "" SUBDIR ${CMAKE_CURRENT_SOURCE_DIR})
- string(TOLOWER ${SUBDIR} SUBDIR)
- string(REPLACE "/" "\\\\" LIBNAME ${SUBDIR})
- source_group(${LIBNAME} FILES ${SRCS})
- # add it to the global list.
- set_property(GLOBAL APPEND PROPERTY SRCS_LIST ${SRCS})
- endfunction(add_sources)
- ## ---------------------------------------------------------------------
- ##
- ## Copyright (C) 2012 - 2014 by the deal.II authors
- ##
- ## This file is part of the deal.II library.
- ##
- ## The deal.II library is free software; you can use it, redistribute
- ## it, and/or modify it under the terms of the GNU Lesser General
- ## Public License as published by the Free Software Foundation; either
- ## version 2.1 of the License, or (at your option) any later version.
- ## The full text of the license can be found in the file LICENSE at
- ## the top level of the deal.II distribution.
- ##
- ## ---------------------------------------------------------------------
- #
- # Tests whether the cxx compiler understands a flag.
- # If so, add it to 'variable'.
- #
- # Usage:
- # ENABLE_IF_SUPPORTED(variable flag)
- #
- include(CheckCXXCompilerFlag)
- MACRO(ENABLE_IF_SUPPORTED _variable _flag)
- #
- # Clang is too conservative when reporting unsupported compiler flags.
- # Therefore, we promote all warnings for an unsupported compiler flag to
- # actual errors with the -Werror switch:
- #
- IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- SET(_werror_string "-Werror ")
- ELSE()
- SET(_werror_string "")
- ENDIF()
- STRING(STRIP "${_flag}" _flag_stripped)
- SET(_flag_stripped_orig "${_flag_stripped}")
- #
- # Gcc does not emit a warning if testing -Wno-... flags which leads to
- # false positive detection. Unfortunately it later warns that an unknown
- # warning option is used if another warning is emitted in the same
- # compilation unit.
- # Therefore we invert the test for -Wno-... flags:
- #
- IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
- STRING(REPLACE "-Wno-" "-W" _flag_stripped "${_flag_stripped}")
- ENDIF()
- IF(NOT "${_flag_stripped}" STREQUAL "")
- STRING(REGEX REPLACE "^-" "" _flag_name "${_flag_stripped}")
- STRING(REPLACE "," "" _flag_name "${_flag_name}")
- STRING(REPLACE "-" "_" _flag_name "${_flag_name}")
- STRING(REPLACE "+" "_" _flag_name "${_flag_name}")
- CHECK_CXX_COMPILER_FLAG(
- "${_werror_string}${_flag_stripped}"
- HAVE_FLAG_${_flag_name}
- )
- IF(HAVE_FLAG_${_flag_name})
- SET(${_variable} "${${_variable}} ${_flag_stripped_orig}")
- STRING(STRIP "${${_variable}}" ${_variable})
- ENDIF()
- ENDIF()
- ENDMACRO()
- #
- # Tests whether it is possible to compile and link a dummy program with a
- # given flag.
- # If so, add it to variable.
- #
- # Usage:
- # ENABLE_IF_LINKS(variable flag)
- #
- MACRO(ENABLE_IF_LINKS _variable _flag)
- STRING(STRIP "${_flag}" _flag_stripped)
- IF(NOT "${_flag_stripped}" STREQUAL "")
- STRING(REGEX REPLACE "^-" "" _flag_name "${_flag_stripped}")
- STRING(REPLACE "," "" _flag_name "${_flag_name}")
- STRING(REPLACE "-" "_" _flag_name "${_flag_name}")
- STRING(REPLACE "+" "_" _flag_name "${_flag_name}")
- SET(_backup ${CMAKE_REQUIRED_LIBRARIES})
- LIST(APPEND CMAKE_REQUIRED_LIBRARIES "${_flag_stripped}")
- CHECK_CXX_COMPILER_FLAG(
- ""
- HAVE_FLAG_${_flag_name}
- )
- SET(CMAKE_REQUIRED_LIBRARIES ${_backup})
- IF(HAVE_FLAG_${_flag_name})
- SET(${_variable} "${${_variable}} ${_flag_stripped}")
- STRING(STRIP "${${_variable}}" ${_variable})
- ENDIF()
- ENDIF()
- ENDMACRO()
- #############################################################
- function(std_target_properties target)
- set_target_properties(${target} PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED ON)
- endfunction()
- #############################################################
- function(safe_download URL)
- set(ARGS FILENAME SHA1)
- cmake_parse_arguments(SD "SHOW_PROGRESS" "${ARGS}" "" ${ARGN})
- if(NOT DEFINED SD_FILENAME)
- get_filename_component(SD_FILENAME ${CU_URL} NAME)
- endif(NOT DEFINED SD_FILENAME)
- if(EXISTS "${SD_FILENAME}")
- file(SHA1 "${SD_FILENAME}" CURRENT_SHA1)
- endif()
- if(NOT DEFINED SD_SHA1)
- set(SD_SHA1 ${CURRENT_SHA1})
- endif()
- if(SD_SHOW_PROGRESS)
- set(_SHOW_PROGRESS "SHOW_PROGRESS")
- endif()
- if(NOT CURRENT_SHA1 STREQUAL SD_SHA1)
- message(STATUS "Downloading ${URL} to ${SD_FILENAME}...")
- file(
- DOWNLOAD ${URL} ${SD_FILENAME}
- STATUS SD_STATUS
- ${_SHOW_PROGRESS}
- )
- list(GET SD_STATUS 0 SD_SUCCESS)
- if(NOT SD_SUCCESS EQUAL 0)
- list(GET SD_STATUS 1 SD_ERROR)
- file(REMOVE ${SD_FILENAME})
- if("${SD_ERROR}" STREQUAL "\"Unsupported protocol\"")
- message(FATAL_ERROR "Download failed and your cmake probably don't support SSL! Beware that cmake downloaded from cmake.org doesn't support SSL on all platforms, make sure to build it yourself.")
- endif()
- message(FATAL_ERROR "Failed to download: ${URL}: ${SD_ERROR}")
- endif()
- file(SHA1 "${SD_FILENAME}" NEW_SHA1)
- if(DEFINED SD_SHA1)
- if(NOT SD_SHA1 STREQUAL NEW_SHA1)
- file(REMOVE ${SD_FILENAME})
- message(FATAL_ERROR "Failed to verify SHA1 on ${SD_FILENAME}, expected '${SD_SHA1}' got '${NEW_SHA1}'")
- endif()
- endif()
- endif()
- endfunction()
|