On 21. Jan, 2010, at 9:56 , Marcel Loose wrote:

> On Thu, 2010-01-21 at 06:52 +0100, Michael Wild wrote:
>> On 21. Jan, 2010, at 24:55 , Mateusz Loskot wrote:
>> 
>>> Hi,
>>> 
>>> I'm trying to perform the following checks:
>>> 
>>> check_function_exists(std::pow HAVE_POW)
>>> 
>>> or
>>> 
>>> check_symbol_exists(std::pow cmath HAVE_POW)
>>> 
>>> but it looks that both macros have troubles
>>> with resolving std:: namespace.
>>> 
>>> The documentation is not very clear about that.
>>> 
>>> Or I should stick to try_compile based tests?
>>> 
>>> Best regards,
>>> 
>> 
>> 
>> AFAIK check_symbol_exists is used for preprocessor symbols.
> check_function_exists looks for C functions, not C++. Also notice, that
> older C++ standard libraries and non-compliant C++ compilers don't use
> the namespace std. You might want to have a look at
> CMakeBackwardCompatibilityCXX.cmake or the various other modules it
> uses.
>> 
>> 
>> HTH
>> 
>> Michael
>> 
> I thought that check_symbol_exists() was meant to check for the
> *declaration* of a symbol (e.g. a function) in a header file; and that
> check_function_exists() was meant to check for the *definition* of a
> function (i.e. exists as symbol in a library).
> 
> Best regards,
> Marcel Loose.

Just checked: check_symbol_exists works for both. E.g. testing for deflateInit 
in zlib.h (which is a #define) results in the following test code:

#include <zlib.h>

void cmakeRequireSymbol(int dummy,...){(void)dummy;}
int main()
{
#ifndef deflateInit
  cmakeRequireSymbol(0,&deflateInit);
#endif
  return 0;
}


As you can see, the code will compile successfully for both cases.

IMHO the documentation should be clarified...


Michael
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to