tftpd: Canonicalize myaddr before address_is_local()
[tftp-hpa.git] / configure.in
blob7ab7c5aa530555a64111064eedbc84d466696116
1 dnl
2 dnl autoconf input file to generate MCONFIG
3 dnl
5 AC_PREREQ(2.61)
6 AC_INIT(MCONFIG.in)
7 AC_PREFIX_DEFAULT(/usr)
9 AC_USE_SYSTEM_EXTENSIONS
10 AC_ISC_POSIX
11 AC_PROG_CC
13 AC_C_CONST
14 AC_C_INLINE
16 PA_ADD_CFLAGS(-W)
17 PA_ADD_CFLAGS(-Wall)
18 PA_ADD_CFLAGS(-Wpointer-arith)
19 PA_ADD_CFLAGS(-Wbad-function-cast)
20 PA_ADD_CFLAGS(-Wcast-equal)
21 PA_ADD_CFLAGS(-Wstrict-prototypes)
22 PA_ADD_CFLAGS(-Wmissing-prototypes)
23 PA_ADD_CFLAGS(-Wmissing-declarations)
24 PA_ADD_CFLAGS(-Wnested-externs)
25 PA_ADD_CFLAGS(-Winline)
26 PA_ADD_CFLAGS(-Wwrite-strings)
27 PA_ADD_CFLAGS(-Wundef)
28 PA_ADD_CFLAGS(-Wshadow)
29 PA_ADD_CFLAGS(-Wsign-compare)
30 PA_ADD_CFLAGS(-pipe)
31 PA_ADD_CFLAGS(-fno-strict-aliasing)
33 AC_HEADER_STDC
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(memory.h)
41 AC_CHECK_HEADERS(setjmp.h)
42 AC_CHECK_HEADERS(stddef.h)
43 AC_CHECK_HEADERS(stdlib.h)
44 AC_CHECK_HEADERS(string.h)
45 AC_CHECK_HEADERS(strings.h)
46 AC_CHECK_HEADERS(sysexits.h)
47 AC_CHECK_HEADERS(time.h)
48 AC_CHECK_HEADERS(unistd.h)
49 AC_CHECK_HEADERS(sys/file.h)
50 AC_CHECK_HEADERS(sys/filio.h)
51 AC_CHECK_HEADERS(sys/stat.h)
52 AC_CHECK_HEADERS(sys/time.h)
53 AC_CHECK_HEADERS(sys/types.h)
54 AC_CHECK_HEADERS(arpa/inet.h)
55 AC_CHECK_HEADERS(netdb.h)
56 AC_HEADER_TIME
57 dnl This is needed on some versions of FreeBSD...
58 AC_CHECK_HEADERS(machine/param.h)
59 AC_CHECK_HEADERS(sys/socket.h)
60 AC_CHECK_HEADERS(winsock2.h)
61 AC_CHECK_HEADERS(winsock.h)
63 AC_SYS_LARGEFILE
65 AC_TYPE_OFF_T
66 AC_TYPE_PID_T
67 AC_TYPE_MODE_T
68 AC_TYPE_SIZE_T
69 AC_CHECK_TYPES(intmax_t)
70 AC_CHECK_TYPES(long long)
71 AC_CHECK_TYPES(uint16_t)
72 AC_CHECK_TYPES(uint32_t)
73 AC_CHECK_TYPES(u_short)
74 AC_CHECK_TYPES(u_long)
76 dnl
77 dnl <sys/socket.h> isn't among the list of standard headers that autoconf checks,
78 dnl but POSIX requires <sys/socket.h> for socklen_t to be defined.
79 dnl
80 AC_CHECK_TYPES(socklen_t,,,
82 #include <stdio.h>
83 #if HAVE_SYS_TYPES_H
84 # include <sys/types.h>
85 #endif
86 #if HAVE_SYS_STAT_H
87 # include <sys/stat.h>
88 #endif
89 #if STDC_HEADERS
90 # include <stdlib.h>
91 # include <stddef.h>
92 #else
93 # if HAVE_STDLIB_H
94 #  include <stdlib.h>
95 # endif
96 #endif
97 #if HAVE_STRING_H
98 # if !STDC_HEADERS && HAVE_MEMORY_H
99 #  include <memory.h>
100 # endif
101 # include <string.h>
102 #endif
103 #if HAVE_STRINGS_H
104 # include <strings.h>
105 #endif
106 #if HAVE_INTTYPES_H
107 # include <inttypes.h>
108 #else
109 # if HAVE_STDINT_H
110 #  include <stdint.h>
111 # endif
112 #endif
113 #if HAVE_UNISTD_H
114 # include <unistd.h>
115 #endif
116 #ifdef HAVE_SYS_SOCKET_H
117 # include <sys/socket.h>
118 #endif
121 AC_SEARCH_LIBS(socket, [socket ws2_32 wsock32], , [AC_MSG_ERROR(socket library not found)])
123 AC_CHECK_FUNCS(fcntl)
124 AC_CHECK_FUNCS(setsid)
125 AC_CHECK_FUNCS(recvmsg)
126 AC_CHECK_FUNCS(ftruncate)
127 AC_CHECK_FUNCS(setreuid)
128 AC_CHECK_FUNCS(setregid)
129 AC_CHECK_FUNCS(initgroups)
130 AC_CHECK_FUNCS(setgroups)
132 dnl Solaris 8 has [u]intmax_t but not strtoumax().  How utterly braindamaged.
133 AC_CHECK_FUNCS(strtoumax)
134 AC_CHECK_FUNCS(strtoull)
136 PA_MSGHDR_MSG_CONTROL
137 PA_STRUCT_IN_PKTINFO
138 PA_STRUCT_ADDRINFO
140 PA_HEADER_DEFINES(fcntl.h, int, O_NONBLOCK)
141 PA_HEADER_DEFINES(fcntl.h, int, O_BINARY)
142 PA_HEADER_DEFINES(fcntl.h, int, O_TEXT)
144 PA_HEADER_DEFINES(fcntl.h, int, F_SETLK)
146 PA_HEADER_DEFINES(sys/file.h, int, LOCK_SH)
147 PA_HEADER_DEFINES(sys/file.h, int, LOCK_EX)
149 AH_TEMPLATE([HAVE_SIGSETJMP],
150 [Define if we have sigsetjmp, siglongjmp and sigjmp_buf.])
151 PA_SIGSETJMP([AC_DEFINE(HAVE_SIGSETJMP)])
154 dnl Get common paths
156 SRCROOT=`cd $srcdir && pwd`
157 OBJROOT=`pwd`
159 XTRA=false
160 PA_SEARCH_LIBS_AND_ADD(xmalloc, iberty)
161 PA_SEARCH_LIBS_AND_ADD(xstrdup, iberty)
162 PA_SEARCH_LIBS_AND_ADD(bsd_signal, bsd, bsdsignal)
163 PA_SEARCH_LIBS_AND_ADD(getopt_long, getopt, getopt_long)
164 PA_SEARCH_LIBS_AND_ADD(getaddrinfo, [nsl resolv])
165 if $pa_add_getaddrinfo
166 then
167     AC_SEARCH_LIBS(gethostbyname, [nsl resolv],
168       [AC_SEARCH_LIBS(herror, [nsl resolv], ,
169          [AC_MSG_ERROR(herror not found)])],
170       [AC_MSG_ERROR(gethostbyname not found)])
171 else
172     AC_SEARCH_LIBS(freeaddrinfo, [nsl resolv], ,
173       [AC_MSG_ERROR(getaddrinfo but not freeaddrinfo found)])
174     AC_SEARCH_LIBS(gai_strerror, [nsl resolv], ,
175       [AC_MSG_ERROR(getaddrinfo but not gai_strerror found)])
178 PA_SEARCH_LIBS_AND_ADD(inet_ntop, [nsl resolv])
179 if $pa_add_inet_ntop
180 then
181     AC_SEARCH_LIBS(inet_ntoa, [nsl resolv], ,
182       [AC_MSG_ERROR(inet_ntoa not found)])
184 AC_SEARCH_LIBS(inet_aton, [nsl resolv], ,[AC_MSG_ERROR(inet_aton not found)])
186 AC_CHECK_FUNCS(daemon, , [XTRA=true; AC_LIBOBJ(daemon)])
187 AC_CHECK_FUNCS(dup2, , [XTRA=true; AC_LIBOBJ(dup2)])
188 if $XTRA
189 then
190   XTRALIBS="$OBJROOT/lib/libxtra.a $XTRALIBS"
194 dnl These libraries apply to the server only
197 common_libs="$LIBS"
199 PA_HEADER_DEFINES(netinet/in.h, int, IPPORT_TFTP)
201 PA_WITH_BOOL(tcpwrappers, 1,
202 [  --without-tcpwrappers   disable tcpwrapper permissions checking],
204         AC_SEARCH_LIBS(yp_get_default_domain, [nsl resolv])
205         PA_HAVE_TCPWRAPPERS
206 ],:)
209 AH_TEMPLATE([WITH_REGEX],
210 [Define if we are compiling with regex filename remapping.])
212 PA_WITH_BOOL(remap, 1,
213 [  --without-remap         disable regex-based filename remapping],
215         AC_CHECK_HEADER(regex.h,
216         [
217                 AC_SEARCH_LIBS(regcomp, [regex rx],
218                 [
219                         AC_DEFINE(WITH_REGEX)
220                         TFTPDOBJS="remap.${OBJEXT} $TFTPDOBJS"
221                 ])
222         ])
223 ],:)
225 TFTPD_LIBS="$LIBS $XTRALIBS"
226 LIBS="$common_libs"
229 dnl These libraries apply to the client only
232 AH_TEMPLATE([WITH_READLINE],
233 [Define if we are compiling with readline/editline command-line editing.])
235 PA_WITH_BOOL(readline, 1,
236 [  --without-readline      disable the use of readline command-line editing],
238         AC_CHECK_HEADER(readline/readline.h,
239         [
240                 dnl readline may need libtermcap or somesuch...
241                 AC_SEARCH_LIBS(tputs, [termcap terminfo])
243                 AC_SEARCH_LIBS(readline, [readline history],
244                 [AC_DEFINE(WITH_READLINE)])
245                 AC_CHECK_HEADERS(readline/history.h)
246         ],
247         [AC_CHECK_HEADER(editline/readline.h,
248         [
249                 dnl editline may need libtermcap or somesuch...
250                 AC_SEARCH_LIBS(tputs, [termcap terminfo])
252                 AC_SEARCH_LIBS(editline, [edit],
253                 [AC_DEFINE(WITH_READLINE)])
254         ])])
255 ],:)
257 TFTP_LIBS="$LIBS $XTRALIBS"
258 LIBS="$common_libs"
261 dnl   Check for IPV6 and disable-ipv6
263 PA_STRUCT_SOCKADDR_IN6
264 AC_MSG_CHECKING([for IPv6 support])
265 PA_WITH_BOOL(ipv6, 1,
266 [  --without-ipv6      disable the support for IPv6],
268     if  $HAVE_INET6
269     then
270         AC_MSG_RESULT(yes)
271         AC_DEFINE(HAVE_IPV6, 1, [Define if IPv6 support is enabled.])
272         PA_STRUCT_IN6_PKTINFO
273     else
274         AC_MSG_RESULT(no)
275         AC_MSG_WARN([*** we do not have required IPv6 structs - IPv6 will be disabled])
276     fi
278 [AC_MSG_RESULT(disabled)])
281 AC_SUBST(SRCROOT)
282 AC_SUBST(OBJROOT)
284 AC_SUBST(TFTP_LIBS)
285 AC_SUBST(TFTPD_LIBS)
286 AC_SUBST(TFTPDOBJS)
288 AC_PROG_LN_S
289 AC_PROG_RANLIB
292 dnl Make sure the install program has an absolute path if it
293 dnl has a path at all.  autoconf doesn't do this "in order
294 dnl to not pollute the cache."  Sigh.
295 dnl Note: the $ needs to be double-quoted for reasons unknown.
297 AC_PROG_INSTALL
298 [if echo "$INSTALL" | grep '^[^/].*/' > /dev/null 2>&1; then
299    INSTALL='\${SRCROOT}'/"$INSTALL"
302 AC_CONFIG_HEADERS(aconfig.h)
303 AC_OUTPUT(MCONFIG)