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}") This file can be created with the write permission off (so that we can easily delete everything except this file), then rm -r * cmake . If I omit the steps between Block_begin and Block_end, I get unpredictable behavior; usually the existence of intmax_t is disputed (unless running with debug-trycompile), other times it claims to be found but of size 0, and still other times it finds a non-zero size. But with the include file checks in place it works reliably to yield an object of size 8. 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? Thanks, --Tim On Thursday 24 April 2008, you wrote: > Tim Holy wrote: > > On Wednesday 23 April 2008, you wrote: > >>> So, I don't understand why this isn't discovering that these types have > >>> been declared. Can anyone offer some insight? > >> > >> Best thing to do is to use --debug-trycompile. > > > > Thanks for the tip. The outcome, however, is not at all what I expected. > > Check this out (sorry that the line wrapping will make the shell command > > look weird): > > Not totally unexpected as we clean the directory for a reason... > > So, what you want to try is this: > > [EMAIL PROTECTED]:/tmp/build-intl$ rm -r * > [EMAIL PROTECTED]:/tmp/build-intl$ cmake ~/src/tux4kids/tuxmath/trunk/intl/ > > Now, edit the CMakeCache.txt file and remove the references to uintmax > in the cache. > > Then do this: > [EMAIL PROTECTED]:/tmp/build-intl$ cmake --debug-trycompile > ~/src/tux4kids/tuxmath/trunk/intl/ > > > This will cause cmake to only run the one test and it should leave the > source code for the test in CMakeFiles/CMakeTmp. You can then go look > at the source code and try to compile it by hand. > > > But, actually, looking at your CMakeError.log I don't think you have to > do that... > > You have this: > > Determining if the intmax_t exist failed with the following output: > /usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make > CMakeFiles/cmTryCompileExec.dir/build > make[1]: Entering directory `/tmp/build-intl/CMakeFiles/CMakeTmp' > /usr/bin/cmake -E cmake_progress_report > /tmp/build-intl/CMakeFiles/CMakeTmp/CMakeFiles 1 > Building C object CMakeFiles/cmTryCompileExec.dir/CheckSymbolExists.o > /usr/bin/gcc -o CMakeFiles/cmTryCompileExec.dir/CheckSymbolExists.o > -c /tmp/build-intl/CMakeFiles/CMakeTmp/CheckSymbolExists.c > /tmp/build-intl/CMakeFiles/CMakeTmp/CheckSymbolExists.c: In > function â€$(0ma(Binâ€$(1: > (B/tmp/build-intl/CMakeFiles/CMakeTmp/CheckSymbolExists.c:8: error: > expected expression before â€$(0in(Btmax_tâ€$(1 > m(Bake[1]: *** [CMakeFiles/cmTryCompileExec.dir/CheckSymbolExists.o] > Error 1 > make[1]: Leaving directory `/tmp/build-intl/CMakeFiles/CMakeTmp' > make: *** [cmTryCompileExec/fast] Error 2 > > File /tmp/build-intl/CMakeFiles/CMakeTmp/CheckSymbolExists.c: > /* */ > #include <stdint.h> > > void cmakeRequireSymbol(int dummy,...){(void)dummy;} > int main() > { > #ifndef intmax_t > cmakeRequireSymbol(0,&intmax_t); > #endif > return 0; > } > > > So, create your own file CheckSymbolExists.c with the above contents and > then compile it like this: > > /usr/bin/gcc -o foo.o -c CheckSymbolExists.c > > -Bill _______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake