mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-29 00:06:38 +02:00
d085fb09c1
to control synchronization of the +beI setter across server links
(that is, the feature just introduced one commit ago):
set {
topic-setter [nick|nick-user-host]; /* nick = default */
ban-setter [nick|nick-user-host]; /* nick = default */
ban-setter-sync [yes|no]; /* yes = default */
};
This also means that --with-topicisnuhost / TOPIC_NICK_IS_NUHOST
is now removed, since this now goes via set::topic-setter.
Also, moved the "first" PROTOCTL from include/common.h to send_proto()
in src/s_serv.c so the bunch of PROTOCTL lines is all in one place
(and so I could conditionally send SJSBY).
Ok, it's not entirely all in one place, PROTOCTL EAUTH is still sent
at another place (early, duh), but still..
977 lines
36 KiB
Plaintext
977 lines
36 KiB
Plaintext
dnl Process this file with autoconf to produce a configure script.
|
|
|
|
dnl When updating the version, remember to update the following files
|
|
dnl appropriately:
|
|
dnl
|
|
dnl include/win32/setup.h
|
|
dnl src/win32/unrealinst.iss
|
|
dnl .CHANGES.NEW
|
|
dnl src/version.c.SH
|
|
|
|
AC_INIT([unrealircd], [4.2.2-dev], [https://bugs.unrealircd.org/], [], [https://unrealircd.org/])
|
|
AC_CONFIG_SRCDIR([src/ircd.c])
|
|
AC_CONFIG_HEADER([include/setup.h])
|
|
AC_CONFIG_AUX_DIR([autoconf])
|
|
AC_CONFIG_MACRO_DIR([autoconf/m4])
|
|
|
|
if test "x$enable_dynamic_linking" = "x"; then
|
|
echo "Please use ./Config instead of ./configure"
|
|
exit 1
|
|
fi
|
|
|
|
dnl Save CFLAGS, use this when building the libraries like c-ares
|
|
orig_cflags="$CFLAGS"
|
|
|
|
dnl Save build directory early on (used in our m4 macros too)
|
|
BUILDDIR="`pwd`"
|
|
AC_SUBST(BUILDDIR)
|
|
|
|
dnl Calculate the versions. Perhaps the use of expr is a little too extravagant
|
|
# Generation version number (e.g.: X in X.Y.Z)
|
|
UNREAL_VERSION_GENERATION=["4"]
|
|
AC_DEFINE_UNQUOTED([UNREAL_VERSION_GENERATION], [$UNREAL_VERSION_GENERATION], [Generation version number (e.g.: X for X.Y.Z)])
|
|
|
|
# Major version number (e.g.: Y in X.Y.Z)
|
|
UNREAL_VERSION_MAJOR=["2"]
|
|
AC_DEFINE_UNQUOTED([UNREAL_VERSION_MAJOR], [$UNREAL_VERSION_MAJOR], [Major version number (e.g.: Y for X.Y.Z)])
|
|
|
|
# Minor version number (e.g.: Z in X.Y.Z)
|
|
UNREAL_VERSION_MINOR=["2"]
|
|
AC_DEFINE_UNQUOTED([UNREAL_VERSION_MINOR], [$UNREAL_VERSION_MINOR], [Minor version number (e.g.: Z for X.Y.Z)])
|
|
|
|
# The version suffix such as a beta marker or release candidate
|
|
# marker. (e.g.: -rcX for unrealircd-3.2.9-rcX). This macro is a
|
|
# string instead of an integer because it contains arbitrary data.
|
|
UNREAL_VERSION_SUFFIX=["-dev"]
|
|
AC_DEFINE_UNQUOTED([UNREAL_VERSION_SUFFIX], ["$UNREAL_VERSION_SUFFIX"], [Version suffix such as a beta marker or release candidate marker. (e.g.: -rcX for unrealircd-3.2.9-rcX)])
|
|
|
|
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 UnrealIRCd might not be strict-aliasing safe at this time
|
|
AC_CACHE_CHECK(if the compiler has a working -fno-strict-aliasing, ac_cv_nsa, [
|
|
save_cflags="$CFLAGS"
|
|
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
AC_TRY_COMPILE(,, ac_cv_nsa="yes", ac_cv_nsa="no")
|
|
CFLAGS="$save_cflags"
|
|
])
|
|
if test "$ac_cv_nsa" = "yes"; then
|
|
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
fi
|
|
|
|
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.
|
|
AC_CACHE_CHECK(if the compiler has a working -Wno-pointer-sign, ac_cv_nps, [
|
|
save_cflags="$CFLAGS"
|
|
CFLAGS="$CFLAGS -Wno-pointer-sign"
|
|
AC_TRY_COMPILE(,, ac_cv_nps="yes", ac_cv_nps="no")
|
|
CFLAGS="$save_cflags"
|
|
])
|
|
if test "$ac_cv_nps" = "yes"; then
|
|
CFLAGS="$CFLAGS -Wno-pointer-sign"
|
|
fi
|
|
|
|
dnl This is purely for charsys.c... I like it so we can easily read
|
|
dnl this for non-utf8. We can remove it once we ditch non-utf8 some day
|
|
dnl of course, or decide to ignore me and encode them.
|
|
AC_CACHE_CHECK(if the compiler has a working -Wno-invalid-source-encoding, ac_cv_nise, [
|
|
save_cflags="$CFLAGS"
|
|
CFLAGS="$CFLAGS -Wno-invalid-source-encoding"
|
|
AC_TRY_COMPILE(,, ac_cv_nise="yes", ac_cv_nise="no")
|
|
CFLAGS="$save_cflags"
|
|
])
|
|
if test "$ac_cv_nise" = "yes"; then
|
|
CFLAGS="$CFLAGS -Wno-invalid-source-encoding"
|
|
fi
|
|
|
|
dnl Pffff..
|
|
AC_CACHE_CHECK(if the compiler has a working -Wno-format-zero-length, ac_cv_nfzl, [
|
|
save_cflags="$CFLAGS"
|
|
CFLAGS="$CFLAGS -Wno-format-zero-length"
|
|
AC_TRY_COMPILE(,, ac_cv_nfzl="yes", ac_cv_nfzl="no")
|
|
CFLAGS="$save_cflags"
|
|
])
|
|
if test "$ac_cv_nfzl" = "yes"; then
|
|
CFLAGS="$CFLAGS -Wno-format-zero-length"
|
|
fi
|
|
|
|
dnl More and more and more....
|
|
AC_CACHE_CHECK(if the compiler has a working -Wno-format-truncation, ac_cv_nft, [
|
|
save_cflags="$CFLAGS"
|
|
CFLAGS="$CFLAGS -Wno-format-truncation -Werror"
|
|
AC_TRY_COMPILE(,, ac_cv_nft="yes", ac_cv_nft="no")
|
|
CFLAGS="$save_cflags"
|
|
])
|
|
if test "$ac_cv_nft" = "yes"; then
|
|
CFLAGS="$CFLAGS -Wno-format-truncation"
|
|
fi
|
|
|
|
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], [], [Define if you have crypt])
|
|
IRCDLIBS="$IRCDLIBS-ldescrypt "
|
|
MKPASSWDLIBS="-ldescrypt"],
|
|
[AC_CHECK_LIB(crypt, crypt,
|
|
[AC_DEFINE([HAVE_CRYPT], [], [Define if you 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_CHECK_LIB(crypto, RAND_egd,
|
|
AC_DEFINE(HAVE_RAND_EGD, 1, [Define if the libcrypto has RAND_egd]))
|
|
|
|
AC_SUBST(IRCDLIBS)
|
|
AC_SUBST(MKPASSWDLIBS)
|
|
|
|
dnl HARDENING START
|
|
dnl This is taken from https://github.com/kmcallister/autoharden
|
|
dnl With some very small modifications (to remove C++ checking for instance)
|
|
# We want to check for compiler flag support, but there is no way to make
|
|
# clang's "argument unused" warning fatal. So we invoke the compiler through a
|
|
# wrapper script that greps for this message.
|
|
saved_CC="$CC"
|
|
saved_CXX="$CXX"
|
|
saved_LD="$LD"
|
|
flag_wrap="$srcdir/extras/wrap-compiler-for-flag-check"
|
|
CC="$flag_wrap $CC"
|
|
CXX="$flag_wrap $CXX"
|
|
LD="$flag_wrap $LD"
|
|
|
|
# We use the same hardening flags for C and C++. We must check that each flag
|
|
# is supported by both compilers.
|
|
AC_DEFUN([check_cc_cxx_flag],
|
|
[AC_LANG_PUSH(C)
|
|
AX_CHECK_COMPILE_FLAG([$1],
|
|
[AC_LANG_PUSH(C)
|
|
AX_CHECK_COMPILE_FLAG([$1], [$2], [$3], [-Werror $4])
|
|
AC_LANG_POP(C)],
|
|
[$3], [-Werror $4])
|
|
AC_LANG_POP(C)])
|
|
|
|
AC_DEFUN([check_link_flag],
|
|
[AX_CHECK_LINK_FLAG([$1], [$2], [$3], [-Werror $4])])
|
|
|
|
AC_ARG_ENABLE([hardening],
|
|
[AS_HELP_STRING([--enable-hardening],
|
|
[Enable compiler and linker options to frustrate memory corruption exploits @<:@yes@:>@])],
|
|
[hardening="$enableval"],
|
|
[hardening="yes"])
|
|
|
|
HARDEN_CFLAGS=""
|
|
HARDEN_LDFLAGS=""
|
|
AS_IF([test x"$hardening" != x"no"], [
|
|
check_cc_cxx_flag([-fno-strict-overflow], [HARDEN_CFLAGS="$HARDEN_CFLAGS -fno-strict-overflow"])
|
|
|
|
# This one will likely succeed, even on platforms where it does nothing.
|
|
check_cc_cxx_flag([-D_FORTIFY_SOURCE=2], [HARDEN_CFLAGS="$HARDEN_CFLAGS -D_FORTIFY_SOURCE=2"])
|
|
|
|
check_cc_cxx_flag([-fstack-protector-all],
|
|
[check_link_flag([-fstack-protector-all],
|
|
[HARDEN_CFLAGS="$HARDEN_CFLAGS -fstack-protector-all"
|
|
check_cc_cxx_flag([-Wstack-protector], [HARDEN_CFLAGS="$HARDEN_CFLAGS -Wstack-protector"],
|
|
[], [-fstack-protector-all])
|
|
check_cc_cxx_flag([--param ssp-buffer-size=1], [HARDEN_CFLAGS="$HARDEN_CFLAGS --param ssp-buffer-size=1"],
|
|
[], [-fstack-protector-all])])])
|
|
|
|
# At the link step, we might want -pie (GCC) or -Wl,-pie (Clang on OS X)
|
|
#
|
|
# The linker checks also compile code, so we need to include -fPIE as well.
|
|
check_cc_cxx_flag([-fPIE],
|
|
[check_link_flag([-fPIE -pie],
|
|
[HARDEN_BINCFLAGS="-fPIE"
|
|
HARDEN_BINLDFLAGS="-pie"],
|
|
[check_link_flag([-fPIE -Wl,-pie],
|
|
[HARDEN_BINCFLAGS="-fPIE"
|
|
HARDEN_BINLDFLAGS="-Wl,-pie"])])])
|
|
|
|
check_link_flag([-Wl,-z,relro],
|
|
[HARDEN_LDFLAGS="$HARDEN_LDFLAGS -Wl,-z,relro"
|
|
check_link_flag([-Wl,-z,now], [HARDEN_LDFLAGS="$HARDEN_LDFLAGS -Wl,-z,now"])])])
|
|
AC_SUBST([HARDEN_CFLAGS])
|
|
AC_SUBST([HARDEN_LDFLAGS])
|
|
AC_SUBST([HARDEN_BINCFLAGS])
|
|
AC_SUBST([HARDEN_BINLDFLAGS])
|
|
|
|
# End of flag tests.
|
|
CC="$saved_CC"
|
|
CXX="$saved_CXX"
|
|
LD="$saved_LD"
|
|
dnl HARDENING END
|
|
|
|
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
|
|
DYNAMIC_LDFLAGS=""
|
|
CFLAGS="$CFLAGS -Wl,-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)])
|
|
CFLAGS=$hold_cflags
|
|
if test "$ac_cv_export_dynamic" = "yes"; then
|
|
DYNAMIC_LDFLAGS="-Wl,-export-dynamic"
|
|
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="-std=gnu89 -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
|
|
])
|
|
dnl libtool has built-in tests that determine proper underscorage
|
|
if test "$ac_cv_underscore" = "yes"; then
|
|
AC_DEFINE([UNDERSCORE], [], [Define if your system prepends an underscore to symbols])
|
|
fi
|
|
|
|
MODULEFLAGS="$ac_cv_pic $DYNAMIC_LDFLAGS"
|
|
dnl DYNAMIC_LINKING is not meant to be defined in include/setup.h, it's
|
|
dnl defined in the Makefiles using -D. Having it defined globally will
|
|
dnl only cause braindamage and symbol collisions :-D.
|
|
dnl AC_DEFINE([DYNAMIC_LINKING], [], [Link dynamically as opposed to statically. (Dynamic linking is the only supported method of linking atm)])
|
|
])
|
|
|
|
AC_CACHE_CHECK([if your system has IPv6 support], [ac_cv_ip6], [
|
|
save_libs="$LIBS"
|
|
LIBS="$LIBS $SOCKLIB"
|
|
AC_TRY_RUN([
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
int main() {
|
|
int s = socket(AF_INET6, SOCK_STREAM, 0);
|
|
exit(0); /* We only check if the code compiles, that's enough. We can deal with missing runtime IPv6 */
|
|
}
|
|
],
|
|
[ac_cv_ip6=yes],
|
|
[ac_cv_ip6=no])
|
|
])
|
|
if test "$ac_cv_ip6" = "no"; then
|
|
AC_MSG_ERROR([Your system does not support IPv6])
|
|
fi
|
|
LIBS="$save_libs"
|
|
|
|
AC_CHECK_HEADER(sys/param.h,
|
|
AC_DEFINE([PARAMH], [], [Define if you have the <sys/param.h> header file.]))
|
|
AC_CHECK_HEADER(stdlib.h,
|
|
AC_DEFINE([STDLIBH], [], [Define if you have the <stdlib.h> header file.]))
|
|
AC_CHECK_HEADER(stddef.h,
|
|
AC_DEFINE([STDDEFH], [], [Define if you have the <stddef.h> header file.]))
|
|
AC_CHECK_HEADER(sys/syslog.h,
|
|
AC_DEFINE([SYSSYSLOGH], [], [Define if you have the <sys/syslog.h> header file.]))
|
|
AC_CHECK_HEADER(unistd.h,
|
|
AC_DEFINE([UNISTDH], [], [Define if you have the <unistd.h> header file.]))
|
|
AC_CHECK_HEADER(string.h,
|
|
AC_DEFINE([STRINGH], [], [Define if you have the <string.h> header file.]))
|
|
AC_CHECK_HEADER(strings.h,
|
|
AC_DEFINE([STRINGSH], [], [Define if you have the <strings.h> header file.]))
|
|
AC_CHECK_HEADER(malloc.h,
|
|
AC_DEFINE([MALLOCH], [<malloc.h>], [Define to <malloc.h> you need malloc.h.]))
|
|
AC_CHECK_HEADER(sys/rusage.h,
|
|
AC_DEFINE([RUSAGEH], [], [Define if you have the <sys/rusage.h> header file.]))
|
|
AC_CHECK_HEADER(glob.h,
|
|
AC_DEFINE([GLOBH], [], [Define if you have the <glob.h> header file.]))
|
|
AC_CHECK_HEADERS([stdint.h inttypes.h])
|
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
AC_C_CONST
|
|
AC_C_INLINE
|
|
|
|
AC_TYPE_MODE_T
|
|
AC_TYPE_SIZE_T
|
|
AC_TYPE_INTPTR_T
|
|
|
|
AC_HEADER_TIME
|
|
AC_HEADER_SYS_WAIT
|
|
AC_STRUCT_TM
|
|
AC_TYPE_UID_T
|
|
unreal_CHECK_TYPE_SIZES
|
|
|
|
dnl in the future, it would be nice to avoid AC_TRY_RUN to allow
|
|
dnl better support for crosscompiling.
|
|
AC_CACHE_CHECK([what kind of nonblocking sockets you have], [ac_cv_nonblocking],[
|
|
save_libs="$LIBS"
|
|
LIBS="$LIBS $SOCKLIB"
|
|
AC_TRY_RUN([
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/file.h>
|
|
#include <signal.h>
|
|
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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/file.h>
|
|
#include <signal.h>
|
|
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 <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/file.h>
|
|
#include <signal.h>
|
|
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], [], [Define if you have O_NONBLOCK])
|
|
elif test "$ac_cv_nonblocking" = "O_NDELAY"; then
|
|
AC_DEFINE([NBLOCK_BSD], [], [Define if you have O_NDELAY])
|
|
elif test "$ac_cv_nonblocking" = "FIONBIO"; then
|
|
AC_DEFINE([NBLOCK_SYSV], [], [Define if you have FIONBIO])
|
|
fi
|
|
LIBS="$save_libs"
|
|
dnl Checks for library functions.
|
|
AC_PROG_GCC_TRADITIONAL
|
|
AC_FUNC_SETPGRP
|
|
AC_FUNC_SETVBUF_REVERSED
|
|
AC_CHECK_FUNCS(snprintf,
|
|
AC_DEFINE([HAVE_SNPRINTF], [], [Define if you have snprintf]))
|
|
AC_CHECK_FUNCS(vsnprintf,
|
|
AC_DEFINE([HAVE_VSNPRINTF], [], [Define if you have vsnprintf]))
|
|
AC_CHECK_FUNCS(strlcpy,
|
|
AC_DEFINE([HAVE_STRLCPY], [], [Define if you have strlcpy. Otherwise, an internal implementation will be used!]))
|
|
AC_CHECK_FUNCS(strlcat,
|
|
AC_DEFINE([HAVE_STRLCAT], [], [Define if you have strlcat]))
|
|
AC_CHECK_FUNCS(strlncat,
|
|
AC_DEFINE([HAVE_STRLNCAT], [], [Define if you have strlncat]))
|
|
AC_CHECK_FUNCS(inet_pton,
|
|
AC_DEFINE([HAVE_INET_PTON], [], [Define if you have inet_pton]))
|
|
AC_CHECK_FUNCS(inet_ntop,
|
|
AC_DEFINE([HAVE_INET_NTOP], [], [Define if you 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], [], [Define if you have a compiler with C99 variable length array support])
|
|
fi
|
|
|
|
dnl This check doesn't need to be in ./configure, we can
|
|
dnl write the sourcecode to actually handle the return value
|
|
dnl of setrlimit if necessary... -- ohnobinki
|
|
AC_CACHE_CHECK([if we can set the core size to unlimited], [ac_cv_force_core], [
|
|
AC_TRY_RUN([
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
#include <unistd.h>
|
|
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], [], [Define if you can set the core size to unlimited])
|
|
fi
|
|
AC_FUNC_VPRINTF
|
|
AC_CHECK_FUNCS([gettimeofday],
|
|
[AC_DEFINE([GETTIMEOFDAY], [], [Define if you have gettimeofday])],
|
|
[AC_CHECK_FUNCS([lrand48],
|
|
[AC_DEFINE([LRADN48], [], [Define if you have lrand48])])])
|
|
AC_CHECK_FUNCS([getrusage],
|
|
[AC_DEFINE([GETRUSAGE_2], [], [Define if you have getrusage])],
|
|
[AC_CHECK_FUNCS([times],
|
|
[AC_DEFINE([TIMES_2], [], [Define if you have times])])])
|
|
AC_CHECK_FUNCS([setproctitle],
|
|
[AC_DEFINE([HAVE_SETPROCTITLE], [], [Define if you have setproctitle])],
|
|
[AC_CHECK_LIB([util],
|
|
[setproctitle],
|
|
[AC_DEFINE([HAVE_SETPROCTITLE], [], [Define if you have setproctitle])
|
|
IRCDLIBS="$IRCDLIBS-lutil"],
|
|
[
|
|
AC_EGREP_HEADER([#define.*PS_STRINGS.*],[sys/exec.h],
|
|
[AC_DEFINE([HAVE_PSSTRINGS],[], [Define if you have PS_STRINGS])],
|
|
[AC_CHECK_FUNCS([pstat],
|
|
[AC_DEFINE([HAVE_PSTAT], [], [Define if you have pstat])])])
|
|
])
|
|
]
|
|
)
|
|
|
|
|
|
AC_CACHE_CHECK([what type of signals you have], [ac_cv_sigtype], [
|
|
AC_TRY_RUN([
|
|
#include <signal.h>
|
|
int main() {
|
|
sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L);
|
|
}
|
|
], ac_cv_sigtype=POSIX, [
|
|
AC_TRY_RUN([
|
|
#include <signal.h>
|
|
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], [], [Define if you have POSIX signals])
|
|
elif test "$ac_cv_sigtype" = "BSD"; then
|
|
AC_DEFINE([BSD_RELIABLE_SIGNALS], [], [Define if you have BSD signals])
|
|
else
|
|
AC_DEFINE([SYSV_UNRELIABLE_SIGNALS], [], [Define if you have SYSV signals])
|
|
fi
|
|
AC_CHECK_FUNCS(strtoken,,AC_DEFINE([NEED_STRTOKEN], [], [Define if you need the strtoken function.]))
|
|
AC_CHECK_FUNCS(strtok,,AC_DEFINE([NEED_STRTOK], [], [Define if you need the strtok function.]))
|
|
AC_CHECK_FUNCS(strerror,,AC_DEFINE([NEED_STRERROR], [], [Define if you need the strerror function.]))
|
|
AC_CHECK_FUNCS(index,,AC_DEFINE([NOINDEX], [], [Define if you do not have the index function.]))
|
|
AC_CHECK_FUNCS(strtoul,,STRTOUL="strtoul.o")
|
|
AC_CHECK_FUNCS(bcopy,,AC_DEFINE([NEED_BCOPY], [], [Define if you don't have bcopy]))
|
|
AC_CHECK_FUNCS(bcmp,,AC_DEFINE([NEED_BCMP], [], [Define if you don't have bcmp]))
|
|
AC_CHECK_FUNCS(bzero,,AC_DEFINE([NEED_BZERO], [], [Define if you need bzero]))
|
|
AC_CHECK_FUNCS(strcasecmp,AC_DEFINE([GOT_STRCASECMP], [], [Define if you have strcasecmp]))
|
|
save_libs="$LIBS"
|
|
LIBS="$LIBS $SOCKLIB $INETLIB"
|
|
AC_CHECK_FUNCS(inet_addr,,AC_DEFINE([NEED_INET_ADDR], [], [Define if you need inet_addr]))
|
|
AC_CHECK_FUNCS(inet_ntoa,,AC_DEFINE([NEED_INET_NTOA], [], [Define if you need inet_ntoa]))
|
|
LIBS="$save_libs"
|
|
AC_CHECK_FUNCS(syslog,AC_DEFINE([HAVE_SYSLOG], [], [Define if you have syslog]))
|
|
AC_SUBST(STRTOUL)
|
|
AC_SUBST(CRYPTOLIB)
|
|
AC_SUBST(MODULEFLAGS)
|
|
AC_SUBST(DYNAMIC_LDFLAGS)
|
|
AC_ARG_WITH(nick-history, [AS_HELP_STRING([--with-nick-history=length],[Specify the length of the nickname history])],
|
|
[AC_DEFINE_UNQUOTED([NICKNAMEHISTORYLENGTH], [$withval], [Set to the nickname history length you want])],
|
|
[AC_DEFINE([NICKNAMEHISTORYLENGTH], [2000], [Set to the nickname history length you want])])
|
|
AC_ARG_WITH([sendq], [AS_HELP_STRING([--with-sendq=maxsendq],[Specify the max sendq for the server])],
|
|
[AC_DEFINE_UNQUOTED([MAXSENDQLENGTH], [$withval], [Set to the max sendq you want])],
|
|
[AC_DEFINE([MAXSENDQLENGTH], [3000000], [Set to the max sendq you want])])
|
|
AC_ARG_WITH(permissions, [AS_HELP_STRING([--with-permissions=permissions], [Specify the default permissions for
|
|
configuration files])],
|
|
dnl We have an apparently out-of-place 0 here because of a MacOSX bug and because
|
|
dnl we assume that a user thinks that `chmod 0600 blah' is the same as `chmod 600 blah'
|
|
dnl (#3189)
|
|
[AC_DEFINE_UNQUOTED([DEFAULT_PERMISSIONS], [0$withval], [The default permissions for configuration files. Set to 0 to prevent unrealircd from calling chmod() on the files.])],
|
|
[AC_DEFINE([DEFAULT_PERMISSIONS], [0600], [The default permissions for configuration files. Set to 0 to prevent unrealircd from calling chmod() on the files.])])
|
|
|
|
AC_ARG_WITH(bindir, [AS_HELP_STRING([--with-bindir=path],[Specify the directory for the unrealircd binary])],
|
|
[AC_DEFINE_UNQUOTED([BINDIR], ["$withval"], [Define the directory where the unrealircd binary is located])
|
|
BINDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([BINDIR], ["$HOME/unrealircd/bin"], [Define the directory where the unrealircd binary is located])
|
|
BINDIR="$HOME/unrealircd/bin"])
|
|
|
|
AC_ARG_WITH(scriptdir, [AS_HELP_STRING([--with-scriptdir=path],[Specify the directory for the unrealircd start-stop script])],
|
|
[AC_DEFINE_UNQUOTED([SCRIPTDIR], ["$withval"], [Define the directory where the unrealircd start stop scripts is located])
|
|
SCRIPTDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([SCRIPTDIR], ["$HOME/unrealircd"], [Define the directory where the unrealircd start stop scripts is located])
|
|
SCRIPTDIR="$HOME/unrealircd"])
|
|
|
|
AC_ARG_WITH(confdir, [AS_HELP_STRING([--with-confdir=path],[Specify the directory where configuration files are stored])],
|
|
[AC_DEFINE_UNQUOTED([CONFDIR], ["$withval"], [Define the location of the configuration files])
|
|
CONFDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([CONFDIR], ["$HOME/unrealircd/conf"], [Define the location of the configuration files])
|
|
CONFDIR="$HOME/unrealircd/conf"])
|
|
|
|
AC_ARG_WITH(modulesdir, [AS_HELP_STRING([--with-modulesdir=path],[Specify the directory for loadable modules])],
|
|
[AC_DEFINE_UNQUOTED([MODULESDIR], ["$withval"], [Define the location of the modules])
|
|
MODULESDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([MODULESDIR], ["$HOME/unrealircd/modules"], [Define the location of the modules])
|
|
MODULESDIR="$HOME/unrealircd/modules"])
|
|
|
|
AC_ARG_WITH(logdir, [AS_HELP_STRING([--with-logdir=path],[Specify the directory where log files are stored])],
|
|
[AC_DEFINE_UNQUOTED([LOGDIR], ["$withval"], [Define the location of the log files])
|
|
LOGDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([LOGDIR], ["$HOME/unrealircd/logs"], [Define the location of the log files])
|
|
LOGDIR="$HOME/unrealircd/logs"])
|
|
|
|
AC_ARG_WITH(cachedir, [AS_HELP_STRING([--with-cachedir=path],[Specify the directory where cached files are stored])],
|
|
[AC_DEFINE_UNQUOTED([CACHEDIR], ["$withval"], [Define the location of the cached remote include files])
|
|
CACHEDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([CACHEDIR], ["$HOME/unrealircd/cache"], [Define the location of the cached remote include files])
|
|
CACHEDIR="$HOME/unrealircd/cache"])
|
|
|
|
AC_ARG_WITH(tmpdir, [AS_HELP_STRING([--with-tmpdir=path],[Specify the directory where private temporary files are stored. Should not be readable or writable by others, so not /tmp!!])],
|
|
[AC_DEFINE_UNQUOTED([TMPDIR], ["$withval"], [Define the location of private temporary files])
|
|
TMPDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([TMPDIR], ["$HOME/unrealircd/tmp"], [Define the location of private temporary files])
|
|
TMPDIR="$HOME/unrealircd/tmp"])
|
|
|
|
AC_ARG_WITH(datadir, [AS_HELP_STRING([--with-datadir=path],[Specify the directory where permanent data is stored])],
|
|
[AC_DEFINE_UNQUOTED([PERMDATADIR], ["$withval"], [Define the location of permanent data files])
|
|
PERMDATADIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([DATADIR], ["$HOME/unrealircd/data"], [Define the location of permanent data files])
|
|
PERMDATADIR="$HOME/unrealircd/data"])
|
|
|
|
AC_ARG_WITH(docdir, [AS_HELP_STRING([--with-docdir=path],[Specify the directory where documentation is stored])],
|
|
[AC_DEFINE_UNQUOTED([DOCDIR], ["$withval"], [Define the location of the documentation])
|
|
DOCDIR="$withval"],
|
|
[AC_DEFINE_UNQUOTED([DOCDIR], ["$HOME/unrealircd/doc"], [Define the location of the documentation])
|
|
DOCDIR="$HOME/unrealircd/doc"])
|
|
|
|
AC_ARG_WITH(pidfile, [AS_HELP_STRING([--with-pidfile=path],[Specify the path of the pid file])],
|
|
[AC_DEFINE_UNQUOTED([PIDFILE], ["$withval"], [Define the path of the pid file])
|
|
PIDFILE="$withval"],
|
|
[AC_DEFINE_UNQUOTED([PIDFILE], ["$HOME/unrealircd/data/unrealircd.pid"], [Define the path of the pid file])
|
|
PIDFILE="$HOME/unrealircd/data/unrealircd.pid"])
|
|
|
|
dnl Ensure that this “feature” can be disabled as it makes it harder to package unrealircd.
|
|
dnl Users have always been able to specify “./configure LDFLAGS=-Wl,-rpath,/path/to/blah”—binki
|
|
AC_ARG_WITH(privatelibdir, [AS_HELP_STRING([--with-privatelibdir=path],[Specify the directory where private libraries are stored. Disable when building a package for a distro])],
|
|
[],
|
|
[with_privatelibdir="yes"])
|
|
AS_IF([test "x$with_privatelibdir" = "xno"],
|
|
[PRIVATELIBDIR=],
|
|
[test "x$with_privatelibdir" = "xyes"],
|
|
[PRIVATELIBDIR="$HOME/unrealircd/lib"],
|
|
[PRIVATELIBDIR="$with_privatelibdir"])
|
|
AS_IF([test "x$PRIVATELIBDIR" = "x"],
|
|
[LDFLAGS_PRIVATELIBS=""],
|
|
[AC_DEFINE_UNQUOTED([PRIVATELIBDIR], ["$PRIVATELIBDIR"], [Define the location of private libraries])
|
|
LDFLAGS_PRIVATELIBS="-Wl,-rpath,$PRIVATELIBDIR"
|
|
LDFLAGS="$LDFLAGS $LDFLAGS_PRIVATELIBS"
|
|
export LDFLAGS])
|
|
|
|
AC_SUBST(BINDIR)
|
|
AC_SUBST(SCRIPTDIR)
|
|
AC_SUBST(CONFDIR)
|
|
AC_SUBST(MODULESDIR)
|
|
AC_SUBST(LOGDIR)
|
|
AC_SUBST(CACHEDIR)
|
|
AC_SUBST(TMPDIR)
|
|
dnl Why o why PERMDATADIR and not DATADIR you ask?
|
|
dnl well, Because DATADIR conflicts with the Windows SDK header files.. amazing.
|
|
AC_SUBST(PERMDATADIR)
|
|
AC_SUBST(DOCDIR)
|
|
AC_SUBST(PIDFILE)
|
|
AC_SUBST(LDFLAGS_PRIVATELIBS)
|
|
|
|
AC_ARG_WITH(fd-setsize, [AS_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], [Set to the max connections you want])
|
|
|
|
AC_ARG_ENABLE([prefixaq],
|
|
[AS_HELP_STRING([--disable-prefixaq],[Disable chanadmin (+a) and chanowner (+q) prefixes])],
|
|
[],
|
|
[enable_prefixaq=yes])
|
|
AS_IF([test $enable_prefixaq = "yes"],
|
|
[AC_DEFINE([PREFIX_AQ], [], [Define if you want +a/+q prefixes])])
|
|
|
|
AC_ARG_WITH(showlistmodes,
|
|
[AS_HELP_STRING([--with-showlistmodes], [Specify whether modes are shown in /list])],
|
|
[AS_IF([test $withval = "yes"],
|
|
[AC_DEFINE([LIST_SHOW_MODES], [], [Define if you want modes shown in /list])])])
|
|
AC_ARG_WITH(shunnotices, [AS_HELP_STRING([--with-shunnotices], [Notify a user when he/she is no longer shunned])],
|
|
[AS_IF([test $withval = "yes"],
|
|
[AC_DEFINE([SHUN_NOTICES], [], [Define if you want users to be notified when their shun is removed])])])
|
|
AC_ARG_WITH(no-operoverride, [AS_HELP_STRING([--with-no-operoverride], [Disable OperOverride])],
|
|
[AS_IF([test $withval = "yes"],
|
|
[AC_DEFINE([NO_OPEROVERRIDE], [], [Define if you want OperOverride disabled])])])
|
|
AC_ARG_WITH(disableusermod, [AS_HELP_STRING([--with-disableusermod], [Disable /set* and /chg*])],
|
|
[AS_IF([test $withval = "yes"],
|
|
[AC_DEFINE([DISABLE_USERMOD], [], [Define if you want to disable /set* and /chg*])])])
|
|
AC_ARG_WITH(operoverride-verify, [AS_HELP_STRING([--with-operoverride-verify], [Require opers to invite themselves to +s/+p channels])],
|
|
[AS_IF([test $withval = "yes"],
|
|
[AC_DEFINE([OPEROVERRIDE_VERIFY], [], [Define if you want opers to have to use /invite to join +s/+p channels])])])
|
|
AC_ARG_WITH(disable-extendedban-stacking, [AS_HELP_STRING([--with-disable-extendedban-stacking], [Disable extended ban stacking])],
|
|
[AS_IF([test $withval = "yes"],
|
|
[AC_DEFINE([DISABLE_STACKED_EXTBANS], [], [Define to disable extended ban stacking (~q:~c:\#chan, etc)])])])
|
|
AC_ARG_WITH(system-tre, [AS_HELP_STRING([--with-system-tre], [Use the system tre package instead of bundled, discovered using pkg-config])], [], [with_system_tre=no])
|
|
AC_ARG_WITH(system-pcre2, [AS_HELP_STRING([--with-system-pcre2], [Use the system pcre2 package instead of bundled, discovered using pkg-config])], [], [with_system_pcre2=no])
|
|
AC_ARG_WITH(system-argon2, [AS_HELP_STRING([--without-system-argon2], [Use bundled version instead of system argon2 library. Normally autodetected via pkg-config])], [], [with_system_argon2=yes])
|
|
AC_ARG_WITH(system-cares, [AS_HELP_STRING([--without-system-cares], [Use bundled version instead of system c-ares. Normally autodetected via pkg-config.])], [], [with_system_cares=yes])
|
|
CHECK_SSL
|
|
CHECK_SSL_CTX_SET1_CURVES_LIST
|
|
AC_ARG_ENABLE(dynamic-linking, [AS_HELP_STRING([--disable-dynamic-linking], [Make the IRCd statically link with shared objects rather than dynamically (noone knows if disabling dynamic linking actually does anything or not)])],
|
|
[enable_dynamic_linking=$enableval], [enable_dynamic_linking="yes"])
|
|
AS_IF([test $enable_dynamic_linking = "yes"],
|
|
[AC_ENABLE_DYN],
|
|
[AC_DEFINE([STATIC_LINKING], [], [Link... statically(?) (defining this macro will probably cause the build tofail)])])
|
|
|
|
AC_ARG_ENABLE([werror],
|
|
[AS_HELP_STRING([--enable-werror],
|
|
[Turn compilation warnings into errors (-Werror)])],
|
|
[ac_cv_werror="$enableval"],
|
|
[ac_cv_werror="no"])
|
|
|
|
AC_MSG_CHECKING([if FD_SETSIZE is large enough to allow $ac_fd file descriptors])
|
|
AC_COMPILE_IFELSE([
|
|
#include <sys/types.h>
|
|
#include <sys/time.h>
|
|
int main() {
|
|
#if FD_SETSIZE < $ac_fd
|
|
#error FD_SETSIZE is smaller than $ac_fd
|
|
#endif
|
|
exit(0);
|
|
}
|
|
], AC_MSG_RESULT([yes]), [
|
|
# must be passed on the commandline to avoid a ``warning, you redefined something''
|
|
FD_SETSIZE="-DFD_SETSIZE=$ac_fd"
|
|
AC_MSG_RESULT(no)
|
|
])
|
|
AC_SUBST([FD_SETSIZE])
|
|
|
|
case `uname -s` in
|
|
*SunOS*|*solaris*)
|
|
AC_DEFINE([_SOLARIS], [], [Define if you are compiling unrealircd on Sun's (or Oracle's?) Solaris])
|
|
IRCDLIBS="$IRCDLIBS -lresolv "
|
|
;;
|
|
esac
|
|
|
|
AC_CHECK_FUNCS([poll],
|
|
AC_DEFINE([HAVE_POLL], [], [Define if you have poll]))
|
|
AC_CHECK_FUNCS([epoll_create epoll_ctl epoll_wait],
|
|
AC_DEFINE([HAVE_EPOLL], [], [Define if you have epoll]))
|
|
AC_CHECK_FUNCS([kqueue kevent],
|
|
AC_DEFINE([HAVE_KQUEUE], [], [Define if you have kqueue]))
|
|
|
|
dnl c-ares needs PATH_SEPARATOR set or it will
|
|
dnl fail on certain solaris boxes. We might as
|
|
dnl well set it here.
|
|
export PATH_SEPARATOR
|
|
|
|
AS_IF([test "x$with_system_tre" = "xno"],[
|
|
dnl REMEMBER TO CHANGE WITH A NEW TRE RELEASE!
|
|
tre_version="0.8.0-git"
|
|
AC_MSG_RESULT(extracting TRE regex library)
|
|
cur_dir=`pwd`
|
|
cd extras
|
|
dnl remove old tre directory to force a recompile...
|
|
dnl and remove its installation prefix just to clean things up.
|
|
rm -rf tre-$tre_version rege[]xp
|
|
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 --enable-shared --disable-system-abi --disable-wchar --disable-multibyte --prefix=$cur_dir/extras/regexp --libdir=$PRIVATELIBDIR || 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
|
|
TRE_CFLAGS="-I$cur_dir/extras/regexp/include"
|
|
AC_SUBST(TRE_CFLAGS)
|
|
|
|
TRE_LIBS=
|
|
AS_IF([test -n "$ac_cv_path_PKGCONFIG"],
|
|
[TRE_LIBS="`$ac_cv_path_PKGCONFIG --libs tre.pc`"])
|
|
dnl For when pkg-config isn't available -- or for when pkg-config
|
|
dnl doesn't see the tre.pc file somehow... (#3982)
|
|
AS_IF([test -z "$TRE_LIBS"],
|
|
[TRE_LIBS="$PRIVATELIBDIR/libtre.so"])
|
|
AC_SUBST(TRE_LIBS)
|
|
cd $cur_dir
|
|
],[
|
|
dnl use pkgconfig for tre:
|
|
PKG_CHECK_MODULES([TRE], tre >= 0.7.5)
|
|
])
|
|
|
|
AS_IF([test "x$with_system_pcre2" = "xno"],[
|
|
dnl REMEMBER TO CHANGE WITH A NEW PCRE2 RELEASE!
|
|
pcre2_version="10.32"
|
|
AC_MSG_RESULT(extracting PCRE2 regex library)
|
|
cur_dir=`pwd`
|
|
cd extras
|
|
dnl remove old pcre2 directory to force a recompile...
|
|
dnl and remove its installation prefix just to clean things up.
|
|
rm -rf pcre2-$pcre2_version pcre2
|
|
if test "x$ac_cv_path_GUNZIP" = "x" ; then
|
|
tar xfz pcre2.tar.gz
|
|
else
|
|
cp pcre2.tar.gz pcre2.tar.gz.bak
|
|
gunzip -f pcre2.tar.gz
|
|
cp pcre2.tar.gz.bak pcre2.tar.gz
|
|
tar xf pcre2.tar
|
|
fi
|
|
AC_MSG_RESULT(configuring PCRE2 regex library)
|
|
cd pcre2-$pcre2_version
|
|
./configure --enable-jit --enable-shared --disable-unicode --prefix=$cur_dir/extras/pcre2 --libdir=$PRIVATELIBDIR || exit 1
|
|
AC_MSG_RESULT(compiling PCRE2 regex library)
|
|
$ac_cv_prog_MAKER || exit 1
|
|
AC_MSG_RESULT(installing PCRE2 regex library)
|
|
$ac_cv_prog_MAKER install || exit 1
|
|
PCRE2_CFLAGS="-I$cur_dir/extras/pcre2/include"
|
|
AC_SUBST(PCRE2_CFLAGS)
|
|
|
|
PCRE2_LIBS=
|
|
dnl See c-ares's compilation section for more info on this hack.
|
|
dnl ensure that we're linking against the bundled version of pcre2
|
|
dnl (we only reach this code if linking against the bundled version is desired).
|
|
AS_IF([test -n "$ac_cv_path_PKGCONFIG"],
|
|
[PCRE2_LIBS="`$ac_cv_path_PKGCONFIG --libs libpcre2-8.pc`"])
|
|
dnl For when pkg-config isn't available -- or for when pkg-config
|
|
dnl doesn't see the libpcre2-8.pc file somehow... (#3982)
|
|
AS_IF([test -z "$PCRE2_LIBS"],
|
|
[PCRE2_LIBS="$PRIVATELIBDIR/libpcre2-8.so"])
|
|
AC_SUBST(PCRE2_LIBS)
|
|
cd $cur_dir
|
|
],[
|
|
dnl use pkgconfig for pcre2:
|
|
PKG_CHECK_MODULES([PCRE2], libpcre2-8 >= 10.00)
|
|
])
|
|
|
|
dnl Use system argon2 when available, unless --without-system-argon2
|
|
has_system_argon2="no"
|
|
AS_IF([test "x$with_system_argon2" = "xyes"],[
|
|
PKG_CHECK_MODULES([ARGON2], [libargon2 >= 0~20161029],[has_system_argon2=yes
|
|
AS_IF([test "x$PRIVATELIBDIR" != "x"], [rm -f "$PRIVATELIBDIR/"libargon2*])],[has_system_argon2=no])])
|
|
|
|
AS_IF([test "$has_system_argon2" = "no"],[
|
|
dnl REMEMBER TO CHANGE WITH A NEW ARGON2 RELEASE!
|
|
argon2_version="20181209"
|
|
AC_MSG_RESULT(extracting Argon2 library)
|
|
cur_dir=`pwd`
|
|
cd extras
|
|
dnl remove old argon2 directory to force a recompile...
|
|
dnl and remove its installation prefix just to clean things up.
|
|
rm -rf argon2-$argon2_version argon2
|
|
if test "x$ac_cv_path_GUNZIP" = "x" ; then
|
|
tar xfz argon2-$argon2_version.tar.gz
|
|
else
|
|
cp argon2-$argon2_version.tar.gz argon2-$argon2_version.tar.gz.bak
|
|
gunzip -f argon2-$argon2_version.tar.gz
|
|
cp argon2-$argon2_version.tar.gz.bak argon2-$argon2_version.tar.gz
|
|
tar xf argon2-$argon2_version.tar
|
|
fi
|
|
AC_MSG_RESULT(compiling Argon2 library)
|
|
cd argon2-$argon2_version
|
|
$ac_cv_prog_MAKER || exit 1
|
|
AC_MSG_RESULT(installing Argon2 library)
|
|
$ac_cv_prog_MAKER install PREFIX=$cur_dir/extras/argon2 || exit 1
|
|
# We need to manually copy the libs to PRIVATELIBDIR because
|
|
# there is no way to tell make install in libargon2 to do so.
|
|
cp -av $cur_dir/extras/argon2/lib/* $PRIVATELIBDIR/
|
|
ARGON2_CFLAGS="-I$cur_dir/extras/argon2/include"
|
|
AC_SUBST(ARGON2_CFLAGS)
|
|
ARGON2_LIBS="-L$PRIVATELIBDIR -largon2"
|
|
AC_SUBST(ARGON2_LIBS)
|
|
cd $cur_dir
|
|
])
|
|
|
|
dnl Use system c-ares when available, unless --without-system-cares.
|
|
has_system_cares="no"
|
|
AS_IF([test "x$with_system_cares" = "xyes"],[
|
|
PKG_CHECK_MODULES([CARES], libcares >= 1.6.0,[has_system_cares=yes
|
|
AS_IF([test "x$PRIVATELIBDIR" != "x"], [rm -f "$PRIVATELIBDIR/"libcares*])],[has_system_cares=no])])
|
|
|
|
AS_IF([test "$has_system_cares" = "no"], [
|
|
dnl REMEMBER TO CHANGE WITH A NEW C-ARES RELEASE!
|
|
dnl NOTE: when changing this here, ALSO change it in extras/curlinstall
|
|
dnl and in the comment in this file around line 400!
|
|
cares_version="1.15.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 c-ares
|
|
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
|
|
save_cflags="$CFLAGS"
|
|
CFLAGS="$orig_cflags"
|
|
export CFLAGS
|
|
./configure --prefix=$cur_dir/extras/c-ares --libdir=$PRIVATELIBDIR --enable-shared || exit 1
|
|
CFLAGS="$save_cflags"
|
|
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
|
|
CARES_CFLAGS="-I$cur_dir/extras/c-ares/include"
|
|
AC_SUBST(CARES_CFLAGS)
|
|
CARES_LIBS="-L$PRIVATELIBDIR"
|
|
|
|
dnl Set default library parameters for when pkg-config is not available
|
|
dnl Ugly cd'ing out of extras/c-ares-xxx ;)
|
|
dnl Note: must be a full path, not relative path.
|
|
cd ../..
|
|
CARESLIBSALT="$PRIVATELIBDIR/libcares.so"
|
|
cd -
|
|
case `uname -s` in
|
|
*FreeBSD*)
|
|
CARESLIBSALT="$CARESLIBSALT"
|
|
;;
|
|
*Linux*)
|
|
CARESLIBSALT="$CARESLIBSALT -lrt"
|
|
;;
|
|
*SunOS*)
|
|
CARESLIBSALT="$CARESLIBSALT -lrt"
|
|
;;
|
|
esac
|
|
|
|
dnl Use pkg-config for c-ares libraries, and if not available use defaults
|
|
dnl from above (also if pkg-config returns an empty result).
|
|
if test "x$ac_cv_path_PKGCONFIG" = "x" ; then
|
|
CARES_LIBS="$CARES_LIBS $CARESLIBSALT"
|
|
else
|
|
CARES_LIBSPRE="$CARES_LIBS"
|
|
dnl the sed expression forces an absolute path to the .so file to be generated
|
|
dnl because this is what libtool would do. If this wasn't done and /usr/lib*/libcares.so
|
|
dnl exists, then unrealircd would still try to link against the system c-ares.
|
|
dnl The [] quotation is needed because the sed expression has [] in it.
|
|
[CARES_LIBS="$CARES_LIBS `$ac_cv_path_PKGCONFIG --libs libcares.pc | sed -e 's,-L\([^ ]\+lib\) -lcares,\1/libcares.so,'`"]
|
|
if test "$CARES_LIBS" = "$CARES_LIBSPRE " ; then
|
|
CARES_LIBS="$CARES_LIBS $CARESLIBSALT"
|
|
fi
|
|
fi
|
|
AC_SUBST(CARES_LIBS)
|
|
cd $cur_dir
|
|
])
|
|
|
|
AX_PTHREAD()
|
|
|
|
CHECK_LIBCURL
|
|
|
|
UNRLINCDIR="`pwd`/include"
|
|
|
|
dnl Moved to the very end to ensure it doesn't affect any libs or tests.
|
|
if test "$ac_cv_werror" = "yes" ; then
|
|
CFLAGS="$CFLAGS -Werror"
|
|
fi
|
|
|
|
AC_SUBST(UNRLINCDIR)
|
|
|
|
AC_CONFIG_FILES([Makefile
|
|
src/Makefile
|
|
src/modules/Makefile
|
|
src/modules/chanmodes/Makefile
|
|
src/modules/usermodes/Makefile
|
|
src/modules/snomasks/Makefile
|
|
src/modules/extbans/Makefile
|
|
src/modules/cap/Makefile
|
|
src/modules/third/Makefile
|
|
unrealircd])
|
|
AC_OUTPUT
|
|
chmod 0700 unrealircd
|