2 # Try and be like autotools configure, but without autotools
4 # Ensure that we do not inherit these from env
17 [ "$var" = "$opt" ] && var=
20 --with-cc|CC) CC=$var;;
22 --disable-debug) DEBUG=no;;
23 --enable-debug) DEBUG=yes;;
24 --prefix) prefix=$var;;
25 --sysconfdir) SYSCONFDIR=$var;;
26 --bindir) BINDIR=$var;;
27 --libexecdir) LIBEXECDIR=$var;;
28 --statedir|--localstatedir) STATEDIR=$var;;
29 --rundir) RUNDIR=$var;;
30 --mandir) MANDIR=$var;;
31 --with-ccopts|CFLAGS) CFLAGS=$var;;
32 CPPFLAGS) CPPFLAGS=$var;;
35 --target) TARGET=$var;;
36 --libdir) LIBDIR=$var;;
37 --includedir) eval INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }$var";;
38 --datadir|--infodir) ;; # ignore autotools
39 --disable-maintainer-mode|--disable-dependency-tracking) ;;
40 --with-dhcpcd-online) WITH_DHCPCD_ONLINE=${var:-yes};;
41 --without-dhcpcd-online) WITH_DHCPCD_ONLINE=no;;
42 --with-gtk|--with-gtk+) WITH_GTK=${var:-yes};;
43 --without-gtk|--without-gtk+) WITH_GTK=no;;
44 --with-qt) WITH_QT=${var:-yes};;
45 --without-qt) WITH_QT=no;;
46 --with-icons) WITH_ICONS=${var:-yes};;
47 --without-icons) WITH_ICONS=no;;
48 --enable-notification) NOTIFY=yes;;
49 --disable-notification) NOTIFY=no;;
50 --help) echo "See the README file for available options"; exit 0;;
51 *) echo "$0: WARNING: unknown option $opt" >&2;;
58 : ${PREFIX:=${prefix:=/usr/local}}
59 : ${SYSCONFDIR:=$PREFIX/etc}
60 : ${BINDIR:=$PREFIX/bin}
61 : ${LIBEXECDIR:=$PREFIX/libexec}
63 : ${MANDIR:=${PREFIX:-/usr}/share/man}
65 : ${ICONDIR:=$PREFIX/share/dhcpcd/icons}
67 eval SYSCONFDIR="$SYSCONFDIR"
69 eval LIBEXECDIR="$LIBEXECDIR"
70 eval STATEDIR="$STATEDIR"
77 x="$(which "$1" 2>/dev/null)"
82 for x in /sbin/"$1" /usr/sbin/"$1" \
83 /usr/pkg/sbin/"$1" /usr/local/sbin/"$1"
96 if [ -z "$BUILD" ]; then
97 # autoconf target triplet: cpu-vendor-os
98 BUILD=$(uname -m)-unknown-$(uname -s | tr '[:upper:]' '[:lower:]')
102 if [ -z "$OS" ]; then
103 echo "Deriving operating system from ... $HOST"
104 # Derive OS from cpu-vendor-[kernel-]os
107 if [ "$CPU" != "$REST" ]; then
110 if [ "$VENDOR" != "$REST" ]; then
111 # Use kernel if given, otherwise os
120 # Work with cpu-kernel-os, ie Debian
122 linux*|kfreebsd*) OS=$VENDOR; VENDOR= ;;
126 gnu*) OS=hurd;; # No HURD support as yet
130 echo "Configuring dhcpcd for ... $OS"
131 rm -f $CONFIG_H $CONFIG_MK
132 echo "# $OS" >$CONFIG_MK
133 echo "/* $OS */" >$CONFIG_H
135 VERSION=$($SED -ne 's/VERSION= //p' Makefile)
136 echo "#define VERSION \"$VERSION\"" >>$CONFIG_H
138 for x in PREFIX SYSCONFDIR BINDIR; do
140 # Make files look nice for import
143 [ $l -gt 3 ] && t=" "
144 echo "$x=$t $v" >>$CONFIG_MK
146 [ $l -gt 2 ] && t=" "
147 echo "#define $x$t \"$v\"" >>$CONFIG_H
149 echo "#define ICONDIR \"$ICONDIR\"" >>$CONFIG_H
150 echo "MANDIR= $MANDIR" >>$CONFIG_MK
153 # However, if CC is not specified and we are given GNU style
154 # --host or --build targets the expectation is we try and match that
156 if [ -n "$CC" ]; then
160 _COMPILERS="cc clang gcc pcc icc"
162 if [ -n "$HOSTCC" ]; then
163 for _CC in $_COMPILERS; do
164 _CC=$(_which "$HOSTCC$_CC")
165 if [ -x "$_CC" ]; then
171 if ! type "$CC" >/dev/null 2>&1; then
172 for _CC in $_COMPILERS; do
174 if [ -x "$_CC" ]; then
181 echo "Using compiler .. $CC"
188 if $CC _test.c -o _test >/dev/null 2>&1; then
189 [ -x _test ] && _CC=true
193 echo "$CC does not create executables"
196 [ "$CC" != cc ] && echo "CC= $CC" >>$CONFIG_MK
197 $CC --version | $SED -e '1!d'
199 # Set to blank, then append user config
200 # We do this so our SED call to append to XCC remains portable
201 if [ -n "$CFLAGS" ]; then
202 echo "CFLAGS=" >>$CONFIG_MK
203 echo "CFLAGS+= $CFLAGS" >>$CONFIG_MK
205 if [ -n "$CPPFLAGS" ]; then
206 echo "CPPFLAGS=" >>$CONFIG_MK
207 echo "CPPFLAGS+= $CPPFLAGS" >>$CONFIG_MK
209 if [ -n "$LDFLAGS" ]; then
210 echo "LDFLAGS=" >>$CONFIG_MK
211 echo "LDFLAGS+= $LDFLAGS" >>$CONFIG_MK
214 for x in $INCLUDEDIR; do
215 echo "CPPFLAGS+= -I$x" >>$CONFIG_MK
218 if [ -z "$DEBUG" -a -f .fslckout ]; then
219 printf "Found fossil checkout ... "
224 if [ "$DEBUG" != no -a "$DEBUG" != false ]; then
225 echo "Adding debugging CFLAGS"
226 cat <<EOF >>$CONFIG_MK
227 CFLAGS+= -g -Wall -Wextra -Wshadow -Wformat=2
228 CFLAGS+= -Wmissing-prototypes -Wmissing-declarations
229 CFLAGS+= -Wmissing-noreturn -Wmissing-format-attribute
230 CFLAGS+= -Wnested-externs
231 CFLAGS+= -Winline -Wwrite-strings -Wcast-align -Wcast-qual
232 CFLAGS+= -Wpointer-arith -Wstrict-overflow
233 CFLAGS+= -Wdeclaration-after-statement
234 CFLAGS+= -Wconversion
237 mirbsd*|openbsd*);; # OpenBSD has many redundant decs in system headers
238 *) echo "CFLAGS+= -Wredundant-decls" >>$CONFIG_MK;;
241 # Disable assertations
242 echo "CFLAGS+= -DNDEBUG" >>$CONFIG_MK
245 # Add CPPFLAGS and CFLAGS to CC for testing features
246 XCC="$CC `$SED -n -e 's/CPPLAGS+=*\(.*\)/\1/p' $CONFIG_MK`"
247 XCC="$XCC `$SED -n -e 's/CFLAGS+=*\(.*\)/\1/p' $CONFIG_MK`"
249 if [ -z "$GETTEXT" ]; then
250 printf "Testing for gettext ... "
251 cat <<EOF >_gettext.c
259 if $XCC _gettext.c -o _gettext 2>/dev/null; then
261 elif $XCC _gettext.c -o _gettext -lintl 2>/dev/null; then
262 GETTEXT="yes (-lintl)"
264 QMAKE_CONFIG="CONFIG+=has_libintl"
269 rm -f _gettext.c _gettext
271 if [ "$GETTEXT" != no ]; then
272 echo "#define HAS_GETTEXT" >>$CONFIG_H
273 echo "LIB_INTL= $LIB_INTL" >>$CONFIG_MK
276 if [ -z "$STRLCPY" ]; then
277 printf "Testing for strlcpy ... "
278 cat <<EOF >_strlcpy.c
281 const char s1[] = "foo";
283 strlcpy(s2, s1, sizeof(s2));
287 if $XCC _strlcpy.c -o _strlcpy 2>/dev/null; then
293 rm -f _strlcpy.c _strlcpy
295 if [ "$STRLCPY" = no ]; then
296 echo "#define strlcpy(dst, src, n) " \
297 "((size_t)snprintf(dst, n, \"%s\", src))" \
301 if [ -z "$LIBDIR" ]; then
302 printf "lib directory name ... "
303 case `readlink /lib` in
305 *) LIBNAME=$(basename `readlink /lib`);;
308 echo "LIBNAME= $LIBNAME" >>$CONFIG_MK
309 LIBDIR=${PREFIX}/${LIBNAME}
310 echo "LIBDIR= \${PREFIX}/\${LIBNAME}" >>$CONFIG_MK
312 echo "LIBDIR= $LIBDIR" >>$CONFIG_MK
315 # We normally want to build in the static library
316 if [ "$LIBDHCPCD" = yes ]; then
318 echo "LIB_DHCPCD_INSTALL= _libinstall" >>$CONFIG_MK
320 x="-Wl,-Bstatic -ldhcpcd -Wl,-Bdynamic"
322 echo "LIB_DHCPCD= $x" >>$CONFIG_MK
324 # Due to our use of pkg-config, pass --as-needed to ld so we only link
325 # what we actually need.
326 echo "LDADD+= -Wl,--as-needed" >>$CONFIG_MK
328 if [ "$WITH_GTK" = yes -o -z "$WITH_GTK" ]; then
329 if pkg-config --cflags gtk+-2.0 >/dev/null 2>&1; then
331 elif pkg-config --cflags gtk+-3.0 >/dev/null 2>&1; then
334 elif [ -n "$WITH_GTK" -a "$WITH_GTK" != no ]; then
335 if ! pkg-config --cflags $WITH_GTK >/dev/null; then
336 echo "$0: no suitable GTK+ library has been found" >&2
341 if [ -n "$WITH_GTK" -a "$WITH_GTK" != no ]; then
343 if [ "$NOTIFY" = yes ]; then
344 PKG="$PKG${PKG:+ }libnotify"
345 echo "NOTIFY= -DNOTIFY" >>$CONFIG_MK
347 GTK_CFLAGS=$(pkg-config --cflags $PKG)
348 [ $? != 0 -a "$WITH_GTK" = yes ] && exit 1
349 GTK_LIBS=$(pkg-config --libs $PKG)
350 [ $? != 0 -a "$WITH_GTK" = yes ] && exit 1
351 echo "GTK+ CFLAGS=$GTK_CFLAGS"
352 echo "GTK+ LIBS=$GTK_LIBS"
353 echo "GTK_CFLAGS= $GTK_CFLAGS" >>$CONFIG_MK
354 echo "GTK_LIBS= $GTK_LIBS" >>$CONFIG_MK
355 UI="$UI${UI:+ }dhcpcd-gtk"
359 if [ "WITH_QT" = yes -o -z "$WITH_QT" ]; then
360 if type qmake >/dev/null 2>&1; then
361 UI="$UI${UI+ }dhcpcd-qt"
364 elif [ -n "$WITH_QT" -a "$WITH_QT" != no ]; then
365 if type qmake >/dev/null 2>&1; then
366 UI="$UI${UI+ }dhcpcd-qt"
369 echo "$0: no suitable QT library has been found" >&2
374 if [ -n "$UI" -o "$WITH_ICONS" = yes ]; then
375 echo "MKICONS= icons" >>$CONFIG_MK
378 if [ -n "$WITH_DHCPCD_ONLINE" -a "$WITH_DHCPCD_ONLINE" != no ]; then
379 UI="dhcpcd-online${UI:+ }$UI"
381 echo "UI= ${UI:+libdhcpcd }$UI" >>$CONFIG_MK
384 echo " SYSCONFDIR = $SYSCONFDIR"
385 echo " BINDIR = $BINDIR"
386 echo " LIBDIR = $LIBDIR"
387 echo " ICONDIR = $ICONDIR"
388 echo " MANDIR = $MANDIR"
392 echo "MKDIR= \${TOPDIR}/mk" >>$CONFIG_MK
395 QMAKE_CONFIG="$QMAKE_CONFIG PREFIX=$PREFIX MANDIR=$MANDIR"
396 if ! (cd src/dhcpcd-qt; qmake $QMAKE_CONFIG dhcpcd-qt.pro); then
397 echo "$0: failed to configure dhcpcd-qt" >&2