-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge commit '74b2867010a7c5788ba3f1256e10e5fd31b7a2b0' into unstable
- Loading branch information
Showing
8 changed files
with
2,017 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying | ||
# file Copyright.txt or https://cmake.org/licensing for details. | ||
|
||
#[=======================================================================[.rst: | ||
CMakePushCheckState | ||
------------------- | ||
|
||
|
||
|
||
This module defines three macros: ``CMAKE_PUSH_CHECK_STATE()`` | ||
``CMAKE_POP_CHECK_STATE()`` and ``CMAKE_RESET_CHECK_STATE()`` These macros can | ||
be used to save, restore and reset (i.e., clear contents) the state of | ||
the variables ``CMAKE_REQUIRED_FLAGS``, ``CMAKE_REQUIRED_DEFINITIONS``, | ||
``CMAKE_REQUIRED_LINK_OPTIONS``, ``CMAKE_REQUIRED_LIBRARIES``, | ||
``CMAKE_REQUIRED_INCLUDES`` and ``CMAKE_EXTRA_INCLUDE_FILES`` used by the | ||
various Check-files coming with CMake, like e.g. ``check_function_exists()`` | ||
etc. | ||
The variable contents are pushed on a stack, pushing multiple times is | ||
supported. This is useful e.g. when executing such tests in a Find-module, | ||
where they have to be set, but after the Find-module has been executed they | ||
should have the same value as they had before. | ||
|
||
``CMAKE_PUSH_CHECK_STATE()`` macro receives optional argument ``RESET``. | ||
Whether it's specified, ``CMAKE_PUSH_CHECK_STATE()`` will set all | ||
``CMAKE_REQUIRED_*`` variables to empty values, same as | ||
``CMAKE_RESET_CHECK_STATE()`` call will do. | ||
|
||
Usage: | ||
|
||
.. code-block:: cmake | ||
|
||
cmake_push_check_state(RESET) | ||
set(CMAKE_REQUIRED_DEFINITIONS -DSOME_MORE_DEF) | ||
check_function_exists(...) | ||
cmake_reset_check_state() | ||
set(CMAKE_REQUIRED_DEFINITIONS -DANOTHER_DEF) | ||
check_function_exists(...) | ||
cmake_pop_check_state() | ||
#]=======================================================================] | ||
|
||
macro(CMAKE_RESET_CHECK_STATE) | ||
|
||
set(CMAKE_EXTRA_INCLUDE_FILES) | ||
set(CMAKE_REQUIRED_INCLUDES) | ||
set(CMAKE_REQUIRED_DEFINITIONS) | ||
set(CMAKE_REQUIRED_LINK_OPTIONS) | ||
set(CMAKE_REQUIRED_LIBRARIES) | ||
set(CMAKE_REQUIRED_FLAGS) | ||
set(CMAKE_REQUIRED_QUIET) | ||
|
||
endmacro() | ||
|
||
macro(CMAKE_PUSH_CHECK_STATE) | ||
|
||
if(NOT DEFINED _CMAKE_PUSH_CHECK_STATE_COUNTER) | ||
set(_CMAKE_PUSH_CHECK_STATE_COUNTER 0) | ||
endif() | ||
|
||
math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1") | ||
|
||
set(_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_EXTRA_INCLUDE_FILES}) | ||
set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES}) | ||
set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS}) | ||
set(_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LINK_OPTIONS}) | ||
set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES}) | ||
set(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS}) | ||
set(_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_QUIET}) | ||
|
||
if (${ARGC} GREATER 0 AND "${ARGV0}" STREQUAL "RESET") | ||
cmake_reset_check_state() | ||
endif() | ||
|
||
endmacro() | ||
|
||
macro(CMAKE_POP_CHECK_STATE) | ||
|
||
# don't pop more than we pushed | ||
if("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0") | ||
|
||
set(CMAKE_EXTRA_INCLUDE_FILES ${_CMAKE_EXTRA_INCLUDE_FILES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) | ||
set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) | ||
set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) | ||
set(CMAKE_REQUIRED_LINK_OPTIONS ${_CMAKE_REQUIRED_LINK_OPTIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) | ||
set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) | ||
set(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) | ||
set(CMAKE_REQUIRED_QUIET ${_CMAKE_REQUIRED_QUIET_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) | ||
|
||
math(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1") | ||
endif() | ||
|
||
endmacro() |
85 changes: 85 additions & 0 deletions
85
nrgljubljana/CMake/BLAS_LAPACK/CheckFortranFunctionExists.cmake
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying | ||
# file Copyright.txt or https://cmake.org/licensing for details. | ||
|
||
#[=======================================================================[.rst: | ||
CheckFortranFunctionExists | ||
-------------------------- | ||
|
||
Check if a Fortran function exists. | ||
|
||
.. command:: CHECK_FORTRAN_FUNCTION_EXISTS | ||
|
||
.. code-block:: cmake | ||
|
||
CHECK_FORTRAN_FUNCTION_EXISTS(<function> <result>) | ||
|
||
where | ||
|
||
``<function>`` | ||
the name of the Fortran function | ||
``<result>`` | ||
variable to store the result; will be created as an internal cache variable. | ||
|
||
The following variables may be set before calling this macro to modify | ||
the way the check is run: | ||
|
||
``CMAKE_REQUIRED_LINK_OPTIONS`` | ||
A :ref:`;-list <CMake Language Lists>` of options to add to the link | ||
command (see :command:`try_compile` for further details). | ||
|
||
``CMAKE_REQUIRED_LIBRARIES`` | ||
A :ref:`;-list <CMake Language Lists>` of libraries to add to the link | ||
command. These can be the name of system libraries or they can be | ||
:ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for | ||
further details). | ||
#]=======================================================================] | ||
|
||
include_guard(GLOBAL) | ||
|
||
macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE) | ||
if(NOT DEFINED ${VARIABLE}) | ||
message(STATUS "Looking for Fortran ${FUNCTION}") | ||
if(CMAKE_REQUIRED_LINK_OPTIONS) | ||
set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS | ||
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) | ||
else() | ||
set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS) | ||
endif() | ||
if(CMAKE_REQUIRED_LIBRARIES) | ||
set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES | ||
LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) | ||
else() | ||
set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) | ||
endif() | ||
file(WRITE | ||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f | ||
" | ||
program TESTFortran | ||
external ${FUNCTION} | ||
call ${FUNCTION}() | ||
end program TESTFortran | ||
" | ||
) | ||
try_compile(${VARIABLE} | ||
${CMAKE_BINARY_DIR} | ||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f | ||
${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS} | ||
${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES} | ||
OUTPUT_VARIABLE OUTPUT | ||
) | ||
# message(STATUS "${OUTPUT}") | ||
if(${VARIABLE}) | ||
set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}") | ||
message(STATUS "Looking for Fortran ${FUNCTION} - found") | ||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log | ||
"Determining if the Fortran ${FUNCTION} exists passed with the following output:\n" | ||
"${OUTPUT}\n\n") | ||
else() | ||
message(STATUS "Looking for Fortran ${FUNCTION} - not found") | ||
set(${VARIABLE} "" CACHE INTERNAL "Have Fortran function ${FUNCTION}") | ||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log | ||
"Determining if the Fortran ${FUNCTION} exists failed with the following output:\n" | ||
"${OUTPUT}\n\n") | ||
endif() | ||
endif() | ||
endmacro() |
119 changes: 119 additions & 0 deletions
119
nrgljubljana/CMake/BLAS_LAPACK/CheckFunctionExists.cmake
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying | ||
# file Copyright.txt or https://cmake.org/licensing for details. | ||
|
||
#[=======================================================================[.rst: | ||
CheckFunctionExists | ||
------------------- | ||
|
||
Check if a C function can be linked | ||
|
||
.. command:: check_function_exists | ||
|
||
.. code-block:: cmake | ||
|
||
check_function_exists(<function> <variable>) | ||
|
||
Checks that the ``<function>`` is provided by libraries on the system and store | ||
the result in a ``<variable>``, which will be created as an internal | ||
cache variable. | ||
|
||
The following variables may be set before calling this macro to modify the | ||
way the check is run: | ||
|
||
``CMAKE_REQUIRED_FLAGS`` | ||
string of compile command line flags. | ||
``CMAKE_REQUIRED_DEFINITIONS`` | ||
a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar). | ||
``CMAKE_REQUIRED_INCLUDES`` | ||
a :ref:`;-list <CMake Language Lists>` of header search paths to pass to | ||
the compiler. | ||
``CMAKE_REQUIRED_LINK_OPTIONS`` | ||
a :ref:`;-list <CMake Language Lists>` of options to add to the link command. | ||
``CMAKE_REQUIRED_LIBRARIES`` | ||
a :ref:`;-list <CMake Language Lists>` of libraries to add to the link | ||
command. See policy :policy:`CMP0075`. | ||
``CMAKE_REQUIRED_QUIET`` | ||
execute quietly without messages. | ||
|
||
.. note:: | ||
|
||
Prefer using :Module:`CheckSymbolExists` instead of this module, | ||
for the following reasons: | ||
|
||
* ``check_function_exists()`` can't detect functions that are inlined | ||
in headers or specified as a macro. | ||
|
||
* ``check_function_exists()`` can't detect anything in the 32-bit | ||
versions of the Win32 API, because of a mismatch in calling conventions. | ||
|
||
* ``check_function_exists()`` only verifies linking, it does not verify | ||
that the function is declared in system headers. | ||
#]=======================================================================] | ||
|
||
include_guard(GLOBAL) | ||
|
||
macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE) | ||
if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}") | ||
set(MACRO_CHECK_FUNCTION_DEFINITIONS | ||
"-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}") | ||
if(NOT CMAKE_REQUIRED_QUIET) | ||
message(STATUS "Looking for ${FUNCTION}") | ||
endif() | ||
if(CMAKE_REQUIRED_LINK_OPTIONS) | ||
set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS | ||
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) | ||
else() | ||
set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS) | ||
endif() | ||
if(CMAKE_REQUIRED_LIBRARIES) | ||
set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES | ||
LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) | ||
else() | ||
set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) | ||
endif() | ||
if(CMAKE_REQUIRED_INCLUDES) | ||
set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES | ||
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") | ||
else() | ||
set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES) | ||
endif() | ||
|
||
if(CMAKE_C_COMPILER_LOADED) | ||
set(_cfe_source ${CMAKE_ROOT}/Modules/CheckFunctionExists.c) | ||
elseif(CMAKE_CXX_COMPILER_LOADED) | ||
set(_cfe_source ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckFunctionExists/CheckFunctionExists.cxx) | ||
configure_file(${CMAKE_ROOT}/Modules/CheckFunctionExists.c "${_cfe_source}" COPYONLY) | ||
else() | ||
message(FATAL_ERROR "CHECK_FUNCTION_EXISTS needs either C or CXX language enabled") | ||
endif() | ||
|
||
try_compile(${VARIABLE} | ||
${CMAKE_BINARY_DIR} | ||
${_cfe_source} | ||
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} | ||
${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS} | ||
${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES} | ||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} | ||
"${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}" | ||
OUTPUT_VARIABLE OUTPUT) | ||
unset(_cfe_source) | ||
|
||
if(${VARIABLE}) | ||
set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}") | ||
if(NOT CMAKE_REQUIRED_QUIET) | ||
message(STATUS "Looking for ${FUNCTION} - found") | ||
endif() | ||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log | ||
"Determining if the function ${FUNCTION} exists passed with the following output:\n" | ||
"${OUTPUT}\n\n") | ||
else() | ||
if(NOT CMAKE_REQUIRED_QUIET) | ||
message(STATUS "Looking for ${FUNCTION} - not found") | ||
endif() | ||
set(${VARIABLE} "" CACHE INTERNAL "Have function ${FUNCTION}") | ||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log | ||
"Determining if the function ${FUNCTION} exists failed with the following output:\n" | ||
"${OUTPUT}\n\n") | ||
endif() | ||
endif() | ||
endmacro() |
Oops, something went wrong.