1AC_DEFUN([CHECK_OS_OPTIONS], [
2
3CFLAGS="$CFLAGS -Wall -std=gnu99 -fno-strict-aliasing"
4BUILD_NC=yes
5
6case $host_os in
7	*aix*)
8		HOST_OS=aix
9		if test "`echo $CC | cut -d ' ' -f 1`" != "gcc" ; then
10			CFLAGS="-qnoansialias $USER_CFLAGS"
11		fi
12		AC_SUBST([PLATFORM_LDADD], ['-lperfstat'])
13		;;
14	*cygwin*)
15		HOST_OS=cygwin
16		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
17		;;
18	*darwin*)
19		HOST_OS=darwin
20		HOST_ABI=macosx
21		#
22		# Don't use arc4random on systems before 10.12 because of
23		# weak seed on failure to open /dev/random, based on latest
24		# public source:
25		# http://www.opensource.apple.com/source/Libc/Libc-997.90.3/gen/FreeBSD/arc4random.c
26		#
27		# We use the presence of getentropy() to detect 10.12. The
28		# following check take into account that:
29 		#
30		#   - iOS <= 10.1 fails because of missing getentropy and
31		#     hence they miss sys/random.h
32		#
33		#   - in macOS 10.12 getentropy is not tagged as introduced in
34		#     10.12 so we cannot use it for target < 10.12
35		#
36		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
37#include <AvailabilityMacros.h>
38#include <unistd.h>
39#include <sys/random.h>  /* Systems without getentropy() should die here */
40
41/* Based on: https://gitweb.torproject.org/tor.git/commit/?id=16fcbd21 */
42#ifndef MAC_OS_X_VERSION_10_12
43#  define MAC_OS_X_VERSION_10_12 101200
44#endif
45#if defined(MAC_OS_X_VERSION_MIN_REQUIRED)
46#  if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12
47#    error "Running on Mac OSX 10.11 or earlier"
48#  endif
49#endif
50                       ]], [[
51char buf[1]; getentropy(buf, 1);
52					   ]])],
53                       [ USE_BUILTIN_ARC4RANDOM=no ],
54                       [ USE_BUILTIN_ARC4RANDOM=yes ]
55		)
56		AC_MSG_CHECKING([whether to use builtin arc4random])
57		AC_MSG_RESULT([$USE_BUILTIN_ARC4RANDOM])
58		# Not available on iOS
59		AC_CHECK_HEADER([arpa/telnet.h], [], [BUILD_NC=no])
60		;;
61	*freebsd*)
62		HOST_OS=freebsd
63		HOST_ABI=elf
64		# fork detection missing, weak seed on failure
65		# https://svnweb.freebsd.org/base/head/lib/libc/gen/arc4random.c?revision=268642&view=markup
66		USE_BUILTIN_ARC4RANDOM=yes
67		AC_SUBST([PROG_LDADD], ['-lthr'])
68		;;
69	*hpux*)
70		HOST_OS=hpux;
71		if test "`echo $CC | cut -d ' ' -f 1`" = "gcc" ; then
72			CFLAGS="$CFLAGS -mlp64"
73		else
74			CFLAGS="-g -O2 +DD64 +Otype_safety=off $USER_CFLAGS"
75		fi
76		CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D__STRICT_ALIGNMENT"
77		;;
78	*linux*)
79		HOST_OS=linux
80		HOST_ABI=elf
81		CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE"
82		;;
83	*midipix*)
84		HOST_OS=midipix
85		CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE"
86		;;
87	*netbsd*)
88		HOST_OS=netbsd
89		HOST_ABI=elf
90		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
91#include <sys/param.h>
92#if __NetBSD_Version__ < 700000001
93        undefined
94#endif
95                       ]], [[]])],
96                       [ USE_BUILTIN_ARC4RANDOM=no ],
97                       [ USE_BUILTIN_ARC4RANDOM=yes ]
98		)
99		CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE"
100		;;
101	*openbsd* | *bitrig*)
102		HOST_OS=openbsd
103		HOST_ABI=elf
104		AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD gcc has bounded])
105		AC_DEFINE([HAVE_ATTRIBUTE__DEAD], [1], [OpenBSD gcc has __dead])
106		;;
107	*mingw*)
108		HOST_OS=win
109		HOST_ABI=mingw64
110		BUILD_NC=no
111		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_POSIX -D_POSIX_SOURCE -D__USE_MINGW_ANSI_STDIO"
112		CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_THREAD_SAFE_FUNCTIONS"
113		CPPFLAGS="$CPPFLAGS -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0600"
114		CPPFLAGS="$CPPFLAGS"
115		AC_SUBST([PLATFORM_LDADD], ['-lws2_32 -lbcrypt'])
116		;;
117	*solaris*)
118		HOST_OS=solaris
119		HOST_ABI=elf
120		CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 -DBSD_COMP"
121		AC_SUBST([PLATFORM_LDADD], ['-ldl -lnsl -lsocket'])
122		;;
123	*) ;;
124esac
125
126# Check if time_t is sized correctly
127AC_CHECK_SIZEOF([time_t], [time.h])
128AM_CONDITIONAL([SMALL_TIME_T], [test "$ac_cv_sizeof_time_t" = "4"])
129if test "$ac_cv_sizeof_time_t" = "4"; then
130    AC_DEFINE([SMALL_TIME_T])
131    echo " ** Warning, this system is unable to represent times past 2038"
132    echo " ** It will behave incorrectly when handling valid RFC5280 dates"
133
134    if test "$host_os" = "mingw32" ; then
135        echo " **"
136        echo " ** You can solve this by adjusting the build flags in your"
137        echo " ** mingw-w64 toolchain. Refer to README.windows for details."
138    fi
139fi
140
141AM_CONDITIONAL([HOST_AIX],     [test x$HOST_OS = xaix])
142AM_CONDITIONAL([HOST_CYGWIN],  [test x$HOST_OS = xcygwin])
143AM_CONDITIONAL([HOST_DARWIN],  [test x$HOST_OS = xdarwin])
144AM_CONDITIONAL([HOST_FREEBSD], [test x$HOST_OS = xfreebsd])
145AM_CONDITIONAL([HOST_HPUX],    [test x$HOST_OS = xhpux])
146AM_CONDITIONAL([HOST_LINUX],   [test x$HOST_OS = xlinux])
147AM_CONDITIONAL([HOST_MIDIPIX], [test x$HOST_OS = xmidipix])
148AM_CONDITIONAL([HOST_NETBSD],  [test x$HOST_OS = xnetbsd])
149AM_CONDITIONAL([HOST_OPENBSD], [test x$HOST_OS = xopenbsd])
150AM_CONDITIONAL([HOST_SOLARIS], [test x$HOST_OS = xsolaris])
151AM_CONDITIONAL([HOST_WIN],     [test x$HOST_OS = xwin])
152])
153