Blame ConfigureChecks.cmake

Packit 6c0a39
include(CheckIncludeFile)
Packit 6c0a39
include(CheckIncludeFiles)
Packit 6c0a39
include(CheckSymbolExists)
Packit 6c0a39
include(CheckFunctionExists)
Packit 6c0a39
include(CheckLibraryExists)
Packit 6c0a39
include(CheckTypeSize)
Packit 6c0a39
include(CheckStructHasMember)
Packit 6c0a39
include(TestBigEndian)
Packit 6c0a39
Packit 6c0a39
set(PACKAGE ${PROJECT_NAME})
Packit 6c0a39
set(VERSION ${PROJECT_VERSION})
Packit 6c0a39
set(DATADIR ${DATA_INSTALL_DIR})
Packit 6c0a39
set(LIBDIR ${LIB_INSTALL_DIR})
Packit 6c0a39
set(PLUGINDIR "${PLUGIN_INSTALL_DIR}-${LIBRARY_SOVERSION}")
Packit 6c0a39
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
Packit 6c0a39
Packit 6c0a39
set(BINARYDIR ${CMAKE_BINARY_DIR})
Packit 6c0a39
set(SOURCEDIR ${CMAKE_SOURCE_DIR})
Packit 6c0a39
Packit 6c0a39
function(COMPILER_DUMPVERSION _OUTPUT_VERSION)
Packit 6c0a39
    # Remove whitespaces from the argument.
Packit 6c0a39
    # This is needed for CC="ccache gcc" cmake ..
Packit 6c0a39
    string(REPLACE " " "" _C_COMPILER_ARG "${CMAKE_C_COMPILER_ARG1}")
Packit 6c0a39
Packit 6c0a39
    execute_process(
Packit 6c0a39
        COMMAND
Packit 6c0a39
            ${CMAKE_C_COMPILER} ${_C_COMPILER_ARG} -dumpversion
Packit 6c0a39
        OUTPUT_VARIABLE _COMPILER_VERSION
Packit 6c0a39
    )
Packit 6c0a39
Packit 6c0a39
    string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
Packit 6c0a39
           _COMPILER_VERSION "${_COMPILER_VERSION}")
Packit 6c0a39
Packit 6c0a39
    set(${_OUTPUT_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE)
Packit 6c0a39
endfunction()
Packit 6c0a39
Packit 6c0a39
if(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW AND NOT OS2)
Packit 6c0a39
    compiler_dumpversion(GNUCC_VERSION)
Packit 6c0a39
    if (NOT GNUCC_VERSION EQUAL 34)
Packit 6c0a39
        set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden")
Packit 6c0a39
        check_c_source_compiles(
Packit 6c0a39
"void __attribute__((visibility(\"default\"))) test() {}
Packit 6c0a39
int main(void){ return 0; }
Packit 6c0a39
" WITH_VISIBILITY_HIDDEN)
Packit 6c0a39
        unset(CMAKE_REQUIRED_FLAGS)
Packit 6c0a39
    endif (NOT GNUCC_VERSION EQUAL 34)
Packit 6c0a39
endif(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW AND NOT OS2)
Packit 6c0a39
Packit 6c0a39
# HEADER FILES
Packit 6c0a39
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${ARGP_INCLUDE_DIR})
Packit 6c0a39
check_include_file(argp.h HAVE_ARGP_H)
Packit 6c0a39
unset(CMAKE_REQUIRED_INCLUDES)
Packit 6c0a39
Packit 6c0a39
check_include_file(pty.h HAVE_PTY_H)
Packit 6c0a39
check_include_file(utmp.h HAVE_UTMP_H)
Packit 6c0a39
check_include_file(termios.h HAVE_TERMIOS_H)
Packit 6c0a39
check_include_file(unistd.h HAVE_UNISTD_H)
Packit 6c0a39
check_include_file(stdint.h HAVE_STDINT_H)
Packit 6c0a39
check_include_file(util.h HAVE_UTIL_H)
Packit 6c0a39
check_include_file(libutil.h HAVE_LIBUTIL_H)
Packit 6c0a39
check_include_file(sys/time.h HAVE_SYS_TIME_H)
Packit 6c0a39
check_include_file(sys/utime.h HAVE_SYS_UTIME_H)
Packit 6c0a39
check_include_file(sys/param.h HAVE_SYS_PARAM_H)
Packit 6c0a39
check_include_file(arpa/inet.h HAVE_ARPA_INET_H)
Packit 6c0a39
check_include_file(byteswap.h HAVE_BYTESWAP_H)
Packit 6c0a39
check_include_file(glob.h HAVE_GLOB_H)
Packit 6c0a39
check_include_file(valgrind/valgrind.h HAVE_VALGRIND_VALGRIND_H)
Packit 6c0a39
Packit 6c0a39
if (WIN32)
Packit 6c0a39
  check_include_file(io.h HAVE_IO_H)
Packit 6c0a39
Packit 6c0a39
  check_include_files("winsock2.h;ws2tcpip.h;wspiapi.h" HAVE_WSPIAPI_H)
Packit 6c0a39
  if (NOT HAVE_WSPIAPI_H)
Packit 6c0a39
    message(STATUS "WARNING: Without wspiapi.h, this build will only work on Windows XP and newer versions")
Packit 6c0a39
  endif (NOT HAVE_WSPIAPI_H)
Packit 6c0a39
  check_include_files("winsock2.h;ws2tcpip.h" HAVE_WS2TCPIP_H)
Packit 6c0a39
endif (WIN32)
Packit 6c0a39
Packit 6c0a39
if (OPENSSL_FOUND)
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    check_include_file(openssl/des.h HAVE_OPENSSL_DES_H)
Packit 6c0a39
    if (NOT HAVE_OPENSSL_DES_H)
Packit 6c0a39
        message(FATAL_ERROR "Could not detect openssl/des.h")
Packit 6c0a39
    endif()
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    check_include_file(openssl/aes.h HAVE_OPENSSL_AES_H)
Packit 6c0a39
    if (NOT HAVE_OPENSSL_AES_H)
Packit 6c0a39
        message(FATAL_ERROR "Could not detect openssl/aes.h")
Packit 6c0a39
    endif()
Packit 6c0a39
Packit 6c0a39
    if (WITH_BLOWFISH_CIPHER)
Packit 6c0a39
        set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
        check_include_file(openssl/blowfish.h HAVE_OPENSSL_BLOWFISH_H)
Packit 6c0a39
    endif()
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    check_include_file(openssl/ecdh.h HAVE_OPENSSL_ECDH_H)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    check_include_file(openssl/ec.h HAVE_OPENSSL_EC_H)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    check_include_file(openssl/ecdsa.h HAVE_OPENSSL_ECDSA_H)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(EVP_aes_128_ctr HAVE_OPENSSL_EVP_AES_CTR)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(EVP_aes_128_cbc HAVE_OPENSSL_EVP_AES_CBC)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(EVP_aes_128_gcm HAVE_OPENSSL_EVP_AES_GCM)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(CRYPTO_THREADID_set_callback HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(CRYPTO_ctr128_encrypt HAVE_OPENSSL_CRYPTO_CTR128_ENCRYPT)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(EVP_CIPHER_CTX_new HAVE_OPENSSL_EVP_CIPHER_CTX_NEW)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(EVP_KDF_CTX_new_id HAVE_OPENSSL_EVP_KDF_CTX_NEW_ID)
Packit 6c0a39
Packit 6c0a39
    set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Packit 6c0a39
    set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
Packit 6c0a39
    check_function_exists(RAND_priv_bytes HAVE_OPENSSL_RAND_PRIV_BYTES)
Packit 6c0a39
Packit 6c0a39
    check_function_exists(OPENSSL_ia32cap_loc HAVE_OPENSSL_IA32CAP_LOC)
Packit 6c0a39
Packit 6c0a39
    unset(CMAKE_REQUIRED_INCLUDES)
Packit 6c0a39
    unset(CMAKE_REQUIRED_LIBRARIES)
Packit 6c0a39
endif()
Packit 6c0a39
Packit 6c0a39
if (CMAKE_HAVE_PTHREAD_H)
Packit 6c0a39
  set(HAVE_PTHREAD_H 1)
Packit 6c0a39
endif (CMAKE_HAVE_PTHREAD_H)
Packit 6c0a39
Packit 6c0a39
if (NOT WITH_GCRYPT AND NOT WITH_MBEDTLS)
Packit 6c0a39
    if (HAVE_OPENSSL_EC_H AND HAVE_OPENSSL_ECDSA_H)
Packit 6c0a39
        set(HAVE_OPENSSL_ECC 1)
Packit 6c0a39
    endif (HAVE_OPENSSL_EC_H AND HAVE_OPENSSL_ECDSA_H)
Packit 6c0a39
Packit 6c0a39
    if (HAVE_OPENSSL_ECC)
Packit 6c0a39
        set(HAVE_ECC 1)
Packit 6c0a39
    endif (HAVE_OPENSSL_ECC)
Packit 6c0a39
endif ()
Packit 6c0a39
Packit 6c0a39
if (NOT WITH_MBEDTLS)
Packit 6c0a39
    set(HAVE_DSA 1)
Packit 6c0a39
endif (NOT WITH_MBEDTLS)
Packit 6c0a39
Packit 6c0a39
# FUNCTIONS
Packit 6c0a39
Packit 6c0a39
check_function_exists(isblank HAVE_ISBLANK)
Packit 6c0a39
check_function_exists(strncpy HAVE_STRNCPY)
Packit 6c0a39
check_function_exists(strndup HAVE_STRNDUP)
Packit 6c0a39
check_function_exists(strtoull HAVE_STRTOULL)
Packit 6c0a39
check_function_exists(explicit_bzero HAVE_EXPLICIT_BZERO)
Packit 6c0a39
check_function_exists(memset_s HAVE_MEMSET_S)
Packit 6c0a39
Packit 6c0a39
if (HAVE_GLOB_H)
Packit 6c0a39
    check_struct_has_member(glob_t gl_flags glob.h HAVE_GLOB_GL_FLAGS_MEMBER)
Packit 6c0a39
    check_function_exists(glob HAVE_GLOB)
Packit 6c0a39
endif (HAVE_GLOB_H)
Packit 6c0a39
Packit 6c0a39
if (NOT WIN32)
Packit 6c0a39
  check_function_exists(vsnprintf HAVE_VSNPRINTF)
Packit 6c0a39
  check_function_exists(snprintf HAVE_SNPRINTF)
Packit 6c0a39
endif (NOT WIN32)
Packit 6c0a39
Packit 6c0a39
if (WIN32)
Packit 6c0a39
    check_symbol_exists(vsnprintf "stdio.h" HAVE_VSNPRINTF)
Packit 6c0a39
    check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF)
Packit 6c0a39
Packit 6c0a39
    check_symbol_exists(_vsnprintf_s "stdio.h" HAVE__VSNPRINTF_S)
Packit 6c0a39
    check_symbol_exists(_vsnprintf "stdio.h" HAVE__VSNPRINTF)
Packit 6c0a39
    check_symbol_exists(_snprintf "stdio.h" HAVE__SNPRINTF)
Packit 6c0a39
    check_symbol_exists(_snprintf_s "stdio.h" HAVE__SNPRINTF_S)
Packit 6c0a39
Packit 6c0a39
    if (HAVE_WSPIAPI_H OR HAVE_WS2TCPIP_H)
Packit 6c0a39
        check_symbol_exists(ntohll winsock2.h HAVE_NTOHLL)
Packit 6c0a39
        check_symbol_exists(htonll winsock2.h HAVE_HTONLL)
Packit 6c0a39
Packit 6c0a39
        set(CMAKE_REQUIRED_LIBRARIES ws2_32)
Packit 6c0a39
        check_symbol_exists(select "winsock2.h;ws2tcpip.h" HAVE_SELECT)
Packit 6c0a39
        check_symbol_exists(poll "winsock2.h;ws2tcpip.h" HAVE_SELECT)
Packit 6c0a39
        # The getaddrinfo function is defined to the WspiapiGetAddrInfo inline function
Packit 6c0a39
        check_symbol_exists(getaddrinfo "winsock2.h;ws2tcpip.h" HAVE_GETADDRINFO)
Packit 6c0a39
        unset(CMAKE_REQUIRED_LIBRARIES)
Packit 6c0a39
    endif (HAVE_WSPIAPI_H OR HAVE_WS2TCPIP_H)
Packit 6c0a39
Packit 6c0a39
    check_function_exists(_strtoui64 HAVE__STRTOUI64)
Packit 6c0a39
Packit 6c0a39
    set(HAVE_SELECT TRUE)
Packit 6c0a39
Packit 6c0a39
    check_symbol_exists(SecureZeroMemory "windows.h" HAVE_SECURE_ZERO_MEMORY)
Packit 6c0a39
else (WIN32)
Packit 6c0a39
    check_function_exists(poll HAVE_POLL)
Packit 6c0a39
    check_function_exists(select HAVE_SELECT)
Packit 6c0a39
    check_function_exists(getaddrinfo HAVE_GETADDRINFO)
Packit 6c0a39
Packit 6c0a39
    check_symbol_exists(ntohll arpa/inet.h HAVE_NTOHLL)
Packit 6c0a39
    check_symbol_exists(htonll arpa/inet.h HAVE_HTONLL)
Packit 6c0a39
endif (WIN32)
Packit 6c0a39
Packit 6c0a39
Packit 6c0a39
if (UNIX)
Packit 6c0a39
    if (NOT LINUX)
Packit 6c0a39
        # libsocket (Solaris)
Packit 6c0a39
        check_library_exists(socket getaddrinfo "" HAVE_LIBSOCKET)
Packit 6c0a39
        if (HAVE_LIBSOCKET)
Packit 6c0a39
            set(HAVE_GETADDRINFO TRUE)
Packit 6c0a39
            set(_REQUIRED_LIBRARIES ${_REQUIRED_LIBRARIES} socket)
Packit 6c0a39
        endif (HAVE_LIBSOCKET)
Packit 6c0a39
Packit 6c0a39
        # libnsl/inet_pton (Solaris)
Packit 6c0a39
        check_library_exists(nsl inet_pton "" HAVE_LIBNSL)
Packit 6c0a39
        if (HAVE_LIBNSL)
Packit 6c0a39
            set(_REQUIRED_LIBRARIES ${_REQUIRED_LIBRARIES} nsl)
Packit 6c0a39
        endif (HAVE_LIBNSL)
Packit 6c0a39
Packit 6c0a39
        # librt
Packit 6c0a39
        check_library_exists(rt nanosleep "" HAVE_LIBRT)
Packit 6c0a39
    endif (NOT LINUX)
Packit 6c0a39
Packit 6c0a39
    check_library_exists(rt clock_gettime "" HAVE_CLOCK_GETTIME)
Packit 6c0a39
    if (HAVE_LIBRT OR HAVE_CLOCK_GETTIME)
Packit 6c0a39
        set(_REQUIRED_LIBRARIES ${_REQUIRED_LIBRARIES} rt)
Packit 6c0a39
    endif (HAVE_LIBRT OR HAVE_CLOCK_GETTIME)
Packit 6c0a39
Packit 6c0a39
    check_library_exists(util forkpty "" HAVE_LIBUTIL)
Packit 6c0a39
    check_function_exists(cfmakeraw HAVE_CFMAKERAW)
Packit 6c0a39
    check_function_exists(__strtoull HAVE___STRTOULL)
Packit 6c0a39
endif (UNIX)
Packit 6c0a39
Packit 6c0a39
set(LIBSSH_REQUIRED_LIBRARIES ${_REQUIRED_LIBRARIES} CACHE INTERNAL "libssh required system libraries")
Packit 6c0a39
Packit 6c0a39
# LIBRARIES
Packit 6c0a39
if (OPENSSL_FOUND)
Packit 6c0a39
  set(HAVE_LIBCRYPTO 1)
Packit 6c0a39
endif (OPENSSL_FOUND)
Packit 6c0a39
Packit 6c0a39
if (GCRYPT_FOUND)
Packit 6c0a39
    set(HAVE_LIBGCRYPT 1)
Packit 6c0a39
    if (GCRYPT_VERSION VERSION_GREATER "1.4.6")
Packit 6c0a39
        set(HAVE_GCRYPT_ECC 1)
Packit 6c0a39
        set(HAVE_ECC 1)
Packit 6c0a39
    endif (GCRYPT_VERSION VERSION_GREATER "1.4.6")
Packit 6c0a39
endif (GCRYPT_FOUND)
Packit 6c0a39
Packit 6c0a39
if (MBEDTLS_FOUND)
Packit 6c0a39
    set(HAVE_LIBMBEDCRYPTO 1)
Packit 6c0a39
    set(HAVE_ECC 1)
Packit 6c0a39
endif (MBEDTLS_FOUND)
Packit 6c0a39
Packit 6c0a39
if (CMAKE_USE_PTHREADS_INIT)
Packit 6c0a39
    set(HAVE_PTHREAD 1)
Packit 6c0a39
endif (CMAKE_USE_PTHREADS_INIT)
Packit 6c0a39
Packit 6c0a39
if (UNIT_TESTING)
Packit 6c0a39
    if (CMOCKA_FOUND)
Packit 6c0a39
        set(CMAKE_REQUIRED_LIBRARIES ${CMOCKA_LIBRARIES})
Packit 6c0a39
        check_function_exists(cmocka_set_test_filter HAVE_CMOCKA_SET_TEST_FILTER)
Packit 6c0a39
        unset(CMAKE_REQUIRED_LIBRARIES)
Packit 6c0a39
    endif ()
Packit 6c0a39
endif ()
Packit 6c0a39
Packit 6c0a39
# OPTIONS
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
__thread int tls;
Packit 6c0a39
Packit 6c0a39
int main(void) {
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_GCC_THREAD_LOCAL_STORAGE)
Packit 6c0a39
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
__declspec(thread) int tls;
Packit 6c0a39
Packit 6c0a39
int main(void) {
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_MSC_THREAD_LOCAL_STORAGE)
Packit 6c0a39
Packit 6c0a39
###########################################################
Packit 6c0a39
# For detecting attributes we need to treat warnings as
Packit 6c0a39
# errors
Packit 6c0a39
if (UNIX OR MINGW)
Packit 6c0a39
    # Get warnings for attributs
Packit 6c0a39
    check_c_compiler_flag("-Wattributes" REQUIRED_FLAGS_WERROR)
Packit 6c0a39
    if (REQUIRED_FLAGS_WERROR)
Packit 6c0a39
        string(APPEND CMAKE_REQUIRED_FLAGS "-Wattributes ")
Packit 6c0a39
    endif()
Packit 6c0a39
Packit 6c0a39
    # Turn warnings into errors
Packit 6c0a39
    check_c_compiler_flag("-Werror" REQUIRED_FLAGS_WERROR)
Packit 6c0a39
    if (REQUIRED_FLAGS_WERROR)
Packit 6c0a39
        string(APPEND CMAKE_REQUIRED_FLAGS "-Werror ")
Packit 6c0a39
    endif()
Packit 6c0a39
endif ()
Packit 6c0a39
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
void test_constructor_attribute(void) __attribute__ ((constructor));
Packit 6c0a39
Packit 6c0a39
void test_constructor_attribute(void)
Packit 6c0a39
{
Packit 6c0a39
    return;
Packit 6c0a39
}
Packit 6c0a39
Packit 6c0a39
int main(void) {
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_CONSTRUCTOR_ATTRIBUTE)
Packit 6c0a39
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
void test_destructor_attribute(void) __attribute__ ((destructor));
Packit 6c0a39
Packit 6c0a39
void test_destructor_attribute(void)
Packit 6c0a39
{
Packit 6c0a39
    return;
Packit 6c0a39
}
Packit 6c0a39
Packit 6c0a39
int main(void) {
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_DESTRUCTOR_ATTRIBUTE)
Packit 6c0a39
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
#define FALL_THROUGH __attribute__((fallthrough))
Packit 6c0a39
Packit 6c0a39
int main(void) {
Packit 6c0a39
    int i = 2;
Packit 6c0a39
Packit 6c0a39
    switch (i) {
Packit 6c0a39
    case 0:
Packit 6c0a39
        FALL_THROUGH;
Packit 6c0a39
    case 1:
Packit 6c0a39
        break;
Packit 6c0a39
    default:
Packit 6c0a39
        break;
Packit 6c0a39
    }
Packit 6c0a39
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_FALLTHROUGH_ATTRIBUTE)
Packit 6c0a39
Packit 6c0a39
if (NOT WIN32)
Packit 6c0a39
    check_c_source_compiles("
Packit 6c0a39
    #define __unused __attribute__((unused))
Packit 6c0a39
Packit 6c0a39
    static int do_nothing(int i __unused)
Packit 6c0a39
    {
Packit 6c0a39
        return 0;
Packit 6c0a39
    }
Packit 6c0a39
Packit 6c0a39
    int main(void)
Packit 6c0a39
    {
Packit 6c0a39
        int i;
Packit 6c0a39
Packit 6c0a39
        i = do_nothing(5);
Packit 6c0a39
        if (i > 5) {
Packit 6c0a39
            return 1;
Packit 6c0a39
        }
Packit 6c0a39
Packit 6c0a39
        return 0;
Packit 6c0a39
    }" HAVE_UNUSED_ATTRIBUTE)
Packit 6c0a39
endif()
Packit 6c0a39
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
#include <string.h>
Packit 6c0a39
Packit 6c0a39
int main(void)
Packit 6c0a39
{
Packit 6c0a39
    char buf[] = \"This is some content\";
Packit 6c0a39
Packit 6c0a39
    memset(buf, '\\\\0', sizeof(buf)); __asm__ volatile(\"\" : : \"g\"(&buf) : \"memory\");
Packit 6c0a39
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_GCC_VOLATILE_MEMORY_PROTECTION)
Packit 6c0a39
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
#include <stdio.h>
Packit 6c0a39
int main(void) {
Packit 6c0a39
    printf(\"%s\", __func__);
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_COMPILER__FUNC__)
Packit 6c0a39
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
#include <stdio.h>
Packit 6c0a39
int main(void) {
Packit 6c0a39
    printf(\"%s\", __FUNCTION__);
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_COMPILER__FUNCTION__)
Packit 6c0a39
Packit 6c0a39
# This is only available with OpenBSD's gcc implementation */
Packit 6c0a39
if (OPENBSD)
Packit 6c0a39
check_c_source_compiles("
Packit 6c0a39
#define ARRAY_LEN 16
Packit 6c0a39
void test_attr(const unsigned char *k)
Packit 6c0a39
    __attribute__((__bounded__(__minbytes__, 2, 16)));
Packit 6c0a39
Packit 6c0a39
int main(void) {
Packit 6c0a39
    return 0;
Packit 6c0a39
}" HAVE_GCC_BOUNDED_ATTRIBUTE)
Packit 6c0a39
endif(OPENBSD)
Packit 6c0a39
Packit 6c0a39
# Stop treating warnings as errors
Packit 6c0a39
unset(CMAKE_REQUIRED_FLAGS)
Packit 6c0a39
Packit 6c0a39
# Check for version script support
Packit 6c0a39
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "VERS_1 {
Packit 6c0a39
        global: sym;
Packit 6c0a39
};
Packit 6c0a39
VERS_2 {
Packit 6c0a39
        global: sym;
Packit 6c0a39
} VERS_1;
Packit 6c0a39
")
Packit 6c0a39
Packit 6c0a39
set(CMAKE_REQUIRED_FLAGS "-Wl,--version-script=\"${CMAKE_CURRENT_BINARY_DIR}/conftest.map\"")
Packit 6c0a39
check_c_source_compiles("int main(void) { return 0; }" HAVE_LD_VERSION_SCRIPT)
Packit 6c0a39
unset(CMAKE_REQUIRED_FLAGS)
Packit 6c0a39
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
Packit 6c0a39
Packit 6c0a39
if (WITH_DEBUG_CRYPTO)
Packit 6c0a39
  set(DEBUG_CRYPTO 1)
Packit 6c0a39
endif (WITH_DEBUG_CRYPTO)
Packit 6c0a39
Packit 6c0a39
if (WITH_DEBUG_PACKET)
Packit 6c0a39
  set(DEBUG_PACKET 1)
Packit 6c0a39
endif (WITH_DEBUG_PACKET)
Packit 6c0a39
Packit 6c0a39
if (WITH_DEBUG_CALLTRACE)
Packit 6c0a39
  set(DEBUG_CALLTRACE 1)
Packit 6c0a39
endif (WITH_DEBUG_CALLTRACE)
Packit 6c0a39
Packit 6c0a39
if (WITH_GSSAPI AND NOT GSSAPI_FOUND)
Packit 6c0a39
    set(WITH_GSSAPI 0)
Packit 6c0a39
endif (WITH_GSSAPI AND NOT GSSAPI_FOUND)
Packit 6c0a39
Packit 6c0a39
# ENDIAN
Packit 6c0a39
if (NOT WIN32)
Packit 6c0a39
    test_big_endian(WORDS_BIGENDIAN)
Packit 6c0a39
endif (NOT WIN32)