summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorRolf Eike Beer <eike@sf-mail.de>2012-01-03 18:54:43 (GMT)
committerRolf Eike Beer <eike@sf-mail.de>2012-01-16 19:27:40 (GMT)
commit813eca64160509465c0e557aa98c9b0f828e47a9 (patch)
treeeb75fba2beee4f070734f599b130f02ef497435d /Modules
parent9a20abf04a7fc11b53beb545f1555fe9815ae09c (diff)
downloadCMake-813eca64160509465c0e557aa98c9b0f828e47a9.zip
CMake-813eca64160509465c0e557aa98c9b0f828e47a9.tar.gz
CMake-813eca64160509465c0e557aa98c9b0f828e47a9.tar.bz2
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')
-rw-r--r--Modules/CheckSymbolExists.cmake2
1 files changed, 1 insertions, 1 deletions
diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake
index 183b2bb..515319d 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)