2 # Try and be like autotools configure, but without autotools
4 echo "configure args: $*"
7 # Ensure that we do not inherit these from env
13 WITH_DHCPCD_ONLINE=yes
24 [ "$var" = "$opt" ] && var=
27 --with-cc|CC) CC=$var;;
29 --disable-debug) DEBUG=no;;
30 --enable-debug) DEBUG=yes;;
31 --prefix) prefix=$var;;
32 --sysconfdir) SYSCONFDIR=$var;;
33 --bindir) BINDIR=$var;;
34 --libexecdir) LIBEXECDIR=$var;;
35 --statedir|--localstatedir) STATEDIR=$var;;
36 --rundir) RUNDIR=$var;;
37 --mandir) MANDIR=$var;;
38 --with-ccopts|CFLAGS) CFLAGS=$var;;
39 CPPFLAGS) CPPFLAGS=$var;;
41 --host) HOST=$var; HOSTCC=$var-;;
42 --target) TARGET=$var;;
43 --libdir) LIBDIR=$var;;
44 --includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";;
45 --datadir|--infodir) ;; # ignore autotools
46 --disable-maintainer-mode|--disable-dependency-tracking) ;;
47 --with-dhcpcd-online) WITH_DHCPCD_ONLINE=${var:-yes};;
48 --without-dhcpcd-online) WITH_DHCPCD_ONLINE=no;;
49 --with-gtk|--with-gtk+) WITH_GTK=${var:-yes};;
50 --without-gtk|--without-gtk+) WITH_GTK=no;;
51 --with-qt) WITH_QT=${var:-yes};;
52 --without-qt) WITH_QT=no;;
54 --with-icons) WITH_ICONS=${var:-yes};;
55 --without-icons) WITH_ICONS=no;;
56 --enable-notification) NOTIFY=yes;;
57 --disable-notification) NOTIFY=no;;
58 --help) echo "See the README file for available options"; exit 0;;
59 *) echo "$0: WARNING: unknown option $opt" >&2;;
66 : ${PREFIX:=${prefix:=/usr/local}}
67 : ${SYSCONFDIR:=$PREFIX/etc}
68 : ${BINDIR:=$PREFIX/bin}
69 : ${LIBEXECDIR:=$PREFIX/libexec}
71 : ${MANDIR:=${PREFIX:-/usr}/share/man}
73 : ${ICONDIR:=$PREFIX/share/dhcpcd/icons}
75 eval SYSCONFDIR="$SYSCONFDIR"
77 eval LIBEXECDIR="$LIBEXECDIR"
78 eval STATEDIR="$STATEDIR"
85 x="$(which "$1" 2>/dev/null)"
90 for x in /sbin/"$1" /usr/sbin/"$1" \
91 /usr/pkg/sbin/"$1" /usr/local/sbin/"$1"
104 if [ -z "$BUILD" ]; then
105 # autoconf target triplet: cpu-vendor-os
106 BUILD=$(uname -m)-unknown-$(uname -s | tr '[:upper:]' '[:lower:]')
110 if [ -z "$OS" ]; then
111 echo "Deriving operating system from ... $HOST"
112 # Derive OS from cpu-vendor-[kernel-]os
115 if [ "$CPU" != "$REST" ]; then
118 if [ "$VENDOR" != "$REST" ]; then
119 # Use kernel if given, otherwise os
128 # Work with cpu-kernel-os, ie Debian
130 linux*|kfreebsd*) OS=$VENDOR; VENDOR= ;;
134 gnu*) OS=hurd;; # No HURD support as yet
138 echo "Configuring dhcpcd-ui for ... $OS"
139 rm -f $CONFIG_H $CONFIG_MK
140 echo "# $OS" >$CONFIG_MK
141 echo "/* $OS */" >$CONFIG_H
143 VERSION=$($SED -ne 's/VERSION= //p' Makefile)
144 echo "#define VERSION \"$VERSION\"" >>$CONFIG_H
146 for x in PREFIX SYSCONFDIR BINDIR; do
148 # Make files look nice for import
151 [ $l -gt 3 ] && t=" "
152 echo "$x=$t $v" >>$CONFIG_MK
154 [ $l -gt 2 ] && t=" "
155 echo "#define $x$t \"$v\"" >>$CONFIG_H
157 echo "#define ICONDIR \"$ICONDIR\"" >>$CONFIG_H
158 echo "MANDIR= $MANDIR" >>$CONFIG_MK
161 if [ -n "$CC" ]; then
165 _COMPILERS="cc clang gcc pcc icc"
167 # Only look for a cross compiler if --host and --build are not the same
168 if [ -n "$HOSTCC" -a "$BUILD" != "$HOST" ]; then
169 for _CC in $_COMPILERS; do
170 _CC=$(_which "$HOSTCC$_CC")
171 if [ -x "$_CC" ]; then
177 if ! type "$CC" >/dev/null 2>&1; then
178 for _CC in $_COMPILERS; do
180 if [ -x "$_CC" ]; then
187 echo "Using compiler .. $CC"
194 if $CC _test.c -o _test >/dev/null 2>&3; then
195 [ -x _test ] && _CC=true
199 echo "$CC does not create executables"
202 [ "$CC" != cc ] && echo "CC= $CC" >>$CONFIG_MK
203 $CC --version | $SED -e '1!d'
205 # Set to blank, then append user config
206 # We do this so our SED call to append to XCC remains portable
207 if [ -n "$CFLAGS" ]; then
208 echo "CFLAGS=" >>$CONFIG_MK
209 echo "CFLAGS+= $CFLAGS" >>$CONFIG_MK
211 if [ -n "$CPPFLAGS" ]; then
212 echo "CPPFLAGS=" >>$CONFIG_MK
213 echo "CPPFLAGS+= $CPPFLAGS" >>$CONFIG_MK
215 if [ -n "$LDFLAGS" ]; then
216 echo "LDFLAGS=" >>$CONFIG_MK
217 echo "LDFLAGS+= $LDFLAGS" >>$CONFIG_MK
221 for x in $INCLUDEDIR; do
222 echo "CPPFLAGS+= -I$x" >>$CONFIG_MK
225 if [ -z "$DEBUG" -a -f .fslckout ]; then
226 printf "Found fossil checkout ... "
231 if [ "$DEBUG" != no -a "$DEBUG" != false ]; then
232 echo "Adding debugging CFLAGS"
233 cat <<EOF >>$CONFIG_MK
234 CFLAGS+= -g -Wall -Wextra -Wshadow -Wformat=2
235 CFLAGS+= -Wmissing-prototypes -Wmissing-declarations
236 CFLAGS+= -Wmissing-noreturn -Wmissing-format-attribute
237 CFLAGS+= -Wnested-externs
238 CFLAGS+= -Winline -Wwrite-strings -Wcast-align -Wcast-qual
239 CFLAGS+= -Wpointer-arith -Wstrict-overflow
240 CFLAGS+= -Wdeclaration-after-statement
241 CFLAGS+= -Wconversion
244 mirbsd*|openbsd*);; # OpenBSD has many redundant decs in system headers
245 *) echo "CFLAGS+= -Wredundant-decls" >>$CONFIG_MK;;
248 # Disable assertations
249 echo "CFLAGS+= -DNDEBUG" >>$CONFIG_MK
252 printf "OS supports background scanning ... "
253 # Most OS's don't support background scanning
259 printf "%s ... " "$OS"
262 echo "CFLAGS+= -DBG_SCAN" >> $CONFIG_MK
263 QMAKE_CONFIG="$QMAKE_CONFIG CONFIG+=build_bgscan"
269 # Add CPPFLAGS and CFLAGS to CC for testing features
270 XCC="$CC `$SED -n -e 's/CPPLAGS+=*\(.*\)/\1/p' $CONFIG_MK`"
271 XCC="$XCC `$SED -n -e 's/CFLAGS+=*\(.*\)/\1/p' $CONFIG_MK`"
273 if [ -z "$GETTEXT" ]; then
274 printf "Testing for gettext ... "
275 cat <<EOF >_gettext.c
283 if $XCC _gettext.c -o _gettext 2>&3; then
285 elif $XCC _gettext.c -o _gettext -lintl 2>&3; then
286 GETTEXT="yes (-lintl)"
288 QMAKE_CONFIG="$QMAKE_CONFIG CONFIG+=has_libintl"
293 rm -f _gettext.c _gettext
295 if [ "$GETTEXT" != no ]; then
296 echo "#define HAS_GETTEXT" >>$CONFIG_H
297 echo "LIB_INTL= $LIB_INTL" >>$CONFIG_MK
300 if [ -z "$STRLCPY" ]; then
301 printf "Testing for strlcpy ... "
302 cat <<EOF >_strlcpy.c
305 const char s1[] = "foo";
307 strlcpy(s2, s1, sizeof(s2));
311 if $XCC _strlcpy.c -o _strlcpy 2>&3; then
317 rm -f _strlcpy.c _strlcpy
319 if [ "$STRLCPY" = no ]; then
320 echo "#define strlcpy(dst, src, n) " \
321 "((size_t)snprintf(dst, n, \"%s\", src))" \
325 if [ -z "$STRVERSCMP" ]; then
326 printf "Testing for strverscmp ... "
327 cat <<EOF >_strverscmp.c
331 strverscmp(NULL, NULL);
335 if $XCC _strverscmp.c -o _strverscmp 2>&3; then
341 rm -f _strverscmp.c _strverscmp
343 if [ "$STRVERSCMP" = yes ]; then
344 echo "#define HAVE_STRVERSCMP" >>$CONFIG_H
347 if [ -z "$LIBDIR" ]; then
348 printf "lib directory name ... "
349 case `readlink /lib` in
351 *) LIBNAME=$(basename `readlink /lib`);;
354 echo "LIBNAME= $LIBNAME" >>$CONFIG_MK
355 LIBDIR=${PREFIX}/${LIBNAME}
356 echo "LIBDIR= \${PREFIX}/\${LIBNAME}" >>$CONFIG_MK
358 echo "LIBDIR= $LIBDIR" >>$CONFIG_MK
361 # We normally want to build in the static library
362 if [ "$LIBDHCPCD" = yes ]; then
364 echo "LIB_DHCPCD_INSTALL= _libinstall" >>$CONFIG_MK
366 x="-Wl,-Bstatic -ldhcpcd -Wl,-Bdynamic"
368 echo "LIB_DHCPCD= $x" >>$CONFIG_MK
370 # Due to our use of pkg-config, pass --as-needed to ld so we only link
371 # what we actually need.
372 echo "LDADD+= -Wl,--as-needed" >>$CONFIG_MK
375 _WITH_GTK="$WITH_GTK"
376 if [ "$WITH_GTK" = yes -o -z "$WITH_GTK" ]; then
377 if pkg-config --cflags gtk+-2.0 >/dev/null 2>&3; then
379 elif pkg-config --cflags gtk+-3.0 >/dev/null 2>&3; then
382 elif [ -n "$WITH_GTK" -a "$WITH_GTK" != no ]; then
383 if ! pkg-config --cflags $WITH_GTK >/dev/null 2>&3; then
384 echo "$0: no suitable GTK+ library has been found" >&2
389 if [ -n "$WITH_GTK" -a "$WITH_GTK" != no ]; then
391 if [ "$NOTIFY" = yes -o -z "$NOTIFY" ]; then
392 if ! pkg-config --cflags libnotify >/dev/null 2>&3; then
393 echo "libnotify not found" >&2
394 [ "$NOTIFY" = yes -n "$_WITH_GTK" ] && exit 1
398 if [ "$NOTIFY" = yes ]; then
399 PKG="$PKG${PKG:+ }libnotify"
400 echo "NOTIFY= -DNOTIFY" >>$CONFIG_MK
401 echo "Building dhcpcd-gtk with notification support"
403 GTK_CFLAGS=$(pkg-config --cflags $PKG)
404 [ $? != 0 -a "$WITH_GTK" = yes ] && exit 1
405 GTK_LIBS=$(pkg-config --libs $PKG)
406 [ $? != 0 -a "$WITH_GTK" = yes ] && exit 1
407 echo "GTK_CFLAGS= $GTK_CFLAGS" >>$CONFIG_MK
408 echo "GTK_LIBS= $GTK_LIBS" >>$CONFIG_MK
409 UI="$UI${UI:+ }dhcpcd-gtk"
413 if [ -z "$WITH_QT" -o "$WITH_QT" != no ]; then
414 if [ -z "$QMAKE" ]; then
415 if [ -x "$QTDIR"/bin/qmake ]; then
416 QMAKE="$QTDIR"/bin/qmake
418 QMAKE=$(_which qmake)
421 if [ -x "$QMAKE" ]; then
422 UI="$UI${UI+ }dhcpcd-qt"
425 echo "$0: no suitable Qt library has been found" >&2
426 [ -z "$WITH_QT" ] || exit 1
431 if $DHCPCD_QT && [ -z "$NOTFY" -o "$NOTIFY" = yes ]; then
432 if type knotify4 >/dev/null 2>&3; then
433 QMAKE_CONFIG="$QMAKE_CONFIG CONFIG+=has_libkdeui"
434 echo "Building dhcpcd-qt with notification support"
435 elif [ "$NOTIFY" = yes ]; then
436 echo "$0: knotify4 not found" >&2
441 if [ -n "$UI" -a -z "$WITH_ICONS" ]; then
444 if [ "$WITH_ICONS" = yes ]; then
445 echo "MKICONS= icons" >>$CONFIG_MK
448 if [ -n "$WITH_DHCPCD_ONLINE" -a "$WITH_DHCPCD_ONLINE" != no ]; then
449 UI="dhcpcd-online${UI:+ }$UI"
451 echo "UI= ${UI:+libdhcpcd }$UI" >>$CONFIG_MK
454 echo " SYSCONFDIR = $SYSCONFDIR"
455 echo " BINDIR = $BINDIR"
456 echo " LIBDIR = $LIBDIR"
457 echo " ICONDIR = $ICONDIR"
458 echo " MANDIR = $MANDIR"
462 echo "MKDIR= \${TOPDIR}/mk" >>$CONFIG_MK
465 QMAKE_CONFIG="$QMAKE_CONFIG PREFIX=$PREFIX SYSCONFDIR=$SYSCONFDIR"
466 QMAKE_CONFIG="$QMAKE_CONFIG MANDIR=$MANDIR"
467 if ! (cd src/dhcpcd-qt; $QMAKE $QMAKE_CONFIG dhcpcd-qt.pro); then
468 echo "$0: failed to configure dhcpcd-qt" >&2