]>
Commit | Line | Data |
---|---|---|
6c7cee42 RD |
1 | # - Check if the protoype we expect is correct. |
2 | # check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE) | |
3 | # FUNCTION - The name of the function (used to check if prototype exists) | |
4 | # PROTOTYPE- The prototype to check. | |
5 | # RETURN - The return value of the function. | |
6 | # HEADER - The header files required. | |
7 | # VARIABLE - The variable to store the result. | |
8 | # Example: | |
9 | # check_prototype_definition(getpwent_r | |
10 | # "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)" | |
11 | # "NULL" | |
12 | # "unistd.h;pwd.h" | |
13 | # SOLARIS_GETPWENT_R) | |
14 | # The following variables may be set before calling this macro to | |
15 | # modify the way the check is run: | |
16 | # | |
17 | # CMAKE_REQUIRED_FLAGS = string of compile command line flags | |
18 | # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) | |
19 | # CMAKE_REQUIRED_INCLUDES = list of include directories | |
20 | # CMAKE_REQUIRED_LIBRARIES = list of libraries to link | |
21 | ||
22 | #============================================================================= | |
23 | # Copyright 2005-2009 Kitware, Inc. | |
24 | # Copyright 2010-2011 Andreas Schneider <asn@cryptomilk.org> | |
25 | # | |
26 | # Distributed under the OSI-approved BSD License (the "License"); | |
27 | # see accompanying file Copyright.txt for details. | |
28 | # | |
29 | # This software is distributed WITHOUT ANY WARRANTY; without even the | |
30 | # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
31 | # See the License for more information. | |
32 | #============================================================================= | |
33 | # (To distribute this file outside of CMake, substitute the full | |
34 | # License text for the above reference.) | |
35 | # | |
36 | ||
37 | get_filename_component(__check_proto_def_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) | |
38 | ||
39 | function(CHECK_PROTOTYPE_DEFINITION _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIABLE) | |
40 | ||
41 | if ("${_VARIABLE}" MATCHES "^${_VARIABLE}$") | |
42 | set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n") | |
43 | ||
44 | set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS}) | |
45 | if (CMAKE_REQUIRED_LIBRARIES) | |
46 | set(CHECK_PROTOTYPE_DEFINITION_LIBS | |
47 | "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") | |
48 | else(CMAKE_REQUIRED_LIBRARIES) | |
49 | set(CHECK_PROTOTYPE_DEFINITION_LIBS) | |
50 | endif(CMAKE_REQUIRED_LIBRARIES) | |
51 | if (CMAKE_REQUIRED_INCLUDES) | |
52 | set(CMAKE_SYMBOL_EXISTS_INCLUDES | |
53 | "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") | |
54 | else(CMAKE_REQUIRED_INCLUDES) | |
55 | set(CMAKE_SYMBOL_EXISTS_INCLUDES) | |
56 | endif(CMAKE_REQUIRED_INCLUDES) | |
57 | ||
58 | foreach(_FILE ${_HEADER}) | |
59 | set(CHECK_PROTOTYPE_DEFINITION_HEADER | |
60 | "${CHECK_PROTOTYPE_DEFINITION_HEADER}#include <${_FILE}>\n") | |
61 | endforeach(_FILE) | |
62 | ||
63 | set(CHECK_PROTOTYPE_DEFINITION_SYMBOL ${_FUNCTION}) | |
64 | set(CHECK_PROTOTYPE_DEFINITION_PROTO ${_PROTOTYPE}) | |
65 | set(CHECK_PROTOTYPE_DEFINITION_RETURN ${_RETURN}) | |
66 | ||
67 | configure_file("${__check_proto_def_dir}/CheckPrototypeDefinition.c.in" | |
68 | "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c" @ONLY) | |
69 | ||
70 | file(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c _SOURCE) | |
71 | ||
72 | try_compile(${_VARIABLE} | |
73 | ${CMAKE_BINARY_DIR} | |
74 | ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c | |
75 | COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} | |
76 | CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS} | |
77 | "${CHECK_PROTOTYPE_DEFINITION_LIBS}" | |
78 | "${CMAKE_SYMBOL_EXISTS_INCLUDES}" | |
79 | OUTPUT_VARIABLE OUTPUT) | |
80 | ||
81 | if (${_VARIABLE}) | |
82 | set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}") | |
83 | message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - True") | |
84 | file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log | |
85 | "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} passed with the following output:\n" | |
86 | "${OUTPUT}\n\n") | |
87 | else (${_VARIABLE}) | |
88 | message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - False") | |
89 | set(${_VARIABLE} 0 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}") | |
90 | file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log | |
91 | "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} failed with the following output:\n" | |
92 | "${OUTPUT}\n\n${_SOURCE}\n\n") | |
93 | endif (${_VARIABLE}) | |
94 | endif("${_VARIABLE}" MATCHES "^${_VARIABLE}$") | |
95 | ||
96 | endfunction(CHECK_PROTOTYPE_DEFINITION) |