-### Check for GNU dynamic linker
-CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
-if (HAVE_DLFCN_H)
- execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_gnu_dynlinker.c ${DL_LIBRARY} -o test_gnu_ld
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- OUTPUT_VARIABLE HAVE_GNU_LD_compil
- )
- if(HAVE_GNU_LD_compil)
- set(HAVE_GNU_LD 0)
- message(STATUS "Warning: test program toward GNU ld failed to compile:")
- message(STATUS "${HAVE_GNU_LD_comp_output}")
- else()
- execute_process(COMMAND ./test_gnu_ld
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_GNU_LD_run
- OUTPUT_VARIABLE var_exec
- )
-
- if(NOT HAVE_GNU_LD_run)
- set(HAVE_GNU_LD 1)
- message(STATUS "We are using GNU dynamic linker")
- else()
- set(HAVE_GNU_LD 0)
- message(STATUS "Warning: error while checking for GNU ld:")
- message(STATUS "Test output: '${var_exec}'")
- message(STATUS "Exit status: ${HAVE_GNU_LD_run}")
- endif()
- file(REMOVE test_gnu_ld)
- endif()
-endif()
-
-#--------------------------------------------------------------------------------------------------
-### Initialize of CONTEXT THREADS
-
-set(HAVE_THREAD_CONTEXTS 0)
-if(HAVE_PTHREAD)
- ### Test that we have a way to create semaphores
-
- if(HAVE_SEM_OPEN_LIB)
- 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")
- else()
- set(HAVE_SEM_OPEN 0)
- if(EXISTS "${CMAKE_BINARY_DIR}/sem_open")
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_open exists!")
- else()
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_open not exists!")
- endif()
- message(STATUS "Warning: sem_open not executable")
- message(STATUS "Compilation output: '${var_compil}'")
- message(STATUS "Exit result of sem_open: ${HAVE_SEM_OPEN_run}")
- endif()
- endif()
- file(REMOVE sem_open)
- else()
- set(HAVE_SEM_OPEN 0)
- endif()
-
- if(HAVE_SEM_INIT_LIB)
- execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_init.c -lpthread -o sem_init
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_SEM_INIT_run
- OUTPUT_VARIABLE HAVE_SEM_INIT_compil)
-
- # Test sem_init by compiling:
- if(HAVE_SEM_INIT_compil)
- set(HAVE_SEM_INIT 0)
- message(STATUS "Warning: sem_init not compilable")
- message(STATUS "HAVE_SEM_INIT_comp_output: ${HAVE_SEM_OPEN_comp_output}")
- else()
- set(HAVE_SEM_INIT 1)
- message(STATUS "sem_init is compilable")
- endif()
-
- # If we're not crosscompiling, we check by executing the program:
- if (HAVE_SEM_INIT AND NOT CMAKE_CROSSCOMPILING)
- execute_process(COMMAND ./sem_init
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE HAVE_SEM_INIT_run
- OUTPUT_VARIABLE var_compil
- )
- if (NOT HAVE_SEM_INIT_run)
- set(HAVE_SEM_INIT 1)
- message(STATUS "sem_init is executable")
- else()
- set(HAVE_SEM_INIT 0)
- if(EXISTS "${CMAKE_BINARY_DIR}/sem_init")
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_init exists!")
- else()
- message(STATUS "Bin ${CMAKE_BINARY_DIR}/sem_init not exists!")
- endif()
- message(STATUS "Warning: sem_init not executable")
- message(STATUS "Compilation output: '${var_compil}'")
- message(STATUS "Exit result of sem_init: ${HAVE_SEM_INIT_run}")
- endif()
- endif()
- file(REMOVE sem_init)
- else()
- set(HAVE_SEM_INIT 0)
- endif()
-
- if(NOT HAVE_SEM_OPEN AND NOT HAVE_SEM_INIT)
- message(FATAL_ERROR "Semaphores are not usable (neither sem_open nor sem_init is both compilable and executable), but they are mandatory to threads (you may need to mount /dev).")
- endif()
-
- set(HAVE_THREAD_CONTEXTS 1)
- message("-- Support for thread context factory ok.")
-endif()