signals: require and always use sigaction()
[tftp-hpa.git] / configure.ac
blob2d4b93d5e92e2a88f2e4158a5951bef3c6c9d6ea
1 dnl
2 dnl autoconf input file to generate MCONFIG
3 dnl
5 AC_PREREQ([2.71])
6 AC_INIT
7 AC_CONFIG_SRCDIR([MCONFIG.in])
8 AC_PREFIX_DEFAULT(/usr)
10 AC_USE_SYSTEM_EXTENSIONS
11 AC_SEARCH_LIBS([strerror],[cposix])
12 AC_PROG_CC
14 AC_C_CONST
15 AC_C_INLINE
17 PA_ADD_CFLAGS(-W)
18 PA_ADD_CFLAGS(-Wall)
19 PA_ADD_CFLAGS(-Wpointer-arith)
20 PA_ADD_CFLAGS(-Wbad-function-cast)
21 PA_ADD_CFLAGS(-Wcast-equal)
22 PA_ADD_CFLAGS(-Wstrict-prototypes)
23 PA_ADD_CFLAGS(-Wmissing-prototypes)
24 PA_ADD_CFLAGS(-Wmissing-declarations)
25 PA_ADD_CFLAGS(-Wnested-externs)
26 PA_ADD_CFLAGS(-Winline)
27 PA_ADD_CFLAGS(-Wwrite-strings)
28 PA_ADD_CFLAGS(-Wundef)
29 PA_ADD_CFLAGS(-Wshadow)
30 PA_ADD_CFLAGS(-Wsign-compare)
31 PA_ADD_CFLAGS(-pipe)
32 PA_ADD_CFLAGS(-fno-strict-aliasing)
34 AC_CHECK_HEADERS(inttypes.h)
35 AC_CHECK_HEADERS(stdint.h)
36 PA_CHECK_INTTYPES_H_SANE
37 AC_CHECK_HEADERS(fcntl.h)
38 AC_CHECK_HEADERS(grp.h)
39 AC_CHECK_HEADERS(libgen.h)
40 AC_CHECK_HEADERS(setjmp.h)
41 AC_CHECK_HEADERS(strings.h)
42 AC_CHECK_HEADERS(sysexits.h)
43 AC_CHECK_HEADERS(unistd.h)
44 AC_CHECK_HEADERS(sys/file.h)
45 AC_CHECK_HEADERS(sys/filio.h)
46 AC_CHECK_HEADERS(sys/stat.h)
47 AC_CHECK_HEADERS(sys/time.h)
48 AC_CHECK_HEADERS(sys/types.h)
49 AC_CHECK_HEADERS(arpa/inet.h)
50 AC_CHECK_HEADERS(netdb.h)
52 dnl This is needed on some versions of FreeBSD...
53 AC_CHECK_HEADERS(machine/param.h)
54 AC_CHECK_HEADERS(sys/socket.h)
55 AC_CHECK_HEADERS(winsock2.h)
56 AC_CHECK_HEADERS(winsock.h)
58 AC_SYS_LARGEFILE
60 AC_TYPE_OFF_T
61 AC_TYPE_PID_T
62 AC_TYPE_MODE_T
63 AC_TYPE_SIZE_T
64 AC_CHECK_TYPES(intmax_t)
65 AC_CHECK_TYPES(long long)
66 AC_CHECK_TYPES(uint16_t)
67 AC_CHECK_TYPES(uint32_t)
68 AC_CHECK_TYPES(u_short)
69 AC_CHECK_TYPES(u_long)
71 dnl
72 dnl <sys/socket.h> isn't among the list of standard headers that autoconf checks,
73 dnl but POSIX requires <sys/socket.h> for socklen_t to be defined.
74 dnl
75 AC_CHECK_TYPES(socklen_t,,,
76 [AC_INCLUDES_DEFAULT
77 #ifdef HAVE_SYS_TYPES_H
78 # include <sys/types.h>
79 #endif
80 #ifdef HAVE_SYS_SOCKET_H
81 # include <sys/socket.h>
82 #endif
85 AC_SEARCH_LIBS(socket, [socket ws2_32 wsock32], , [AC_MSG_ERROR(socket library not found)])
87 AC_CHECK_FUNCS(fcntl)
88 AC_CHECK_FUNCS(setsid)
89 AC_CHECK_FUNCS(recvmsg)
90 AC_CHECK_FUNCS(ftruncate)
91 AC_CHECK_FUNCS(setresuid)
92 AC_CHECK_FUNCS(setreuid)
93 AC_CHECK_FUNCS(setresgid)
94 AC_CHECK_FUNCS(setregid)
95 AC_CHECK_FUNCS(initgroups)
96 AC_CHECK_FUNCS(setgroups)
97 AC_CHECK_TYPES(sighandler_t)
99 dnl Solaris 8 has [u]intmax_t but not strtoumax().  How utterly braindamaged.
100 AC_CHECK_FUNCS(strtoumax)
101 AC_CHECK_FUNCS(strtoull)
103 PA_MSGHDR_MSG_CONTROL
104 PA_STRUCT_IN_PKTINFO
105 PA_STRUCT_ADDRINFO
107 PA_HEADER_DEFINES(fcntl.h, int, O_NONBLOCK)
108 PA_HEADER_DEFINES(fcntl.h, int, O_BINARY)
109 PA_HEADER_DEFINES(fcntl.h, int, O_TEXT)
111 PA_HEADER_DEFINES(fcntl.h, int, F_SETLK)
113 PA_HEADER_DEFINES(sys/file.h, int, LOCK_SH)
114 PA_HEADER_DEFINES(sys/file.h, int, LOCK_EX)
116 AH_TEMPLATE([HAVE_SIGSETJMP],
117 [Define if we have sigsetjmp, siglongjmp and sigjmp_buf.])
118 PA_SIGSETJMP([AC_DEFINE(HAVE_SIGSETJMP)])
121 dnl Get common paths
123 SRCROOT=`cd $srcdir && pwd`
124 OBJROOT=`pwd`
126 XTRA=false
127 PA_SEARCH_LIBS_AND_ADD(xmalloc, iberty)
128 PA_SEARCH_LIBS_AND_ADD(xstrdup, iberty)
129 PA_SEARCH_LIBS_AND_ADD(getopt_long, getopt, getopt_long)
130 PA_SEARCH_LIBS_AND_ADD(getaddrinfo, [nsl resolv])
131 if $pa_add_getaddrinfo
132 then
133     AC_SEARCH_LIBS(gethostbyname, [nsl resolv],
134       [AC_SEARCH_LIBS(herror, [nsl resolv], ,
135          [AC_MSG_ERROR(herror not found)])],
136       [AC_MSG_ERROR(gethostbyname not found)])
137 else
138     AC_SEARCH_LIBS(freeaddrinfo, [nsl resolv], ,
139       [AC_MSG_ERROR(getaddrinfo but not freeaddrinfo found)])
140     AC_SEARCH_LIBS(gai_strerror, [nsl resolv], ,
141       [AC_MSG_ERROR(getaddrinfo but not gai_strerror found)])
144 PA_SEARCH_LIBS_AND_ADD(inet_ntop, [nsl resolv])
145 if $pa_add_inet_ntop
146 then
147     AC_SEARCH_LIBS(inet_ntoa, [nsl resolv], ,
148       [AC_MSG_ERROR(inet_ntoa not found)])
150 AC_SEARCH_LIBS(inet_aton, [nsl resolv], ,[AC_MSG_ERROR(inet_aton not found)])
152 AC_CHECK_FUNCS(daemon, , [XTRA=true; AC_LIBOBJ(daemon)])
153 AC_CHECK_FUNCS(dup2, , [XTRA=true; AC_LIBOBJ(dup2)])
154 if $XTRA
155 then
156   XTRALIBS="$OBJROOT/lib/libxtra.a $XTRALIBS"
160 dnl These libraries apply to the server only
163 common_libs="$LIBS"
165 PA_HEADER_DEFINES(netinet/in.h, int, IPPORT_TFTP)
167 PA_WITH_BOOL(tcpwrappers, 1,
168 [  --without-tcpwrappers   disable tcpwrapper permissions checking],
170         AC_SEARCH_LIBS(yp_get_default_domain, [nsl resolv])
171         PA_HAVE_TCPWRAPPERS
172 ],:)
175 AH_TEMPLATE([WITH_REGEX],
176 [Define if we are compiling with regex filename remapping.])
178 PA_WITH_BOOL(remap, 1,
179 [  --without-remap         disable regex-based filename remapping],
181         AC_CHECK_HEADER(regex.h,
182         [
183                 AC_SEARCH_LIBS(regcomp, [regex rx],
184                 [
185                         AC_DEFINE(WITH_REGEX)
186                         TFTPDOBJS="remap.${OBJEXT} $TFTPDOBJS"
187                 ])
188         ])
189 ],:)
191 TFTPD_LIBS="$LIBS $XTRALIBS"
192 LIBS="$common_libs"
195 dnl These libraries apply to the client only
198 AH_TEMPLATE([WITH_READLINE],
199 [Define if we are compiling with readline/editline command-line editing.])
201 PA_WITH_BOOL(readline, 1,
202 [  --without-readline      disable the use of readline command-line editing],
204         AC_CHECK_HEADER(readline/readline.h,
205         [
206                 dnl readline may need libtermcap or somesuch...
207                 AC_SEARCH_LIBS(tputs, [termcap terminfo])
209                 AC_SEARCH_LIBS(readline, [readline history],
210                 [AC_DEFINE(WITH_READLINE)])
211                 AC_CHECK_HEADERS(readline/history.h)
212         ],
213         [AC_CHECK_HEADER(editline/readline.h,
214         [
215                 dnl editline may need libtermcap or somesuch...
216                 AC_SEARCH_LIBS(tputs, [termcap terminfo])
218                 AC_SEARCH_LIBS(editline, [edit],
219                 [AC_DEFINE(WITH_READLINE)])
220         ])])
221 ],:)
223 TFTP_LIBS="$LIBS $XTRALIBS"
224 LIBS="$common_libs"
227 dnl   Check for IPV6 and disable-ipv6
229 PA_STRUCT_SOCKADDR_IN6
230 AC_MSG_CHECKING([for IPv6 support])
231 PA_WITH_BOOL(ipv6, 1,
232 [  --without-ipv6      disable the support for IPv6],
234     if  $HAVE_INET6
235     then
236         AC_MSG_RESULT(yes)
237         AC_DEFINE(HAVE_IPV6, 1, [Define if IPv6 support is enabled.])
238         PA_STRUCT_IN6_PKTINFO
239     else
240         AC_MSG_RESULT(no)
241         AC_MSG_WARN([*** we do not have required IPv6 structs - IPv6 will be disabled])
242     fi
244 [AC_MSG_RESULT(disabled)])
247 AC_SUBST(SRCROOT)
248 AC_SUBST(OBJROOT)
250 AC_SUBST(TFTP_LIBS)
251 AC_SUBST(TFTPD_LIBS)
252 AC_SUBST(TFTPDOBJS)
254 AC_PROG_LN_S
255 AC_PROG_RANLIB
258 dnl Make sure the install program has an absolute path if it
259 dnl has a path at all.  autoconf doesn't do this "in order
260 dnl to not pollute the cache."  Sigh.
261 dnl Note: the $ needs to be double-quoted for reasons unknown.
263 AC_PROG_INSTALL
264 [if echo "$INSTALL" | grep '^[^/].*/' > /dev/null 2>&1; then
265    INSTALL='\${SRCROOT}'/"$INSTALL"
268 AC_CONFIG_HEADERS(aconfig.h)
269 AC_CONFIG_FILES([MCONFIG])
270 AC_OUTPUT