Home | History | Annotate | Download | only in dhcpcd-6.8.2
      1 #!/bin/sh
      2 # Try and be like autotools configure, but without autotools
      3 
      4 echo "configure args: $*"
      5 exec 3>config.log
      6 
      7 # Ensure that we do not inherit these from env
      8 HOOKSET=false
      9 INET=
     10 INET6=
     11 ARC4RANDOM=
     12 CLOSEFROM=
     13 GETLINE=
     14 STRLCPY=
     15 UDEV=
     16 OS=
     17 BUILD=
     18 HOST=
     19 HOSTCC=
     20 TARGET=
     21 DEBUG=
     22 FORK=
     23 STATIC=
     24 INCLUDEDIR=
     25 DEVS=
     26 EMBEDDED=
     27 POLL=
     28 DBUS=
     29 
     30 for x do
     31 	opt=${x%%=*}
     32 	var=${x#*=}
     33 	case "$opt" in
     34 	--os|OS) OS=$var;;
     35 	--debug) DEBUG=$var;;
     36 	--disable-debug) DEBUG=no;;
     37 	--enable-debug) DEBUG=yes;;
     38 	--fork) FORK=$var;;
     39 	--disable-fork) FORK=no;;
     40 	--enable-fork) FORK=yes;;
     41 	--disable-static) STATIC=no;;
     42 	--enable-static) STATIC=yes;;
     43 	--disable-ipv4) INET=no;;
     44 	--enable-ipv4) INET=yes;;
     45 	--disable-ipv6) INET6=no;;
     46 	--enable-ipv6) INET6=yes;;
     47 	--disable-embedded) EMBEDDED=no;;
     48 	--enable-embedded) EMBEDDED=yes;;
     49 	--enable-dbus) DBUS=yes;;
     50 	--disable-dbus) DBUS=no;;
     51 	--prefix) PREFIX=$var;;
     52 	--sysconfdir) SYSCONFDIR=$var;;
     53 	--bindir|--sbindir) SBINDIR=$var;;
     54 	--libexecdir) LIBEXECDIR=$var;;
     55 	--statedir|--localstatedir) STATEDIR=$var;;
     56 	--dbdir) DBDIR=$var;;
     57 	--rundir) RUNDIR=$var;;
     58 	--mandir) MANDIR=$var;;
     59 	--with-ccopts|CFLAGS) CFLAGS=$var;;
     60 	CC) CC=$var;;
     61 	CPPFLAGS) CPPFLAGS=$var;;
     62 	--with-hook) HOOKSCRIPTS="$HOOKSCRIPTS${HOOKSCRIPTS:+ }$var";;
     63 	--with-hooks|HOOKSCRIPTS) HOOKSCRIPTS=$var; HOOKSET=true;;
     64 	--build) BUILD=$var;;
     65 	--host) HOST=$var; HOSTCC=$var-;;
     66 	--target) TARGET=$var;;
     67 	--libdir) LIBDIR=$var;;
     68 	--without-arc4random) ARC4RANDOM=no;;
     69 	--without-closefrom) CLOSEFROM=no;;
     70 	--without-getline) GETLINE=no;;
     71 	--without-strlcpy) STRLCPY=no;;
     72         --without-posix_spawn) POSIX_SPAWN=no;;
     73 	--without-md5) MD5=no;;
     74 	--without-sha2) SHA2=no;;
     75 	--without-sha256) SHA2=no;;
     76 	--without-dev) DEV=no;;
     77 	--without-udev) UDEV=no;;
     78 	--with-poll) POLL="$var";;
     79 	--serviceexists) SERVICEEXISTS=$var;;
     80 	--servicecmd) SERVICECMD=$var;;
     81 	--servicestatus) SERVICESTATUS=$var;;
     82 	--includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";;
     83 	--datadir|--infodir) ;; # ignore autotools
     84 	--disable-maintainer-mode|--disable-dependency-tracking) ;;
     85 	--disable-silent-rules) ;;
     86 	-V|--version)
     87 		v=$(sed -ne 's/.*VERSION[[:space:]]*"\([^"]*\).*/\1/p' defs.h);
     88 		c=$(sed -ne 's/^.*copyright\[\] = "\([^"]*\).*/\1/p' dhcpcd.c);
     89 		echo "dhcpcd-$v $c";
     90 		exit 0;;
     91 	-h|--help) cat <<EOF
     92 \`configure' configures this package to adapt to many kinds of systems.
     93 
     94 Usage: configure [OPTION]... [VAR=VALUE]...
     95 
     96 To assign environment variables (e.g., CC, CFLAGS...), specify them as
     97 VAR=VALUE.  See below for descriptions of some of the useful variables.
     98 
     99 Defaults for the options are specified in brackets.
    100 
    101 Configuration:
    102   -h, --help              display this help and exit
    103       --help=short        display options specific to this package
    104   -V, --version           display version information and exit
    105 
    106 Installation directories:
    107   --prefix=PREFIX         install architecture-independent files in PREFIX [/]
    108 
    109 By default, \`make install' will install all the files in \'/sbin',
    110 \`/libexec', etc. You can specify
    111 an installation prefix other than \`/' using \`--prefix',
    112 for instance \`--prefix=$HOME'.
    113 
    114 For better control, use the options below.
    115 
    116 Fine tuning of the installation directories:
    117   --bindir=DIR            user executables [PREFIX/bin]
    118   --sbindir=DIR           system admin executables [PREFIX/sbin]
    119   --libexecdir=DIR        program executables [PREFIX/libexec]
    120   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
    121   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    122   --libdir=DIR            object code libraries [PREFIX/lib]
    123   --includedir=DIR        C header files [PREFIX/include]
    124   --mandir=DIR            man documentation [PREFIX/man]
    125 
    126 System types:
    127   --build=BUILD           configure for building on BUILD [guessed]
    128   --host=HOST       build programs to run on HOST [BUILD]
    129   --target=TARGET   configure for building compilers for TARGET [HOST]
    130 
    131 Optional Features:
    132   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
    133   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
    134 
    135 Some influential environment variables:
    136   CC          C compiler command
    137   CFLAGS      C compiler flags
    138   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
    139               nonstandard directory <lib dir>
    140   CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
    141               headers in a nonstandard directory <include dir>
    142   CPP         C preprocessor
    143 
    144 Use these variables to override the choices made by \`configure' or to help
    145 it to find libraries and programs with nonstandard names/locations.
    146 EOF
    147 exit 0
    148 ;;
    149 	*) echo "$0: WARNING: unknown option $opt" >&2;;
    150 	esac
    151 done
    152 
    153 : ${SED:=sed}
    154 : ${GREP:=grep}
    155 : ${WC:=wc}
    156 
    157 : ${FORK:=yes}
    158 : ${SYSCONFDIR:=$PREFIX/etc}
    159 : ${SBINDIR:=$PREFIX/sbin}
    160 : ${LIBDIR:=$PREFIX/lib}
    161 : ${LIBEXECDIR:=$PREFIX/libexec}
    162 : ${STATEDIR:=/var}
    163 : ${DBDIR:=$STATEDIR/db}
    164 : ${RUNDIR:=$STATEDIR/run}
    165 : ${MANDIR:=${PREFIX:-/usr}/share/man}
    166 
    167 eval SYSCONFDIR="$SYSCONFDIR"
    168 eval LIBDIR="$LIBDIR"
    169 eval LIBEXECDIR="$LIBEXECDIR"
    170 eval STATEDIR="$STATEDIR"
    171 eval DBDIR="$DBDIR"
    172 eval RUNDIR="$RUNDIR"
    173 eval MANDIR="$MANDIR"
    174 
    175 _which()
    176 {
    177 	x="$(which "$1" 2>/dev/null)"
    178 	if [ -n "$x" ]; then
    179 		echo "$x"
    180 		return 0
    181 	fi
    182 	for x in /sbin/"$1" /usr/sbin/"$1" \
    183 		/usr/pkg/sbin/"$1" /usr/local/sbin/"$1"
    184 	do
    185 		if [ -e "$x" ]; then
    186 			echo "$x"
    187 			return 0
    188 		fi
    189 	done
    190 	return 1
    191 }
    192 
    193 CONFIG_H=config.h
    194 CONFIG_MK=config.mk
    195 
    196 if [ -z "$BUILD" ]; then
    197 	# autoconf target triplet: cpu-vendor-os
    198 	BUILD=$(uname -m)-unknown-$(uname -s | tr '[:upper:]' '[:lower:]')
    199 fi
    200 : ${HOST:=$BUILD}
    201 
    202 if [ -z "$OS" ]; then
    203 	echo "Deriving operating system from ... $HOST"
    204 	# Derive OS from cpu-vendor-[kernel-]os
    205 	CPU=${HOST%%-*}
    206 	REST=${HOST#*-}
    207 	if [ "$CPU" != "$REST" ]; then
    208 		VENDOR=${REST%%-*}
    209 		REST=${REST#*-}
    210 		if [ "$VENDOR" != "$REST" ]; then
    211 			# Use kernel if given, otherwise os
    212 			OS=${REST%%-*}
    213 		else
    214 			# 2 tupple
    215 			OS=$VENDOR
    216 			VENDOR=
    217 		fi
    218 	fi
    219 
    220         # Work with cpu-kernel-os, ie Debian
    221 	case "$VENDOR" in
    222 	linux*|kfreebsd*) OS=$VENDOR; VENDOR= ;;
    223 	esac
    224 	# Special case
    225 	case "$OS" in
    226 	gnu*) OS=hurd;; # No HURD support as yet
    227 	esac
    228 fi
    229 
    230 echo "Configuring dhcpcd for ... $OS"
    231 rm -f $CONFIG_H $CONFIG_MK
    232 echo "# $OS" >$CONFIG_MK
    233 echo "/* $OS */" >$CONFIG_H
    234 
    235 for x in SYSCONFDIR SBINDIR LIBDIR LIBEXECDIR DBDIR RUNDIR; do
    236 	eval v=\$$x
    237 	# Make files look nice for import
    238 	l=$((10 - ${#x}))
    239 	unset t
    240 	[ $l -gt 3 ] && t="	"
    241 	echo "$x=$t	$v" >>$CONFIG_MK
    242 	unset t
    243 	[ $l -gt 2 ] && t="	"
    244 	echo "#define $x$t	\"$v\"" >>$CONFIG_H
    245 done
    246 echo "LIBDIR=		$LIBDIR" >>$CONFIG_MK
    247 echo "MANDIR=		$MANDIR" >>$CONFIG_MK
    248 
    249 # Always obey CC.
    250 if [ -n "$CC" ]; then
    251 	HOSTCC=
    252 else
    253 	CC=cc
    254 	_COMPILERS="cc clang gcc pcc icc"
    255 fi
    256 # Only look for a cross compiler if --host and --build are not the same
    257 if [ -n "$HOSTCC" -a "$BUILD" != "$HOST" ]; then
    258 	for _CC in $_COMPILERS; do
    259 		_CC=$(_which "$HOSTCC$_CC")
    260 		if [ -x "$_CC" ]; then
    261 			CC=$_CC
    262 			break
    263 		fi
    264 	done
    265 fi
    266 if ! type "$CC" >/dev/null 2>&1; then
    267 	for _CC in $_COMPILERS; do
    268 		_CC=$(_which "$_CC")
    269 		if [ -x "$_CC" ]; then
    270 			CC=$_CC
    271 			break
    272 		fi
    273 	done
    274 fi
    275 
    276 # Set to blank, then append user config
    277 # We do this so our SED call to append to XCC remains portable
    278 if [ -n "$CFLAGS" ]; then
    279 	echo "CFLAGS=" >>$CONFIG_MK
    280 	echo "CFLAGS+=	$CFLAGS" >>$CONFIG_MK
    281 fi
    282 if [ -n "$CPPFLAGS" ]; then
    283 	echo "CPPFLAGS=" >>$CONFIG_MK
    284 	echo "CPPFLAGS+=	$CPPFLAGS" >>$CONFIG_MK
    285 fi
    286 if [ -n "$LDFLAGS" ]; then
    287 	echo "LDFLAGS=" >>$CONFIG_MK
    288 	echo "LDFLAGS+=	$LDFLAGS" >>$CONFIG_MK
    289 fi
    290 
    291 # NetBSD: Even if we build for $PREFIX, the clueless user might move us to /
    292 LDELF=/libexec/ld.elf_so
    293 if [ -e "$LDELF" ]; then
    294 	echo "Linking against $LDELF"
    295 	echo "LDFLAGS+=	-Wl,-dynamic-linker=$LDELF" >>$CONFIG_MK
    296 	echo "LDFLAGS+=	-Wl,-rpath=${LIBDIR}" >>$CONFIG_MK
    297 fi
    298 
    299 if [ -z "$PREFIX" -o "$PREFIX" = / ]; then
    300 	ALLOW_USR_LIBS=false
    301 else
    302 	ALLOW_USR_LIBS=true
    303 fi
    304 case "$OS" in
    305 linux*|sunos*) ;;
    306 *)
    307 	if ! [ -x "$LDELF" -o -x /libexec/ld-elf.so.[0-9]* ] && \
    308 	    [ -z "$PREFIX" -o "$PREFIX" = "/" ]
    309 	then
    310 		echo "Forcing a static build for $OS and \$PREFIX of /"
    311 		STATIC=yes
    312 		ALLOW_USR_LIBS=true
    313 	fi
    314 	;;
    315 esac
    316 if [ "$STATIC" = yes ]; then
    317 	echo "LDFLAGS+=	-static" >>$CONFIG_MK
    318 fi
    319 for x in $INCLUDEDIR; do
    320 	echo "CPPFLAGS+=	-I$x" >>$CONFIG_MK
    321 done
    322 
    323 if [ -z "$DEBUG" -a -f .fslckout ]; then
    324 	printf "Found fossil checkout ... "
    325 	DEBUG=yes
    326 fi
    327 if [ -n "$DEBUG" -a "$DEBUG" != no -a "$DEBUG" != false ]; then
    328 	echo "Adding debugging CFLAGS"
    329 	cat <<EOF >>$CONFIG_MK
    330 CFLAGS+=	-g -Wall -Wextra
    331 CFLAGS+=	-Wmissing-prototypes -Wmissing-declarations
    332 CFLAGS+=	-Wmissing-format-attribute -Wnested-externs
    333 CFLAGS+=	-Winline -Wcast-align -Wcast-qual -Wpointer-arith
    334 CFLAGS+=	-Wreturn-type -Wswitch -Wshadow
    335 CFLAGS+=	-Wcast-qual -Wwrite-strings
    336 CFLAGS+=	-Wconversion
    337 CFLAGS+=	-Wformat=2
    338 CFLAGS+=	-Wpointer-sign -Wmissing-noreturn
    339 EOF
    340 	case "$OS" in
    341 	mirbsd*|openbsd*);; # OpenBSD has many redundant decs in system headers
    342 	*)		echo "CFLAGS+=	-Wredundant-decls" >>$CONFIG_MK;;
    343 	esac
    344 
    345 	case "$OS" in
    346 	sunos*);;
    347 	*)		echo "CFLAGS+=	-Wstrict-overflow" >>$CONFIG_MK;;
    348 	esac
    349 fi
    350 
    351 if [ -z "$EMBEDDED" -o "$EMBEDDED" = yes ]; then
    352 	echo "dhcpcd-definitions.conf will be embedded in dhcpcd itself"
    353 	echo "DHCPCD_SRCS+=	dhcpcd-embedded.c" >>$CONFIG_MK
    354 else
    355 	echo "dhcpcd-definitions.conf will be installed to $LIBEXECDIR"
    356 	echo "CFLAGS+= -DEMBEDDED_CONFIG=\\\"$LIBEXECDIR/dhcpcd-definitions.conf\\\"" >>$CONFIG_MK
    357 	echo "EMBEDDEDINSTALL=	_embeddedinstall" >>$CONFIG_MK
    358 fi
    359 
    360 if [ -n "$FORK" -a "$FORK" != yes -a "$FORK" != true ]; then
    361 	echo "There is no fork"
    362 	echo "CPPFLAGS+=	-DTHERE_IS_NO_FORK" >>$CONFIG_MK
    363 fi
    364 
    365 case "$OS" in
    366 freebsd*|kfreebsd*)
    367 	echo "CPPFLAGS+=	-D_GNU_SOURCE" >>$CONFIG_MK
    368 	echo "DHCPCD_SRCS+=	if-bsd.c" >>$CONFIG_MK
    369 	;;
    370 linux*)
    371 	echo "CPPFLAGS+=	-D_GNU_SOURCE" >>$CONFIG_MK
    372 	# Large File Support, should be fine for 32-bit systems.
    373 	# But if this is the case, why is it not set by default?
    374 	echo "CPPFLAGS+=	-D_FILE_OFFSET_BITS=64" >>$CONFIG_MK
    375 	echo "CPPFLAGS+=	-D_LARGEFILE_SOURCE" >>$CONFIG_MK
    376 	echo "CPPFLAGS+=	-D_LARGEFILE64_SOURCE" >>$CONFIG_MK
    377 	echo "DHCPCD_SRCS+=	if-linux.c" >>$CONFIG_MK
    378 	# for RTM_NEWADDR and friends
    379 	echo "#include		<asm/types.h> /* fix broken headers */" >>$CONFIG_H
    380 	echo "#include		<linux/rtnetlink.h>" >>$CONFIG_H
    381 	;;
    382 qnx*)
    383 	echo "CPPFLAGS+=	-D__EXT" >>$CONFIG_MK
    384 	echo "DHCPCD_SRCS+=	if-bsd.c" >>$CONFIG_MK
    385 	;;
    386 sunos*)
    387 	echo "WARNING!!! Solaris support is at early development stage!" >&2
    388 	echo "so don't expect it to work just yet, patches welcome" >&2
    389 	echo "CPPFLAGS+=	-D_XPG4_2 -D__EXTENSIONS__ -DBSD_COMP" \
    390 	    >>$CONFIG_MK
    391 	echo "DHCPCD_SRCS+=	if-sun.c" >>$CONFIG_MK
    392 
    393 	# IPv6 won't work, but it will at least compile.
    394 	echo "CPPFLAGS+=	-DIN6_IFF_DETACHED=0" >>$CONFIG_MK
    395 	echo "CPPFLAGS+=	-DIN6_IFF_TENTATIVE=0" >>$CONFIG_MK
    396 	echo "CPPFLAGS+=	-DIN6_IFF_DUPLICATED=0" >>$CONFIG_MK
    397 	;;
    398 *)
    399 	echo "DHCPCD_SRCS+=	if-bsd.c" >>$CONFIG_MK
    400 	;;
    401 esac
    402 
    403 if [ -z "$INET" -o "$INET" = yes ]; then
    404 	echo "CPPFLAGS+=	-DINET" >>$CONFIG_MK
    405 	echo "DHCPCD_SRCS+=	arp.c dhcp.c ipv4.c ipv4ll.c" >>$CONFIG_MK
    406 fi
    407 if [ -z "$INET6" -o "$INET6" = yes ]; then
    408 	echo "CPPFLAGS+=	-DINET6" >>$CONFIG_MK
    409 	echo "DHCPCD_SRCS+=	ipv6.c ipv6nd.c dhcp6.c" >>$CONFIG_MK
    410 fi
    411 
    412 if [ "$DBUS" = yes ]; then
    413 	echo "DBUS_SUPPORT= yes" >>$CONFIG_MK
    414 	echo "DBUSINSTALL=  _dbusinstall" >>$CONFIG_MK
    415 	echo "CPPFLAGS+=    -DPASSIVE_MODE" >>$CONFIG_MK
    416 	echo "DHCPCD_SRCS+= dbus/dbus-dict.c dbus/rpc-dbus.c" >>$CONFIG_MK
    417 else
    418 	echo "DHCPCD_SRCS+= rpc-stub.c" >>$CONFIG_MK
    419 fi
    420 
    421 if [ -z  "$HOOKSCRIPTS" ]; then
    422 	echo "DHCPCD_SRCS+= script-stub.c" >>$CONFIG_MK
    423 else
    424 	echo "HOOK_SUPPORT= yes" >>$CONFIG_MK
    425 	echo "SCRIPTSINSTALL=  _scriptsinstall" >>$CONFIG_MK
    426 	echo "DHCPCD_SRCS+= script.c" >>$CONFIG_MK
    427 fi
    428 
    429 echo "Using compiler .. $CC"
    430 # Add CPPFLAGS and CFLAGS to CC for testing features
    431 XCC="$CC `$SED -n -e 's/CPPFLAGS+=*\(.*\)/\1/p' $CONFIG_MK`"
    432 XCC="$XCC `$SED -n -e 's/CFLAGS+=*\(.*\)/\1/p' $CONFIG_MK`"
    433 
    434 # Now test we can use the compiler with our CFLAGS
    435 cat <<EOF >_test.c
    436 int main(void) {
    437 	return 0;
    438 }
    439 EOF
    440 _CC=false
    441 if $XCC _test.c -o _test >/dev/null 2>&3; then
    442 	[ -x _test ] && _CC=true
    443 fi
    444 rm -f _test.c _test
    445 if ! $_CC; then
    446 	echo "$CC does not create executables"
    447 	exit 1
    448 fi
    449 [ "$CC" != cc ] && echo "CC=	$CC" >>$CONFIG_MK
    450 $CC --version | $SED -e '1!d'
    451 
    452 if [ "$OS" = linux ]; then
    453 	printf "Testing for nl80211 ... "
    454 	cat <<EOF >_nl80211.c
    455 #include <linux/nl80211.h>
    456 int main(void) {
    457 	return 0;
    458 }
    459 EOF
    460 	if $XCC _nl80211.c -o _nl80211 2>&3; then
    461 		echo "yes"
    462 		echo "#define HAVE_NL80211_H" >>$CONFIG_H
    463 	else
    464 		echo "no"
    465 	fi
    466 	rm -f _nl80211.c _nl80211
    467 
    468 	# Even though we have nl80211, we only use it as a fallback
    469 	# because it's currently possible to configure a kernel
    470 	# where the SSID associated to won't be reported by nl80211
    471 	# but will be via WEXT.
    472 	echo "DHCPCD_SRCS+=	if-linux-wext.c" >>$CONFIG_MK
    473 fi
    474 
    475 abort=false
    476 # We require the libc to support non standard functions, like getifaddrs
    477 printf "Testing for getifaddrs ... "
    478 cat <<EOF >_getifaddrs.c
    479 #include <sys/types.h>
    480 #include <ifaddrs.h>
    481 int main(void) {
    482 	struct ifaddrs *ifap;
    483 	return getifaddrs(&ifap);
    484 }
    485 EOF
    486 if $XCC _getifaddrs.c -o _getifaddrs 2>&3; then
    487 	echo "yes"
    488 elif $XCC _getifaddrs.c -o _getifaddrs -lsocket 2>&3; then
    489 	echo "yes (-lsocket)"
    490 	echo "LDADD+=		-lsocket" >>$CONFIG_MK
    491 else
    492 	echo "no"
    493 	echo "libc support for getifaddrs is required - aborting" >&2
    494 	abort=true
    495 fi
    496 rm -f _getifaddrs.c _getifaddrs
    497 $abort && exit 1
    498 
    499 printf "Testing for clock_gettime ... "
    500 cat <<EOF >_clock_gettime.c
    501 #include <time.h>
    502 int main(void) {
    503 	struct timespec ts;
    504 	return clock_gettime(CLOCK_MONOTONIC, &ts);
    505 }
    506 EOF
    507 if $XCC _clock_gettime.c -o _clock_gettime 2>&3; then
    508 	echo "yes"
    509 elif $XCC _clock_gettime.c -lrt -o _clock_gettime 2>&3; then
    510 	echo "yes (-lrt)"
    511 	echo "LDADD+=		-lrt" >>$CONFIG_MK
    512 else
    513 	echo "no"
    514 	echo "libc support for clock_getttime is required - aborting" >&2
    515 	abort=true
    516 fi
    517 rm -f _clock_gettime.c _clock_gettime
    518 $abort && exit 1
    519 
    520 printf "Testing for inet_ntoa ... "
    521 cat <<EOF >_inet_ntoa.c
    522 #include <netinet/in.h>
    523 #include <arpa/inet.h>
    524 int main(void) {
    525 	struct in_addr in;
    526 	inet_ntoa(in);
    527 	return 0;
    528 }
    529 EOF
    530 if $XCC _inet_ntoa.c -o _inet_ntoa 2>&3; then
    531 	echo "yes"
    532 elif $XCC _inet_ntoa.c -lnsl -o _inet_ntoa 2>&3; then
    533 	echo "yes (-lnsl)"
    534 	echo "LDADD+=		-lnsl" >>$CONFIG_MK
    535 elif $XCC _inet_ntoa.c -lsocket -o _inet_ntoa 2>&3; then
    536 	echo "yes (-lsocket)"
    537 	echo "LDADD+=		-lsocket" >>$CONFIG_MK	
    538 else
    539 	echo "no"
    540 	echo "libc support for inet_ntoa is required - aborting" >&2
    541 	abort=true
    542 fi
    543 rm -f _inet_ntoa.c _inet_ntoa
    544 $abort && exit 1
    545 
    546 if [ -z "$ARC4RANDOM" ]; then
    547 	printf "Testing for arc4random ... "
    548 	cat <<EOF >_arc4random.c
    549 #include <stdlib.h>
    550 int main(void) {
    551 	arc4random();
    552 	return 0;
    553 }
    554 EOF
    555 	if $XCC _arc4random.c -o _arc4random 2>&3; then
    556 		ARC4RANDOM=yes
    557 	else
    558 		ARC4RANDOM=no
    559 	fi
    560 	echo "$ARC4RANDOM"
    561 	rm -f _arc4random.c _arc4random
    562 fi
    563 if [ "$ARC4RANDOM" = no ]; then
    564 	echo "COMPAT_SRCS+=	compat/arc4random.c" >>$CONFIG_MK
    565 	echo "#include		\"compat/arc4random.h\"" >>$CONFIG_H
    566 fi
    567 
    568 if [ -z "$ARC4RANDOM_UNIFORM" ]; then
    569 	printf "Testing for arc4random_uniform ... "
    570 	cat <<EOF >_arc4random_uniform.c
    571 #include <stdlib.h>
    572 int main(void) {
    573 	arc4random_uniform(100);
    574 	return 0;
    575 }
    576 EOF
    577 	if $XCC _arc4random_uniform.c -o _arc4random_uniform 2>&3; then
    578 		ARC4RANDOM_UNIFORM=yes
    579 	else
    580 		ARC4RANDOM_UNIFORM=no
    581 	fi
    582 	echo "$ARC4RANDOM"
    583 	rm -f _arc4random_uniform.c _arc4random_uniform
    584 fi
    585 if [ "$ARC4RANDOM_UNIFORM" = no ]; then
    586 	echo "COMPAT_SRCS+=	compat/arc4random_uniform.c" >>$CONFIG_MK
    587 	echo "#include		\"compat/arc4random_uniform.h\"" >>$CONFIG_H
    588 fi
    589 
    590 if [ -z "$CLOSEFROM" ]; then
    591 	printf "Testing for closefrom ... "
    592 	cat <<EOF >_closefrom.c
    593 #include <unistd.h>
    594 int main(void) {
    595 	closefrom(3);
    596 	return 0;
    597 }
    598 EOF
    599 	if $XCC _closefrom.c -o _closefrom 2>&3; then
    600 		CLOSEFROM=yes
    601 	else
    602 		CLOSEFROM=no
    603 	fi
    604 	echo "$CLOSEFROM"
    605 	rm -f _closefrom.c _closefrom
    606 fi
    607 if [ "$CLOSEFROM" = no ]; then
    608 	echo "COMPAT_SRCS+=	compat/closefrom.c" >>$CONFIG_MK
    609 	echo "#include		\"compat/closefrom.h\"" >>$CONFIG_H
    610 fi
    611 
    612 if [ -z "$GETLINE" ]; then
    613 	printf "Testing for getline ... "
    614 	cat <<EOF >_getline.c
    615 #include <stdio.h>
    616 int main(void) {
    617 	char *buf = NULL;
    618 	size_t n = 0;
    619 	getline(&buf, &n, stdin);
    620 	return 0;
    621 }
    622 EOF
    623 	if $XCC _getline.c -o _getline 2>&3; then
    624 		GETLINE=yes
    625 	else
    626 		GETLINE=no
    627 	fi
    628 	echo "$GETLINE"
    629 	rm -f _getline.c _getline
    630 fi
    631 if [ "$GETLINE" = no ]; then
    632 	echo "COMPAT_SRCS+=	compat/getline.c" >>$CONFIG_MK
    633 	echo "#include		\"compat/getline.h\"" >>$CONFIG_H
    634 fi
    635 
    636 if [ -z "$STRLCPY" ]; then
    637 	printf "Testing for strlcpy ... "
    638 	cat <<EOF >_strlcpy.c
    639 #include <string.h>
    640 int main(void) {
    641 	const char s1[] = "foo";
    642 	char s2[10];
    643 	strlcpy(s2, s1, sizeof(s2));
    644 	return 0;
    645 }
    646 EOF
    647 	if $XCC _strlcpy.c -o _strlcpy 2>&3; then
    648 		STRLCPY=yes
    649 	else
    650 		STRLCPY=no
    651 	fi
    652 	echo "$STRLCPY"
    653 	rm -f _strlcpy.c _strlcpy
    654 fi
    655 if [ "$STRLCPY" = no ]; then
    656 	echo "COMPAT_SRCS+=	compat/strlcpy.c" >>$CONFIG_MK
    657 	echo "#include		\"compat/strlcpy.h\"" >>$CONFIG_H
    658 fi
    659 
    660 if [ -z "$STRTOI" ]; then
    661 	printf "Testing for strtoi ... "
    662 	cat <<EOF >_strtoi.c
    663 #include <stdlib.h>
    664 #include <limits.h>
    665 #include <inttypes.h>
    666 int main(void) {
    667 	int e;
    668 	return strtoi("1234", NULL, 0, 0, INT32_MAX, &e);
    669 }
    670 EOF
    671 	if $XCC _strtoi.c -o _strtoi 2>&3; then
    672 		STRTOI=yes
    673 	else
    674 		STRTOI=no
    675 	fi
    676 	echo "$STRTOI"
    677 	rm -f _strtoi.c _strtoi
    678 fi
    679 if [ "$STRTOI" = no ]; then
    680 	echo "COMPAT_SRCS+=	compat/strtoi.c" >>$CONFIG_MK
    681 	echo "#include		\"compat/strtoi.h\"" >>$CONFIG_H
    682 fi
    683 
    684 if [ -z "$DPRINTF" ]; then
    685 	printf "Testing for dprintf ... "
    686 	cat <<EOF >_dprintf.c
    687 #include <stdio.h>
    688 int main(void) {
    689 	return dprintf(0, "%d", 0);
    690 }
    691 EOF
    692 	if $XCC _dprintf.c -o _dprintf 2>&3; then
    693 		DPRINTF=yes
    694 	else
    695 		DPRINTF=no
    696 	fi
    697 	echo "$DPRINTF"
    698 	rm -f _dprintf.c _dprintf
    699 fi
    700 if [ "$DPRINTF" = no ]; then
    701 	echo "COMPAT_SRCS+=	compat/dprintf.c" >>$CONFIG_MK
    702 	echo "#include		\"compat/dprintf.h\"" >>$CONFIG_H
    703 fi
    704 
    705 if [ -z "$TAILQ_FOREACH_SAFE" ]; then
    706 	printf "Testing for TAILQ_FOREACH_SAFE ... "
    707 	cat <<EOF >_queue.c
    708 #include <sys/queue.h>
    709 int main(void) {
    710 #ifndef TAILQ_FOREACH_SAFE
    711 #error TAILQ_FOREACH_SAFE
    712 #endif
    713 	return 0;
    714 }
    715 EOF
    716 	if $XCC _queue.c -o _queue 2>&3; then
    717 		TAILQ_FOREACH_SAFE=yes
    718 		TAILQ_FOREACH=yes
    719 	else
    720 		TAILQ_FOREACH_SAFE=no
    721 	fi
    722 	echo "$TAILQ_FOREACH_SAFE"
    723 	rm -f _queue.c _queue
    724 fi
    725 
    726 if [ -z "$TAILQ_CONCAT" ]; then
    727 	printf "Testing for TAILQ_CONCAT ..."
    728 	cat <<EOF >_queue.c
    729 #include <sys/queue.h>
    730 int main(void) {
    731 #ifndef TAILQ_CONCAT
    732 #error TAILQ_CONCAT
    733 #endif
    734 	return 0;
    735 }
    736 EOF
    737 	if $XCC _queue.c -o _queue 2>&3; then
    738 		TAILQ_CONCAT=yes
    739 		TAILQ_FOREACH=yes
    740 	else
    741 		TAILQ_CONCAT=no
    742 	fi
    743 	echo "$TAILQ_CONCAT"
    744 	rm -f _queue.c _queue
    745 fi
    746 
    747 if [ -z "$TAILQ_FOREACH" ]; then
    748 	printf "Testing for TAILQ_FOREACH ... "
    749 	cat <<EOF >_queue.c
    750 #include <sys/queue.h>
    751 int main(void) {
    752 #ifndef TAILQ_FOREACH
    753 #error TAILQ_FOREACH
    754 #endif
    755 	return 0;
    756 }
    757 EOF
    758 	if $XCC _queue.c -o _queue 2>&3; then
    759 		TAILQ_FOREACH=yes
    760 	else
    761 		TAILQ_FOREACH=no
    762 	fi
    763 	echo "$TAILQ_FOREACH"
    764 	rm -f _queue.c _queue
    765 fi
    766 
    767 if [ "$TAILQ_FOREACH_SAFE" = no -o "$TAILQ_CONCAT" = no ]; then
    768 	# If we don't include sys/queue.h then clang analyser finds
    769 	# too many false positives.
    770 	# See http://llvm.org/bugs/show_bug.cgi?id=18222
    771 	# Strictly speaking this isn't needed, but I like it to help
    772 	# catch any nasties.
    773 	if [ "$TAILQ_FOREACH" = yes ]; then
    774 		echo "#include		<sys/queue.h>">>$CONFIG_H
    775 	fi
    776 	echo "#include		\"compat/queue.h\"">>$CONFIG_H
    777 else
    778 	echo "#include		<sys/queue.h>" >>$CONFIG_H
    779 fi
    780 
    781 if [ -z "$POSIX_SPAWN" ]; then
    782 	printf "Testing for posix_spawn ... "
    783 	cat <<EOF >_posix_spawn.c
    784 #include <spawn.h>
    785 #include <stdlib.h>
    786 
    787 #ifdef __OpenBSD__
    788 #  include <sys/param.h>
    789 #  if OpenBSD<201505
    790 #    error posix_spawn was fixed in OpenBSD-5.7
    791 #  endif
    792 #endif
    793 
    794 int main(void) {
    795 	posix_spawn(NULL, NULL, NULL, NULL, NULL, NULL);
    796 	return 0;
    797 }
    798 EOF
    799 	if $XCC _posix_spawn.c -o _posix_spawn 2>&3; then
    800 		POSIX_SPAWN=yes
    801 	else
    802 		POSIX_SPAWN=no
    803 	fi
    804 	echo "$POSIX_SPAWN"
    805 	rm -f _posix_spawn.c _posix_spawn
    806 fi
    807 if [ "$POSIX_SPAWN" = no ]; then
    808 	echo "COMPAT_SRCS+=	compat/posix_spawn.c" >>$CONFIG_MK
    809 else
    810 	echo "#define HAVE_SPAWN_H" >>$CONFIG_H
    811 fi
    812 
    813 if [ -z "$POLL" ]; then
    814 	printf "Testing for kqueue1 ... "
    815 	cat <<EOF >_kqueue.c
    816 #include <sys/types.h>
    817 #include <sys/event.h>
    818 int main(void) {
    819 	return kqueue1(0);
    820 }
    821 EOF
    822 	if $XCC _kqueue.c -o _kqueue 2>&3; then
    823 		POLL=kqueue1
    824  		echo "yes"
    825  	else
    826  		echo "no"
    827  	fi
    828 	rm -f _kqueue.c _kqueue
    829 fi
    830 if [ -z "$POLL" ]; then
    831 	printf "Testing for kqueue ... "
    832 	cat <<EOF >_kqueue.c
    833 #include <sys/types.h>
    834 #include <sys/event.h>
    835 int main(void) {
    836 	return kqueue();
    837 }
    838 EOF
    839 	if $XCC _kqueue.c -o _kqueue 2>&3; then
    840 		POLL=kqueue
    841  		echo "yes"
    842  	else
    843  		echo "no"
    844  	fi
    845 	rm -f _kqueue.c _kqueue
    846 fi
    847 if [ -z "$POLL" ]; then
    848 	printf "Testing for epoll ... "
    849 	cat <<EOF >_epoll.c
    850 #ifdef __linux__
    851 #include <linux/version.h>
    852 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 37)
    853 #error kernel has buggy epoll_wait timeout
    854 #endif
    855 #endif
    856 
    857 #include <sys/epoll.h>
    858 #include <unistd.h>
    859 int main(void) {
    860 	epoll_create1(EPOLL_CLOEXEC);
    861 	epoll_pwait(-1, NULL, 0, 0, NULL);
    862 	return 0;
    863 }
    864 EOF
    865 	if $XCC _epoll.c -o _epoll 2>&3; then
    866 		POLL=epoll
    867 		echo "#define HAVE_EPOLL" >>$CONFIG_MK
    868 		echo "yes"
    869 	else
    870 		echo "no"
    871 	fi
    872 	rm -f _epoll.c _epoll
    873 fi
    874 if [ -z "$POLL" ]; then
    875 	printf "Testing for ppoll ... "
    876 	cat <<EOF >_ppoll.c
    877 #include <poll.h>
    878 #include <stdlib.h>
    879 int main(void) {
    880 	ppoll(NULL, 0, NULL, NULL);
    881 	return 0;
    882 }
    883 EOF
    884 	if $XCC _ppoll.c -o _ppoll 2>&3; then
    885 		POLL=ppoll
    886  		echo "yes"
    887  	else
    888  		echo "no"
    889  	fi
    890 	rm -f _ppoll.c _ppoll
    891 fi
    892 if [ -z "$POLL" ]; then
    893 	printf "Testing for pselect ... "
    894 	cat <<EOF >_pselect.c
    895 #include <sys/select.h>
    896 #include <stdlib.h>
    897 int main(void) {
    898 	pselect(0, NULL, NULL, NULL, NULL, NULL);
    899 	return 0;
    900 }
    901 EOF
    902 	if $XCC _pselect.c -o _pselect 2>&3; then
    903 		POLL=pselect
    904 		echo "yes"
    905 	else
    906 		echo "no"
    907 	fi
    908 	rm -f _pselect.c _pselect
    909 fi
    910 case "$POLL" in
    911 kqueue1)
    912 	echo "#define HAVE_KQUEUE" >>$CONFIG_H
    913 	echo "#define HAVE_KQUEUE1" >>$CONFIG_H
    914 	;;
    915 kqueue)
    916 	echo "#define HAVE_KQUEUE" >>$CONFIG_H
    917 	;;
    918 epoll)
    919 	echo "#define HAVE_EPOLL" >>$CONFIG_H
    920 	;;
    921 ppoll)
    922 	echo "#define pollts		ppoll" >>$CONFIG_H
    923 	;;
    924 pselect)
    925 	echo "COMPAT_SRCS+=	compat/pselect.c" >>$CONFIG_MK
    926 	echo "#include		\"compat/pollts.h\"" >>$CONFIG_H
    927 	;;
    928 *)
    929 	echo "COMPAT_SRCS+=	compat/pollts.c" >>$CONFIG_MK
    930 	echo "#include		\"compat/pollts.h\"" >>$CONFIG_H
    931 	;;
    932 esac
    933 
    934 if [ -z "$BE64ENC" ]; then
    935 	printf "Testing for be64enc ... "
    936 	cat <<EOF >_be64enc.c
    937 #include <sys/endian.h>
    938 #include <stdlib.h>
    939 int main(void) {
    940 	be64enc(NULL, 0);
    941 }
    942 EOF
    943 	if $XCC _be64enc.c -o _be64enc 2>&3; then
    944 		BE64ENC=yes
    945 	else
    946 		BE64ENC=no
    947 	fi
    948 	echo "$BE64ENC"
    949 	rm -f _be64enc.c _be64enc
    950 fi
    951 if [ "$BE64ENC" = no ]; then
    952 	echo "#include		\"compat/endian.h\"" >>$CONFIG_H
    953 fi
    954 
    955 if [ -z "$MD5" ]; then
    956 	MD5_LIB=
    957 	printf "Testing for MD5Init ... "
    958 	cat <<EOF >_md5.c
    959 #include <sys/types.h>
    960 #include <md5.h>
    961 #include <stdlib.h>
    962 int main(void) {
    963 	MD5_CTX context;
    964 	MD5Init(&context);
    965 	return 0;
    966 }
    967 EOF
    968 	# We only want to link to libmd if it exists in /lib
    969 	if $ALLOW_USR_LIBS; then
    970 		set -- /
    971 	else
    972 		set -- $(ls /lib/libmd.so.* 2>/dev/null)
    973 	fi
    974 	if $XCC _md5.c -o _md5 2>&3; then
    975 		MD5=yes
    976 	elif [ -e "$1" ] && $XCC _md5.c -lmd -o _md5 2>&3; then
    977 		MD5="yes (-lmd)"
    978 		MD5_LIB=-lmd
    979 	else
    980 		MD5=no
    981 	fi
    982 	echo "$MD5"
    983 	rm -f _md5.c _md5
    984 fi
    985 if [ "$MD5" = no ]; then
    986 	echo "MD5_SRC=	crypt/md5.c" >>$CONFIG_MK
    987 else
    988 	echo "MD5_SRC=" >>$CONFIG_MK
    989 	echo "#define HAVE_MD5_H" >>$CONFIG_H
    990 	[ -n "$MD5_LIB" ] && echo "LDADD+=		$MD5_LIB" >>$CONFIG_MK
    991 fi
    992 
    993 if [ -z "$SHA2_H" -a -z "$SHA2" -o "$SHA2" != no ]; then
    994 	printf "Testing for sha2.h ... "
    995 	if [ -e /usr/include/sha2.h ]; then
    996 		SHA2_H=sha2.h
    997 	elif [ -e /usr/include/sha256.h ]; then
    998 		SHA2_H=sha256.h
    999 	fi
   1000 	if [ -n "$SHA2_H" ]; then
   1001 		echo "$SHA2_H"
   1002 	else
   1003 		echo "no"
   1004 	fi
   1005 fi
   1006 
   1007 if [ -z "$SHA2" ]; then
   1008 	SHA2_LIB=
   1009 	SHA2_RENAMED=
   1010 	printf "Testing for SHA256_Init ... "
   1011 	cat <<EOF >_sha256.c
   1012 #include <sys/types.h>
   1013 EOF
   1014 	[ -n "$SHA2_H" ] && echo "#include <$SHA2_H>">>_sha256.c
   1015 	cat <<EOF >>_sha256.c
   1016 #include <stdlib.h>
   1017 int main(void) {
   1018 	SHA256_CTX context;
   1019 	SHA256_Init(&context);
   1020 	return 0;
   1021 }
   1022 EOF
   1023 	# We only want to link to libmd if it exists in /lib
   1024 	if $ALLOW_USR_LIBS; then
   1025 		set -- /
   1026 	else
   1027 		set -- $(ls /lib/libmd.so.* 2>/dev/null)
   1028 	fi
   1029 	if $XCC _sha256.c -o _sha256 2>&3; then
   1030 		SHA2=yes
   1031 	elif [ -e "$1" ] && $XCC _sha256.c -lmd -o _sha256 2>&3; then
   1032 		SHA2="yes (-lmd)"
   1033 		SHA2_LIB=-lmd
   1034 	else
   1035 		SHA2=no
   1036 	fi
   1037 	echo "$SHA2"
   1038 	rm -f _sha256.c _sha256
   1039 	if [ "$SHA2" = no ]; then
   1040 		# Did OpenBSD really change this? grrrr
   1041 		printf "Testing for SHA256Init ... "
   1042 		cat <<EOF >_sha256.c
   1043 #include <sys/types.h>
   1044 EOF
   1045 		[ -n "$SHA2_H" ] && echo "#include <$SHA2_H>">>_sha256.c
   1046 		cat <<EOF >>_sha256.c
   1047 #include <stdlib.h>
   1048 int main(void) {
   1049 	SHA2_CTX context;
   1050 	SHA256Init(&context);
   1051 	return 0;
   1052 }
   1053 EOF
   1054 		# We only want to link to libmd if it exists in /lib
   1055 		if $ALLOW_USR_LIBS; then
   1056 			set -- /
   1057 		else
   1058 			set -- $(ls /lib/libmd.so.* 2>/dev/null)
   1059 		fi
   1060 		if $XCC	_sha256.c -o _sha256 2>&3; then
   1061 			SHA2=yes
   1062 			SHA2_RENAMED=yes
   1063 		elif [ -e "$1" ] && $XCC _sha256.c -lmd -o _sha256 2>&3
   1064 		then
   1065 			SHA2="yes (-lmd)"
   1066 			SHA2_LIB=-lmd
   1067 			SHA2_RENAMED=yes
   1068 		else
   1069 			SHA2=no
   1070 		fi
   1071 		echo "$SHA2"
   1072 		rm -f _sha256.c _sha256
   1073 	fi
   1074 fi
   1075 if [ "$SHA2" = no ]; then
   1076 	echo "SHA256_SRC=	crypt/sha256.c" >>$CONFIG_MK
   1077 else
   1078 	echo "SHA256_SRC=" >>$CONFIG_MK
   1079 	echo "#define SHA2_H		<$SHA2_H>" >>$CONFIG_H
   1080 	if [ "$SHA2_RENAMED" = yes ]; then
   1081 		echo "#define SHA256_CTX	SHA2_CTX" >>$CONFIG_H
   1082 		echo "#define SHA256_Init	SHA256Init" >>$CONFIG_H
   1083 		echo "#define SHA256_Update	SHA256Update" >>$CONFIG_H
   1084 		echo "#define SHA256_Final	SHA256Final" >>$CONFIG_H
   1085 	fi
   1086 	[ -n "$SHA2_LIB" ] && echo "LDADD+=		$SHA2_LIB" >>$CONFIG_MK
   1087 fi
   1088 
   1089 if [ "$DEV" != no -a "$UDEV" != no ]; then
   1090 	printf "Checking for libudev ... "
   1091 	if type pkg-config >/dev/null 2>&1; then
   1092 		LIBUDEV_CFLAGS=$(pkg-config --cflags libudev 2>&3)
   1093 		LIBUDEV_LIBS=$(pkg-config --libs libudev 2>&3)
   1094 	fi
   1095 fi
   1096 if [ "$DEV" != no -a "$UDEV" != no -a -n "$LIBUDEV_LIBS" ]; then
   1097 	echo "yes"
   1098 	[ -z "$DEV" ] && DEV=yes
   1099 	echo "DEV_PLUGINS+=	udev" >>$CONFIG_MK
   1100 	if [ -n "$LIBUDEV_CFLAGS" ]; then
   1101 		echo "LIBUDEV_CFLAGS=		$LIBUDEV_CFLAGS" >>$CONFIG_MK
   1102 	fi
   1103 	echo "LIBUDEV_LIBS=	$LIBUDEV_LIBS" >>$CONFIG_MK
   1104 
   1105 	printf "Checking udev_monitor_filter_add_match_subsystem_devtype ... "
   1106 	cat <<EOF >_udev.c
   1107 #include <libudev.h>
   1108 #include <stdlib.h>
   1109 int main(void) {
   1110 	udev_monitor_filter_add_match_subsystem_devtype(NULL, NULL, NULL);
   1111 	return 0;
   1112 }
   1113 EOF
   1114 	if $XCC $LIBUDEV_CFLAGS _udev.c -o _udev $LIBUDEV_LIBS 2>&3
   1115 	then
   1116 		echo "yes"
   1117 	else
   1118 		echo "LIBUDEV_CPPFLAGS+=	-DLIBUDEV_NOFILTER" >>$CONFIG_MK
   1119 		echo "no"
   1120 	fi
   1121 	rm -f _udev.c _udev
   1122 
   1123 	printf "Checking udev_device_get_is_initialized ... "
   1124 	cat <<EOF >_udev.c
   1125 #include <libudev.h>
   1126 #include <stdlib.h>
   1127 int main(void) {
   1128 	udev_device_get_is_initialized(NULL);
   1129 	return 0;
   1130 }
   1131 EOF
   1132 	if $XCC $LIBUDEV_CFLAGS _udev.c -o _udev $LIBUDEV_LIBS 2>&3
   1133 	then
   1134 		echo "yes"
   1135 	else
   1136 		echo "LIBUDEV_CPPFLAGS+=	-DLIBUDEV_NOINIT" >>$CONFIG_MK
   1137 		echo "no"
   1138 	fi
   1139 	rm -f _udev.c _udev
   1140 elif [ "$DEV" != no -a "$UDEV" != no ]; then
   1141 	echo "no"
   1142 fi
   1143 
   1144 if [ "$DEV" = yes ]; then
   1145 	echo "DHCPCD_SRCS+=	dev.c" >>$CONFIG_MK
   1146 	echo "CPPFLAGS+=	-DPLUGIN_DEV" >>$CONFIG_MK
   1147 	echo "MKDIRS+=	dev" >>$CONFIG_MK
   1148 
   1149 	printf "Testing for dlopen ... "
   1150 	cat <<EOF >_dlopen.c
   1151 #include <dlfcn.h>
   1152 #include <stdlib.h>
   1153 int main(void) {
   1154 	dlopen(NULL, 0);
   1155 	return 0;
   1156 }
   1157 EOF
   1158 	if $XCC _dlopen.c -o _dlopen 2>&3; then
   1159 		echo "yes"
   1160 	elif $XCC _dlopen.c -ldl -o _dlopen 2>&3; then
   1161 		echo "yes (-ldl)"
   1162 		echo "LDADD+=		-ldl" >>$CONFIG_MK
   1163 	else
   1164 		echo "no"
   1165 		echo "libc for dlopen is required - aborting"
   1166 	fi
   1167 	rm -f _dlopen.c _dlopen
   1168 	$abort && exit 1
   1169 fi
   1170 
   1171 # Transform for a make file
   1172 SERVICEEXISTS=$(echo "$SERVICEEXISTS" | $SED \
   1173 	-e 's:\\:\\\\:g' \
   1174 	-e 's:\&:\\\&:g' \
   1175 	-e 's:\$:\\\\\$\$:g' \
   1176 )
   1177 echo "SERVICEEXISTS=	$SERVICEEXISTS" >>config.mk
   1178 SERVICECMD=$(echo "$SERVICECMD" | $SED \
   1179 	-e 's:\\:\\\\:g' \
   1180 	-e 's:\&:\\\&:g' \
   1181 	-e 's:\$:\\\\\$\$:g' \
   1182 )
   1183 echo "SERVICECMD=	$SERVICECMD" >>config.mk
   1184 SERVICESTATUS=$(echo "$SERVICESTATUS" | $SED \
   1185 	-e 's:\\:\\\\:g' \
   1186 	-e 's:\&:\\\&:g' \
   1187 	-e 's:\$:\\\\\$\$:g' \
   1188 )
   1189 echo "SERVICESTATUS=	$SERVICESTATUS" >>config.mk
   1190 
   1191 HOOKS=
   1192 if ! $HOOKSET; then
   1193 	printf "Checking for ntpd ... "
   1194 	NTPD=$(_which ntpd)
   1195 	if [ -n "$NTPD" ]; then
   1196 		echo "$NTPD (50-ntp.conf)"
   1197 		HOOKS="$HOOKS${HOOKS:+ }50-ntp.conf"
   1198 	else
   1199 		echo "not found"
   1200 	fi
   1201 
   1202 	printf "Checking for ypbind ... "
   1203 	YPBIND=$(_which ypbind)
   1204 	if [ -n "$YPBIND" ]; then
   1205 		YPHOOK="50-ypbind"
   1206 		if strings "$YPBIND" | $GREP -q yp\\.conf; then
   1207 			YPHOOK="50-yp.conf"
   1208 			YPOS="Linux"
   1209 		elif strings "$YPBIND" | $GREP -q \\.ypservers; then
   1210 			YPOS="NetBSD"
   1211 			echo "YPDOMAIN_DIR=	/var/yp" >>$CONFIG_MK
   1212 			echo "YPDOMAIN_SUFFIX=.ypservers" >>$CONFIG_MK
   1213 		elif strings "$YPBIND" | $GREP -q /etc/yp; then
   1214 			YPOS="OpenBSD"
   1215 			echo "YPDOMAIN_DIR=	/etc/yp" >>$CONFIG_MK
   1216 			echo "YPDOMAIN_SUFFIX=" >>$CONFIG_MK
   1217 		else
   1218 			YPOS="FreeBSD"
   1219 			echo "YPDOMAIN_DIR=" >>$CONFIG_MK
   1220 			echo "YPDOMAIN_SUFFIX=" >>$CONFIG_MK
   1221 		fi
   1222 		echo "$YPBIND ($YPHOOK${YPOS:+ }$YPOS)"
   1223 		HOOKS="$HOOKS${HOOKS:+ }$YPHOOK"
   1224 	else
   1225 		echo "not found"
   1226 	fi
   1227 fi
   1228 
   1229 if cd dhcpcd-hooks; then
   1230 	for x in $HOOKSCRIPTS; do
   1231 		printf "Finding hook $x ... "
   1232 		for h in [0-9][0-9]"-$x" \
   1233 		    [0-9][0-9]"-$x.sh" \
   1234 		    [0-9][0-9]"-$x.conf"
   1235 		do
   1236 			[ -e "$h" ] && break
   1237 		done
   1238 		if [ ! -e "$h" ]; then
   1239 			echo "no"
   1240 		else
   1241 			echo "$h"
   1242 			case " $HOOKS " in
   1243 			*" $h "*)	;;
   1244 			*)		HOOKS="$HOOKS${HOOKS:+ }$h";;
   1245 			esac
   1246 		fi
   1247 	done
   1248 	cd ..
   1249 fi
   1250 echo "HOOKSCRIPTS=	$HOOKS" >>$CONFIG_MK
   1251 
   1252 echo
   1253 echo "   SYSCONFDIR =		$SYSCONFDIR"
   1254 echo "   SBINDIR =		$SBINDIR"
   1255 echo "   LIBDIR =		$LIBDIR"
   1256 echo "   LIBEXECDIR =		$LIBEXECDIR"
   1257 echo "   DBDIR =		$DBDIR"
   1258 echo "   RUNDIR =		$RUNDIR"
   1259 echo "   MANDIR =		$MANDIR"
   1260 echo "   HOOKSCRIPTS =	$HOOKS"
   1261 echo
   1262 
   1263 rm -f dhcpcd tests/test
   1264