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

Reply via email to