[avahi] Patch: negative results during autoconfiguration would
abort ./configure
Adam J. Richter
adam at yggdrasil.com
Thu Sep 14 03:28:29 PDT 2006
I have attached an updated version of my patch for avahi-0.6.14.
Please let me know what else I need to do to get this patch integrated.
Adam Richter
On Sat, Sep 02, 2006 at 07:20:35AM +0800, Adam J. Richter wrote:
> The following patch is related to ticket #34 ("Avahi
> configure script is diffult for things like jhbuld to use",
> reported by james at jamesh.id.au four months ago). Even though
> I'm logged in to wwww.avahi.org to my newly created account,
> I don't see where I can update the ticket. Perhaps I'm not
> allowed to, because my account is brand new. So, I'll post the
> explanation and patch here.
>
> My explanation is kind of long because I think I should
> address to some of the discussion posted to the bug report, in the
> hopes of getting everyone on the same page (although I am glad to
> see that it already is targeted for implementation in 0.7).
>
> Also, before I get into what may seem a bit whiney, let
> me say thanks for the work that has gone into avahi. Although
> I don't use it yet, it sounds like something that should be a
> useful convenience.
>
> autocconfiguration scripts are not normally supposed to
> abort when they discover that an optional facility that was not
> explicitly requested is absent. This way, a larger fraction of
> potential users can build the source code and find it a worthwile
> trade off of their engineering time. Also, that way, it is
> possible install new software and then know that it will be
> picked up the next time software packages that use it are
> rebuilt, instead of continuing to be disabled by whatever
> custom build scripts with the extra "--disable-foo" switches
> were put in place in order to get the package to build previously.
> In addition, every time new features are added to avahi based on external
> software, then under the model requiring "--disable", then everybody's
> build breaks on the new release unless they happen to have the software
> used by the new optional feature.
>
> I've probably seen a couple of hundred packages that build
> with GNU autoconf. Occassionally, one will need an explicit
> "--disable-foo" switch in order to build, but, in every case that
> I can recall, that was either because of some very unusual
> difficulty in automatating the test, or, more commonly, because
> the test automation was something that just hadn't been written
> yet, but never in my recollection a desired objective.
>
> I only built avahi because I was trying to build another
> software package that could optionally use avahi, so I figured I'd
> give avahi a whirl. If it's going to be worth keeping around, it
> should be able to configure based what it finds on my system
> without special arguments. If you want also to have a mode where
> everything that is not available must explicitly be called on with
> its own "--disable-foo" switch, then that mode should be invoked
> with a special switch rather than requiring a special switch to get
> the standard autoconfiguration behavior, because the standard
> autoconfiguration and ease of building is obviously of more value to
> people who want to autoconfiguration, and the people (person, I think)
> who want(s) ./configure to abort on any negative autoconfiguration
> decision are already committed to customization of their build
> process, so they shouldn't mind an extra switch as much.
>
> Anyhow, here is a patch that fixes the abort that I tripped.
> It does not fix all of the aborts. It does not fix all such cases,
> but I think it is an incremental improvement, which should help
> make avahi more appealling.
>
> In order to make some of the changes smaller and more
> consistent, I wrote two autoconf macros in a new file common/opt_module.m4.
> They are AVAHI_OPT_MODULE() and AVAVI_OPT_PYMOD. I am not a very
> experienced autoconf hacker, as you might notice from the fact
> that I have a commented out AC_REQUIRE() call in each of those
> macros that I think is supposed to be there to ensure correct
> dependencies, but somehow breaks things. Anyhow, I think that
> applying this patch should be an improvement, and then later someone
> can figure out whethere to delete the commented out AC_REQUIRE
> lines entirely or make whatever correction they ideally should
> have.
>
> I also moved some of the AC_SUBST() calls outside of "if"
> statements. I believe that in almost all cases, AC_SUBST should
> be executed unconditionally. That is, you want AC_SUBST(foo_CFLAGS)
> to replace @foo_CFLAGS@ in Makefile.in with th value of the
> shell variable $foo_CFLAGS even in the cases where the foo package
> is absent and $foo_CFLAGS is an empty string.
>
> Likewise, I changed the error about failure to detect
> a particular Linux configuration from an aborting error to a
> warning. Perhaps in the future, that code could be changed to
> configure the startup files based on specific boot script
> characteristics (sysvinit, has /etc/init.d, etc.) rather than
> having special cases for each platform ("redhat", "debian", etc.)
>
> Anyhow, if this patch looks OK, I hope the appropriate person
> will integrate it or some change based on it. I don't think that
> trouble ticket #34 should be closed yet, since there are other
> checks in configure.in that have the same problem, but this patch
> fixes some of the problems identified (all of the ones I noticed on my
> system).
>
> Adam Richter
-------------- next part --------------
--- /dev/null 2006-09-14 10:14:34.000000000 +0800
+++ avahi/common/opt_modules.m4 2006-09-14 18:08:52.000000000 +0800
@@ -0,0 +1,40 @@
+dnl AVAHI_OPT_MODULE(MODNAME, VERSION_CHECK)
+dnl
+dnl HAVE_${MODNAME} is a shell variable that will be have one of three
+dnl values:
+dnl "yes" : Require the version check to success.
+dnl "no" : Do nothing.
+dnl "" : Do the version check, and change HAVE_${MODNAME} to "yes" or "no"
+dnl based on the results of the version check.
+dnl
+dnl Note that the version check sets ${MODNAME}_CFLAGS and ${MODNAME}_LIBS.
+dnl
+AC_DEFUN([AVAHI_OPT_MODULES],
+[
+
+dnl For now, comment out the AC_REQUIRE. Why does it make aclocal barf?
+dnl AC_REQUIRE(PKG_CHECK_MODULES)
+
+case "x$HAVE_[]$1" in
+ xyes ) PKG_CHECK_MODULES([$1], [$2]) ;;
+ x ) PKG_CHECK_MODULES([$1], [$2],
+ [HAVE_[]$1[]=yes],
+ [HAVE_[]$1[]=no]) ;;
+esac
+])
+
+
+dnl
+dnl AVAHI_OPT_PYMOD(HAVE_SHELL_VARIABLE, module_name_in_lowercase)
+dnl
+AC_DEFUN([AVAHI_OPT_PYMOD],
+[
+dnl AC_REQUIRE(PKG_CHECK_MODULES)
+
+AM_CHECK_PYMOD([$2],,[$1[]="yes"],
+ [if "$[]$1" = "yes" ; then
+ AC_MSG_ERROR(Could not find Python module [$2] even though it was explicitly enabled)
+ fi
+ $1[]="no"])
+])
+
diff -u -r avahi-0.6.14/Makefile.am avahi/Makefile.am
--- avahi-0.6.14/Makefile.am 2006-08-31 00:08:19.000000000 +0800
+++ avahi/Makefile.am 2006-09-14 17:57:02.000000000 +0800
@@ -96,7 +96,7 @@
endif
endif
-if HAVE_GLIB
+if HAVE_GLIB20
DX_INPUT += \
$(srcdir)/avahi-glib/glib-watch.h \
$(srcdir)/avahi-glib/glib-malloc.h
@@ -180,7 +180,7 @@
endif
-if HAVE_GLIB
+if HAVE_GLIB20
pkgconfig_DATA += avahi-glib.pc
diff -u -r avahi-0.6.14/avahi-glib/Makefile.am avahi/avahi-glib/Makefile.am
--- avahi-0.6.14/avahi-glib/Makefile.am 2005-10-19 08:10:29.000000000 +0800
+++ avahi/avahi-glib/Makefile.am 2006-09-14 17:57:02.000000000 +0800
@@ -22,7 +22,7 @@
# This cool debug trap works on i386/gcc only
AM_CFLAGS+='-DDEBUG_TRAP=__asm__("int $$3")'
-if HAVE_GLIB
+if HAVE_GLIB20
avahiincludedir=$(includedir)/avahi-glib
diff -u -r avahi-0.6.14/configure.ac avahi/configure.ac
--- avahi-0.6.14/configure.ac 2006-09-14 04:15:37.000000000 +0800
+++ avahi/configure.ac 2006-09-14 17:57:02.000000000 +0800
@@ -160,11 +160,8 @@
netbsd)
AC_MSG_WARN([Your distribution (${with_distro}) is supported but no init script exist yet! (patches welcome)])
;;
- linux)
- AC_MSG_ERROR([Linux distribution autodetection failed, you must specify the distribution to target using --with-distro=DISTRO, set DISTRO to none if your distribution is not supported.])
- ;;
*)
- AC_MSG_ERROR([Your distribution (${with_distro}) is not yet supported, init scripts and D-Bus configuration will not be installed! (patches welcome), you can specify --with-distro=none to skip this check])
+ AC_MSG_WARN([Your distribution (${with_distro}) is not yet supported, init scripts and D-Bus configuration will not be installed! (patches welcome), you can specify --with-distro=none to silence this warning])
;;
esac
@@ -283,18 +280,16 @@
AC_ARG_ENABLE(glib,
AS_HELP_STRING([--disable-glib],[Disable use of GLib]),
[case "${enableval}" in
- yes) HAVE_GLIB=yes ;;
- no) HAVE_GLIB=no ;;
+ yes) HAVE_GLIB20=yes ;;
+ no) HAVE_GLIB20=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-glib) ;;
esac],
- [HAVE_GLIB=yes])
+ [HAVE_GLIB20=yes])
-if test "x$HAVE_GLIB" = "xyes" ; then
- PKG_CHECK_MODULES(GLIB20, [ glib-2.0 >= 2.4.0 ])
- AC_SUBST(GLIB20_CFLAGS)
- AC_SUBST(GLIB20_LIBS)
-fi
-AM_CONDITIONAL(HAVE_GLIB, test "x$HAVE_GLIB" = "xyes")
+AVAHI_OPT_MODULES(GLIB20, [ glib-2.0 >= 2.4.0 ])
+AC_SUBST(GLIB20_CFLAGS)
+AC_SUBST(GLIB20_LIBS)
+AM_CONDITIONAL(HAVE_GLIB20, test "x$HAVE_GLIB20" = "xyes")
#
# Check for Qt 3
@@ -305,13 +300,13 @@
yes) HAVE_QT3=yes ;;
no) HAVE_QT3=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-qt3) ;;
- esac],
- [HAVE_QT3=yes])
+ esac])
+
+AVAHI_OPT_MODULES( QT3, [ qt-mt >= 3.0.0 ])
+AC_SUBST(QT3_CFLAGS)
+AC_SUBST(QT3_LIBS)
if test "x$HAVE_QT3" = "xyes" ; then
- PKG_CHECK_MODULES( QT3, [ qt-mt >= 3.0.0 ])
- AC_SUBST(QT3_CFLAGS)
- AC_SUBST(QT3_LIBS)
QT3_PREFIX="`$PKG_CONFIG --variable=prefix qt-mt`/bin"
MOC_QT3="no"
AC_CHECK_FILE( "$QT3_PREFIX/moc-qt3", [ MOC_QT3=$QT3_PREFIX/moc-qt3 ], [
@@ -330,13 +325,13 @@
yes) HAVE_QT4=yes ;;
no) HAVE_QT4=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-qt4) ;;
- esac],
- [HAVE_QT4=yes])
+ esac])
+
+AVAHI_OPT_MODULES( QT4, [ QtCore >= 4.0.0 ])
+AC_SUBST(QT4_CFLAGS)
+AC_SUBST(QT4_LIBS)
if test "x$HAVE_QT4" = "xyes" ; then
- PKG_CHECK_MODULES( QT4, [ QtCore >= 4.0.0 ])
- AC_SUBST(QT4_CFLAGS)
- AC_SUBST(QT4_LIBS)
QT4_PREFIX="`$PKG_CONFIG --variable=prefix QtCore`/bin"
MOC_QT4="no"
AC_CHECK_FILE( "$QT4_PREFIX/moc-qt4", [ MOC_QT4=$QT4_PREFIX/moc-qt4 ], [
@@ -380,8 +375,7 @@
yes) HAVE_DBUS=yes ;;
no) HAVE_DBUS=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-dbus) ;;
- esac],
- [HAVE_DBUS=yes])
+ esac])
AC_ARG_WITH(dbus-sys, AS_HELP_STRING([--with-dbus-sys=<dir>], [Path to D-Bus system.d directory]))
AC_ARG_WITH(dbus-system-socket, AS_HELP_STRING([--with-dbus-system-address=<address>], [Path to the D-Bus system socket, you probably want to put unix:path= at the start. Only needed for very old D-Bus releases]))
@@ -389,8 +383,8 @@
DBUS_VERSION="Disabled"
DBUS_SYS_DIR="Disabled"
DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="Disabled"
+AVAHI_OPT_MODULES(DBUS, [ dbus-1 >= 0.34 ])
if test "x$HAVE_DBUS" = "xyes" ; then
- PKG_CHECK_MODULES(DBUS, [ dbus-1 >= 0.34 ])
AC_DEFINE(HAVE_DBUS, 1, [Whether we have D-Bus or not])
@@ -494,8 +488,7 @@
yes) HAVE_DBM=yes ;;
no) HAVE_DBM=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-dbm) ;;
- esac],
- [HAVE_DBM=no])
+ esac])
AC_ARG_ENABLE(gdbm,
AS_HELP_STRING([--disable-gdbm],[Disable use of GDBM]),
@@ -503,8 +496,7 @@
yes) HAVE_GDBM=yes ;;
no) HAVE_GDBM=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-gdbm) ;;
- esac],
- [HAVE_GDBM=yes])
+ esac])
if test "x$HAVE_GDBM" = "xyes" ; then
if test "x$HAVE_DBM" = "xyes" ; then
@@ -538,14 +530,11 @@
yes) HAVE_LIBDAEMON=yes ;;
no) HAVE_LIBDAEMON=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-libdaemon) ;;
- esac],
- [HAVE_LIBDAEMON=yes])
+ esac])
-if test "x$HAVE_LIBDAEMON" = "xyes" ; then
- PKG_CHECK_MODULES(LIBDAEMON, [ libdaemon >= 0.5 ])
- AC_SUBST(LIBDAEMON_CFLAGS)
- AC_SUBST(LIBDAEMON_LIBS)
-fi
+AVAHI_OPT_MODULES(LIBDAEMON, [ libdaemon >= 0.5 ])
+AC_SUBST(LIBDAEMON_CFLAGS)
+AC_SUBST(LIBDAEMON_LIBS)
AM_CONDITIONAL(HAVE_LIBDAEMON, test "x$HAVE_LIBDAEMON" = "xyes")
#
@@ -571,13 +560,9 @@
yes) HAVE_PYGTK=yes ;;
no) HAVE_PYGTK=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-pygtk) ;;
- esac],
- [HAVE_PYGTK=yes])
-
- if test "x$HAVE_PYGTK" = "xyes" ; then
- AM_CHECK_PYMOD(gtk,,,[AC_MSG_ERROR(Could not find Python module gtk)])
- fi
+ esac])
+ AVAHI_OPT_PYMOD(HAVE_PYGTK, gtk)
if test "x$HAVE_DBUS" = "xyes" ; then
AC_ARG_ENABLE(python-dbus,
@@ -586,12 +571,9 @@
yes) HAVE_PYTHON_DBUS=yes ;;
no) HAVE_PYTHON_DBUS=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-python-dbus) ;;
- esac],
- [HAVE_PYTHON_DBUS=yes])
-
- if test "x$HAVE_PYTHON_DBUS" = "xyes"; then
- AM_CHECK_PYMOD(dbus,,,[AC_MSG_ERROR(Could not find Python module dbus)])
- fi
+ esac])
+
+ AVAHI_OPT_PYMOD(HAVE_PYTHON_DBUS, dbus)
AM_CHECK_PYMOD(socket,,,[AC_MSG_ERROR(Could not find Python module socket)])
if test "x$HAVE_GDBM" = "xyes"; then
@@ -606,6 +588,7 @@
AM_CONDITIONAL(HAVE_PYGTK, test "x$HAVE_PYGTK" = "xyes")
AM_CONDITIONAL(HAVE_PYTHON_DBUS, test "x$HAVE_PYTHON_DBUS" = "xyes")
+
#
# Check for mono stuff
#
@@ -617,24 +600,34 @@
yes) HAVE_MONO=yes ;;
no) HAVE_MONO=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-mono) ;;
- esac],
- [HAVE_MONO=yes])
+ esac])
- if test "x$HAVE_MONO" = "xyes" ; then
+ if test "x$HAVE_MONO" != "xno" ; then
AC_PATH_PROG(MCS, mcs)
if test "x$MCS" = "x" ; then
- AC_MSG_ERROR([Can not find "mcs" - The Mono C-Sharp Compiler) in your PATH])
+ if test "x$HAVE_MONO" = "xyes" ; then
+ AC_MSG_ERROR([Can not find "mcs" - The Mono C-Sharp Compiler) in your PATH])
+ else
+ AC_MSG_WARN([Can not find "mcs" - The Mono C-Sharp Compiler) in your PATH, disabling it.])
+ HAVE_MONO=no
+ fi
fi
AC_PATH_PROG(GACUTIL, gacutil)
if test "x$GACUTIL" = "x" ; then
- AC_MSG_ERROR([Can not find "gacutil" in your PATH])
+ if test "x$HAVE_MONO" = "xyes" ; then
+ AC_MSG_ERROR([Can not find "gacutil" in your PATH])
+ else
+ AC_MSG_WARN([Can not find "gacutil" in your PATH, disabling mono.])
+ HAVE_MONO=no
+ fi
+ else
+ HAVE_MONO=yes
fi
-
- AC_SUBST(MCS)
- AC_SUBST(GACUTIL)
fi
fi
+AC_SUBST(MCS)
+AC_SUBST(GACUTIL)
AM_CONDITIONAL(HAVE_MONO, test "x$HAVE_MONO" = "xyes")
#
@@ -897,7 +890,7 @@
dbus-1 system socket: ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
C Compiler: ${CC}
CFLAGS: ${CFLAGS}
- Enable GLIB: ${HAVE_GLIB}
+ Enable GLIB: ${HAVE_GLIB20}
Enable GTK: ${HAVE_GTK}
Enable D-Bus: ${HAVE_DBUS}
Enable Expat: ${HAVE_EXPAT}
@@ -953,7 +946,7 @@
Building libavahi-client: ${BUILD_CLIENT}
Building avahi-utils: ${BUILD_CLIENT}
Building avahi-python: ${BUILD_PYTHON}
- Building libavahi-glib: ${HAVE_GLIB}
+ Building libavahi-glib: ${HAVE_GLIB20}
Building avahi-discover-standalone: ${HAVE_GTK}
Building libavahi-qt3: ${HAVE_QT3}
Building libavahi-qt4: ${HAVE_QT4}
diff -u -r avahi-0.6.14/examples/Makefile.am avahi/examples/Makefile.am
--- avahi-0.6.14/examples/Makefile.am 2005-10-27 05:28:12.000000000 +0800
+++ avahi/examples/Makefile.am 2006-09-14 17:57:02.000000000 +0800
@@ -49,7 +49,7 @@
client_browse_services_CFLAGS = $(AM_CFLAGS)
client_browse_services_LDADD = $(AM_LDADD) ../avahi-client/libavahi-client.la ../avahi-common/libavahi-common.la
-if HAVE_GLIB
+if HAVE_GLIB20
if ENABLE_TESTS
noinst_PROGRAMS += \
diff -u -r avahi-0.6.14/tests/Makefile.am avahi/tests/Makefile.am
--- avahi-0.6.14/tests/Makefile.am 2005-10-19 08:10:29.000000000 +0800
+++ avahi/tests/Makefile.am 2006-09-14 17:57:02.000000000 +0800
@@ -20,7 +20,7 @@
AM_CFLAGS= \
-I$(top_srcdir)
-if HAVE_GLIB
+if HAVE_GLIB20
if HAVE_DBUS
if HAVE_NETLINK
More information about the avahi
mailing list