mirror of
https://kernel.googlesource.com/pub/scm/network/tftp/tftp-hpa
synced 2025-04-26 01:49:52 +03:00
autoconf: modernize and modularize
Use my modular m4 library used for other things as well; update autoconf macros to 2.71 standard. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
33051a296c
commit
fefaa2cc5c
35 changed files with 680 additions and 461 deletions
11
.gitignore
vendored
11
.gitignore
vendored
|
@ -1,6 +1,9 @@
|
||||||
/MCONFIG
|
/config/MCONFIG
|
||||||
/aconfig.h
|
/config/config.h
|
||||||
/aconfig.h.in
|
/config/config.h.in
|
||||||
|
/autoconf/aclocal.m4
|
||||||
|
/autoconf/clean.sh
|
||||||
|
/autoconf/helpers/
|
||||||
/autom4te.cache
|
/autom4te.cache
|
||||||
/config.log
|
/config.log
|
||||||
/config.status
|
/config.status
|
||||||
|
@ -12,5 +15,7 @@
|
||||||
*.8
|
*.8
|
||||||
*.a
|
*.a
|
||||||
*.o
|
*.o
|
||||||
|
*.i
|
||||||
|
*.s
|
||||||
*~
|
*~
|
||||||
\#*
|
\#*
|
||||||
|
|
37
Makefile
37
Makefile
|
@ -3,10 +3,10 @@
|
||||||
|
|
||||||
SUB = lib common tftp tftpd
|
SUB = lib common tftp tftpd
|
||||||
|
|
||||||
%.build: MCONFIG aconfig.h version.h
|
%.build: config/MCONFIG config/config.h version.h
|
||||||
$(MAKE) -C $(patsubst %.build, %, $@)
|
$(MAKE) -C $(patsubst %.build, %, $@)
|
||||||
|
|
||||||
%.install: MCONFIG aconfig.h version.h
|
%.install: config/MCONFIG config/config.h version.h
|
||||||
$(MAKE) -C $(patsubst %.install, %, $@) install
|
$(MAKE) -C $(patsubst %.install, %, $@) install
|
||||||
|
|
||||||
%.clean:
|
%.clean:
|
||||||
|
@ -15,12 +15,12 @@ SUB = lib common tftp tftpd
|
||||||
%.distclean:
|
%.distclean:
|
||||||
$(MAKE) -C $(patsubst %.distclean, %, $@) distclean
|
$(MAKE) -C $(patsubst %.distclean, %, $@) distclean
|
||||||
|
|
||||||
all: MCONFIG $(patsubst %, %.build, $(SUB))
|
all: config/MCONFIG $(patsubst %, %.build, $(SUB))
|
||||||
|
|
||||||
tftp.build: lib.build common.build
|
tftp.build: lib.build common.build
|
||||||
tftpd.build: lib.build common.build
|
tftpd.build: lib.build common.build
|
||||||
|
|
||||||
install: MCONFIG $(patsubst %, %.install, $(SUB))
|
install: config/MCONFIG $(patsubst %, %.install, $(SUB))
|
||||||
|
|
||||||
clean: localclean $(patsubst %, %.clean, $(SUB))
|
clean: localclean $(patsubst %, %.clean, $(SUB))
|
||||||
|
|
||||||
|
@ -30,46 +30,37 @@ localclean:
|
||||||
distclean: localdistclean $(patsubst %, %.distclean, $(SUB))
|
distclean: localdistclean $(patsubst %, %.distclean, $(SUB))
|
||||||
|
|
||||||
localdistclean: localclean
|
localdistclean: localclean
|
||||||
rm -f MCONFIG config.status config.log aconfig.h *~ \#*
|
rm -f config/config/MCONFIG config.status config.log config/config.h *~ \#*
|
||||||
rm -rf *.cache
|
rm -rf *.cache
|
||||||
find . -type f \( -name \*.orig -o -name \*.rej \) | xargs rm -f
|
find . -type f \( -name \*.orig -o -name \*.rej \) | xargs rm -f
|
||||||
|
|
||||||
spotless: distclean
|
spotless: distclean
|
||||||
rm -f configure aconfig.h.in tftp.spec
|
rm -f configure config/config.h.in tftp.spec
|
||||||
|
|
||||||
autoconf: configure aconfig.h.in
|
autoconf: configure config/config.h.in
|
||||||
|
|
||||||
config: MCONFIG aconfig.h
|
config: config/MCONFIG config/config.h
|
||||||
|
|
||||||
release:
|
release:
|
||||||
$(MAKE) autoconf
|
$(MAKE) autoconf
|
||||||
$(MAKE) tftp.spec
|
$(MAKE) tftp.spec
|
||||||
$(MAKE) distclean
|
$(MAKE) distclean
|
||||||
|
|
||||||
MCONFIG: configure MCONFIG.in aconfig.h.in
|
config/MCONFIG: configure config/MCONFIG.in config/config.h.in
|
||||||
if test -x config.status; then \
|
if test -x config.status; then \
|
||||||
./config.status --recheck && ./config.status ; \
|
./config.status --recheck && ./config.status ; \
|
||||||
else \
|
else \
|
||||||
./configure ; \
|
./configure ; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
aconfig.h: MCONFIG
|
config/config.h: config/MCONFIG
|
||||||
: Generated by side effect
|
: Generated by side effect
|
||||||
|
|
||||||
# Adding "configure" to the dependencies serializes this with running
|
configure: configure.ac
|
||||||
# autoconf, because there are apparently race conditions between
|
sh autogen.sh
|
||||||
# autoconf and autoheader. And worse than that, even when autoconf
|
|
||||||
# cleanly returns first, autoheader will truncate the timestamp of
|
|
||||||
# aconfig.h.in to second resolution, so on a filesystem with subsecond
|
|
||||||
# resolution it can appear older than configure (which isn't truncated).
|
|
||||||
# So make it an order-only prerequisite to avoid looping regenerating it.
|
|
||||||
aconfig.h.in: configure.ac aclocal.m4 | configure
|
|
||||||
rm -f aconfig.h.in aconfig.h
|
|
||||||
autoheader
|
|
||||||
|
|
||||||
configure: configure.ac aclocal.m4
|
config/config.h.in: configure
|
||||||
rm -rf MCONFIG configure config.log aconfig.h *.cache
|
: Generated by side effect
|
||||||
autoconf
|
|
||||||
|
|
||||||
version.h: version
|
version.h: version
|
||||||
echo \#define VERSION \"tftp-hpa `cat version`\" > version.h
|
echo \#define VERSION \"tftp-hpa `cat version`\" > version.h
|
||||||
|
|
280
aclocal.m4
vendored
280
aclocal.m4
vendored
|
@ -1,280 +0,0 @@
|
||||||
dnl -----------------------------------------------------------------------
|
|
||||||
dnl
|
|
||||||
dnl Copyright 1999-2008 H. Peter Anvin - All Rights Reserved
|
|
||||||
dnl
|
|
||||||
dnl This program is free software; you can redistribute it and/or modify
|
|
||||||
dnl it under the terms of the GNU General Public License as published by
|
|
||||||
dnl the Free Software Foundation, Inc., 53 Temple Place Ste 330,
|
|
||||||
dnl Bostom MA 02111-1307, USA; either version 2 of the License, or
|
|
||||||
dnl (at your option) any later version; incorporated herein by reference.
|
|
||||||
dnl
|
|
||||||
dnl -----------------------------------------------------------------------
|
|
||||||
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
dnl PA_ADD_CFLAGS()
|
|
||||||
dnl
|
|
||||||
dnl Attempt to add the given option to CFLAGS, if it doesn't break compilation
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
AC_DEFUN(PA_ADD_CFLAGS,
|
|
||||||
[AC_MSG_CHECKING([if $CC accepts $1])
|
|
||||||
pa_add_cflags__old_cflags="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS $1"
|
|
||||||
AC_TRY_LINK([#include <stdio.h>],
|
|
||||||
[printf("Hello, World!\n");],
|
|
||||||
AC_MSG_RESULT([yes]),
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
CFLAGS="$pa_add_cflags__old_cflags")])
|
|
||||||
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
dnl PA_SIGSETJMP
|
|
||||||
dnl
|
|
||||||
dnl Do we have sigsetjmp/siglongjmp? (AC_CHECK_FUNCS doesn't seem to work
|
|
||||||
dnl for these particular functions.)
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
AC_DEFUN(PA_SIGSETJMP,
|
|
||||||
[AC_MSG_CHECKING([for sigsetjmp])
|
|
||||||
AC_TRY_LINK([
|
|
||||||
#ifdef HAVE_SETJMP_H
|
|
||||||
#include <setjmp.h>
|
|
||||||
#endif],
|
|
||||||
[sigjmp_buf buf;
|
|
||||||
sigsetjmp(buf,1);
|
|
||||||
siglongjmp(buf,2);],
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
$1,
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
$2)])
|
|
||||||
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
dnl PA_MSGHDR_MSG_CONTROL
|
|
||||||
dnl
|
|
||||||
dnl Does struct msghdr have the msg_control field?
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
AH_TEMPLATE([HAVE_MSGHDR_MSG_CONTROL],
|
|
||||||
[Define if struct msghdr has the msg_control field.])
|
|
||||||
|
|
||||||
AC_DEFUN(PA_MSGHDR_MSG_CONTROL,
|
|
||||||
[AC_CHECK_MEMBER(struct msghdr.msg_control,
|
|
||||||
[AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
])])
|
|
||||||
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
dnl PA_STRUCT_IN_PKTINFO
|
|
||||||
dnl
|
|
||||||
dnl Look for definition of struct in_pktinfo, which at least has an
|
|
||||||
dnl ipi_addr member. Some versions of glibc lack struct in_pktinfo;
|
|
||||||
dnl if so we need to include the definition ourselves -- but we only
|
|
||||||
dnl want to do that if absolutely necessary!
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
AH_TEMPLATE([HAVE_STRUCT_IN_PKTINFO],
|
|
||||||
[Define if struct in_pktinfo is defined.])
|
|
||||||
|
|
||||||
AC_DEFUN(PA_STRUCT_IN_PKTINFO,
|
|
||||||
[AC_CHECK_MEMBER(struct in_pktinfo.ipi_addr,
|
|
||||||
[AC_DEFINE(HAVE_STRUCT_IN_PKTINFO)],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/uio.h>
|
|
||||||
])])
|
|
||||||
|
|
||||||
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
dnl PA_STRUCT_SOCKADDR_IN6
|
|
||||||
dnl
|
|
||||||
dnl Look for definition of struct sockaddr_in6, which at least has an
|
|
||||||
dnl sin6_addr member
|
|
||||||
dnl
|
|
||||||
AH_TEMPLATE([HAVE_STRUCT_SOCKADDR_IN6],
|
|
||||||
[Define if struct sockaddr_in6 is defined.])
|
|
||||||
|
|
||||||
AC_DEFUN(PA_STRUCT_SOCKADDR_IN6,
|
|
||||||
[AC_CHECK_MEMBER(struct sockaddr_in6.sin6_addr,
|
|
||||||
[
|
|
||||||
AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)
|
|
||||||
HAVE_INET6=true;
|
|
||||||
],
|
|
||||||
[
|
|
||||||
HAVE_INET6=false;
|
|
||||||
],
|
|
||||||
[
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
])])
|
|
||||||
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
dnl PA_STRUCT_ADDRINFO
|
|
||||||
dnl
|
|
||||||
dnl Look for definition of struct addrinfo, which at least has an
|
|
||||||
dnl ai_addr member
|
|
||||||
dnl
|
|
||||||
AH_TEMPLATE([HAVE_STRUCT_ADDRINFO],
|
|
||||||
[Define if struct addrinfo is defined.])
|
|
||||||
|
|
||||||
AC_DEFUN(PA_STRUCT_ADDRINFO,
|
|
||||||
[AC_CHECK_MEMBER(struct addrinfo.ai_addr,
|
|
||||||
[AC_DEFINE(HAVE_STRUCT_ADDRINFO)],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
])])
|
|
||||||
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
dnl PA_STRUCT_IN6_PKTINFO
|
|
||||||
dnl
|
|
||||||
dnl Look for definition of struct in6_pktinfo, which at least has an
|
|
||||||
dnl ipi6_addr member
|
|
||||||
dnl
|
|
||||||
AH_TEMPLATE([HAVE_STRUCT_IN6_PKTINFO],
|
|
||||||
[Define if struct in6_pktinfo is defined.])
|
|
||||||
|
|
||||||
AC_DEFUN(PA_STRUCT_IN6_PKTINFO,
|
|
||||||
[AC_CHECK_MEMBER(struct in6_pktinfo.ipi6_addr,
|
|
||||||
[AC_DEFINE(HAVE_STRUCT_IN6_PKTINFO)],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
])])
|
|
||||||
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
dnl PA_HAVE_TCPWRAPPERS
|
|
||||||
dnl
|
|
||||||
dnl Do we have the tcpwrappers -lwrap? This can't be done using AC_CHECK_LIBS
|
|
||||||
dnl due to the need to provide "allow_severity" and "deny_severity" variables
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
AH_TEMPLATE([HAVE_TCPWRAPPERS],
|
|
||||||
[Define if we have tcpwrappers (-lwrap) and <tcpd.h>.])
|
|
||||||
|
|
||||||
AC_DEFUN(PA_HAVE_TCPWRAPPERS,
|
|
||||||
[AC_CHECK_LIB([wrap], [main])
|
|
||||||
AC_MSG_CHECKING([for tcpwrappers])
|
|
||||||
AC_TRY_LINK(
|
|
||||||
[
|
|
||||||
#include <tcpd.h>
|
|
||||||
int allow_severity = 0;
|
|
||||||
int deny_severity = 0;
|
|
||||||
],
|
|
||||||
[
|
|
||||||
hosts_ctl("sample_daemon", STRING_UNKNOWN, STRING_UNKNOWN, STRING_UNKNOWN);
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_DEFINE(HAVE_TCPWRAPPERS)
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
])])
|
|
||||||
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
dnl PA_CHECK_INTTYPES_H_SANE
|
|
||||||
dnl
|
|
||||||
dnl At least some versions of AIX 4 have <inttypes.h> macros which are
|
|
||||||
dnl completely broken. Try to detect those.
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
AH_TEMPLATE([INTTYPES_H_IS_SANE],
|
|
||||||
[Define if the macros in <inttypes.h> are usable])
|
|
||||||
|
|
||||||
AC_DEFUN(PA_CHECK_INTTYPES_H_SANE,
|
|
||||||
[AC_CHECK_HEADERS(inttypes.h,
|
|
||||||
[
|
|
||||||
AC_MSG_CHECKING([if inttypes.h is sane])
|
|
||||||
AC_TRY_LINK(
|
|
||||||
[
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
],
|
|
||||||
[uintmax_t max = UINTMAX_C(0);
|
|
||||||
printf("%"PRIuMAX"\n", max);],
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(INTTYPES_H_IS_SANE),
|
|
||||||
AC_MSG_RESULT([no (AIX, eh?)]))
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
dnl PA_WITH_BOOL
|
|
||||||
dnl
|
|
||||||
dnl PA_WITH_BOOL(option, default, help, enable, disable)
|
|
||||||
dnl
|
|
||||||
dnl Provides a more convenient way to specify --with-option and
|
|
||||||
dnl --without-option, with a default. default should be either 0 or 1.
|
|
||||||
dnl ------------------------------------------------------------------------
|
|
||||||
AC_DEFUN(PA_WITH_BOOL,
|
|
||||||
[AC_ARG_WITH([$1], [$3],
|
|
||||||
if test ["$withval"] != no; then
|
|
||||||
[$4]
|
|
||||||
else
|
|
||||||
[$5]
|
|
||||||
fi,
|
|
||||||
if test [$2] -ne 0; then
|
|
||||||
[$4]
|
|
||||||
else
|
|
||||||
[$5]
|
|
||||||
fi)])
|
|
||||||
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
dnl PA_HEADER_DEFINES
|
|
||||||
dnl
|
|
||||||
dnl PA_HEADER_DEFINES(header, type, value)
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
AC_DEFUN(PA_HEADER_DEFINES,
|
|
||||||
[AC_MSG_CHECKING([if $1 defines $3])
|
|
||||||
AH_TEMPLATE([HAVE_$3_DEFINITION], [Define if $1 defines $3])
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#include <$1>
|
|
||||||
],
|
|
||||||
[
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
$2 dummy = $3;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
pa_header_define=`echo HAVE_$3_DEFINITION | tr '[a-z]' '[A-Z]'`
|
|
||||||
AC_DEFINE_UNQUOTED($pa_header_define)
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])])
|
|
||||||
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
dnl PA_SEARCH_LIBS_AND_ADD
|
|
||||||
dnl
|
|
||||||
dnl PA_SEARCH_LIBS_AND_ADD(function, libraries [,function to add])
|
|
||||||
dnl --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
AC_DEFUN(PA_SEARCH_LIBS_AND_ADD,
|
|
||||||
[
|
|
||||||
AH_TEMPLATE(AS_TR_CPP(HAVE_$1), [Define if $1 function was found])
|
|
||||||
AC_SEARCH_LIBS($1, $2,
|
|
||||||
[
|
|
||||||
AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1))
|
|
||||||
pa_add_$1=false;
|
|
||||||
],
|
|
||||||
[
|
|
||||||
XTRA=true;
|
|
||||||
if test $# -eq 3; then
|
|
||||||
AC_LIBOBJ($3)
|
|
||||||
else
|
|
||||||
AC_LIBOBJ($1)
|
|
||||||
fi
|
|
||||||
pa_add_$1=true;
|
|
||||||
])])
|
|
9
autoconf/m4/pa_add_cflags.m4
Normal file
9
autoconf/m4/pa_add_cflags.m4
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_ADD_CFLAGS(variable, flag [,actual_flag [,success [,failure]]]])
|
||||||
|
dnl
|
||||||
|
dnl Attempt to add the given option to xFLAGS, if it doesn't break
|
||||||
|
dnl compilation. If the option to be tested is different than the
|
||||||
|
dnl option that should actually be added, add the option to be
|
||||||
|
dnl actually added as a second argument.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_ADD_CFLAGS], [PA_ADD_FLAGS(CFLAGS, [$1], [$2], [$3], [$4])])
|
39
autoconf/m4/pa_add_flags.m4
Normal file
39
autoconf/m4/pa_add_flags.m4
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_ADD_FLAGS(flagvar, flags)
|
||||||
|
dnl
|
||||||
|
dnl Add [flags] to the variable [flagvar] if and only if it is accepted
|
||||||
|
dnl by all languages affected by [flagvar], if those languages have
|
||||||
|
dnl been previously seen in the script.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_ADD_FLAGS],
|
||||||
|
[
|
||||||
|
AS_VAR_PUSHDEF([old], [_$0_$1_orig])
|
||||||
|
AS_VAR_PUSHDEF([ok], [_$0_$1_ok])
|
||||||
|
AS_VAR_PUSHDEF([flags], [$1])
|
||||||
|
|
||||||
|
AS_VAR_COPY([old], [flags])
|
||||||
|
AS_VAR_SET([flags], ["$flags $2"])
|
||||||
|
AS_VAR_SET([ok], [yes])
|
||||||
|
|
||||||
|
PA_LANG_FOREACH(PA_FLAGS_LANGLIST($1),
|
||||||
|
[AS_VAR_IF([ok], [yes],
|
||||||
|
[AC_MSG_CHECKING([if $]_AC_CC[ accepts $2])
|
||||||
|
PA_BUILD_IFELSE([],
|
||||||
|
[AC_MSG_RESULT([yes])],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
AS_VAR_SET([ok], [no])])])
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_VAR_IF([ok], [yes],
|
||||||
|
[m4_ifnblank([$3],[AS_VAR_SET([flags], ["$old $3"])])
|
||||||
|
m4_foreach_w([_pa_add_flags_flag], [m4_ifblank([$3],[$2],[$3])],
|
||||||
|
[AC_DEFINE(PA_SYM([$1_]_pa_add_flags_flag), 1,
|
||||||
|
[Define to 1 if compiled with the ]_pa_add_flags_flag[ compiler flag])])
|
||||||
|
$4],
|
||||||
|
[AS_VAR_SET([flags], ["$old"])
|
||||||
|
$5])
|
||||||
|
|
||||||
|
AS_VAR_POPDEF([flags])
|
||||||
|
AS_VAR_POPDEF([ok])
|
||||||
|
AS_VAR_POPDEF([old])
|
||||||
|
])
|
13
autoconf/m4/pa_add_headers.m4
Normal file
13
autoconf/m4/pa_add_headers.m4
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_ADD_HEADERS(headers...)
|
||||||
|
dnl
|
||||||
|
dnl Call AC_CHECK_HEADERS(), and add to ac_includes_default if found
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([_PA_ADD_HEADER],
|
||||||
|
[AC_CHECK_HEADERS([$1],[ac_includes_default="$ac_includes_default
|
||||||
|
#include <$1>"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([PA_ADD_HEADERS],
|
||||||
|
[m4_map_args_w([$1],[_PA_ADD_HEADER(],[)])])
|
27
autoconf/m4/pa_add_langflags.m4
Normal file
27
autoconf/m4/pa_add_langflags.m4
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_ADD_LANGFLAGS(flag...)
|
||||||
|
dnl
|
||||||
|
dnl Attempt to add the option in the given list to each compiler flags
|
||||||
|
dnl (CFLAGS, CXXFLAGS, ...), if it doesn't break compilation.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
m4_defun([_PA_LANGFLAG_VAR],
|
||||||
|
[m4_case([$1],
|
||||||
|
[C], [CFLAGS],
|
||||||
|
[C++], [CXXFLAGS],
|
||||||
|
[Fortran 77], [FFLAGS],
|
||||||
|
[Fortran], [FCFLAGS],
|
||||||
|
[Erlang], [ERLCFLAGS],
|
||||||
|
[Objective C], [OBJCFLAGS],
|
||||||
|
[Objective C++], [OBJCXXFLAGS],
|
||||||
|
[Go], [GOFLAGS],
|
||||||
|
[m4_fatal([PA_ADD_LANGFLAGS: Unknown language: $1])])])
|
||||||
|
|
||||||
|
AC_DEFUN([PA_ADD_LANGFLAGS],
|
||||||
|
[m4_pushdef([_pa_langflags],m4_dquote($1))dnl
|
||||||
|
m4_set_foreach(_PA_LANG_SEEN_SET,[_pa_lang],dnl
|
||||||
|
[_pa_flag_found=no
|
||||||
|
m4_foreach_w([_pa_flag], _pa_langflags,
|
||||||
|
[AS_IF([test $_pa_flag_found = no],
|
||||||
|
[PA_ADD_FLAGS(_PA_LANGFLAG_VAR(_pa_lang),_pa_flag,[],[_pa_flag_found=yes])])
|
||||||
|
])])
|
||||||
|
m4_popdef([_pa_langflags])])
|
19
autoconf/m4/pa_arg_bool.m4
Normal file
19
autoconf/m4/pa_arg_bool.m4
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_ARG_BOOL(option,helptext,default,enabled_action,disabled_action)
|
||||||
|
dnl
|
||||||
|
dnl The last three arguments are optional; default can be yes or no.
|
||||||
|
dnl
|
||||||
|
dnl Simpler-to-use versions of AC_ARG_ENABLED, that include the
|
||||||
|
dnl test for $enableval and the AS_HELP_STRING definition. This is only
|
||||||
|
dnl to be used for boolean options.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_ARG_BOOL],
|
||||||
|
[m4_pushdef([pa_default],m4_default(m4_normalize([$3]),[no]))
|
||||||
|
m4_pushdef([pa_option],m4_case(pa_default,[yes],[disable],[enable]))
|
||||||
|
AC_ARG_ENABLE([$1],
|
||||||
|
[AS_HELP_STRING([--]m4_defn([pa_option])[-$1],[$2])],
|
||||||
|
[pa_arg_bool_enableval="$enableval"],
|
||||||
|
[pa_arg_bool_enableval="]m4_defn([pa_default])["])
|
||||||
|
m4_popdef([pa_option], [pa_default])
|
||||||
|
AS_IF([test x"$pa_arg_bool_enableval" != xno], [$4], [$5])
|
||||||
|
])
|
4
autoconf/m4/pa_arg_disabled.m4
Normal file
4
autoconf/m4/pa_arg_disabled.m4
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_ARG_DISABLED(option,helptext,disabled_action,enabled_action)
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_ARG_DISABLED],[PA_ARG_BOOL([$1],[$2],yes,[$4],[$3])])
|
4
autoconf/m4/pa_arg_enabled.m4
Normal file
4
autoconf/m4/pa_arg_enabled.m4
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_ARG_ENABLED(option,helptext,enabled_action,disabled_action)
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_ARG_ENABLED],[PA_ARG_BOOL([$1],[$2],no,[$3],[$4])])
|
16
autoconf/m4/pa_build_ifelse.m4
Normal file
16
autoconf/m4/pa_build_ifelse.m4
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_BUILD_IFELSE(input [,success [,failure]])
|
||||||
|
dnl
|
||||||
|
dnl Same as AC_LINK_IFELSE for languages where linking is applicable,
|
||||||
|
dnl otherwise AC_COMPILE_IFELSE.
|
||||||
|
dnl
|
||||||
|
dnl If the first argument is empty, use _AC_LANG_IO_PROGRAM.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
m4_defun([_PA_BUILD_IFELSE],
|
||||||
|
[m4_case(_AC_LANG,
|
||||||
|
[Erlang], [AC_COMPILE_IFELSE($@)],
|
||||||
|
[AC_LINK_IFELSE($@)])])
|
||||||
|
|
||||||
|
AC_DEFUN([PA_BUILD_IFELSE],
|
||||||
|
[_PA_BUILD_IFELSE([m4_ifblank([$1],[AC_LANG_SOURCE(_AC_LANG_IO_PROGRAM)],
|
||||||
|
[$1])],[$2],[$3])])
|
32
autoconf/m4/pa_c_typeof.m4
Normal file
32
autoconf/m4/pa_c_typeof.m4
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_C_TYPEOF
|
||||||
|
dnl
|
||||||
|
dnl Find if typeof() exists, or an equivalent (__typeof__, decltype,
|
||||||
|
dnl __decltype__)
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_C_TYPEOF],
|
||||||
|
[AC_CACHE_CHECK([if $CC supports typeof], [pa_cv_typeof],
|
||||||
|
[pa_cv_typeof=no
|
||||||
|
for pa_typeof_try in typeof __typeof __typeof__ decltype __decltype __decltype__ _Decltype
|
||||||
|
do
|
||||||
|
AS_IF([test $pa_cv_typeof = no],
|
||||||
|
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||||
|
AC_INCLUDES_DEFAULT
|
||||||
|
int testme(int x);
|
||||||
|
int testme(int x)
|
||||||
|
{
|
||||||
|
$pa_typeof_try(x) y = x*x;
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
])],
|
||||||
|
[pa_cv_typeof=$pa_typeof_try])])
|
||||||
|
done
|
||||||
|
])
|
||||||
|
AS_IF([test $pa_cv_typeof = no],
|
||||||
|
[],
|
||||||
|
[AC_DEFINE([HAVE_TYPEOF], 1,
|
||||||
|
[Define to 1 if you have some version of the typeof operator.])
|
||||||
|
AS_IF([test $pa_cv_typeof = typeof],
|
||||||
|
[],
|
||||||
|
[AC_DEFINE_UNQUOTED([typeof], [$pa_cv_typeof],
|
||||||
|
[Define if your typeof operator is not named `typeof'.])])])])
|
26
autoconf/m4/pa_check_bad_stdc_inline.m4
Normal file
26
autoconf/m4/pa_check_bad_stdc_inline.m4
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_CHECK_BAD_STDC_INLINE
|
||||||
|
dnl
|
||||||
|
dnl Some versions of gcc seem to apply -Wmissing-prototypes to C99
|
||||||
|
dnl inline functions, which means we need to use GNU inline syntax
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_CHECK_BAD_STDC_INLINE],
|
||||||
|
[AC_MSG_CHECKING([if $CC supports C99 external inlines])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||||
|
AC_INCLUDES_DEFAULT
|
||||||
|
|
||||||
|
/* Don't mistake GNU inlines for c99 */
|
||||||
|
#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
|
||||||
|
# error "Using gnu inline standard"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline int foo(int x)
|
||||||
|
{
|
||||||
|
return x+1;
|
||||||
|
}
|
||||||
|
])],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
AC_DEFINE([HAVE_STDC_INLINE], 1,
|
||||||
|
[Define to 1 if your compiler supports C99 extern inline])],
|
||||||
|
[AC_MSG_RESULT([no])
|
||||||
|
PA_ADD_CFLAGS([-fgnu89-inline])])])
|
17
autoconf/m4/pa_check_inttypes_h_sane.m4
Normal file
17
autoconf/m4/pa_check_inttypes_h_sane.m4
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
dnl ------------------------------------------------------------------------
|
||||||
|
dnl PA_CHECK_INTTYPES_H_SANE
|
||||||
|
dnl
|
||||||
|
dnl At least some versions of AIX 4 have <inttypes.h> macros which are
|
||||||
|
dnl completely broken. Try to detect those.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_CHECK_INTTYPES_H_SANE],
|
||||||
|
[AC_CHECK_HEADERS_ONCE(inttypes.h)
|
||||||
|
AS_IF([test "x$ac_cv_header_inttypes_h" = xyes],[
|
||||||
|
AC_MSG_CHECKING([if inttypes.h is sane])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
|
||||||
|
[uintmax_t max = UINTMAX_C(0);
|
||||||
|
printf("%"PRIuMAX"\n", max);])],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
AC_DEFINE(INTTYPES_H_IS_SANE, 1,
|
||||||
|
[Define if the macros in <inttypes.h> are usable])],
|
||||||
|
[AC_MSG_RESULT([no (AIX, eh?)])])])])
|
41
autoconf/m4/pa_cross_compile.m4
Normal file
41
autoconf/m4/pa_cross_compile.m4
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_CROSS_COMPILE
|
||||||
|
dnl
|
||||||
|
dnl Get the canonical name for the build and host (runtime) systems;
|
||||||
|
dnl then figure out if this is cross-compilation. Specifically, this
|
||||||
|
dnl disables invoking WINE on non-Windows systems which are configured
|
||||||
|
dnl to run WINE automatically.
|
||||||
|
dnl
|
||||||
|
dnl Use PA_CROSS_COMPILE_TOOL if the target system (output of a code-
|
||||||
|
dnl generation tool) is applicable.
|
||||||
|
dnl
|
||||||
|
dnl This doesn't explicitly print any messages as that is automatically
|
||||||
|
dnl done elsewhere.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN_ONCE([PA_CROSS_COMPILE],
|
||||||
|
[
|
||||||
|
AC_BEFORE([$0], [AC_LANG_COMPILER])
|
||||||
|
AC_BEFORE([$0], [AC_LANG])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_CC])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_CPP])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_CXX])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_CXXCPP])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_OBJC])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_OBJCPP])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_OBJCXX])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_OBJCXXCPP])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_F77])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_FC])
|
||||||
|
AC_BEFORE([$0], [AC_PROG_GO])
|
||||||
|
|
||||||
|
# Disable WINE
|
||||||
|
WINELOADER=/dev/null
|
||||||
|
export WINELOADER
|
||||||
|
WINESERVER=/dev/null
|
||||||
|
export WINESERVER
|
||||||
|
WINEPREFIX=/dev/null
|
||||||
|
export WINEPREFIX
|
||||||
|
|
||||||
|
AC_CANONICAL_BUILD
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
])
|
19
autoconf/m4/pa_flags_langlist.m4
Normal file
19
autoconf/m4/pa_flags_langlist.m4
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_FLAGS_LANGLIST(flagvar)
|
||||||
|
dnl
|
||||||
|
dnl Return a list of languages affected by the variable flagvar.
|
||||||
|
dnl If flagvar is unknown, assume it affects the current language.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_FLAGS_LANGLIST],
|
||||||
|
[m4_dquote(m4_case([$1],
|
||||||
|
[CPPFLAGS], [[C],[C++],[Objective C],[Objective C++]],
|
||||||
|
[CFLAGS], [[C]],
|
||||||
|
[CXXFLAGS], [[C++]],
|
||||||
|
[FFLAGS], [[Fortran 77]],
|
||||||
|
[FCFLAGS], [[Fortran]],
|
||||||
|
[ERLCFLAGS], [[Erlang]],
|
||||||
|
[OBJCFLAGS], [[Objective C]],
|
||||||
|
[OBJCXXFLAGS], [[Objective C++]],
|
||||||
|
[GOFLAGS], [[Go]],
|
||||||
|
[LDFLAGS], [[C],[C++],[Fortran 77],[Fortran],[Objective C],[Objective C++],[Go]],
|
||||||
|
m4_dquote(_AC_LANG)))])
|
26
autoconf/m4/pa_have_tcpwrappers.m4
Normal file
26
autoconf/m4/pa_have_tcpwrappers.m4
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_HAVE_TCPWRAPPERS
|
||||||
|
dnl
|
||||||
|
dnl Do we have the tcpwrappers -lwrap? This can't be done using AC_CHECK_LIBS
|
||||||
|
dnl due to the need to provide "allow_severity" and "deny_severity" variables
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_HAVE_TCPWRAPPERS],
|
||||||
|
[AC_CHECK_LIB([wrap], [main])
|
||||||
|
AC_MSG_CHECKING([for tcpwrappers])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
#include <tcpd.h>
|
||||||
|
int allow_severity = 0;
|
||||||
|
int deny_severity = 0;
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
hosts_ctl("sample_daemon", STRING_UNKNOWN, STRING_UNKNOWN, STRING_UNKNOWN);
|
||||||
|
]])],
|
||||||
|
[
|
||||||
|
AC_DEFINE(HAVE_TCPWRAPPERS, 1,
|
||||||
|
[Define if we have tcpwrappers (-lwrap) and <tcpd.h>.])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])])
|
15
autoconf/m4/pa_lang_foreach.m4
Normal file
15
autoconf/m4/pa_lang_foreach.m4
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_LANG_FOREACH(subset, body)
|
||||||
|
dnl
|
||||||
|
dnl Expand [body] for each language encountered in the configure script also
|
||||||
|
dnl present in [subset], or all if [subset] is empty
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([_PA_LANG_DO],dnl
|
||||||
|
[AC_LANG([$2])dnl
|
||||||
|
$1])
|
||||||
|
|
||||||
|
AC_DEFUN([PA_LANG_FOREACH],dnl
|
||||||
|
[m4_pushdef([_pa_lang_foreach_current],[_AC_LANG])dnl
|
||||||
|
m4_map_args([m4_curry([_PA_LANG_DO],[$2])],m4_unquote(PA_LANG_SEEN_LIST($1)))dnl
|
||||||
|
AC_LANG(_pa_lang_foreach_current)dnl
|
||||||
|
m4_popdef([_pa_lang_foreach_current])])
|
20
autoconf/m4/pa_lang_seen_list.m4
Normal file
20
autoconf/m4/pa_lang_seen_list.m4
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_LANG_SEEN_LIST(subset)
|
||||||
|
dnl
|
||||||
|
dnl List of the language lang has been used in the configuration
|
||||||
|
dnl script so far, possibly subset by [subset].
|
||||||
|
dnl
|
||||||
|
dnl This relies on overriding _AC_LANG_SET(from, to),
|
||||||
|
dnl the internal implementation of _AC_LANG.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
m4_ifndef([_PA_LANG_SET],
|
||||||
|
[m4_rename([_AC_LANG_SET], [_PA_LANG_SET])dnl
|
||||||
|
m4_defun([_AC_LANG_SET], [m4_set_add([_PA_LANG_SEEN_SET],[$2])dnl
|
||||||
|
_PA_LANG_SET($@)])])
|
||||||
|
|
||||||
|
AC_DEFUN([PA_LANG_SEEN_LIST],
|
||||||
|
[m4_set_delete([_pa_lang_seen_subset])dnl
|
||||||
|
m4_pushdef([_pa_lang_seen_subset_list],m4_ifnblank([$1],[$1],m4_dquote(m4_set_list([_PA_LANG_SEEN_SET]))))dnl
|
||||||
|
m4_set_add_all([_pa_lang_seen_subset],_pa_lang_seen_subset_list)dnl
|
||||||
|
m4_cdr(m4_set_intersection([_pa_lang_seen_subset],[_PA_LANG_SEEN_SET]))dnl
|
||||||
|
m4_popdef([_pa_lang_seen_subset_list])])
|
13
autoconf/m4/pa_option_debug.m4
Normal file
13
autoconf/m4/pa_option_debug.m4
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_OPTION_DEBUG(with_debug, without_debug)
|
||||||
|
dnl
|
||||||
|
dnl Set debug flags and optimization flags depending on if
|
||||||
|
dnl --enable-debug is set or not. Some flags are set regardless...
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_OPTION_DEBUG],
|
||||||
|
[PA_ARG_DISABLED([gdb], [disable gdb debug extensions],
|
||||||
|
[PA_ADD_LANGFLAGS([-g3])], [PA_ADD_LANGFLAGS([-ggdb3 -g3])])
|
||||||
|
PA_ARG_ENABLED([debug], [optimize for debugging],
|
||||||
|
[PA_ADD_LANGFLAGS([-Og -O0])
|
||||||
|
$1],
|
||||||
|
[$2])])
|
8
autoconf/m4/pa_option_profiling.m4
Normal file
8
autoconf/m4/pa_option_profiling.m4
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_OPTION_PROFILING(with_profiling, without_profiling)
|
||||||
|
dnl
|
||||||
|
dnl Try to enable profiling if --enable-profiling is set.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_OPTION_PROFILING],
|
||||||
|
[PA_ARG_ENABLED([profiling], [compile with profiling (-pg option)],
|
||||||
|
[PA_ADD_LANGFLAGS([-pg])])])
|
13
autoconf/m4/pa_prog_cc.m4
Normal file
13
autoconf/m4/pa_prog_cc.m4
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_PROG_CC()
|
||||||
|
dnl
|
||||||
|
dnl Similar to AC_PROG_CC, but add a prototype for main() to
|
||||||
|
dnl AC_INCLUDES_DEFAULT to avoid -Werror from breaking compilation.
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_PROG_CC],
|
||||||
|
[AC_PROG_CC
|
||||||
|
AS_IF([test x$ac_cv_prog != xno],
|
||||||
|
[ac_includes_default="$ac_includes_default
|
||||||
|
#ifndef __cplusplus
|
||||||
|
extern int main(void);
|
||||||
|
#endif"])])
|
22
autoconf/m4/pa_search_libs_and_add.m4
Normal file
22
autoconf/m4/pa_search_libs_and_add.m4
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_SEARCH_LIBS_AND_ADD
|
||||||
|
dnl
|
||||||
|
dnl PA_SEARCH_LIBS_AND_ADD(function, libraries [,function to add])
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_SEARCH_LIBS_AND_ADD],
|
||||||
|
[
|
||||||
|
AH_TEMPLATE(AS_TR_CPP(HAVE_$1), [Define if $1 function was found])
|
||||||
|
AC_SEARCH_LIBS($1, $2,
|
||||||
|
[
|
||||||
|
AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1))
|
||||||
|
pa_add_$1=false;
|
||||||
|
],
|
||||||
|
[
|
||||||
|
XTRA=true;
|
||||||
|
if test $# -eq 3; then
|
||||||
|
AC_LIBOBJ($3)
|
||||||
|
else
|
||||||
|
AC_LIBOBJ($1)
|
||||||
|
fi
|
||||||
|
pa_add_$1=true;
|
||||||
|
])])
|
25
autoconf/m4/pa_sigsetjmp.m4
Normal file
25
autoconf/m4/pa_sigsetjmp.m4
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_SIGSETJMP
|
||||||
|
dnl
|
||||||
|
dnl Do we have sigsetjmp/siglongjmp? (AC_CHECK_FUNCS doesn't seem to work
|
||||||
|
dnl for these particular functions.)
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_SIGSETJMP],
|
||||||
|
[AC_MSG_CHECKING([for sigsetjmp])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_SOURCE(
|
||||||
|
[
|
||||||
|
AC_INCLUDES_DEFAULT
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
sigjmp_buf buf;
|
||||||
|
if (sigsetjmp(buf,1))
|
||||||
|
return 0;
|
||||||
|
siglongjmp(buf,2);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
])],
|
||||||
|
[AC_MSG_RESULT([yes])
|
||||||
|
AC_DEFINE([HAVE_SIGSETJMP], 1,
|
||||||
|
[Define to 1 if your system has sigsetjmp/siglongjmp])],
|
||||||
|
[AC_MSG_RESULT([no])])])
|
11
autoconf/m4/pa_sym.m4
Normal file
11
autoconf/m4/pa_sym.m4
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
dnl PA_SYM(prefix, string)
|
||||||
|
dnl
|
||||||
|
dnl Convert a (semi-) arbitrary string to a CPP symbol
|
||||||
|
dnl Compact underscores and convert non-C characters to underscore,
|
||||||
|
dnl except + which is converted to X (so C++ -> CXX).
|
||||||
|
dnl --------------------------------------------------------------------------
|
||||||
|
AC_DEFUN([PA_SYM],
|
||||||
|
[m4_bpatsubsts(m4_quote(m4_toupper([$*])),
|
||||||
|
[,],[],[\+],[X],[[^ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]+],[_],dnl
|
||||||
|
[^._?\(.*\)_.$],[[\1]])])
|
85
autogen.sh
85
autogen.sh
|
@ -1,2 +1,83 @@
|
||||||
#!/bin/sh
|
#!/bin/sh -x
|
||||||
make autoconf
|
#
|
||||||
|
# Run this script to regenerate autoconf files
|
||||||
|
#
|
||||||
|
recheck=false
|
||||||
|
for arg; do
|
||||||
|
case x"$arg" in
|
||||||
|
x--recheck)
|
||||||
|
recheck=true
|
||||||
|
config=$(sh config.status --config 2>/dev/null)
|
||||||
|
;;
|
||||||
|
x--clearenv)
|
||||||
|
unset AUTOCONF AUTOMAKE ACLOCAL AUTOHEADER ACLOCAL_PATH
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "$0: unknown option: $arg" 1>&2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# This allows for overriding the default autoconf programs
|
||||||
|
AUTOCONF="${AUTOCONF:-${AUTOTOOLS_PREFIX}autoconf}"
|
||||||
|
AUTOMAKE="${AUTOMAKE:-${AUTOTOOLS_PREFIX}automake}"
|
||||||
|
ACLOCAL="${ACLOCAL:-${AUTOTOOLS_PREFIX}aclocal}"
|
||||||
|
AUTOHEADER="${AUTOHEADER:-${AUTOTOOLS_PREFIX}autoheader}"
|
||||||
|
|
||||||
|
mkdir -p autoconf autoconf/helpers config
|
||||||
|
autolib="`"$AUTOMAKE" --print-libdir`"
|
||||||
|
if test ! x"$autolib" = x; then
|
||||||
|
for prg in install-sh compile config.guess config.sub; do
|
||||||
|
# Update autoconf helpers if and only if newer ones are available
|
||||||
|
if test -f "$autolib"/"$prg" && \
|
||||||
|
( set -e ; \
|
||||||
|
test -f autoconf/helpers/"$prg" && sed -n \
|
||||||
|
-e 's/^scriptver=/scriptversion=/' \
|
||||||
|
-e 's/^timestamp=/scriptversion=/' \
|
||||||
|
-e 's/^scriptversion=['\''"]?\([^'\''"]*\).*$/\1/p' \
|
||||||
|
"$autolib"/"$prg" autoconf/helpers/"$prg" | \
|
||||||
|
sort -c 2>/dev/null ; \
|
||||||
|
test $? -ne 0 )
|
||||||
|
then
|
||||||
|
cp -f "$autolib"/"$prg" autoconf/helpers
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
mv -f autoconf/aclocal.m4 autoconf/aclocal.m4.old
|
||||||
|
mkdir -p autoconf/m4.old autoconf/m4
|
||||||
|
mv -f autoconf/m4/*.m4 autoconf/m4.old/ 2>/dev/null || true
|
||||||
|
ACLOCAL_PATH="${ACLOCAL_PATH}${ACLOCAL_PATH:+:}`pwd`/autoconf/m4.old"
|
||||||
|
export ACLOCAL_PATH
|
||||||
|
"$ACLOCAL" --install --output=autoconf/aclocal.m4 -I autoconf/m4
|
||||||
|
if test ! -f autoconf/aclocal.m4; then
|
||||||
|
# aclocal failed, revert to previous files
|
||||||
|
mv -f autoconf/m4.old/*.m4 autoconf/m4/
|
||||||
|
mv -f autoconf/aclocal.m4.old autoconf/aclocal.m4
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -rf autoconf/*m4.old
|
||||||
|
"$AUTOHEADER" -B autoconf
|
||||||
|
"$AUTOCONF" -B autoconf
|
||||||
|
(
|
||||||
|
echo '#!/bin/sh'
|
||||||
|
"$AUTOCONF" -B autoconf \
|
||||||
|
-t AC_CONFIG_HEADERS:'rm -f $*' \
|
||||||
|
-t AC_CONFIG_FILES:'rm -f $*'
|
||||||
|
echo 'rm -f config.log config.status'
|
||||||
|
echo 'rm -rf autom4te.cache'
|
||||||
|
) > autoconf/clean.sh
|
||||||
|
chmod +x autoconf/clean.sh
|
||||||
|
sh autoconf/clean.sh
|
||||||
|
|
||||||
|
rm -f configure~ || true
|
||||||
|
|
||||||
|
# Try to regenerate unconfig.h if Perl is available and unconfig.pl
|
||||||
|
# is present in the autoconf directory.
|
||||||
|
if [ -n "$(which perl)" -a -f autoconf/unconfig.pl ]; then
|
||||||
|
perl autoconf/unconfig.pl . config/config.h.in config/unconfig.h
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $recheck; then
|
||||||
|
# This bizarre statement has to do with how config.status quotes its output
|
||||||
|
echo exec sh configure $config | sh -
|
||||||
|
fi
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
SRCROOT = ..
|
SRCROOT = ..
|
||||||
VERSION = $(shell cat ../version)
|
VERSION = $(shell cat ../version)
|
||||||
|
|
||||||
-include ../MCONFIG
|
-include ../config/MCONFIG
|
||||||
include ../MRULES
|
include ../MRULES
|
||||||
|
|
||||||
OBJS = tftpsubs.$(O) signal.$(O)
|
OBJS = tftpsubs.$(O) signal.$(O)
|
||||||
|
|
10
config.h
10
config.h
|
@ -25,7 +25,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Must be included before we include any system headers! */
|
/* Must be included before we include any system headers! */
|
||||||
#include "aconfig.h" /* autogenerated configuration header */
|
#include "config/config.h" /* autogenerated configuration header */
|
||||||
|
|
||||||
/* Standard includes */
|
/* Standard includes */
|
||||||
|
|
||||||
|
@ -115,10 +115,10 @@
|
||||||
|
|
||||||
/* Some broken systems care about text versus binary, but
|
/* Some broken systems care about text versus binary, but
|
||||||
real Unix systems don't... */
|
real Unix systems don't... */
|
||||||
#ifndef HAVE_O_TEXT_DEFINITION
|
#if !HAVE_DECL_O_TEXT
|
||||||
#define O_TEXT 0
|
#define O_TEXT 0
|
||||||
#endif
|
#endif
|
||||||
#ifndef HAVE_O_BINARY_DEFINITION
|
#if !HAVE_DECL_O_BINARY
|
||||||
#define O_BINARY 0
|
#define O_BINARY 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -253,11 +253,9 @@ typedef int socklen_t;
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
||||||
#ifndef HAVE_IPPORT_TFTP_DEFINITION
|
#if !HAVE_DECL_IPPORT_TFTP && !defined(IPPORT_TFTP)
|
||||||
#ifndef IPPORT_TFTP
|
|
||||||
#define IPPORT_TFTP 69
|
#define IPPORT_TFTP 69
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
/* arpa/{inet,tftp}.h, and possible missing pieces */
|
/* arpa/{inet,tftp}.h, and possible missing pieces */
|
||||||
|
|
||||||
|
|
278
configure.ac
278
configure.ac
|
@ -1,61 +1,89 @@
|
||||||
dnl
|
dnl Process this file with autoconf 2.71 or later to produce
|
||||||
dnl autoconf input file to generate MCONFIG
|
dnl a configure script.
|
||||||
dnl
|
|
||||||
|
|
||||||
AC_PREREQ([2.71])
|
AC_PREREQ([2.71])
|
||||||
AC_INIT
|
AC_INIT
|
||||||
AC_CONFIG_SRCDIR([MCONFIG.in])
|
AC_CONFIG_SRCDIR([MRULES])
|
||||||
AC_PREFIX_DEFAULT(/usr)
|
AC_PREFIX_DEFAULT([/usr])
|
||||||
|
AC_CONFIG_AUX_DIR([autoconf/helpers])
|
||||||
|
|
||||||
|
dnl This prevents us from running Wine and thinking we are not
|
||||||
|
dnl cross-compiling when in fact we are; running Wine here is at
|
||||||
|
dnl the best very slow and doesn't buy us a single thing at all.
|
||||||
|
PA_CROSS_COMPILE
|
||||||
|
|
||||||
|
dnl Enable any available C extensions
|
||||||
|
PA_PROG_CC
|
||||||
AC_USE_SYSTEM_EXTENSIONS
|
AC_USE_SYSTEM_EXTENSIONS
|
||||||
AC_SEARCH_LIBS([strerror],[cposix])
|
|
||||||
AC_PROG_CC
|
|
||||||
|
|
||||||
|
dnl Options for debugging and profiling
|
||||||
|
PA_OPTION_DEBUG
|
||||||
|
PA_OPTION_PROFILING
|
||||||
|
|
||||||
|
dnl LLVM doesn't error out on invalid -W options unless this option is
|
||||||
|
dnl specified first. Enable this so this script can actually discover
|
||||||
|
dnl which -W options are possible for this compiler.
|
||||||
|
PA_ADD_CFLAGS([-Werror=unknown-warning-option])
|
||||||
|
|
||||||
|
dnl Force gcc and gcc-compatible compilers treat signed integers
|
||||||
|
dnl as 2's complement
|
||||||
|
PA_ADD_CFLAGS([-fwrapv])
|
||||||
|
|
||||||
|
dnl Force clang to behave in a predictable manner, in order to make bugs
|
||||||
|
dnl possible to track down. gcc appears to have this behavior by default.
|
||||||
|
PA_ADD_CFLAGS([-ftrivial-auto-var-init=zero])
|
||||||
|
|
||||||
|
dnl Some environments abuse __STRICT_ANSI__ to disable some
|
||||||
|
dnl function declarations
|
||||||
|
PA_ADD_CFLAGS([-U__STRICT_ANSI__])
|
||||||
|
|
||||||
|
dnl Don't put things in common if we can avoid it. We don't want to
|
||||||
|
dnl assume all compilers support common, and this will help find those
|
||||||
|
dnl problems. This also works around an OSX linker problem.
|
||||||
|
PA_ADD_CFLAGS([-fno-common])
|
||||||
|
|
||||||
|
dnl Tests which may trigger warnings on some compilers
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
AC_C_INLINE
|
AC_C_INLINE
|
||||||
|
AC_C_RESTRICT
|
||||||
|
|
||||||
PA_ADD_CFLAGS(-W)
|
dnl Checks for header files.
|
||||||
PA_ADD_CFLAGS(-Wall)
|
AC_CHECK_INCLUDES_DEFAULT
|
||||||
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_CHECK_HEADERS(inttypes.h)
|
dnl See if we need extra libraries
|
||||||
AC_CHECK_HEADERS(stdint.h)
|
XTRA=false
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS([strerror],[cposix])
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS_ONCE(inttypes.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(stdint.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(grp.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(libgen.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(setjmp.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(strings.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(sysexits.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(unistd.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(sys/filio.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(sys/stat.h)
|
||||||
|
AC_CHECK_HEADERS_ONCE(sys/time.h)
|
||||||
PA_CHECK_INTTYPES_H_SANE
|
PA_CHECK_INTTYPES_H_SANE
|
||||||
AC_CHECK_HEADERS(fcntl.h)
|
|
||||||
AC_CHECK_HEADERS(grp.h)
|
|
||||||
AC_CHECK_HEADERS(libgen.h)
|
|
||||||
AC_CHECK_HEADERS(setjmp.h)
|
|
||||||
AC_CHECK_HEADERS(strings.h)
|
|
||||||
AC_CHECK_HEADERS(sysexits.h)
|
|
||||||
AC_CHECK_HEADERS(unistd.h)
|
|
||||||
AC_CHECK_HEADERS(sys/file.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)
|
|
||||||
|
|
||||||
dnl This is needed on some versions of FreeBSD...
|
dnl This is needed on some versions of FreeBSD...
|
||||||
AC_CHECK_HEADERS(machine/param.h)
|
AC_CHECK_HEADERS_ONCE(machine/param.h)
|
||||||
AC_CHECK_HEADERS(sys/socket.h)
|
|
||||||
AC_CHECK_HEADERS(winsock2.h)
|
|
||||||
AC_CHECK_HEADERS(winsock.h)
|
|
||||||
|
|
||||||
AC_SYS_LARGEFILE
|
dnl Windows...
|
||||||
|
PA_ADD_HEADERS(windows.h)
|
||||||
|
PA_ADD_HEADERS(winsock2.h)
|
||||||
|
AS_IF([test "x$ac_cv_header_winsock2_h" != xyes],
|
||||||
|
[PA_ADD_HEADERS(winsock.h)])
|
||||||
|
|
||||||
|
PA_ADD_HEADERS(fcntl.h)
|
||||||
|
PA_ADD_HEADERS(sys/types.h)
|
||||||
|
PA_ADD_HEADERS(arpa/inet.h)
|
||||||
|
PA_ADD_HEADERS(sys/socket.h)
|
||||||
|
PA_ADD_HEADERS(sys/file.h)
|
||||||
|
PA_ADD_HEADERS(netinet/in.h)
|
||||||
|
PA_ADD_HEADERS(sys/uio.h)
|
||||||
|
PA_ADD_HEADERS(netdb.h)
|
||||||
|
|
||||||
AC_TYPE_OFF_T
|
AC_TYPE_OFF_T
|
||||||
AC_TYPE_PID_T
|
AC_TYPE_PID_T
|
||||||
|
@ -68,23 +96,13 @@ AC_CHECK_TYPES(uint32_t)
|
||||||
AC_CHECK_TYPES(u_short)
|
AC_CHECK_TYPES(u_short)
|
||||||
AC_CHECK_TYPES(u_long)
|
AC_CHECK_TYPES(u_long)
|
||||||
|
|
||||||
dnl
|
AC_CHECK_TYPES(socklen_t)
|
||||||
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,,,
|
|
||||||
[AC_INCLUDES_DEFAULT
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
# include <sys/types.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_SEARCH_LIBS(socket, [socket ws2_32 wsock32], ,
|
||||||
|
[AC_MSG_ERROR(socket library not found)])
|
||||||
|
|
||||||
AC_CHECK_FUNCS(fcntl)
|
AC_CHECK_FUNCS(fcntl)
|
||||||
|
AC_CHECK_FUNCS(flock)
|
||||||
AC_CHECK_FUNCS(setsid)
|
AC_CHECK_FUNCS(setsid)
|
||||||
AC_CHECK_FUNCS(recvmsg)
|
AC_CHECK_FUNCS(recvmsg)
|
||||||
AC_CHECK_FUNCS(ftruncate)
|
AC_CHECK_FUNCS(ftruncate)
|
||||||
|
@ -100,22 +118,15 @@ dnl Solaris 8 has [u]intmax_t but not strtoumax(). How utterly braindamaged.
|
||||||
AC_CHECK_FUNCS(strtoumax)
|
AC_CHECK_FUNCS(strtoumax)
|
||||||
AC_CHECK_FUNCS(strtoull)
|
AC_CHECK_FUNCS(strtoull)
|
||||||
|
|
||||||
PA_MSGHDR_MSG_CONTROL
|
AC_CHECK_MEMBERS(struct msghdr.msg_control)
|
||||||
PA_STRUCT_IN_PKTINFO
|
AC_CHECK_MEMBERS(struct in_pktinfo.ipi_addr)
|
||||||
PA_STRUCT_ADDRINFO
|
AC_CHECK_MEMBERS(struct addrinfo.ai_addr)
|
||||||
|
|
||||||
PA_HEADER_DEFINES(fcntl.h, int, O_NONBLOCK)
|
AC_CHECK_DECLS([O_NONBLOCK, O_BINARY, O_TEXT])
|
||||||
PA_HEADER_DEFINES(fcntl.h, int, O_BINARY)
|
AC_CHECK_DECLS([F_SETLK])
|
||||||
PA_HEADER_DEFINES(fcntl.h, int, O_TEXT)
|
AC_CHECK_DECLS([LOCK_SH, LOCK_EX])
|
||||||
|
|
||||||
PA_HEADER_DEFINES(fcntl.h, int, F_SETLK)
|
PA_SIGSETJMP
|
||||||
|
|
||||||
PA_HEADER_DEFINES(sys/file.h, int, LOCK_SH)
|
|
||||||
PA_HEADER_DEFINES(sys/file.h, int, LOCK_EX)
|
|
||||||
|
|
||||||
AH_TEMPLATE([HAVE_SIGSETJMP],
|
|
||||||
[Define if we have sigsetjmp, siglongjmp and sigjmp_buf.])
|
|
||||||
PA_SIGSETJMP([AC_DEFINE(HAVE_SIGSETJMP)])
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Get common paths
|
dnl Get common paths
|
||||||
|
@ -123,38 +134,31 @@ dnl
|
||||||
SRCROOT=`cd $srcdir && pwd`
|
SRCROOT=`cd $srcdir && pwd`
|
||||||
OBJROOT=`pwd`
|
OBJROOT=`pwd`
|
||||||
|
|
||||||
XTRA=false
|
|
||||||
PA_SEARCH_LIBS_AND_ADD(xmalloc, iberty)
|
PA_SEARCH_LIBS_AND_ADD(xmalloc, iberty)
|
||||||
PA_SEARCH_LIBS_AND_ADD(xstrdup, iberty)
|
PA_SEARCH_LIBS_AND_ADD(xstrdup, iberty)
|
||||||
PA_SEARCH_LIBS_AND_ADD(getopt_long, getopt, getopt_long)
|
PA_SEARCH_LIBS_AND_ADD(getopt_long, getopt, getopt_long)
|
||||||
PA_SEARCH_LIBS_AND_ADD(getaddrinfo, [nsl resolv])
|
PA_SEARCH_LIBS_AND_ADD(getaddrinfo, [nsl resolv])
|
||||||
if $pa_add_getaddrinfo
|
AS_IF([$pa_add_getaddrinfo],
|
||||||
then
|
[AC_SEARCH_LIBS(gethostbyname, [nsl resolv],
|
||||||
AC_SEARCH_LIBS(gethostbyname, [nsl resolv],
|
|
||||||
[AC_SEARCH_LIBS(herror, [nsl resolv], ,
|
[AC_SEARCH_LIBS(herror, [nsl resolv], ,
|
||||||
[AC_MSG_ERROR(herror not found)])],
|
[AC_MSG_ERROR(herror not found)])],
|
||||||
[AC_MSG_ERROR(gethostbyname not found)])
|
[AC_MSG_ERROR(gethostbyname not found)])],
|
||||||
else
|
[AC_SEARCH_LIBS(freeaddrinfo, [nsl resolv], ,
|
||||||
AC_SEARCH_LIBS(freeaddrinfo, [nsl resolv], ,
|
|
||||||
[AC_MSG_ERROR(getaddrinfo but not freeaddrinfo found)])
|
[AC_MSG_ERROR(getaddrinfo but not freeaddrinfo found)])
|
||||||
AC_SEARCH_LIBS(gai_strerror, [nsl resolv], ,
|
AC_SEARCH_LIBS(gai_strerror, [nsl resolv], ,
|
||||||
[AC_MSG_ERROR(getaddrinfo but not gai_strerror found)])
|
[AC_MSG_ERROR(getaddrinfo but not gai_strerror found)])])
|
||||||
fi
|
|
||||||
|
|
||||||
PA_SEARCH_LIBS_AND_ADD(inet_ntop, [nsl resolv])
|
PA_SEARCH_LIBS_AND_ADD(inet_ntop, [nsl resolv])
|
||||||
if $pa_add_inet_ntop
|
AS_IF([$pa_add_inet_ntop],
|
||||||
then
|
[AC_SEARCH_LIBS(inet_ntoa, [nsl resolv], ,
|
||||||
AC_SEARCH_LIBS(inet_ntoa, [nsl resolv], ,
|
[AC_MSG_ERROR(inet_ntoa not found)])])
|
||||||
[AC_MSG_ERROR(inet_ntoa not found)])
|
|
||||||
fi
|
|
||||||
AC_SEARCH_LIBS(inet_aton, [nsl resolv], ,[AC_MSG_ERROR(inet_aton not found)])
|
AC_SEARCH_LIBS(inet_aton, [nsl resolv], ,[AC_MSG_ERROR(inet_aton not found)])
|
||||||
|
|
||||||
AC_CHECK_FUNCS(daemon, , [XTRA=true; AC_LIBOBJ(daemon)])
|
PA_SEARCH_LIBS_AND_ADD(daemon)
|
||||||
AC_CHECK_FUNCS(dup2, , [XTRA=true; AC_LIBOBJ(dup2)])
|
PA_SEARCH_LIBS_AND_ADD(dup2)
|
||||||
if $XTRA
|
|
||||||
then
|
AS_IF([$XTRA], [XTRALIBS="$OBJROOT/lib/libxtra.a $XTRALIBS"])
|
||||||
XTRALIBS="$OBJROOT/lib/libxtra.a $XTRALIBS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl These libraries apply to the server only
|
dnl These libraries apply to the server only
|
||||||
|
@ -162,31 +166,14 @@ dnl
|
||||||
|
|
||||||
common_libs="$LIBS"
|
common_libs="$LIBS"
|
||||||
|
|
||||||
PA_HEADER_DEFINES(netinet/in.h, int, IPPORT_TFTP)
|
AC_CHECK_DECLS(IPPORT_TFTP)
|
||||||
|
|
||||||
PA_WITH_BOOL(tcpwrappers, 1,
|
PA_ARG_DISABLED([tcpwrappers],
|
||||||
[ --without-tcpwrappers disable tcpwrapper permissions checking],
|
[disable tcpwrapper permissions checking], [],
|
||||||
[
|
[
|
||||||
AC_SEARCH_LIBS(yp_get_default_domain, [nsl resolv])
|
AC_SEARCH_LIBS(yp_get_default_domain, [nsl resolv])
|
||||||
PA_HAVE_TCPWRAPPERS
|
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"
|
TFTPD_LIBS="$LIBS $XTRALIBS"
|
||||||
LIBS="$common_libs"
|
LIBS="$common_libs"
|
||||||
|
@ -198,10 +185,10 @@ dnl
|
||||||
AH_TEMPLATE([WITH_READLINE],
|
AH_TEMPLATE([WITH_READLINE],
|
||||||
[Define if we are compiling with readline/editline command-line editing.])
|
[Define if we are compiling with readline/editline command-line editing.])
|
||||||
|
|
||||||
PA_WITH_BOOL(readline, 1,
|
PA_ARG_DISABLED([readline],
|
||||||
[ --without-readline disable the use of readline command-line editing],
|
[disable the use of readline command-line editing], [],
|
||||||
[
|
[
|
||||||
AC_CHECK_HEADER(readline/readline.h,
|
AC_CHECK_HEADER(readline/readline.h,
|
||||||
[
|
[
|
||||||
dnl readline may need libtermcap or somesuch...
|
dnl readline may need libtermcap or somesuch...
|
||||||
AC_SEARCH_LIBS(tputs, [termcap terminfo])
|
AC_SEARCH_LIBS(tputs, [termcap terminfo])
|
||||||
|
@ -226,23 +213,17 @@ LIBS="$common_libs"
|
||||||
dnl
|
dnl
|
||||||
dnl Check for IPV6 and disable-ipv6
|
dnl Check for IPV6 and disable-ipv6
|
||||||
dnl
|
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_CHECK_MEMBERS(struct sockaddr_in6.sin6_addr)
|
||||||
|
AC_MSG_CHECKING([for IPv6 support])
|
||||||
|
PA_ARG_DISABLED([ipv6],
|
||||||
|
[disable support for IPv6],
|
||||||
|
[AC_MSG_RESULT(disabled)],
|
||||||
|
[AS_IF([test x"$ac_cv_member_struct_sockaddr_in6_sin6_addr$ac_cv_member_struct_addrinfo_ai_addr" = xyesyes],
|
||||||
|
[AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_IPV6, 1, [define if IPv6 support is enabled])],
|
||||||
|
[AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_WARN([*** we do not have required IPv6 structs - IPv6 will be disabled])])])
|
||||||
|
|
||||||
AC_SUBST(SRCROOT)
|
AC_SUBST(SRCROOT)
|
||||||
AC_SUBST(OBJROOT)
|
AC_SUBST(OBJROOT)
|
||||||
|
@ -265,6 +246,29 @@ AC_PROG_INSTALL
|
||||||
INSTALL='\${SRCROOT}'/"$INSTALL"
|
INSTALL='\${SRCROOT}'/"$INSTALL"
|
||||||
fi]
|
fi]
|
||||||
|
|
||||||
AC_CONFIG_HEADERS(aconfig.h)
|
PA_ADD_CFLAGS(-W)
|
||||||
AC_CONFIG_FILES([MCONFIG])
|
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(-fno-strict-aliasing)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Test compiler features. On some compilers, this can be affected
|
||||||
|
dnl by -Werror options, so run this *after* those options are added.
|
||||||
|
dnl
|
||||||
|
PA_CHECK_BAD_STDC_INLINE
|
||||||
|
PA_C_TYPEOF
|
||||||
|
|
||||||
|
AC_CONFIG_HEADERS([config/config.h])
|
||||||
|
AC_CONFIG_FILES([config/MCONFIG])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
SRCROOT = ..
|
SRCROOT = ..
|
||||||
|
|
||||||
-include ../MCONFIG
|
-include ../config/MCONFIG
|
||||||
include ../MRULES
|
include ../MRULES
|
||||||
|
|
||||||
ifeq ($(LIBOBJS),)
|
ifeq ($(LIBOBJS),)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
SRCROOT = ..
|
SRCROOT = ..
|
||||||
VERSION = $(shell cat ../version)
|
VERSION = $(shell cat ../version)
|
||||||
|
|
||||||
-include ../MCONFIG
|
-include ../config/MCONFIG
|
||||||
include ../MRULES
|
include ../MRULES
|
||||||
|
|
||||||
OBJS = tftp.$(O) main.$(O)
|
OBJS = tftp.$(O) main.$(O)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
SRCROOT = ..
|
SRCROOT = ..
|
||||||
VERSION = $(shell cat ../version)
|
VERSION = $(shell cat ../version)
|
||||||
|
|
||||||
-include ../MCONFIG
|
-include ../config/MCONFIG
|
||||||
include ../MRULES
|
include ../MRULES
|
||||||
|
|
||||||
OBJS = tftpd.$(O) recvfrom.$(O) misc.$(O) $(TFTPDOBJS)
|
OBJS = tftpd.$(O) recvfrom.$(O) misc.$(O) $(TFTPDOBJS)
|
||||||
|
|
|
@ -289,7 +289,7 @@ myrecvfrom(int s, void *buf, int len, unsigned int flags,
|
||||||
myaddr->sa.sa_family = from->sa.sa_family;
|
myaddr->sa.sa_family = from->sa.sa_family;
|
||||||
sa_set_port(myaddr, htons(IPPORT_TFTP));
|
sa_set_port(myaddr, htons(IPPORT_TFTP));
|
||||||
|
|
||||||
return recvfrom(s, buf, len, flags, from, &fromlen);
|
return recvfrom(s, buf, len, flags, &from->sa, &fromlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -185,7 +185,8 @@ static struct rule *read_remap_rules(const char *rulefile)
|
||||||
*/
|
*/
|
||||||
static int lock_file(int fd, int lock_write)
|
static int lock_file(int fd, int lock_write)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_FCNTL) && defined(HAVE_F_SETLK_DEFINITION)
|
(void)lock_write;
|
||||||
|
#if defined(HAVE_FCNTL) && HAVE_DECL_F_SETLK
|
||||||
struct flock fl;
|
struct flock fl;
|
||||||
|
|
||||||
fl.l_type = lock_write ? F_WRLCK : F_RDLCK;
|
fl.l_type = lock_write ? F_WRLCK : F_RDLCK;
|
||||||
|
@ -193,7 +194,7 @@ static int lock_file(int fd, int lock_write)
|
||||||
fl.l_start = 0;
|
fl.l_start = 0;
|
||||||
fl.l_len = 0; /* Whole file */
|
fl.l_len = 0; /* Whole file */
|
||||||
return fcntl(fd, F_SETLK, &fl);
|
return fcntl(fd, F_SETLK, &fl);
|
||||||
#elif defined(HAVE_LOCK_SH_DEFINITION)
|
#elif defined(HAVE_FLOCK) && HAVE_DECL_LOCK_SH && HAVE_DECL_LOCK_EX
|
||||||
return flock(fd, lock_write ? LOCK_EX|LOCK_NB : LOCK_SH|LOCK_NB);
|
return flock(fd, lock_write ? LOCK_EX|LOCK_NB : LOCK_SH|LOCK_NB);
|
||||||
#else
|
#else
|
||||||
return 0; /* Hope & pray... */
|
return 0; /* Hope & pray... */
|
||||||
|
@ -325,7 +326,7 @@ static int split_port(char **ap, char **pp)
|
||||||
enum long_only_options {
|
enum long_only_options {
|
||||||
OPT_VERBOSITY = 256,
|
OPT_VERBOSITY = 256,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{ "ipv4", 0, NULL, '4' },
|
{ "ipv4", 0, NULL, '4' },
|
||||||
{ "ipv6", 0, NULL, '6' },
|
{ "ipv6", 0, NULL, '6' },
|
||||||
|
@ -1246,7 +1247,7 @@ static int set_blksize2(uintmax_t *vp)
|
||||||
static int set_rollover(uintmax_t *vp)
|
static int set_rollover(uintmax_t *vp)
|
||||||
{
|
{
|
||||||
uintmax_t ro = *vp;
|
uintmax_t ro = *vp;
|
||||||
|
|
||||||
if (ro > 65535)
|
if (ro > 65535)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1345,7 +1346,7 @@ static void do_opt(const char *opt, const char *val, char **ap)
|
||||||
nak(EOPTNEG, "Insufficient space for options");
|
nak(EOPTNEG, "Insufficient space for options");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(p, opt, optlen+1);
|
memcpy(p, opt, optlen+1);
|
||||||
p += optlen+1;
|
p += optlen+1;
|
||||||
memcpy(p, retbuf, retlen+1);
|
memcpy(p, retbuf, retlen+1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue