Hi Alan,
>
> There are a number of problems in the above logic.
>
> (*) HAVE_FINITE, HAVE_FINITE2, _HAVE_FINITE and _HAVE_FINITE2 are all
> cached
> as a result of check_symbol_exists and check_function_exists. (See the
> commands
>
> SET(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}")
>
> and
>
> SET(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}")
>
> in CheckSymbolExists.cmake and CheckFunctionExists.cmake). So all
> further
> attempts to set those variables should also mention CACHE INTERNAL or
> else
> you should use a different name (UNCACHED_HAVE_FINITE ?) for the uncached
> variables you are setting. (In CMake the same name can refer to separate
> variables, the cached one and the uncached one.) It's possible the
> current
> logic works, but with this reuse of names it gets quite confusing so I
> would
> advocate using separate names for variables that mean separate things,
> and
> definitely you should not use the same name for both a cached variable
> and
> uncached variable.
>
> (*) The
>
> set(HAVE_FINITE ${HAVE_FINITE2})
>
> assumes check_function_exists(finite HAVE_FINITE2) has been called, but
> what if the first check_symbol_exists succeeds? Then, that success is
> ignored, HAVE_FINITE2 is undefined, and then you start looking
> incorrectly
> for the _finite symbol or _finite function.
>
> Once those two issues are straightened out, I think the logic will
> work both
> the first manual time and subsequent automatic times cmake is called.
> Note,
> on the second and subsequent times, the cache is used to retrieve values
> rather than actually doing the checks to determine those values. That is
> why CMake is so notorious for speed, but it also means you have to be
> careful of whether variables are cached or not like I advocate above.
>
>> Anyway, do you both can help me to solve this problem, since I'm not
>> sure how to proceed.
>
> I would suggest the above changes. Then debug the second and subsequent
> times cmake is run by putting in lots of message statements to verify all
> values are being set correctly from the cache.
>
> Good luck sorting this out.
Thanks for the explanations. I changed the code now to:
check_symbol_exists(finite "math.h" HAVE_FINITE)
if(NOT HAVE_FINITE)
check_function_exists(finite HAVE_FINITE2)
if(HAVE_FINITE2)
set(HAVE_FINITE ${HAVE_FINITE2} CACHE INTERNAL "Have function finite")
else(HAVE_FINITE2)
check_symbol_exists(_finite "math.h" _HAVE_FINITE)
if(NOT _HAVE_FINITE)
check_function_exists(_finite _HAVE_FINITE2)
if(_HAVE_FINITE2)
set(_HAVE_FINITE ${_HAVE_FINITE2} CACHE INTERNAL "Have function
_finite")
set(HAVE_FINITE ${_HAVE_FINITE} CACHE INTERNAL "Have function
_finite")
endif(_HAVE_FINITE2)
set(_HAVE_FINITE2 "" CACHE INTERNAL "Have function _finite")
endif(NOT _HAVE_FINITE)
endif(HAVE_FINITE2)
set(HAVE_FINITE2 "" CACHE INTERNAL "Have function finite")
endif(NOT HAVE_FINITE)
This works now, and using Visual C++ doesn't always lead to
re-configuration. And if cmake is run again, the variables are taken
correctly from the cache. What I don't understand is, that
check_symbol_exists(finite "math.h" HAVE_FINITE)
if(NOT HAVE_FINITE)
check_function_exists(finite HAVE_FINITE)
endif(NOT HAVE_FINITE)
Doesn't work. check_function_exists is called, but IF("${VARIABLE}"
MATCHES "^${VARIABLE}$") in
CheckFunctionsExists.cmake/CheckFunctionsExists.cmake is true for
check_symbol_exists and false for check_function_exists???? HAVE_FINITE
is both times "".I also don't understand "${VARIABLE}" MATCHES
"^${VARIABLE}$" - I was playing around with a regex checker and no
matter what I did ("test" matches "^test$", "" matches "^$", etc.) this
statement was always true. Why it is false for check_function_exists I
don't get. This would make the logic a lot easier ....
Regards,
Werner
>
> Alan
> __________________________
> Alan W. Irwin
>
> Astronomical research affiliation with Department of Physics and
> Astronomy,
> University of Victoria (astrowww.phys.uvic.ca).
>
> Programming affiliations with the FreeEOS equation-of-state
> implementation
> for stellar interiors (freeeos.sf.net); PLplot scientific plotting
> software
> package (plplot.org); the libLASi project (unifont.org/lasi); the
> Loads of
> Linux Links project (loll.sf.net); and the Linux Brochure Project
> (lbproject.sf.net).
> __________________________
>
> Linux-powered Science
> __________________________
--
Dr. Werner Smekal
Institut fuer Allgemeine Physik
Technische Universitaet Wien
Wiedner Hauptstr 8-10
A-1040 Wien
Austria
DVR-Nr: 0005886
email: [email protected]
web: http://www.iap.tuwien.ac.at/~smekal
phone: +43-(0)1-58801-13463 (office)
+43-(0)1-58801-13469 (laboratory)
fax: +43-(0)1-58801-13499
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Plplot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plplot-devel