aboutsummaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure314
1 files changed, 256 insertions, 58 deletions
diff --git a/configure b/configure
index 19eb431816e7..0a28a0cff777 100755
--- a/configure
+++ b/configure
@@ -13,6 +13,7 @@ IPV4LL=
INET6=
PRIVSEP=
PRIVSEP_USER=
+SECCOMP=
ARC4RANDOM=
CLOSEFROM=
RBTREE=
@@ -36,6 +37,7 @@ POLL=
SMALL=
SANITIZE=no
STATUSARG=
+OPENSSL=
DHCPCD_DEFS=dhcpcd-definitions.conf
@@ -70,8 +72,10 @@ for x do
--enable-auth) AUTH=yes;;
--disable-privsep) PRIVSEP=no;;
--enable-privsep) PRIVSEP=yes;;
+ --disable-seccomp) SECCOMP=no;;
+ --enable-seccomp) SECCOMP=yes;;
--privsepuser) PRIVSEP_USER=$var;;
- --prefix) PREFIX=$var;;
+ --prefix) PREFIX=$var;prefix=$var;; # prefix is set for autotools compat
--sysconfdir) SYSCONFDIR=$var;;
--bindir|--sbindir) SBINDIR=$var;;
--libexecdir) LIBEXECDIR=$var;;
@@ -107,6 +111,8 @@ for x do
--with-udev) DEV=yes; UDEV=yes;;
--without-udev) UDEV=no;;
--with-poll) POLL="$var";;
+ --with-openssl) OPENSSL=yes;;
+ --without-openssl) OPENSSL=no;;
--sanitise|--sanitize) SANITIZEADDRESS="yes";;
--serviceexists) SERVICEEXISTS=$var;;
--servicecmd) SERVICECMD=$var;;
@@ -115,7 +121,7 @@ for x do
--statusarg) STATUSARG=$var;;
--infodir) ;; # ignore autotools
--disable-maintainer-mode|--disable-dependency-tracking) ;;
- --disable-silent-rules) ;;
+ --disable-option-checking|--disable-silent-rules) ;;
-V|--version)
v=$(sed -ne 's/.*VERSION[[:space:]]*"\([^"]*\).*/\1/p' defs.h);
c=$(sed -ne 's/^.*copyright\[\] = "\([^"]*\).*/\1/p' dhcpcd.c);
@@ -257,6 +263,10 @@ echo "Configuring dhcpcd for ... $OS"
rm -f $CONFIG_H $CONFIG_MK
echo "# $OS" >$CONFIG_MK
echo "/* $OS */" >$CONFIG_H
+echo >>$CONFIG_H
+echo "#ifndef CONFIG_H">>$CONFIG_H
+echo "#define CONFIG_H">>$CONFIG_H
+echo >>$CONFIG_H
: ${SYSCONFDIR:=$PREFIX/etc}
: ${SBINDIR:=$PREFIX/sbin}
@@ -357,7 +367,7 @@ else
ALLOW_USR_LIBS=true
fi
case "$OS" in
-linux*|solaris*|sunos*|kfreebsd*) ;;
+linux*|solaris*|sunos*|kfreebsd*|dragonfly*|freebsd*) ;;
*)
# There might be more than one ...
for LDELFN in /libexec/ld-elf.so.[0-9]*; do
@@ -585,7 +595,12 @@ if [ "$PRIVSEP" = yes ]; then
echo "PRIVSEP_SRCS+= privsep-bpf.c" >>$CONFIG_MK
fi
case "$OS" in
- linux*) echo "PRIVSEP_SRCS+= privsep-linux.c" >>$CONFIG_MK;;
+ linux*)
+ echo "PRIVSEP_SRCS+= privsep-linux.c" >>$CONFIG_MK
+ if [ -n "$SECCOMP" ] && [ "$SECCOMP" = no ]; then
+ echo "#define DISABLE_SECCOMP" >>$CONFIG_H
+ fi
+ ;;
solaris*|sunos*) echo "PRIVSEP_SRCS+= privsep-sun.c" >>$CONFIG_MK;;
*) echo "PRIVSEP_SRCS+= privsep-bsd.c" >>$CONFIG_MK;;
esac
@@ -796,6 +811,28 @@ fi
rm -f _clock_gettime.c _clock_gettime
$abort && exit 1
+if [ -z "$CLOSEFROM" ]; then
+ printf "Testing for closefrom ... "
+ cat <<EOF >_closefrom.c
+#include <unistd.h>
+int main(void) {
+ closefrom(3);
+ return 0;
+}
+EOF
+ if $XCC _closefrom.c -o _closefrom 2>&3; then
+ CLOSEFROM=yes
+ else
+ CLOSEFROM=no
+ fi
+ echo "$CLOSEFROM"
+fi
+rm -f _closefrom.c _closefrom
+if [ "$CLOSEFROM" = no ]; then
+ echo "COMPAT_SRCS+= compat/closefrom.c" >>$CONFIG_MK
+ echo "#include \"compat/closefrom.h\"" >>$CONFIG_H
+fi
+
printf "Testing ioctl request type ... "
cat <<EOF >_ioctl.c
#include <sys/ioctl.h>
@@ -848,8 +885,7 @@ if [ -z "$ARC4RANDOM" ]; then
cat <<EOF >_arc4random.c
#include <stdlib.h>
int main(void) {
- arc4random();
- return 0;
+ return (int)arc4random();
}
EOF
if $XCC _arc4random.c -o _arc4random 2>&3; then
@@ -870,8 +906,7 @@ if [ -z "$ARC4RANDOM_UNIFORM" ]; then
cat <<EOF >_arc4random_uniform.c
#include <stdlib.h>
int main(void) {
- arc4random_uniform(100);
- return 0;
+ return (int)arc4random_uniform(100);
}
EOF
if $XCC _arc4random_uniform.c -o _arc4random_uniform 2>&3; then
@@ -887,6 +922,76 @@ if [ "$ARC4RANDOM_UNIFORM" = no ]; then
echo "#include \"compat/arc4random_uniform.h\"" >>$CONFIG_H
fi
+# Our arc4random compat needs memset_explicit, explicit_bzero or memset_s
+if [ -z "$MEMSET_EXPLICIT" ]; then
+ printf "Testing for memset_explicit ... "
+ cat <<EOF >_memset_explicit.c
+#include <string.h>
+int main(void) {
+ int a;
+ (void)memset_explicit(&a, 0, sizeof(a));
+ return 0;
+}
+EOF
+ if $XCC _memset_explicit.c -o _memset_explicit 2>&3; then
+ MEMSET_EXPLICIT=yes
+ else
+ MEMSET_EXPLICIT=no
+ fi
+ echo "$MEMSET_EXPLICIT"
+ rm -f _memset_explicit.c _memset_explicit
+fi
+if [ "$MEMSET_EXPLICIT" = yes ]; then
+ echo "#define HAVE_MEMSET_EXPLICIT" >>$CONFIG_H
+fi
+
+if [ -z "$EXPLICIT_BZERO" ]; then
+ printf "Testing for explicit_bzero ... "
+ cat <<EOF >_explicit_bzero.c
+#define _BSD_SOURCE // musl, will be added for Linux in config.h
+#include <string.h>
+int main(void) {
+ int a;
+ explicit_bzero(&a, sizeof(a));
+ return 0;
+}
+EOF
+ if $XCC _explicit_bzero.c -o _explicit_bzero 2>&3; then
+ EXPLICIT_BZERO=yes
+ else
+ EXPLICIT_BZERO=no
+ fi
+ echo "$EXPLICIT_BZERO"
+ rm -f _explicit_bzero.c _explicit_bzero
+fi
+if [ "$EXPLICIT_BZERO" = yes ]; then
+ echo "#define HAVE_EXPLICIT_BZERO" >>$CONFIG_H
+fi
+
+if [ -z "$MEMSET_S" ]; then
+ printf "Testing for memset_s ... "
+ cat <<EOF >_memset_s.c
+#define __STDC_WANT_LIB_EXT1__ 1
+#include <string.h>
+int main(void) {
+ int a;
+ memset_s(&a, sizeof(a), 0, sizeof(a));
+ return 0;
+}
+EOF
+ if $XCC _memset_s.c -o _memset_s 2>&3; then
+ MEMSET_S=yes
+ else
+ MEMSET_S=no
+ fi
+ echo "$MEMSET_S"
+ rm -f _memset_s.c _memset_s
+fi
+if [ "$MEMSET_S" = yes ]; then
+ echo "#define __STDC_WANT_LIB_EXT1__ 1" >>$CONFIG_H
+ echo "#define HAVE_MEMSET_S" >>$CONFIG_H
+fi
+
if [ -z "$OPEN_MEMSTREAM" ]; then
printf "Testing for open_memstream ... "
cat <<EOF >_open_memstream.c
@@ -915,8 +1020,7 @@ if [ -z "$PIDFILE_LOCK" ]; then
#include <stdlib.h>
#include <util.h>
int main(void) {
- pidfile_lock(NULL);
- return 0;
+ return (int)pidfile_lock(NULL);
}
EOF
# We only want to link to libutil if it exists in /lib
@@ -985,8 +1089,7 @@ if [ -z "$STRLCPY" ]; then
int main(void) {
const char s1[] = "foo";
char s2[10];
- strlcpy(s2, s1, sizeof(s2));
- return 0;
+ return (int)strlcpy(s2, s1, sizeof(s2));
}
EOF
if $XCC _strlcpy.c -o _strlcpy 2>&3; then
@@ -1010,8 +1113,7 @@ if [ -z "$STRTOI" ]; then
#include <inttypes.h>
int main(void) {
int e;
- strtoi("1234", NULL, 0, 0, INT32_MAX, &e);
- return 0;
+ return (int)strtoi("1234", NULL, 0, 0, INT32_MAX, &e);
}
EOF
if $XCC _strtoi.c -o _strtoi 2>&3; then
@@ -1189,6 +1291,7 @@ EOF
rm -f _rbtree.c _rbtree
fi
if [ "$RBTREE" = no ]; then
+ echo "#define HAVE_NBTOOL_CONFIG_H 0" >>$CONFIG_H
echo "#define RBTEST" >>$CONFIG_H
echo "COMPAT_SRCS+= compat/rb.c" >>$CONFIG_MK
echo "#include \"compat/rbtree.h\"" >>$CONFIG_H
@@ -1221,6 +1324,9 @@ fi
# Set this for eloop
echo "#define HAVE_REALLOCARRAY" >>$CONFIG_H
+# Detect a polling mechanism.
+# See src/eloop.c as to why we only detect ppoll, pollts and pselect and
+# not others like epoll or kqueue.
if [ -z "$POLL" ]; then
printf "Testing for ppoll ... "
cat <<EOF >_ppoll.c
@@ -1263,8 +1369,7 @@ if [ -z "$POLL" ]; then
#include <sys/select.h>
#include <stdlib.h>
int main(void) {
- pselect(0, NULL, NULL, NULL, NULL, NULL);
- return 0;
+ return pselect(0, NULL, NULL, NULL, NULL, NULL);
}
EOF
if $XCC _pselect.c -o _pselect 2>&3; then
@@ -1276,6 +1381,17 @@ EOF
rm -f _pselect.c _pselect
fi
case "$POLL" in
+kqueue1)
+ echo "#define HAVE_KQUEUE" >>$CONFIG_H
+ echo "#define HAVE_KQUEUE1" >>$CONFIG_H
+ POLL=kqueue
+ ;;
+kqueue)
+ echo "#define HAVE_KQUEUE" >>$CONFIG_H
+ ;;
+epoll)
+ echo "#define HAVE_EPOLL" >>$CONFIG_H
+ ;;
ppoll)
echo "#define HAVE_PPOLL" >>$CONFIG_H
;;
@@ -1333,14 +1449,6 @@ if [ "$FLS64" = yes ]; then
echo "#define HAVE_SYS_BITOPS_H" >>$CONFIG_H
fi
-# Workaround for DragonFlyBSD import
-if [ "$OS" = dragonfly ]; then
- echo "#ifdef USE_PRIVATECRYPTO" >>$CONFIG_H
- echo "#define HAVE_MD5_H" >>$CONFIG_H
- echo "#define SHA2_H <openssl/sha.h>" >>$CONFIG_H
- echo "#else" >>$CONFIG_H
-fi
-
if [ -z "$MD5" ]; then
MD5_LIB=
printf "Testing for MD5Init ... "
@@ -1371,14 +1479,6 @@ EOF
echo "$MD5"
rm -f _md5.c _md5
fi
-if [ "$MD5" = no ]; then
- echo "#include \"compat/crypt/md5.h\"" >>$CONFIG_H
- echo "MD5_SRC= compat/crypt/md5.c" >>$CONFIG_MK
-else
- echo "MD5_SRC=" >>$CONFIG_MK
- echo "#define HAVE_MD5_H" >>$CONFIG_H
- [ -n "$MD5_LIB" ] && echo "LDADD+= $MD5_LIB" >>$CONFIG_MK
-fi
if [ -z "$SHA2_H" ]; then
if [ -z "$SHA2" ] || [ "$SHA2" != no ]; then
@@ -1464,23 +1564,6 @@ EOF
rm -f _sha256.c _sha256
fi
fi
-if [ "$SHA2" = no ]; then
- echo "#include \"compat/crypt/sha256.h\"" >>$CONFIG_H
- echo "SHA256_SRC= compat/crypt/sha256.c" >>$CONFIG_MK
-else
- echo "SHA256_SRC=" >>$CONFIG_MK
- echo "#define SHA2_H <$SHA2_H>" >>$CONFIG_H
- if [ "$SHA2_RENAMED" = yes ]; then
- echo "#define SHA256_CTX SHA2_CTX" >>$CONFIG_H
- echo "#define SHA256_Init SHA256Init" >>$CONFIG_H
- echo "#define SHA256_Update SHA256Update" >>$CONFIG_H
- echo "#define SHA256_Final SHA256Final" >>$CONFIG_H
- fi
- [ -n "$SHA2_LIB" ] && echo "LDADD+= $SHA2_LIB" >>$CONFIG_MK
-fi
-
-# Workarond for DragonFlyBSD import
-[ "$OS" = dragonfly ] && echo "#endif" >>$CONFIG_H
if [ -z "$HMAC" ]; then
HMAC_LIB=
@@ -1489,8 +1572,7 @@ if [ -z "$HMAC" ]; then
#include <stdlib.h>
#include <hmac.h>
int main(void) {
- hmac(NULL, NULL, 0, NULL, 0, NULL, 0);
- return 0;
+ return (int)hmac(NULL, NULL, 0, NULL, 0, NULL, 0);
}
EOF
if $XCC _hmac.c $MD5_LIB -o _hmac 2>&3; then
@@ -1502,8 +1584,7 @@ EOF
cat <<EOF >_hmac.c
#include <stdlib.h>
int main(void) {
- hmac(NULL, NULL, 0, NULL, 0, NULL, 0);
- return 0;
+ return (int)hmac(NULL, NULL, 0, NULL, 0, NULL, 0);
}
EOF
if $XCC _hmac.c $MD5_LIB -o _hmac 2>&3; then
@@ -1515,7 +1596,108 @@ EOF
echo "$HMAC"
rm -f _hmac.c _hmac
fi
-if [ "$HMAC" = no ]; then
+
+if [ "$OPENSSL" = yes ] ||
+ { [ -z "$OPENSSL" ] && [ "$ALLOW_USR_LIBS" = true ] &&
+ [ "$SHA2" = no ] && [ "$HMAC" = no ];
+ }; then
+ printf "Testing for openssl ... "
+ if type "$PKG_CONFIG" >/dev/null 2>&1; then
+ LIBCRYPTO_CFLAGS=$("$PKG_CONFIG" --cflags libcrypto 2>&3)
+ LIBCRYPTO_LIBS=$("$PKG_CONFIG" --libs libcrypto 2>&3)
+ fi
+
+ cat <<EOF >_openssl.c
+#include <stdio.h>
+#include <openssl/crypto.h>
+int main(void) {
+ return OPENSSL_init_crypto(0, NULL) == 1;
+}
+EOF
+ if $XCC $LIBCRYPTO_CFLAGS _openssl.c -o _openssl $LIBCRYPTO_LIBS 2>&3;
+ then
+ OPENSSL=yes
+ MD5=yes
+ MD5_LIB=
+ if [ -n "$LIBCRYPTO_CFLAGS" ]; then
+ echo "CFLAGS+= $LIBCRYPTO_CFLAGS" >>$CONFIG_MK
+ fi
+ echo "LDADD+= $LIBCRYPTO_LIBS" >>$CONFIG_MK
+ echo "#define HAVE_OPENSSL" >>$CONFIG_H
+ else
+ OPENSSL=no
+ fi
+ echo "$OPENSSL"
+ rm -f _openssl.c _openssl
+fi
+
+if [ "$OPENSSL" = yes ]; then
+ printf "Testing for openssl/sha.h ... "
+ cat <<EOF >_openssl_sha.c
+#include <stdio.h>
+#include <openssl/sha.h>
+
+int main(void) {
+ SHA256_CTX ctx;
+ SHA256_Init(&ctx);
+ return 0;
+}
+EOF
+ if $XCC $LIBCRYPTO_CFLAGS _openssl_sha.c -o _openssl_sha \
+ $LIBCRYPTO_LIBS 2>&3; then
+ SHA2_H=openssl/sha.h
+ SHA2="yes (-lcrypto)"
+ else
+ SHA2=no
+ fi
+ SHA2_LIB=
+ SHA2_RENAMED=
+ echo "$SHA2"
+ rm -f _openssl_sha.c _openssl_sha
+fi
+
+# Workaround for DragonFlyBSD import
+if [ "$OS" = dragonfly ]; then
+ echo "#ifdef USE_PRIVATECRYPTO" >>$CONFIG_H
+ echo "#define HAVE_MD5_H" >>$CONFIG_H
+ echo "#define SHA2_H <openssl/sha.h>" >>$CONFIG_H
+ echo "#else" >>$CONFIG_H
+fi
+
+if [ "$MD5" = no ]; then
+ echo "#include \"compat/crypt/md5.h\"" >>$CONFIG_H
+ echo "MD5_SRC= compat/crypt/md5.c" >>$CONFIG_MK
+else
+ echo "MD5_SRC=" >>$CONFIG_MK
+ [ "$OPENSSL" != yes ] && echo "#define HAVE_MD5_H" >>$CONFIG_H
+ [ -n "$MD5_LIB" ] && echo "LDADD+= $MD5_LIB" >>$CONFIG_MK
+fi
+
+if [ "$OPENSSL" = yes ] && [ "$SHA2" = no ]; then
+ echo "#include \"compat/crypt_openssl/sha256.h\"" >>$CONFIG_H
+ echo "SHA256_SRC= compat/crypt_openssl/sha256.c" >>$CONFIG_MK
+elif [ "$SHA2" = no ]; then
+ echo "#include \"compat/crypt/sha256.h\"" >>$CONFIG_H
+ echo "SHA256_SRC= compat/crypt/sha256.c" >>$CONFIG_MK
+else
+ echo "SHA256_SRC=" >>$CONFIG_MK
+ echo "#define SHA2_H <$SHA2_H>" >>$CONFIG_H
+ if [ "$SHA2_RENAMED" = yes ]; then
+ echo "#define SHA256_CTX SHA2_CTX" >>$CONFIG_H
+ echo "#define SHA256_Init SHA256Init" >>$CONFIG_H
+ echo "#define SHA256_Update SHA256Update" >>$CONFIG_H
+ echo "#define SHA256_Final SHA256Final" >>$CONFIG_H
+ fi
+ [ -n "$SHA2_LIB" ] && echo "LDADD+= $SHA2_LIB" >>$CONFIG_MK
+fi
+
+# Workarond for DragonFlyBSD import
+[ "$OS" = dragonfly ] && echo "#endif" >>$CONFIG_H
+
+if [ "$OPENSSL" = yes ]; then
+ echo "#include \"compat/crypt_openssl/hmac.h\"" >>$CONFIG_H
+ echo "HMAC_SRC= compat/crypt_openssl/hmac.c" >>$CONFIG_MK
+elif [ "$HMAC" = no ]; then
echo "#include \"compat/crypt/hmac.h\"" >>$CONFIG_H
echo "HMAC_SRC= compat/crypt/hmac.c" >>$CONFIG_MK
else
@@ -1575,8 +1757,7 @@ if [ "$DEV" != no ] && [ "$UDEV" != no ] && [ -n "$LIBUDEV_LIBS" ]; then
#include <libudev.h>
#include <stdlib.h>
int main(void) {
- udev_monitor_filter_add_match_subsystem_devtype(NULL, NULL, NULL);
- return 0;
+ return udev_monitor_filter_add_match_subsystem_devtype(NULL, NULL, NULL);
}
EOF
if $XCC $LIBUDEV_CFLAGS _udev.c -o _udev $LIBUDEV_LIBS 2>&3
@@ -1593,8 +1774,7 @@ EOF
#include <libudev.h>
#include <stdlib.h>
int main(void) {
- udev_device_get_is_initialized(NULL);
- return 0;
+ return udev_device_get_is_initialized(NULL);
}
EOF
if $XCC $LIBUDEV_CFLAGS _udev.c -o _udev $LIBUDEV_LIBS 2>&3
@@ -1693,6 +1873,21 @@ if ! $HOOKSET; then
echo "NTP will default to $NTPD"
fi
+ printf "Checking for timesyncd ... "
+ TIMESYNCD=
+ for x in /usr/lib/systemd/systemd-timesyncd; do
+ if [ -x "$x" ]; then
+ TIMESYNCD=$x
+ break
+ fi
+ done
+ if [ -n "$TIMESYNCD" ]; then
+ echo "$TIMESYNCD"
+ HOOKS="$HOOKS${HOOKS:+ }50-timesyncd.conf"
+ else
+ echo "not found"
+ fi
+
printf "Checking for ypbind ... "
YPBIND=$(_which ypbind)
if [ -n "$YPBIND" ]; then
@@ -1749,6 +1944,9 @@ if ! $HOOKSET; then
fi
fi
+echo >>$CONFIG_H
+echo "#endif /*CONFIG_H*/">>$CONFIG_H
+
find_hook()
{
for h in [0-9][0-9]"-$x" [0-9][0-9]"-$x.in" \