| dnl |
| dnl autoconf input file to generate MCONFIG |
| dnl |
| |
| AC_PREREQ(2.61) |
| AC_INIT(MCONFIG.in) |
| AC_PREFIX_DEFAULT(/usr) |
| |
| AC_USE_SYSTEM_EXTENSIONS |
| AC_ISC_POSIX |
| AC_PROG_CC |
| |
| AC_C_CONST |
| AC_C_INLINE |
| |
| PA_ADD_CFLAGS(-W) |
| PA_ADD_CFLAGS(-Wall) |
| PA_ADD_CFLAGS(-Wpointer-arith) |
| PA_ADD_CFLAGS(-Wbad-function-cast) |
| PA_ADD_CFLAGS(-Wcast-equal) |
| PA_ADD_CFLAGS(-Wstrict-prototypes) |
| PA_ADD_CFLAGS(-Wmissing-prototypes) |
| PA_ADD_CFLAGS(-Wmissing-declarations) |
| PA_ADD_CFLAGS(-Wnested-externs) |
| PA_ADD_CFLAGS(-Winline) |
| PA_ADD_CFLAGS(-Wwrite-strings) |
| PA_ADD_CFLAGS(-Wundef) |
| PA_ADD_CFLAGS(-Wshadow) |
| PA_ADD_CFLAGS(-Wsign-compare) |
| PA_ADD_CFLAGS(-pipe) |
| PA_ADD_CFLAGS(-fno-strict-aliasing) |
| |
| AC_HEADER_STDC |
| AC_CHECK_HEADERS(inttypes.h) |
| AC_CHECK_HEADERS(stdint.h) |
| PA_CHECK_INTTYPES_H_SANE |
| AC_CHECK_HEADERS(fcntl.h) |
| AC_CHECK_HEADERS(grp.h) |
| AC_CHECK_HEADERS(libgen.h) |
| AC_CHECK_HEADERS(memory.h) |
| AC_CHECK_HEADERS(setjmp.h) |
| AC_CHECK_HEADERS(stddef.h) |
| AC_CHECK_HEADERS(stdlib.h) |
| AC_CHECK_HEADERS(string.h) |
| AC_CHECK_HEADERS(strings.h) |
| AC_CHECK_HEADERS(sysexits.h) |
| AC_CHECK_HEADERS(time.h) |
| AC_CHECK_HEADERS(unistd.h) |
| AC_CHECK_HEADERS(sys/filio.h) |
| AC_CHECK_HEADERS(sys/stat.h) |
| AC_CHECK_HEADERS(sys/time.h) |
| AC_CHECK_HEADERS(sys/types.h) |
| AC_CHECK_HEADERS(arpa/inet.h) |
| AC_CHECK_HEADERS(netdb.h) |
| AC_HEADER_TIME |
| dnl This is needed on some versions of FreeBSD... |
| AC_CHECK_HEADERS(machine/param.h) |
| AC_CHECK_HEADERS(sys/socket.h) |
| AC_CHECK_HEADERS(winsock2.h) |
| AC_CHECK_HEADERS(winsock.h) |
| |
| AC_SYS_LARGEFILE |
| |
| AC_TYPE_OFF_T |
| AC_TYPE_PID_T |
| AC_TYPE_MODE_T |
| AC_TYPE_SIZE_T |
| AC_CHECK_TYPES(intmax_t) |
| AC_CHECK_TYPES(long long) |
| AC_CHECK_TYPES(uint16_t) |
| AC_CHECK_TYPES(uint32_t) |
| AC_CHECK_TYPES(u_short) |
| AC_CHECK_TYPES(u_long) |
| |
| dnl |
| dnl <sys/socket.h> isn't among the list of standard headers that autoconf checks, |
| dnl but POSIX requires <sys/socket.h> for socklen_t to be defined. |
| dnl |
| AC_CHECK_TYPES(socklen_t,,, |
| [ |
| #include <stdio.h> |
| #if HAVE_SYS_TYPES_H |
| # include <sys/types.h> |
| #endif |
| #if HAVE_SYS_STAT_H |
| # include <sys/stat.h> |
| #endif |
| #if STDC_HEADERS |
| # include <stdlib.h> |
| # include <stddef.h> |
| #else |
| # if HAVE_STDLIB_H |
| # include <stdlib.h> |
| # endif |
| #endif |
| #if HAVE_STRING_H |
| # if !STDC_HEADERS && HAVE_MEMORY_H |
| # include <memory.h> |
| # endif |
| # include <string.h> |
| #endif |
| #if HAVE_STRINGS_H |
| # include <strings.h> |
| #endif |
| #if HAVE_INTTYPES_H |
| # include <inttypes.h> |
| #else |
| # if HAVE_STDINT_H |
| # include <stdint.h> |
| # endif |
| #endif |
| #if HAVE_UNISTD_H |
| # include <unistd.h> |
| #endif |
| #ifdef HAVE_SYS_SOCKET_H |
| # include <sys/socket.h> |
| #endif |
| ]) |
| |
| AC_SEARCH_LIBS(socket, [socket ws2_32 wsock32], , [AC_MSG_ERROR(socket library not found)]) |
| |
| AC_CHECK_FUNCS(fcntl) |
| AC_CHECK_FUNCS(setsid) |
| AC_CHECK_FUNCS(recvmsg) |
| AC_CHECK_FUNCS(ftruncate) |
| AC_CHECK_FUNCS(setreuid) |
| AC_CHECK_FUNCS(setregid) |
| AC_CHECK_FUNCS(initgroups) |
| AC_CHECK_FUNCS(setgroups) |
| |
| dnl Solaris 8 has [u]intmax_t but not strtoumax(). How utterly braindamaged. |
| AC_CHECK_FUNCS(strtoumax) |
| AC_CHECK_FUNCS(strtoull) |
| |
| PA_MSGHDR_MSG_CONTROL |
| PA_STRUCT_IN_PKTINFO |
| PA_STRUCT_ADDRINFO |
| |
| PA_HEADER_DEFINES(fcntl.h, int, O_NONBLOCK) |
| PA_HEADER_DEFINES(fcntl.h, int, O_BINARY) |
| PA_HEADER_DEFINES(fcntl.h, int, O_TEXT) |
| |
| AH_TEMPLATE([HAVE_SIGSETJMP], |
| [Define if we have sigsetjmp, siglongjmp and sigjmp_buf.]) |
| PA_SIGSETJMP([AC_DEFINE(HAVE_SIGSETJMP)]) |
| |
| dnl |
| dnl Get common paths |
| dnl |
| SRCROOT=`cd $srcdir && pwd` |
| OBJROOT=`pwd` |
| |
| XTRA=false |
| PA_SEARCH_LIBS_AND_ADD(xmalloc, iberty) |
| PA_SEARCH_LIBS_AND_ADD(xstrdup, iberty) |
| PA_SEARCH_LIBS_AND_ADD(bsd_signal, bsd, bsdsignal) |
| PA_SEARCH_LIBS_AND_ADD(getopt_long, getopt, getopt_long) |
| PA_SEARCH_LIBS_AND_ADD(getaddrinfo, [nsl resolv]) |
| if $pa_add_getaddrinfo |
| then |
| AC_SEARCH_LIBS(gethostbyname, [nsl resolv], |
| [AC_SEARCH_LIBS(herror, [nsl resolv], , |
| [AC_MSG_ERROR(herror not found)])], |
| [AC_MSG_ERROR(gethostbyname not found)]) |
| else |
| AC_SEARCH_LIBS(freeaddrinfo, [nsl resolv], , |
| [AC_MSG_ERROR(getaddrinfo but not freeaddrinfo found)]) |
| AC_SEARCH_LIBS(gai_strerror, [nsl resolv], , |
| [AC_MSG_ERROR(getaddrinfo but not gai_strerror found)]) |
| fi |
| |
| PA_SEARCH_LIBS_AND_ADD(inet_ntop, [nsl resolv]) |
| if $pa_add_inet_ntop |
| then |
| AC_SEARCH_LIBS(inet_ntoa, [nsl resolv], , |
| [AC_MSG_ERROR(inet_ntoa not found)]) |
| fi |
| AC_SEARCH_LIBS(inet_aton, [nsl resolv], ,[AC_MSG_ERROR(inet_aton not found)]) |
| |
| AC_CHECK_FUNCS(daemon, , [XTRA=true; AC_LIBOBJ(daemon)]) |
| AC_CHECK_FUNCS(dup2, , [XTRA=true; AC_LIBOBJ(dup2)]) |
| if $XTRA |
| then |
| XTRALIBS="$OBJROOT/lib/libxtra.a $XTRALIBS" |
| fi |
| |
| dnl |
| dnl These libraries apply to the server only |
| dnl |
| |
| common_libs="$LIBS" |
| |
| PA_HEADER_DEFINES(netinet/in.h, int, IPPORT_TFTP) |
| |
| PA_WITH_BOOL(tcpwrappers, 1, |
| [ --without-tcpwrappers disable tcpwrapper permissions checking], |
| [ |
| AC_SEARCH_LIBS(yp_get_default_domain, [nsl resolv]) |
| PA_HAVE_TCPWRAPPERS |
| ],:) |
| |
| |
| AH_TEMPLATE([WITH_REGEX], |
| [Define if we are compiling with regex filename remapping.]) |
| |
| PA_WITH_BOOL(remap, 1, |
| [ --without-remap disable regex-based filename remapping], |
| [ |
| AC_CHECK_HEADER(regex.h, |
| [ |
| AC_SEARCH_LIBS(regcomp, [regex rx], |
| [ |
| AC_DEFINE(WITH_REGEX) |
| TFTPDOBJS="remap.${OBJEXT} $TFTPDOBJS" |
| ]) |
| ]) |
| ],:) |
| |
| TFTPD_LIBS="$LIBS $XTRALIBS" |
| LIBS="$common_libs" |
| |
| dnl |
| dnl These libraries apply to the client only |
| dnl |
| |
| AH_TEMPLATE([WITH_READLINE], |
| [Define if we are compiling with readline/editline command-line editing.]) |
| |
| PA_WITH_BOOL(readline, 1, |
| [ --without-readline disable the use of readline command-line editing], |
| [ |
| AC_CHECK_HEADER(readline/readline.h, |
| [ |
| dnl readline may need libtermcap or somesuch... |
| AC_SEARCH_LIBS(tputs, [termcap terminfo]) |
| |
| AC_SEARCH_LIBS(readline, [readline history], |
| [AC_DEFINE(WITH_READLINE)]) |
| AC_CHECK_HEADERS(readline/history.h) |
| ], |
| [AC_CHECK_HEADER(editline/readline.h, |
| [ |
| dnl editline may need libtermcap or somesuch... |
| AC_SEARCH_LIBS(tputs, [termcap terminfo]) |
| |
| AC_SEARCH_LIBS(editline, [edit], |
| [AC_DEFINE(WITH_READLINE)]) |
| ])]) |
| ],:) |
| |
| TFTP_LIBS="$LIBS $XTRALIBS" |
| LIBS="$common_libs" |
| |
| dnl |
| dnl Check for IPV6 and disable-ipv6 |
| dnl |
| PA_STRUCT_SOCKADDR_IN6 |
| AC_MSG_CHECKING([for IPv6 support]) |
| PA_WITH_BOOL(ipv6, 1, |
| [ --without-ipv6 disable the support for IPv6], |
| [ |
| if $HAVE_INET6 |
| then |
| AC_MSG_RESULT(yes) |
| AC_DEFINE(HAVE_IPV6, 1, [Define if IPv6 support is enabled.]) |
| PA_STRUCT_IN6_PKTINFO |
| else |
| AC_MSG_RESULT(no) |
| AC_MSG_WARN([*** we do not have required IPv6 structs - IPv6 will be disabled]) |
| fi |
| ], |
| [AC_MSG_RESULT(disabled)]) |
| |
| |
| AC_SUBST(SRCROOT) |
| AC_SUBST(OBJROOT) |
| |
| AC_SUBST(TFTP_LIBS) |
| AC_SUBST(TFTPD_LIBS) |
| AC_SUBST(TFTPDOBJS) |
| |
| AC_PROG_LN_S |
| AC_PROG_RANLIB |
| |
| dnl |
| dnl Make sure the install program has an absolute path if it |
| dnl has a path at all. autoconf doesn't do this "in order |
| dnl to not pollute the cache." Sigh. |
| dnl Note: the $ needs to be double-quoted for reasons unknown. |
| dnl |
| AC_PROG_INSTALL |
| [if echo "$INSTALL" | grep '^[^/].*/' > /dev/null 2>&1; then |
| INSTALL='\${SRCROOT}'/"$INSTALL" |
| fi] |
| |
| AC_CONFIG_HEADERS(aconfig.h) |
| AC_OUTPUT(MCONFIG) |