dnl Process this file with autoconf to produce a configure script. AC_INIT(src/ircd.c) if test $# = 0; then echo "You might want to run ./Config or provide some parameters to this script." echo "./configure --help for information about this script" exit 0 fi AC_CONFIG_HEADER(include/setup.h) AC_PROG_CC if test "$ac_cv_prog_gcc" = "yes"; then CFLAGS="$CFLAGS -funsigned-char" AC_CACHE_CHECK(if gcc has a working -pipe, ac_cv_pipe, [ save_cflags="$CFLAGS" CFLAGS="$CFLAGS -pipe" AC_TRY_COMPILE(,, ac_cv_pipe="yes", ac_cv_pipe="no") CFLAGS="$save_cflags" ]) if test "$ac_cv_pipe" = "yes"; then CFLAGS="-pipe $CFLAGS" fi fi dnl (the gcc flag detection trick is taken from xemacs/Vin Shelton) dnl UnrealIRCd might not be strict-aliasing safe at this time case "`$CC -v --help 2>&1`" in *-fstrict-aliasing* ) CFLAGS="$CFLAGS -fno-strict-aliasing" ;; esac dnl Pointer signedness warnings are really a pain and 99.9% of the time dnl they are of absolutely no use whatsoever. IMO the person who decided dnl to enable this without -Wall should be shot on sight. case "`$CC -v --help 2>&1`" in *-Wpointer-sign* ) CFLAGS="$CFLAGS -Wno-pointer-sign" ;; esac AC_PATH_PROG(RM,rm) AC_PATH_PROG(CP,cp) AC_PATH_PROG(TOUCH,touch) AC_PATH_PROG(OPENSSLPATH,openssl) AC_PATH_PROG(INSTALL,install) AC_CHECK_PROG(MAKER, gmake, gmake, make) AC_PATH_PROG(GMAKE,gmake) AC_PATH_PROG(GUNZIP, gunzip) AC_PATH_PROG(PKGCONFIG, pkg-config) dnl Checks for libraries. AC_CHECK_LIB(descrypt, crypt, [AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-ldescrypt " MKPASSWDLIBS="-ldescrypt"], AC_CHECK_LIB(crypt, crypt,[ AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-lcrypt " MKPASSWDLIBS="-lcrypt"])) AC_CHECK_LIB(socket, socket,IRCDLIBS="$IRCDLIBS-lsocket " SOCKLIB="-lsocket") AC_CHECK_LIB(nsl, inet_ntoa,IRCDLIBS="$IRCDLIBS-lnsl " INETLIB="-lnsl") AC_SUBST(IRCDLIBS) AC_SUBST(MKPASSWDLIBS) dnl module checking based on Hyb7's module checking code AC_DEFUN([AC_ENABLE_DYN], [ AC_CHECK_FUNC(dlopen,, [AC_CHECK_LIB(dl, dlopen,IRCDLIBS="$IRCDLIBS -ldl", [ AC_MSG_WARN(Dynamic linking is not enabled because dlopen was not found) AC_DEFINE(STATIC_LINKING) ])]) hold_cflags=$CFLAGS CFLAGS="$CFLAGS -export-dynamic" AC_CACHE_CHECK(if we need the -export-dynamic flag, ac_cv_export_dynamic, [ AC_TRY_LINK(, [int i];, ac_cv_export_dynamic=yes, ac_cv_export_dynamic=no)]) if test "$ac_cv_export_dynamic" = "no"; then CFLAGS=$hold_cflags fi AC_CACHE_CHECK(for compiler option to produce PIC,ac_cv_pic,[ if test "$ac_cv_prog_gcc" = "yes"; then ac_cv_pic="-fPIC -DPIC -shared" case `uname -s` in Darwin*[)] ac_cv_pic="-bundle -flat_namespace -undefined suppress" ;; HP-UX*[)] ac_cv_pic="-fPIC" ;; esac else case `uname -s` in SunOS*[)] ac_cv_pic="-KPIC -DPIC -G" ;; esac fi ]) AC_CACHE_CHECK(if your system prepends an underscore on symbols,ac_cv_underscore,[ cat >uscore.c << __EOF__ int main() { return 0; } __EOF__ $CC -o uscore $CFLAGS uscore.c 1>&5 if test -z "`strings -a uscore |grep '^_main$'`"; then ac_cv_underscore=no else ac_cv_underscore=yes fi rm -f uscore uscore.c ]) if test "$ac_cv_underscore" = "yes"; then AC_DEFINE(UNDERSCORE) fi MODULEFLAGS=$ac_cv_pic AC_DEFINE(DYNAMIC_LINKING) ]) AC_DEFUN([AC_ENABLE_INET6],[ AC_CACHE_CHECK(if your system has IPv6 support, ac_cv_ip6, [ save_libs="$LIBS" LIBS="$LIBS $SOCKLIB" AC_TRY_RUN([ #include #include int main() { if (socket(AF_INET6, SOCK_STREAM, 0) < 0) exit(1); exit(0); } ], ac_cv_ip6=yes, ac_cv_ip6=no) ]) if test "$ac_cv_ip6" = "no"; then AC_MSG_WARN(Your system does not support IPv6 so it will not be enabled) else AC_DEFINE(INET6) dnl in6addr_any detection code taken from ratbox AC_MSG_CHECKING([for struct in6addr_any]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#define IN_AUTOCONF #include #include #include ]], [[struct in6_addr a = in6addr_any;]] )], [AC_MSG_RESULT(yes)], [ AC_MSG_RESULT(no) AC_DEFINE(NO_IN6ADDR_ANY) ] ) fi LIBS="$save_libs" ]) AC_CHECK_HEADER(sys/param.h,AC_DEFINE(PARAMH)) AC_CHECK_HEADER(stdlib.h,AC_DEFINE(STDLIBH)) AC_CHECK_HEADER(stddef.h,AC_DEFINE(STDDEFH)) AC_CHECK_HEADER(sys/syslog.h,AC_DEFINE(SYSSYSLOGH)) AC_CHECK_HEADER(unistd.h,AC_DEFINE(UNISTDH)) AC_CHECK_HEADER(string.h,AC_DEFINE(STRINGH)) AC_CHECK_HEADER(strings.h,AC_DEFINE(STRINGSH)) AC_CHECK_HEADER(malloc.h,AC_DEFINE(MALLOCH,)) AC_CHECK_HEADER(sys/rusage.h,AC_DEFINE(RUSAGEH)) AC_CHECK_HEADER(glob.h,AC_DEFINE(GLOBH)) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_HEADER_TIME AC_STRUCT_TM AC_TYPE_UID_T unreal_CHECK_TYPE_SIZES AC_CACHE_CHECK(what kind of nonblocking sockets you have, ac_cv_nonblocking,[ save_libs="$LIBS" LIBS="$LIBS $SOCKLIB" AC_TRY_RUN([ #include #include #include #include #include #include alarmed() { exit(1); } int main() { #ifdef O_NONBLOCK char b[12], x[32]; int f, l = sizeof(x); f = socket(AF_INET, SOCK_DGRAM, 0); if (f >= 0 && !(fcntl(f, F_SETFL, O_NONBLOCK))) { signal(SIGALRM, alarmed); alarm(3); recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l); alarm(0); exit(0); } #endif exit(1); } ],ac_cv_nonblocking=O_NONBLOCK,[ AC_TRY_RUN([ #include #include #include #include #include #include alarmed() { exit(0); } int main() { #ifdef O_NDELAY char b[12], x[32]; int f, l = sizeof(x); f = socket(AF_INET, SOCK_DGRAM, 0); if (f >= 0 && !(fcntl(f, F_SETFL, O_NDELAY))) { signal(SIGALRM, alarmed); alarm(3); recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l); alarm(0); exit(0); } #endif exit(1); }],ac_cv_nonblocking=O_NDELAY,[ AC_TRY_RUN([ #include #include #include #include #include #include alarmed() { exit(1); } int main() { #ifdef FIONBIO char b[12], x[32]; int f, l = sizeof(x); f = socket(AF_INET, SOCK_DGRAM, 0); if (f >= 0 && !(fcntl(f, F_SETFL, FIONBIO))) { signal(SIGALRM, alarmed); alarm(3); recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l); alarm(0); exit(0); } #endif exit(1); ], ac_cv_nonblocking=FIONBIO,ac_cv_nonblocking=none)])])]) if test "$ac_cv_nonblocking" = "O_NONBLOCK"; then AC_DEFINE(NBLOCK_POSIX) elif test "$ac_cv_nonblocking" = "O_NDELAY"; then AC_DEFINE(NBLOCK_BSD) elif test "$ac_cv_nonblocking" = "FIONBIO"; then AC_DEFINE(NBLOCK_SYSV) fi LIBS="$save_libs" dnl Checks for library functions. AC_PROG_GCC_TRADITIONAL AC_FUNC_SETPGRP AC_FUNC_SETVBUF_REVERSED AC_FUNC_ALLOCA AC_CHECK_FUNCS(snprintf,AC_DEFINE(HAVE_SNPRINTF)) AC_CHECK_FUNCS(vsnprintf,AC_DEFINE(HAVE_VSNPRINTF)) AC_CHECK_FUNCS(strlcpy, AC_DEFINE(HAVE_STRLCPY)) AC_CHECK_FUNCS(strlcat, AC_DEFINE(HAVE_STRLCAT)) AC_CHECK_FUNCS(strlncat, AC_DEFINE(HAVE_STRLNCAT)) AC_CHECK_FUNCS(inet_pton, AC_DEFINE(HAVE_INET_PTON)) AC_CHECK_FUNCS(inet_ntop, AC_DEFINE(HAVE_INET_NTOP)) dnl Check if it supports C99 style variable length arrays AC_CACHE_CHECK(if C99 variable length arrays are supported, ac_cv_varlen_arrays, [ AC_TRY_COMPILE(,[ int main() { int i = 5; int a[i]; a[0] = 1; return 0; }], ac_cv_varlen_arrays=yes, ac_cv_varlen_arrays=no) ]) if test "$ac_cv_varlen_arrays" = "yes" ; then AC_DEFINE(HAVE_C99_VARLEN_ARRAY) fi AC_CACHE_CHECK(if we can set the core size to unlimited, ac_cv_force_core,[ AC_TRY_RUN([ #include #include #include int main() { struct rlimit corelim; corelim.rlim_cur = corelim.rlim_max = RLIM_INFINITY; if (setrlimit(RLIMIT_CORE, &corelim)) exit(1); exit(0); } ],ac_cv_force_core=yes,ac_cv_force_core=no) ]) if test "$ac_cv_force_core" = "yes"; then AC_DEFINE(FORCE_CORE) fi AC_FUNC_VPRINTF AC_CHECK_FUNCS(gettimeofday,AC_DEFINE(GETTIMEOFDAY),[AC_CHECK_FUNCS(lrand48,AC_DEFINE(LRADN48))]) AC_CHECK_FUNCS(getrusage,AC_DEFINE(GETRUSAGE_2),[AC_CHECK_FUNCS(times,AC_DEFINE(TIMES_2))]) AC_CHECK_FUNCS(setproctitle,AC_DEFINE(HAVE_SETPROCTITLE),[ AC_CHECK_LIB(util,setproctitle,AC_DEFINE(HAVE_SETPROCTITLE) IRCDLIBS="$IRCDLIBS-lutil",[ AC_EGREP_HEADER([#define.*PS_STRINGS.*],sys/exec.h,AC_DEFINE(HAVE_PSSTRINGS),[ AC_CHECK_FUNCS(pstat,AC_DEFINE(HAVE_PSTAT)) ]) ]) ]) AC_CACHE_CHECK(what type of signals you have, ac_cv_sigtype, [ AC_TRY_RUN([ #include int main() { sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L); } ], ac_cv_sigtype=POSIX, [ AC_TRY_RUN([ #include int calls = 0; void handler() { if (calls) return; calls++; kill(getpid(), SIGTERM); sleep(1); } int main() { signal(SIGTERM, handler); kill(getpid(), SIGTERM); exit(0); } ], ac_cv_sigtype=BSD,ac_cv_sigtype=SYSV)])]) if test "$ac_cv_sigtype" = "POSIX"; then AC_DEFINE(POSIX_SIGNALS) elif test "$ac_cv_sigtype" = "BSD"; then AC_DEFINE(BSD_RELIABLE_SIGNALS) else AC_DEFINE(SYSV_UNRELIABLE_SIGNALS) fi AC_CHECK_FUNCS(strtoken,,AC_DEFINE(NEED_STRTOKEN)) AC_CHECK_FUNCS(strtok,,AC_DEFINE(NEED_STRTOK)) AC_CHECK_FUNCS(strerror,,AC_DEFINE(NEED_STRERROR)) AC_CHECK_FUNCS(index,,AC_DEFINE(NOINDEX)) AC_CHECK_FUNCS(strtoul,,STRTOUL="strtoul.o") AC_CHECK_FUNCS(bcopy,,AC_DEFINE(NEED_BCOPY)) AC_CHECK_FUNCS(bcmp,,AC_DEFINE(NEED_BCMP)) AC_CHECK_FUNCS(bzero,,AC_DEFINE(NEED_BZERO)) AC_CHECK_FUNCS(strcasecmp,AC_DEFINE(GOT_STRCASECMP)) save_libs="$LIBS" LIBS="$LIBS $SOCKLIB $INETLIB" AC_CHECK_FUNCS(inet_addr,,AC_DEFINE(NEED_INET_ADDR)) AC_CHECK_FUNCS(inet_ntoa,,AC_DEFINE(NEED_INET_NTOA)) AC_CHECK_FUNCS(inet_netof,,AC_DEFINE(NEED_INET_NETOF)) LIBS="$save_libs" AC_CHECK_FUNCS(syslog,AC_DEFINE(HAVE_SYSLOG)) AC_CHECK_FUNCS(vsyslog,AC_DEFINE(HAVE_VSYSLOG)) AC_SUBST(STRTOUL) AC_SUBST(CRYPTOLIB) AC_SUBST(MODULEFLAGS) AC_ARG_WITH(listen, [AC_HELP_STRING([--with-listen=backlog],[Specify the listen backlog value])], AC_DEFINE_UNQUOTED(LISTEN_SIZE,$withval),AC_DEFINE(LISTEN_SIZE,5)) AC_ARG_WITH(nick-history, [AC_HELP_STRING([--with-nick-history=length],[Specify the length of the nickname history])], AC_DEFINE_UNQUOTED(NICKNAMEHISTORYLENGTH,$withval), AC_DEFINE(NICKNAMEHISTORYLENGTH,2000)) AC_ARG_WITH(sendq, [AC_HELP_STRING([--with-sendq=maxsendq],[Specify the max sendq for the server])], AC_DEFINE_UNQUOTED(MAXSENDQLENGTH,$withval),AC_DEFINE(MAXSENDQLENGTH,3000000)) AC_ARG_WITH(bufferpool, [AC_HELP_STRING([--with-bufferpool=size],[Specify the size of the buffer pool])], AC_DEFINE_UNQUOTED(BUFFERPOOL,[($withval * MAXSENDQLENGTH)]),AC_DEFINE(BUFFERPOOL,[(18 * MAXSENDQLENGTH)])) AC_ARG_WITH(hostname, [AC_HELP_STRING([--with-hostname=host],[Specify the local hostname of the server])], AC_DEFINE_UNQUOTED(DOMAINNAME,"$withval"),AC_DEFINE_UNQUOTED(DOMAINNAME,"`hostname`")) AC_DEFINE_UNQUOTED(MYOSNAME,"`uname -a`") AC_ARG_WITH(permissions, [AC_HELP_STRING([--with-permissions=permissions],[Specify the default permissions for configuration files])], AC_DEFINE_UNQUOTED(DEFAULT_PERMISSIONS,$withval), AC_DEFINE(DEFAULT_PERMISSIONS, 0600)) AC_ARG_WITH(dpath, [AC_HELP_STRING([--with-dpath=path],[Specify the path where configuration files are stored])], AC_DEFINE_UNQUOTED(DPATH, "$withval") IRCDDIR="$withval", AC_DEFINE_UNQUOTED(DPATH,"`pwd`") IRCDDIR="`pwd`") AC_ARG_WITH(fd-setsize, [AC_HELP_STRING([--with-fd-setsize=size],[Specify the max file descriptors to use])], ac_fd=$withval, ac_fd=1024) AC_DEFINE_UNQUOTED(MAXCONNECTIONS, $ac_fd) AC_ARG_WITH(spath, [AC_HELP_STRING([--with-spath],[Specify the location of the executable])], AC_DEFINE_UNQUOTED(SPATH,"$withval") BINDIR="$withval",AC_DEFINE_UNQUOTED(SPATH,"`pwd`/src/ircd") BINDIR="`pwd`/src/ircd") AC_ARG_ENABLE(nospoof, [AC_HELP_STRING([--enable-nospoof],[Enable spoofing protection])], AC_DEFINE(NOSPOOF)) AC_ARG_ENABLE(prefixaq, [AC_HELP_STRING([--enable-prefixaq],[Enable chanadmin and chanowner prefixes])], AC_DEFINE(PREFIX_AQ)) AC_ARG_ENABLE(hub, [AC_HELP_STRING([--enable-hub],[Compile as a hub server])], AC_DEFINE(HUB)) AC_ARG_WITH(showlistmodes, [AC_HELP_STRING([--with-showlistmodes], [Specify whether modes are shown in /list])], AC_DEFINE(LIST_SHOW_MODES)) AC_ARG_WITH(topicisnuhost, [AC_HELP_STRING([--with-topicisnuhost], [Display nick!user@host as the topic setter])], AC_DEFINE(TOPIC_NICK_IS_NUHOST)) AC_ARG_WITH(shunnotices, [AC_HELP_STRING([--with-shunnotices], [Notify a user when he/she is no longer shunned])], AC_DEFINE(SHUN_NOTICES)) AC_ARG_WITH(no-operoverride, [AC_HELP_STRING([--with-no-operoverride], [Disable OperOverride])], AC_DEFINE(NO_OPEROVERRIDE)) AC_ARG_WITH(disableusermod, [AC_HELP_STRING([--with-disableusermod], [Disable /set* and /chg*])], AC_DEFINE(DISABLE_USERMOD)) AC_ARG_WITH(operoverride-verify, [AC_HELP_STRING([--with-operoverride-verify], [Require opers to invite themselves to +s/+p channels])], AC_DEFINE(OPEROVERRIDE_VERIFY)) CHECK_SSL CHECK_ZLIB CHECK_LIBCURL AC_ARG_ENABLE(dynamic-linking, [AC_HELP_STRING([--enable-dynamic-linking],[Make the IRCd dynamically link shared objects rather than statically])], [AC_ENABLE_DYN], [AC_DEFINE(STATIC_LINKING)]) AC_ARG_ENABLE(inet6, [AC_HELP_STRING([--enable-inet6],[Make the IRCd support IPv6])], [AC_ENABLE_INET6]) AC_SUBST(IRCDDIR) AC_SUBST(BINDIR) AC_MSG_CHECKING(if FD_SETSIZE is large enough to allow $ac_fd file descriptors) AC_TRY_RUN([ #include #include int main() { if (FD_SETSIZE >= $ac_fd) exit(0); exit(1); } ], AC_MSG_RESULT(yes), [ FD_SETSIZE="-DFD_SETSIZE=$ac_fd" AC_MSG_RESULT(no) ]) AC_SUBST(FD_SETSIZE) case `uname -s` in *SunOS*) CFLAGS="$CFLAGS -D_SOLARIS" IRCDLIBS="$IRCDLIBS -lresolv " ;; *solaris*) CFLAGS="$CFLAGS -D_SOLARIS" IRCDLIBS="$IRCDLIBS -lresolv " ;; esac dnl REMEMBER TO CHANGE WITH A NEW TRE RELEASE! tre_version="0.7.2" AC_MSG_RESULT(extracting TRE regex library) cur_dir=`pwd` cd extras dnl remove old tre directory to force a recompile... rm -rf tre-$tre_version if test "x$ac_cv_path_GUNZIP" = "x" ; then tar xfz tre.tar.gz else cp tre.tar.gz tre.tar.gz.bak gunzip -f tre.tar.gz cp tre.tar.gz.bak tre.tar.gz tar xf tre.tar fi AC_MSG_RESULT(configuring TRE regex library) cd tre-$tre_version ./configure --disable-agrep --disable-shared --disable-system-abi --disable-wchar --disable-multibyte --prefix=$cur_dir/extras/regexp || exit 1 AC_MSG_RESULT(compiling TRE regex library) $ac_cv_prog_MAKER || exit 1 AC_MSG_RESULT(installing TRE regex library) $ac_cv_prog_MAKER install || exit 1 TREINCDIR="$cur_dir/extras/regexp/include" AC_SUBST(TREINCDIR) if test "x$ac_cv_path_PKGCONFIG" = "x" ; then TRELIBS="-L../extras/regexp/lib -ltre" else TRELIBS=`$ac_cv_path_PKGCONFIG --libs tre.pc` fi AC_SUBST(TRELIBS) cd $cur_dir dnl REMEMBER TO CHANGE WITH A NEW C-ARES RELEASE! cares_version="1.3.0" AC_MSG_RESULT(extracting c-ares resolver library) cur_dir=`pwd` cd extras dnl remove old c-ares directory to force a recompile... rm -rf c-ares-$cares_version if test "x$ac_cv_path_GUNZIP" = "x" ; then tar xfz c-ares.tar.gz else cp c-ares.tar.gz c-ares.tar.gz.bak gunzip -f c-ares.tar.gz cp c-ares.tar.gz.bak c-ares.tar.gz tar xf c-ares.tar fi AC_MSG_RESULT(configuring c-ares library) cd c-ares-$cares_version ./configure --prefix=$cur_dir/extras/c-ares || exit 1 AC_MSG_RESULT(compiling c-ares resolver library) $ac_cv_prog_MAKER || exit 1 AC_MSG_RESULT(installing c-ares resolver library) $ac_cv_prog_MAKER install || exit 1 CARESINCDIR="$cur_dir/extras/c-ares/include" AC_SUBST(CARESINCDIR) CARESLIBDIR="-L../extras/c-ares/lib" AC_SUBST(CARESLIBDIR) CARESLIBS="-lcares" AC_SUBST(CARESLIBS) cd $cur_dir AC_OUTPUT(Makefile src/modules/Makefile unreal ircdcron/ircdchk) chmod 0700 unreal chmod 0700 ircdcron/ircdchk