Tim Holy wrote:
Hi Bill,
OK, I think I understand better. The whole problem can be illustrated with
this simple CMakeLists.txt file:
include(CheckTypeSize)
include(CheckIncludeFile)
# Block_begin
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(stddef.h HAVE_STDDEF_H)
# Block_end
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_type_size(intmax_t INTMAX_T)
message("HIT ${HAVE_INTMAX_T}, IT ${INTMAX_T}")
...
Thanks for the tips; just as you suggested, I figured it out by looking at the
CheckSymbolExists.c file. I don't understand _why_ it fails sporadically, but
at least I know how to keep it from doing so.
Would it be sensible to have CMake issue a warning in case you're compiling a
test for which a #define variable has not been set?
OK, I get it now...
The checktypesize.c file has this code in it:
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif /* HAVE_SYS_TYPES_H */
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif /* HAVE_STDINT_H */
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif /* HAVE_STDDEF_H */
So, I see a few solutions:
1. call these directly in check_type_size:
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(stddef.h HAVE_STDDEF_H)
2. Update the documentation for check_type_size to tell people that they
need those checks.
3. Try to see if those have been called and issue a warning if they have
not.
I am thinking 1 is the best solution and will avoid confusion. I don't
think it will hurt because duplicate calls will be ignored (the test
won't be done multiple times unless a different variable name is used,
but in that case the check type size will not have worked anyway.
-Bill
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake