Sindbad~EG File Manager
#
# Check if file descriptor passing is supported
# Derived from work submitted by Richard Lyons <frob-clamav@webcentral.com.au>
#
GET_FILENAME_COMPONENT(_selfdir_CheckFDPassing
"${CMAKE_CURRENT_LIST_FILE}" PATH)
include(CheckSymbolExists)
check_symbol_exists(recvmsg "sys/socket.h" HAVE_RECVMSG)
check_symbol_exists(sendmsg "sys/socket.h" HAVE_SENDMSG)
# Extra -D Compile Definitions for check_c_source_compiles()
set(CMAKE_REQUIRED_DEFINITIONS "")
if(HAVE_SYS_TYPES_H)
set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS};-DHAVE_SYS_TYPES_H=1")
endif()
if(HAVE_SYS_UIO_H)
set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS};-DHAVE_SYS_UIO_H=1")
endif()
# Check for msg_control field in struct msghdr
check_c_source_compiles(
"
#define _XOPEN_SOURCE 500
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#include <sys/socket.h>
#ifdef HAVE_SYS_UIO_H
# include <sys/uio.h>
#endif
int main(void) {
#ifdef msg_control
# error msg_control defined
#endif
struct msghdr m;
m.msg_control = 0;
return 0;
}
"
HAVE_CONTROL_IN_MSGHDR )
if(HAVE_CONTROL_IN_MSGHDR)
#
# Check whether BSD 4.4 / RFC2292 style fd passing works
#
set(EXTRA_COMPILE_DEFINITIONS "")
if(HAVE_SYS_TYPES_H)
set(EXTRA_COMPILE_DEFINITIONS "${EXTRA_COMPILE_DEFINITIONS} -DHAVE_SYS_TYPES_H=1")
endif()
if(HAVE_SYS_UIO_H)
set(EXTRA_COMPILE_DEFINITIONS "${EXTRA_COMPILE_DEFINITIONS} -DHAVE_SYS_UIO_H=1")
endif()
# Try without _XOPEN_SOURCE first
try_run(
# Name of variable to store the run result (process exit status; number) in:
test_run_result
# Name of variable to store the compile result (TRUE or FALSE) in:
test_compile_result
# Binary directory:
${CMAKE_CURRENT_BINARY_DIR}
# Source file to be compiled:
${_selfdir_CheckFDPassing}/CheckFDPassing.c
# Extra -D Compile Definitions
COMPILE_DEFINITIONS ${EXTRA_COMPILE_DEFINITIONS}
# Where to store the output produced during compilation:
COMPILE_OUTPUT_VARIABLE test_compile_output
# Where to store the output produced by running the compiled executable:
RUN_OUTPUT_VARIABLE test_run_output )
# Did compilation succeed and process return 0 (success)?
if("${test_compile_result}" AND ("${test_run_result}" EQUAL 0))
set(HAVE_FD_PASSING 1)
else()
# Try again, this time with: #define _XOPEN_SOURCE 500
set(EXTRA_COMPILE_DEFINITIONS "${EXTRA_COMPILE_DEFINITIONS} -D_XOPEN_SOURCE=500")
try_run(
# Name of variable to store the run result (process exit status; number) in:
test_run_result
# Name of variable to store the compile result (TRUE or FALSE) in:
test_compile_result
# Binary directory:
${CMAKE_CURRENT_BINARY_DIR}
# Source file to be compiled:
${_selfdir_CheckFDPassing}/CheckFDPassing.c
# Extra -D Compile Definitions
COMPILE_DEFINITIONS ${EXTRA_COMPILE_DEFINITIONS}
# Where to store the output produced during compilation:
COMPILE_OUTPUT_VARIABLE test_compile_output
# Where to store the output produced by running the compiled executable:
RUN_OUTPUT_VARIABLE test_run_output )
# Did compilation succeed and process return 0 (success)?
if("${test_compile_result}" AND ("${test_run_result}" EQUAL 0))
set(HAVE_FD_PASSING 1)
set(FDPASS_NEED_XOPEN 1)
endif()
endif()
endif()
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists