# Detect curses. FIND_PACKAGE(Curses REQUIRED) # Get threads. set(THREADS_PREFER_PTHREAD_FLAG ON) # FindThreads < 3.4.0 doesn't work for C++-only projects IF(CMAKE_VERSION VERSION_LESS 3.4.0) ENABLE_LANGUAGE(C) ENDIF() FIND_PACKAGE(Threads REQUIRED) IF(APPLE) # 10.7+ only. SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Werror=unguarded-availability") ENDIF() # Set up the config.h file. SET(PACKAGE_NAME "fish") SET(PACKAGE_TARNAME "fish") INCLUDE(CheckFunctionExists) INCLUDE(CheckCXXSymbolExists) INCLUDE(CheckIncludeFileCXX) INCLUDE(CheckIncludeFiles) INCLUDE(CheckStructHasMember) INCLUDE(CheckCXXSourceCompiles) INCLUDE(CheckTypeSize) CHECK_FUNCTION_EXISTS(backtrace_symbols HAVE_BACKTRACE_SYMBOLS) CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME) CHECK_FUNCTION_EXISTS(ctermid_r HAVE_CTERMID_R) CHECK_STRUCT_HAS_MEMBER("struct dirent" d_type dirent.h HAVE_STRUCT_DIRENT_D_TYPE LANGUAGE CXX) CHECK_FUNCTION_EXISTS(dirfd HAVE_DIRFD) CHECK_INCLUDE_FILE_CXX(execinfo.h HAVE_EXECINFO_H) CHECK_FUNCTION_EXISTS(flock HAVE_FLOCK) # futimens is new in OS X 10.13 but is a weak symbol. # Don't assume it exists just because we can link - it may be null. CHECK_CXX_SYMBOL_EXISTS(futimens sys/stat.h HAVE_FUTIMENS) CHECK_FUNCTION_EXISTS(futimes HAVE_FUTIMES) CHECK_FUNCTION_EXISTS(getifaddrs HAVE_GETIFADDRS) CHECK_FUNCTION_EXISTS(getpwent HAVE_GETPWENT) CHECK_FUNCTION_EXISTS(gettext HAVE_GETTEXT) CHECK_FUNCTION_EXISTS(killpg HAVE_KILLPG) CHECK_FUNCTION_EXISTS(lrand48_r HAVE_LRAND48_R) CHECK_FUNCTION_EXISTS(mkostemp HAVE_MKOSTEMP) SET(HAVE_NCURSES_CURSES_H ${CURSES_HAVE_NCURSES_CURSES_H}) SET(HAVE_NCURSES_H ${CURSES_HAVE_NCURSES_H}) CHECK_INCLUDE_FILE_CXX("ncurses/term.h" HAVE_NCURSES_TERM_H) CHECK_INCLUDE_FILE_CXX(siginfo.h HAVE_SIGINFO_H) CHECK_INCLUDE_FILE_CXX(spawn.h HAVE_SPAWN_H) CHECK_FUNCTION_EXISTS(std::wcscasecmp HAVE_STD__WCSCASECMP) CHECK_FUNCTION_EXISTS(std::wcsdup HAVE_STD__WCSDUP) CHECK_FUNCTION_EXISTS(std::wcsncasecmp HAVE_STD__WCSNCASECMP) CHECK_STRUCT_HAS_MEMBER("struct stat" st_ctime_nsec "sys/stat.h" HAVE_STRUCT_STAT_ST_CTIME_NSEC LANGUAGE CXX) CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtimespec.tv_nsec "sys/stat.h" HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC LANGUAGE CXX) CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtim.tv_nsec "sys/stat.h" HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC LANGUAGE CXX) CHECK_CXX_SYMBOL_EXISTS(sys_errlist stdio.h HAVE_SYS_ERRLIST) CHECK_INCLUDE_FILE_CXX(sys/ioctl.h HAVE_SYS_IOCTL_H) CHECK_INCLUDE_FILE_CXX(sys/select.h HAVE_SYS_SELECT_H) CHECK_INCLUDE_FILES("sys/types.h;sys/sysctl.h" HAVE_SYS_SYSCTL_H) CHECK_INCLUDE_FILE_CXX(termios.h HAVE_TERMIOS_H) # Needed for TIOCGWINSZ CHECK_INCLUDE_FILE_CXX(term.h HAVE_TERM_H) CHECK_FUNCTION_EXISTS(wcscasecmp HAVE_WCSCASECMP) CHECK_FUNCTION_EXISTS(wcsdup HAVE_WCSDUP) CHECK_FUNCTION_EXISTS(wcslcpy HAVE_WCSLCPY) CHECK_FUNCTION_EXISTS(wcsncasecmp HAVE_WCSNCASECMP) CHECK_FUNCTION_EXISTS(wcsndup HAVE_WCSNDUP) CHECK_CXX_SYMBOL_EXISTS(_sys_errs stdlib.h HAVE__SYS__ERRS) SET(CMAKE_EXTRA_INCLUDE_FILES termios.h sys/ioctl.h) CHECK_TYPE_SIZE("struct winsize" STRUCT_WINSIZE LANGUAGE CXX) CHECK_CXX_SYMBOL_EXISTS("TIOCGWINSZ" "termios.h;sys/ioctl.h" HAVE_TIOCGWINSZ) IF(STRUCT_WINSIZE GREATER -1 AND HAVE_TIOCGWINSZ EQUAL 1) SET(HAVE_WINSIZE 1) ENDIF() SET(CMAKE_EXTRA_INCLUDE_FILES) IF(EXISTS "/proc/self/stat") SET(HAVE__PROC_SELF_STAT 1) ENDIF() CHECK_TYPE_SIZE("wchar_t[8]" WCHAR_T_BITS LANGUAGE CXX) # Solaris, NetBSD and X/Open-conforming systems have a fixed-args tparm SET(TPARM_INCLUDES) IF(HAVE_NCURSES_H) SET(TPARM_INCLUDES "${TPARM_INCLUDES}#include \n") ELSEIF(HAVE_NCURSES_CURSES_H) SET(TPARM_INCLUDES "${TPARM_INCLUDES}#include \n") ELSE() SET(TPARM_INCLUDES "${TPARM_INCLUDES}#include \n") ENDIF() IF(HAVE_TERM_H) SET(TPARM_INCLUDES "${TPARM_INCLUDES}#include \n") ELSEIF(HAVE_NCURSES_TERM_H) SET(TPARM_INCLUDES "${TPARM_INCLUDES}#include \n") ENDIF() SET(CMAKE_REQUIRED_LIBRARIES ${CURSES_LIBRARY}) CHECK_CXX_SOURCE_COMPILES(" ${TPARM_INCLUDES} int main () { tparm( \"\" ); } " TPARM_TAKES_VARARGS ) SET(CMAKE_REQUIRED_LIBRARIES) IF(NOT TPARM_TAKES_VARARGS) SET(TPARM_SOLARIS_KLUDGE 1) ENDIF()