2014-01-31 06:39:15 -07:00
|
|
|
include(CheckTypeSize)
|
2014-04-03 01:27:36 -07:00
|
|
|
include(CheckSymbolExists)
|
2014-06-05 02:41:27 -07:00
|
|
|
include(CheckFunctionExists)
|
|
|
|
include(CheckIncludeFiles)
|
2015-08-15 06:16:29 -07:00
|
|
|
include(CheckCSourceRuns)
|
2015-08-15 07:41:28 -07:00
|
|
|
include(CheckCSourceCompiles)
|
2014-01-31 11:10:18 -07:00
|
|
|
|
2014-01-31 06:39:15 -07:00
|
|
|
check_type_size("int" SIZEOF_INT)
|
|
|
|
check_type_size("long" SIZEOF_LONG)
|
2015-01-12 03:46:19 -07:00
|
|
|
check_type_size("intmax_t" SIZEOF_INTMAX_T)
|
2015-01-27 09:02:57 -07:00
|
|
|
check_type_size("size_t" SIZEOF_SIZE_T)
|
|
|
|
check_type_size("long long" SIZEOF_LONG_LONG)
|
2014-05-12 17:44:33 -07:00
|
|
|
check_type_size("void *" SIZEOF_VOID_PTR)
|
2014-01-31 06:39:15 -07:00
|
|
|
|
2020-06-04 05:07:09 -07:00
|
|
|
if (CMAKE_HOST_SYSTEM_VERSION MATCHES ".*-(Microsoft|microsoft-standard)")
|
2017-09-27 11:38:24 -07:00
|
|
|
# Windows Subsystem for Linux
|
|
|
|
set(HAVE_WSL 1)
|
|
|
|
endif()
|
|
|
|
|
2014-04-03 01:27:36 -07:00
|
|
|
check_symbol_exists(_NSGetEnviron crt_externs.h HAVE__NSGETENVIRON)
|
2014-02-28 03:33:31 -07:00
|
|
|
|
2014-06-05 02:41:27 -07:00
|
|
|
# Headers
|
|
|
|
check_include_files(langinfo.h HAVE_LANGINFO_H)
|
|
|
|
check_include_files(locale.h HAVE_LOCALE_H)
|
|
|
|
check_include_files(pwd.h HAVE_PWD_H)
|
|
|
|
check_include_files(strings.h HAVE_STRINGS_H)
|
|
|
|
check_include_files(sys/wait.h HAVE_SYS_WAIT_H)
|
|
|
|
if(NOT HAVE_SYS_WAIT_H AND UNIX)
|
|
|
|
# See if_cscope.c
|
2016-01-15 15:05:43 -07:00
|
|
|
message(SEND_ERROR "header sys/wait.h is required for Unix")
|
2014-06-05 02:41:27 -07:00
|
|
|
endif()
|
|
|
|
check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H)
|
2016-12-11 22:50:39 -07:00
|
|
|
check_include_files(termios.h HAVE_TERMIOS_H)
|
2016-06-04 12:48:29 -07:00
|
|
|
check_include_files(sys/uio.h HAVE_SYS_UIO_H)
|
2020-03-15 11:01:36 -07:00
|
|
|
check_include_files(sys/sdt.h HAVE_SYS_SDT_H)
|
2014-06-05 02:41:27 -07:00
|
|
|
|
|
|
|
# Functions
|
|
|
|
check_function_exists(fseeko HAVE_FSEEKO)
|
|
|
|
check_function_exists(getpwent HAVE_GETPWENT)
|
|
|
|
check_function_exists(getpwnam HAVE_GETPWNAM)
|
|
|
|
check_function_exists(getpwuid HAVE_GETPWUID)
|
2016-06-04 12:48:29 -07:00
|
|
|
check_function_exists(readv HAVE_READV)
|
2014-11-01 10:34:42 -07:00
|
|
|
|
2014-11-08 14:18:04 -07:00
|
|
|
if(Iconv_FOUND)
|
|
|
|
set(HAVE_ICONV 1)
|
2014-11-01 10:34:42 -07:00
|
|
|
endif()
|
|
|
|
|
2014-06-05 02:41:27 -07:00
|
|
|
check_function_exists(opendir HAVE_OPENDIR)
|
|
|
|
check_function_exists(readlink HAVE_READLINK)
|
|
|
|
check_function_exists(setpgid HAVE_SETPGID)
|
|
|
|
check_function_exists(setsid HAVE_SETSID)
|
|
|
|
check_function_exists(sigaction HAVE_SIGACTION)
|
|
|
|
check_function_exists(strcasecmp HAVE_STRCASECMP)
|
|
|
|
check_function_exists(strncasecmp HAVE_STRNCASECMP)
|
2020-12-05 23:15:43 -07:00
|
|
|
check_function_exists(strptime HAVE_STRPTIME)
|
2014-06-05 02:41:27 -07:00
|
|
|
|
|
|
|
# Symbols
|
|
|
|
check_symbol_exists(FD_CLOEXEC "fcntl.h" HAVE_FD_CLOEXEC)
|
|
|
|
if(HAVE_LANGINFO_H)
|
|
|
|
check_symbol_exists(CODESET "langinfo.h" HAVE_NL_LANGINFO_CODESET)
|
|
|
|
endif()
|
|
|
|
|
2016-05-14 05:44:37 -07:00
|
|
|
check_include_files("endian.h" HAVE_ENDIAN_H)
|
|
|
|
check_include_files("sys/endian.h" HAVE_SYS_ENDIAN_H)
|
|
|
|
|
|
|
|
set(ENDIAN_INCLUDE_FILE "endian.h")
|
|
|
|
if(HAVE_SYS_ENDIAN_H AND NOT HAVE_ENDIAN_H)
|
|
|
|
set(ENDIAN_INCLUDE_FILE "sys/endian.h")
|
|
|
|
endif()
|
|
|
|
|
2015-08-15 06:16:29 -07:00
|
|
|
set(SI "#include <stdint.h>\n")
|
|
|
|
set(MS "int main(int argc,char**argv)\n{\n uint64_t i=0x0102030405060708ULL;")
|
|
|
|
set(ME "}")
|
2015-08-15 07:41:28 -07:00
|
|
|
check_c_source_compiles("
|
2015-08-15 06:16:29 -07:00
|
|
|
#define _BSD_SOURCE 1
|
|
|
|
#define _DEFAULT_SOURCE 1
|
|
|
|
${SI}
|
2016-05-14 05:44:37 -07:00
|
|
|
#include <${ENDIAN_INCLUDE_FILE}>
|
2015-08-15 07:41:28 -07:00
|
|
|
#ifndef be64toh
|
|
|
|
# error No be64toh macros
|
|
|
|
#endif
|
2015-08-15 06:16:29 -07:00
|
|
|
${MS}
|
|
|
|
uint64_t j = be64toh(i);
|
2015-08-15 07:41:28 -07:00
|
|
|
return (j == 0); // j must not be zero
|
2015-08-15 06:16:29 -07:00
|
|
|
${ME}"
|
2015-08-15 07:41:28 -07:00
|
|
|
HAVE_BE64TOH_MACROS)
|
|
|
|
if(NOT "${HAVE_BE64TOH_MACROS}")
|
|
|
|
check_function_exists(be64toh HAVE_BE64TOH_FUNC)
|
|
|
|
endif()
|
|
|
|
if("${HAVE_BE64TOH_MACROS}" OR "${HAVE_BE64TOH_FUNC}")
|
|
|
|
set(HAVE_BE64TOH 1)
|
|
|
|
endif()
|
|
|
|
if (NOT "${HAVE_BE64TOH}")
|
|
|
|
if (NOT "${CMAKE_CROSSCOMPILING}")
|
|
|
|
# It is safe to make ORDER_BIG_ENDIAN not defined if
|
2015-10-16 17:21:50 -07:00
|
|
|
# - HAVE_BE64TOH is true. In this case be64toh will be used unconditionally in
|
2015-08-15 07:41:28 -07:00
|
|
|
# any case and ORDER_BIG_ENDIAN will not be examined.
|
2015-10-16 17:21:50 -07:00
|
|
|
# - CMAKE_CROSSCOMPILING *and* HAVE_BE64TOH are both false. In this case
|
|
|
|
# be64toh function which uses cycle and arithmetic operations is used which
|
2015-08-15 07:41:28 -07:00
|
|
|
# will work regardless of endianess. Function is sub-optimal though.
|
|
|
|
check_c_source_runs("
|
|
|
|
${SI}
|
|
|
|
${MS}
|
|
|
|
char *s = (char *) &i;
|
|
|
|
return (
|
|
|
|
s[0] == 0x01
|
|
|
|
&& s[1] == 0x02
|
|
|
|
&& s[2] == 0x03
|
|
|
|
&& s[3] == 0x04
|
|
|
|
&& s[4] == 0x05
|
|
|
|
&& s[5] == 0x06
|
|
|
|
&& s[6] == 0x07
|
|
|
|
&& s[7] == 0x08) ? 0 : 1;
|
|
|
|
${ME}"
|
|
|
|
ORDER_BIG_ENDIAN)
|
|
|
|
endif()
|
|
|
|
endif()
|
2015-08-15 06:16:29 -07:00
|
|
|
|
2014-01-31 06:39:15 -07:00
|
|
|
# generate configuration header and update include directories
|
|
|
|
configure_file (
|
|
|
|
"${PROJECT_SOURCE_DIR}/config/config.h.in"
|
|
|
|
"${PROJECT_BINARY_DIR}/config/auto/config.h"
|
|
|
|
)
|
2014-06-05 02:41:27 -07:00
|
|
|
|
2015-03-01 08:36:10 -07:00
|
|
|
# generate version definitions
|
|
|
|
configure_file (
|
|
|
|
"${PROJECT_SOURCE_DIR}/config/versiondef.h.in"
|
|
|
|
"${PROJECT_BINARY_DIR}/config/auto/versiondef.h"
|
|
|
|
)
|
|
|
|
|
2014-01-31 06:39:15 -07:00
|
|
|
# generate pathdef.c
|
|
|
|
find_program(WHOAMI_PROG whoami)
|
|
|
|
find_program(HOSTNAME_PROG hostname)
|
|
|
|
|
2016-10-08 11:22:36 -07:00
|
|
|
if (DEFINED ENV{USERNAME})
|
|
|
|
set(USERNAME $ENV{USERNAME})
|
|
|
|
elseif (NOT DEFINED USERNAME AND EXISTS ${WHOAMI_PROG})
|
2014-01-31 06:39:15 -07:00
|
|
|
execute_process(COMMAND ${WHOAMI_PROG}
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
OUTPUT_VARIABLE USERNAME)
|
|
|
|
endif()
|
2016-10-08 11:22:36 -07:00
|
|
|
if (DEFINED ENV{HOSTNAME})
|
|
|
|
set(HOSTNAME $ENV{HOSTNAME})
|
|
|
|
elseif (EXISTS ${HOSTNAME_PROG})
|
2014-01-31 06:39:15 -07:00
|
|
|
execute_process(COMMAND ${HOSTNAME_PROG}
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
OUTPUT_VARIABLE HOSTNAME)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
configure_file (
|
|
|
|
"${PROJECT_SOURCE_DIR}/config/pathdef.c.in"
|
|
|
|
"${PROJECT_BINARY_DIR}/config/auto/pathdef.c"
|
|
|
|
ESCAPE_QUOTES)
|