- execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_open.c -lpthread -o sem_open
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- OUTPUT_VARIABLE HAVE_SEM_OPEN_compil
- )
-
- # Test sem_open by compiling:
- if(HAVE_SEM_OPEN_compil)
- set(HAVE_SEM_OPEN 0)
- message(STATUS "Warning: sem_open not compilable")
- message(STATUS "HAVE_SEM_OPEN_comp_output: ${HAVE_SEM_OPEN_comp_output}")
- else()
- set(HAVE_SEM_OPEN 1)
- message(STATUS "sem_open is compilable")
- endif()
-
- # If we're not crosscompiling, we check by executing the program:
- if (HAVE_SEM_OPEN AND NOT CMAKE_CROSSCOMPILING)
- execute_process(COMMAND ./sem_open
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_SEM_OPEN_run
- OUTPUT_VARIABLE var_compil
- )
- if (NOT HAVE_SEM_OPEN_run)
- set(HAVE_SEM_OPEN 1)
- message(STATUS "sem_open is executable")
+ try_run(semopen_retval semopen_compilable
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_open.c
+ LINK_LIBRARIES pthread
+ COMPILE_OUTPUT_VARIABLE semopen_compilmsg
+ RUN_OUTPUT_VARIABLE semopen_runmsg)
+
+ set(HAVE_SEM_OPEN 0)
+ if(semopen_compilable)
+ if(NOT semopen_retval) # error if not 0
+ message(STATUS "sem_open is compilable and executable")
+ set(HAVE_SEM_OPEN 1)