[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