Eric Noulard wrote:
May be you could use TRY_RUN to detect endianity
with something like:

TRY_RUN(
 ENDIANESS_RESULT
 ENDIANESS_COMPILE
 /tmp/
 ${CMAKE_CURRENT_SOURCE_DIR}/make/endianess.c
 OUTPUT_VARIABLE ENDIANESS_OUT
 )


MESSAGE(STATUS "ENDIANITY is :${ENDIANESS_OUT}")

endianess.c is attached.

The trouble I have is that I expected to have
my "endianess" program output in ${ENDIANESS_OUT}
but I get too much including
compilation process ouput.

The format is:

TRY_RUN(RUN_RESULT_VAR COMPILE_RESULT_VAR
bindir srcfile <CMAKE_FLAGS <Flags>>
<COMPILE_DEFINITIONS <flags>>
<OUTPUT_VARIABLE var>
<ARGS <arg1> <arg2>..


Write a test called IsBigEndian.c. When run, have it return either 0 or 1. Get the result with RUN_RESULT_VAR. Use it and be happy. Caveat: 0 is typically regarded as a *success* code when running a system tool, so go over your bit twiddling convention carefully. I can't remember what I did in Chicken's StackGrowsDownward.c, only that Felix caught me doing it backwards and I was surprised.

Use COMPILER_RESULT_VAR to make sure your code actually worked, and throw errors if it doesn't. Your code should always compile; this would be a strange / severe / exceptional error.

OUTPUT_VARIABLE isn't useful for this kind of problem. It gives you all the stdout stuff and you don't want that.

A complete working example of this kind of code is available in the Chicken CMake build. Search CMakeLists.txt for STACK_GROWS_DOWNWARD. http://www.call-with-current-continuation.org . I think I'll document it more, so that the return code conventions are less confusing.


Cheers,
Brandon Van Every


_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to