Files
heimdal/cf/roken-frag.m4
Roland C. Dowdeswell cc47c8fa7b Turn on -Wextra -Wno-sign-compare -Wno-unused-paramter and fix issues.
We turn on a few extra warnings and fix the fallout that occurs
when building with --enable-developer.  Note that we get different
warnings on different machines and so this will be a work in
progress.  So far, we have built on NetBSD/amd64 5.99.64 (which
uses gcc 4.5.3) and Ubuntu 10.04.3 LTS (which uses gcc 4.4.3).

Notably, we fixed

	1.  a lot of missing structure initialisers,

	2.  unchecked return values for functions that glibc
	    marks as __attribute__((warn-unused-result)),

	3.  made minor modifications to slc and asn1_compile
	    which can generate code which generates warnings,
	    and

	4.  a few stragglers here and there.

We turned off the extended warnings for many programs in appl/ as
they are nearing the end of their useful lifetime, e.g.  rsh, rcp,
popper, ftp and telnet.

Interestingly, glibc's strncmp() macro needed to be worked around
whereas the function calls did not.

We have not yet tried this on 32 bit platforms, so there will be
a few more warnings when we do.
2012-02-20 19:45:41 +00:00

774 lines
14 KiB
Plaintext

dnl $Id$
dnl
dnl some code to get roken working
dnl
dnl rk_ROKEN(subdir)
dnl
AC_DEFUN([rk_ROKEN], [
AC_REQUIRE([rk_CONFIG_HEADER])
DIR_roken=roken
LIB_roken='$(top_builddir)/$1/libroken.la'
INCLUDES_roken='-I$(top_builddir)/$1 -I$(top_srcdir)/$1'
dnl Checks for programs
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_AWK])
AC_REQUIRE([AC_OBJEXT])
AC_REQUIRE([AC_EXEEXT])
AC_REQUIRE([AC_PROG_LIBTOOL])
AC_REQUIRE([AC_MIPS_ABI])
AC_DEFINE(rk_PATH_DELIM, '/', [Path name delimiter])
dnl C characteristics
AC_REQUIRE([AC_C___ATTRIBUTE__])
AC_REQUIRE([AC_C_INLINE])
AC_REQUIRE([AC_C_CONST])
rk_WFLAGS(-Wall -Wextra -Wno-sign-compare -Wno-unused-parameter -Wmissing-prototypes -Wpointer-arith -Wbad-function-cast -Wmissing-declarations -Wnested-externs)
AC_REQUIRE([rk_DB])
dnl C types
AC_REQUIRE([AC_TYPE_SIZE_T])
AC_HAVE_TYPE([ssize_t],[#include <unistd.h>])
AC_REQUIRE([AC_TYPE_PID_T])
AC_REQUIRE([AC_TYPE_UID_T])
AC_HAVE_TYPE([long long])
AC_REQUIRE([rk_RETSIGTYPE])
dnl Checks for header files.
AC_REQUIRE([AC_HEADER_STDC])
AC_REQUIRE([AC_HEADER_TIME])
AC_CHECK_HEADERS([\
arpa/inet.h \
config.h \
crypt.h \
dirent.h \
errno.h \
err.h \
fcntl.h \
fnmatch.h \
grp.h \
ifaddrs.h \
netinet/in.h \
netinet/in6.h \
netinet/in_systm.h \
netinet6/in6.h \
paths.h \
poll.h \
pwd.h \
rpcsvc/ypclnt.h \
search.h \
shadow.h \
stdint.h \
sys/bswap.h \
sys/ioctl.h \
sys/mman.h \
sys/param.h \
sys/resource.h \
sys/sockio.h \
sys/stat.h \
sys/time.h \
sys/tty.h \
sys/types.h \
sys/uio.h \
sys/utsname.h \
sys/wait.h \
syslog.h \
termios.h \
winsock2.h \
ws2tcpip.h \
unistd.h \
userconf.h \
usersec.h \
util.h \
])
AC_HAVE_TYPE([uintptr_t],[#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif])
dnl Sunpro 5.2 has a vis.h which is something different.
AC_CHECK_HEADERS(vis.h, , , [
#include <vis.h>
#ifndef VIS_SP
#error invis
#endif])
AC_CHECK_HEADERS(netdb.h, , , [AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
])
AC_CHECK_HEADERS(sys/socket.h, , , [AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
])
AC_CHECK_HEADERS(net/if.h, , , [AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif])
AC_CHECK_HEADERS(netinet6/in6_var.h, , , [AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET6_IN6_H
#include <netinet6/in6.h>
#endif
])
AC_CHECK_HEADERS(sys/sysctl.h, , , [AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
])
AC_CHECK_HEADERS(sys/proc.h, , , [AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
])
AC_REQUIRE([CHECK_NETINET_IP_AND_TCP])
AM_CONDITIONAL(have_err_h, test "$ac_cv_header_err_h" = yes)
AM_CONDITIONAL(have_ifaddrs_h, test "$ac_cv_header_ifaddrs_h" = yes)
AM_CONDITIONAL(have_search_h, test "$ac_cv_header_search_h" = yes)
AM_CONDITIONAL(have_vis_h, test "$ac_cv_header_vis_h" = yes)
dnl Check for functions and libraries
AC_FIND_FUNC(socket, socket)
AC_FIND_FUNC(gethostbyname, nsl)
AC_FIND_FUNC(syslog, syslog)
AC_KRB_IPV6
AC_FIND_FUNC(gethostbyname2, inet6 ip6)
rk_RESOLV
AC_BROKEN_SNPRINTF
AC_BROKEN_VSNPRINTF
AC_BROKEN_GLOB
if test "$ac_cv_func_glob_working" != yes; then
AC_LIBOBJ(glob)
fi
AM_CONDITIONAL(have_glob_h, test "$ac_cv_func_glob_working" = yes)
AC_CHECK_FUNCS([ \
asnprintf \
asprintf \
atexit \
cgetent \
getconfattr \
getprogname \
getrlimit \
getspnam \
issetugid \
on_exit \
poll \
random \
setprogname \
strsvis \
strsvisx \
strunvis \
strvis \
strvisx \
svis \
sysconf \
sysctl \
tdelete \
tfind \
twalk \
uname \
unvis \
vasnprintf \
vasprintf \
vis \
])
if test "$ac_cv_func_cgetent" = no; then
AC_LIBOBJ(getcap)
fi
AM_CONDITIONAL(have_cgetent, test "$ac_cv_func_cgetent" = yes)
AC_REQUIRE([AC_FUNC_GETLOGIN])
AC_REQUIRE([AC_FUNC_MMAP])
AC_FIND_FUNC_NO_LIBS(getsockopt,,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif],
[0,0,0,0,0])
AC_FIND_FUNC_NO_LIBS(setsockopt,,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif],
[0,0,0,0,0])
AC_FIND_IF_NOT_BROKEN(hstrerror, resolv,
[#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif],
17)
AC_NEED_PROTO([
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif],
hstrerror)
AC_FOREACH([rk_func], [asprintf vasprintf asnprintf vasnprintf],
[AC_NEED_PROTO([
#include <stdio.h>
#include <string.h>],
rk_func)])
AC_FIND_FUNC_NO_LIBS(bswap16,,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_BSWAP_H
#include <sys/bswap.h>
#endif],0)
AC_FIND_FUNC_NO_LIBS(bswap32,,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_BSWAP_H
#include <sys/bswap.h>
#endif],0)
AC_FIND_FUNC_NO_LIBS(pidfile,util,
[#ifdef HAVE_UTIL_H
#include <util.h>
#endif],0)
AC_FIND_IF_NOT_BROKEN(getaddrinfo,,
[#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif],[0,0,0,0])
AC_FIND_IF_NOT_BROKEN(getnameinfo,,
[#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif],[0,0,0,0,0,0,0])
AC_FIND_IF_NOT_BROKEN(freeaddrinfo,,
[#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif],[0])
AC_FIND_IF_NOT_BROKEN(gai_strerror,,
[#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif],[0])
dnl Darwin is weird, and in some senses not unix, launchd doesn't want
dnl servers to use daemon(), so its deprecated.
case "$host_os" in
darwin*)
;;
*)
AC_DEFINE([SUPPORT_DETACH], 1,
[Define if os support want to detach is daemonens.])
AC_BROKEN([daemon]) ;;
esac
AC_BROKEN([ \
chown \
copyhostent \
closefrom \
ecalloc \
emalloc \
erealloc \
estrdup \
err \
errx \
fchown \
flock \
fnmatch \
freehostent \
getcwd \
getdtablesize \
getegid \
geteuid \
getgid \
gethostname \
getifaddrs \
getipnodebyaddr \
getipnodebyname \
getopt \
gettimeofday \
getuid \
getusershell \
initgroups \
innetgr \
iruserok \
localtime_r \
lstat \
memmove \
mkstemp \
putenv \
rcmd \
readv \
recvmsg \
sendmsg \
setegid \
setenv \
seteuid \
strcasecmp \
strdup \
strerror \
strftime \
strlcat \
strlcpy \
strlwr \
strncasecmp \
strndup \
strnlen \
strptime \
strsep \
strsep_copy \
strtok_r \
strtoll \
strtoull \
strupr \
swab \
tsearch \
timegm \
unsetenv \
verr \
verrx \
vsyslog \
vwarn \
vwarnx \
warn \
warnx \
writev \
])
AM_CONDITIONAL(have_fnmatch_h,
test "$ac_cv_header_fnmatch_h" = yes -a "$ac_cv_func_fnmatch" = yes)
AC_FOREACH([rk_func], [strndup strsep strtok_r],
[AC_NEED_PROTO([#include <string.h>], rk_func)])
AC_CHECK_FUNC([strtoll],
[AC_DEFINE_UNQUOTED(HAVE_STRTOLL, 1,
[Define if you have the function strtoll.])])
AC_CHECK_FUNC([strtoull],
[AC_DEFINE_UNQUOTED(HAVE_STRTOULL, 1,
[Define if you have the function strtoull.])])
AC_FOREACH([rk_func], [strsvis strsvisx strunvis strvis strvisx svis unvis vis],
[AC_NEED_PROTO([#ifdef HAVE_VIS_H
#include <vis.h>
#endif], rk_func)])
AC_MSG_CHECKING([checking for dirfd])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
]],
[[DIR *d = 0; dirfd(d);]])],
[ac_rk_have_dirfd=yes], [ac_rk_have_dirfd=no])
if test "$ac_rk_have_dirfd" = "yes" ; then
AC_DEFINE_UNQUOTED(HAVE_DIRFD, 1, [have a dirfd function/macro])
fi
AC_MSG_RESULT($ac_rk_have_dirfd)
AC_HAVE_STRUCT_FIELD(DIR, dd_fd, [#include <sys/types.h>
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif])
AC_BROKEN2(inet_aton,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif],
[0,0])
AC_BROKEN2(inet_ntop,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif],
[0, 0, 0, 0])
AC_BROKEN2(inet_pton,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif],
[0,0,0])
dnl
dnl Check for sa_len in struct sockaddr,
dnl needs to come before the getnameinfo test
dnl
AC_HAVE_STRUCT_FIELD(struct sockaddr, sa_len, [#include <sys/types.h>
#include <sys/socket.h>])
if test "$ac_cv_func_getaddrinfo" = "yes"; then
rk_BROKEN_GETADDRINFO
if test "$ac_cv_func_getaddrinfo_numserv" = no; then
AC_LIBOBJ(getaddrinfo)
AC_LIBOBJ(freeaddrinfo)
fi
fi
AC_NEED_PROTO([#include <stdlib.h>], setenv)
AC_NEED_PROTO([#include <stdlib.h>], unsetenv)
AC_NEED_PROTO([#include <unistd.h>], gethostname)
AC_NEED_PROTO([#include <unistd.h>], mkstemp)
AC_NEED_PROTO([#include <unistd.h>], getusershell)
AC_NEED_PROTO([#include <unistd.h>], daemon)
AC_NEED_PROTO([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif],
iruserok)
AC_NEED_PROTO([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif],
inet_aton)
AC_FIND_FUNC_NO_LIBS(crypt, crypt)dnl
AC_REQUIRE([rk_BROKEN_REALLOC])dnl
dnl AC_KRB_FUNC_GETCWD_BROKEN
dnl strerror_r is great fun, on linux it exists before sus catched up,
dnl so the return type is diffrent, lets check for both
AC_PROTO_COMPAT([
#include <stdio.h>
#include <string.h>
],
strerror_r, int strerror_r(int, char *, size_t))
AC_CHECK_FUNC([strerror_r],
[AC_DEFINE_UNQUOTED(HAVE_STRERROR_R, 1,
[Define if you have the function strerror_r.])])
dnl
dnl Checks for prototypes and declarations
dnl
AC_PROTO_COMPAT([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
],
gethostbyname, struct hostent *gethostbyname(const char *))
AC_PROTO_COMPAT([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
],
gethostbyaddr, struct hostent *gethostbyaddr(const void *, size_t, int))
AC_PROTO_COMPAT([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
],
getservbyname, struct servent *getservbyname(const char *, const char *))
AC_PROTO_COMPAT([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
],
getsockname, int getsockname(int, struct sockaddr*, socklen_t*))
AC_PROTO_COMPAT([
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
#endif
],
openlog, void openlog(const char *, int, int))
AC_NEED_PROTO([
#ifdef HAVE_CRYPT_H
#include <crypt.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
],
crypt)
dnl variables
rk_CHECK_VAR(h_errno,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
])
rk_CHECK_VAR(h_errlist,
[#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
rk_CHECK_VAR(h_nerr,
[#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
rk_CHECK_VAR([__progname],
[#ifdef HAVE_ERR_H
#include <err.h>
#endif])
AC_CHECK_DECLS([optarg, optind, opterr, optopt, environ],[],[],[
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif])
dnl
dnl Check for fields in struct tm
dnl
AC_HAVE_STRUCT_FIELD(struct tm, tm_gmtoff, [#include <time.h>])
AC_HAVE_STRUCT_FIELD(struct tm, tm_zone, [#include <time.h>])
dnl
dnl or do we have a variable `timezone' ?
dnl
rk_CHECK_VAR(timezone,[#include <time.h>])
rk_CHECK_VAR(altzone,[#include <time.h>])
AC_HAVE_TYPE([sa_family_t],[
#include <sys/types.h>
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
AC_HAVE_TYPE([socklen_t],[
#include <sys/types.h>
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
AC_HAVE_TYPE([struct sockaddr], [
#include <sys/types.h>
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
AC_HAVE_TYPE([struct sockaddr_storage], [
#include <sys/types.h>
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
AC_HAVE_TYPE([struct addrinfo], [
#include <sys/types.h>
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
AC_HAVE_TYPE([struct ifaddrs], [#include <ifaddrs.h>])
AC_HAVE_TYPE([struct iovec],[
#include <sys/types.h>
#include <sys/uio.h>
])
AC_HAVE_TYPE([struct msghdr],[
#include <sys/types.h>
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif])
dnl
dnl Check for struct winsize
dnl
AC_KRB_STRUCT_WINSIZE
dnl
dnl Check for struct spwd
dnl
AC_KRB_STRUCT_SPWD
#
# Check if we want samba's socket wrapper
#
samba_SOCKET_WRAPPER
dnl won't work with automake
dnl moved to AC_OUTPUT in configure.in
dnl AC_CONFIG_FILES($1/Makefile)
LIB_roken="${LIB_roken} \$(LIB_crypt) \$(LIB_dbopen)"
AC_SUBST(DIR_roken)dnl
AC_SUBST(LIB_roken)dnl
AC_SUBST(INCLUDES_roken)dnl
])