summaryrefslogtreecommitdiff
path: root/Modules/CheckSymbolExists.cmake
diff options
context:
space:
mode:
authorRolf Eike Beer <eike@sf-mail.de>2012-01-03 19:54:43 +0100
committerRolf Eike Beer <eike@sf-mail.de>2012-01-16 20:27:40 +0100
commit813eca64160509465c0e557aa98c9b0f828e47a9 (patch)
treeeb75fba2beee4f070734f599b130f02ef497435d /Modules/CheckSymbolExists.cmake
parent9a20abf04a7fc11b53beb545f1555fe9815ae09c (diff)
downloadcmake-813eca64160509465c0e557aa98c9b0f828e47a9.tar.gz
CheckSymbolExists: force the compiler to keep the referenced symbol
Otherwise the compiler may optimize out the reference to the symbol as the previous version was not really using this. This leads to symbols that are only in a header but not in the given libraries to be reported as present. This came up on the first try to fix bug 11333 as "gcc -O3" would optimize out the reference to pthread_create() so the correct library the symbol is in was not detected. The new test code was suggested by Brad King.
Diffstat (limited to 'Modules/CheckSymbolExists.cmake')
-rw-r--r--Modules/CheckSymbolExists.cmake2
1 files changed, 1 insertions, 1 deletions
diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake
index 183b2bbe6b..515319dd6c 100644
--- a/Modules/CheckSymbolExists.cmake
+++ b/Modules/CheckSymbolExists.cmake
@@ -60,7 +60,7 @@ MACRO(_CHECK_SYMBOL_EXISTS SOURCEFILE SYMBOL FILES VARIABLE)
"${CMAKE_CONFIGURABLE_FILE_CONTENT}#include <${FILE}>\n")
ENDFOREACH(FILE)
SET(CMAKE_CONFIGURABLE_FILE_CONTENT
- "${CMAKE_CONFIGURABLE_FILE_CONTENT}\nvoid cmakeRequireSymbol(int dummy,...){(void)dummy;}\nint main()\n{\n#ifndef ${SYMBOL}\n cmakeRequireSymbol(0,&${SYMBOL});\n#endif\n return 0;\n}\n")
+ "${CMAKE_CONFIGURABLE_FILE_CONTENT}\nint main(int argc, char** argv)\n{\n (void)argv;\n#ifndef ${SYMBOL}\n return ((int*)(&${SYMBOL}))[argc];\n#else\n (void)argc;\n return 0;\n#endif\n}\n")
CONFIGURE_FILE("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
"${SOURCEFILE}" @ONLY IMMEDIATE)