[cmake-developers] Should try_run have a timeout value? [demo CMakeLists.txt in body of email]

clinton at elemtech.com clinton at elemtech.com
Thu Jun 12 09:18:48 EDT 2014


Would you also be satisfied if the crash dialog was disabled in the try_run()?
That is done for ctest by cmCTest::BlockTestErrorDiagnostics().

Clint


----- Original Message -----
> #
> # CMakeLists.txt
> #
> # PROBLEM:
> #
> # This file demonstrates a problem with CMake 3.0 and Visual Studio
> # compiler x64 builds... If configured for a build with the x64
> # compiler, CMake will hang until user intervention with a
> # "cmTryCompileExec123...789.exe has stopped working"
> # crash dialog.
> #
> # The "problem" has existed forever, it's not new to CMake 3.0
> #
> # QUESTION:
> #
> #   Should try_run have a timeout value, defaulting to a few seconds (or
> #   something more reasonable than NEVER) or is there a way for CMake to
> #   detect this condition and kill it as an unsuccessful try_run...?
> #
> cmake_minimum_required(VERSION 3.0)
> project(subtle_pointer_error C)
> 
> set(source_file "${CMAKE_CURRENT_BINARY_DIR}/spe.c")
> 
> file(WRITE ${source_file}.in
> # OMG - long bracket argument syntax is beautiful for including
> # unescaped entire other http://sscce.org/ files within a
> # CMakeLists.txt!!
> [=[
> /*
>   The problem with this code (and why it crashes on Windows x64
>   builds) is malloc is used without declaring it, so the C compiler
>   assumes it is extern returning int... But int is too small for a
>   pointer on x64 builds, so the value that ends up in "ptr" is not
>   the whole pointer, but only sizeof(int) bytes of it. The fix is
>   obviously to include the header that declares malloc (and memcpy,
>   and anything else used), but this was hard to diagnose, and
>   annoying as heck on automated dashboard machines -- a failed
>   try_run due to excessive attempted run time would have been a most
>   welcome assist.
> 
>   Fix this problem and prove the crash goes away by adding:
>     #include <stdlib.h>
>     #include <string.h>
> */
> 
> #include <stdio.h>
> 
> int main(void)
> {
>   double value = 1234.56;
>   void *ptr = malloc(sizeof(value));
>   printf("before memcpy\n");
>   fflush(stdout);
>   memcpy(ptr, &value, sizeof(value));
>   printf("after memcpy\n");
>   return 0;
> }
> ]=]
> )
> 
> configure_file(${source_file}.in ${source_file} COPYONLY)
> 
> try_run(
>   run_result
>   compile_result
>   ${CMAKE_CURRENT_BINARY_DIR}/TryRun001
>   ${source_file}
>   COMPILE_OUTPUT_VARIABLE compile_output
>   RUN_OUTPUT_VARIABLE run_output
>   )
> 
> message("compile_result='${compile_result}'")
> message("run_result='${run_result}'")
> message("compile_output='${compile_output}'")
> message("run_output='${run_output}'")
> 
> add_executable(spe ${source_file})
> 
> #
> # Thanks for your opinions, and taking a look...
> #
> #    David C.
> #
> 
> --
> 
> Powered by www.kitware.com
> 
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
> 
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
> 
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
> 
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> 
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers
> 



More information about the cmake-developers mailing list