From a1371d8c81d5fc22cbc8ea2b1c9eb465e9a8e874 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 6 Nov 2020 07:40:06 -0500 Subject: [PATCH] configure.ac: simplify the search for libmilter. This commit (temporarily?) reverts the --with-milter flag to a boolean, disallowing the user to pass it a path. This is done for several reasons: * There's only one standard major version of libmilter, so people are unlikely to have multiple copies of it installed side-by-side. And When only one copy is present and usable with "-lmilter", the ability to specify a path is redundant. * The "milter path" was used for both the headers and the library itself. As a result, the user was expected to specify something like "/usr" as the milter path, whence OpenDKIM would infer that the headers live in /usr/include and that the libraries live in /usr/. If multiple libraries live in multiple somewheres -- as is the case with "lib" and "lib64" on multilib systems -- OpenDKIM is prone to guessing incorrectly. In other words, the "milter path" mechanism was not fine-grained enough to specify the correct library, and this led to link failures in some not-too-uncommon cases. * Headers and libraries in non-standard paths should be handled with pkg-config, anyway. --- configure.ac | 129 +++++++------------------------------------ opendkim/Makefile.am | 9 ++- 2 files changed, 23 insertions(+), 115 deletions(-) diff --git a/configure.ac b/configure.ac index 828fe53f..8234e588 100644 --- a/configure.ac +++ b/configure.ac @@ -932,120 +932,29 @@ AC_SUBST(LIBCRYPTO_LIBS) AC_MSG_CHECKING([for milter library and includes]) AC_ARG_WITH([milter], AS_HELP_STRING([--with-milter], - [location of milter includes and library]), - [milterpath="$withval"], [milterpath="auto"]) - -if test x"$enable_filter" = x"no" -then - milterpath="no" -fi - -if test "$milterpath" = "auto" -o "$milterpath" = "yes" -then - milterdirs="/usr/local /opt/local /usr" - for d in $milterdirs - do - if test -f $d/include/libmilter/mfapi.h - then - milterpath=$d - break - fi - done -fi -case "$milterpath" in - no) - if test x"$enable_filter" = x"yes" - then - AC_MSG_ERROR([milter is required]) - fi - AC_MSG_RESULT(disabled) - ;; - auto) - AC_MSG_ERROR([milter not found]) - ;; - */*) - if ! test -f $milterpath/include/libmilter/mfapi.h - then - AC_MSG_ERROR([milter includes not found at $milterpath]) - fi - AC_MSG_RESULT([$milterpath]) - ;; - *) - AC_MSG_ERROR([milter not found]) - ;; -esac - -LIBMILTER_INCDIRS="" -LIBMILTER_LIBDIRS="" -LIBMILTER_LIBS="" + [whether or not (yes or no) to use libmilter]), + [milterpath="$withval"], [milterpath="no"]) + +AS_IF([test x"$enable_filter" = x"no"],[milterpath="no"]) +AS_IF([test x"$milterpath" = x"no"], [ + AS_IF([test x"$enable_filter" = x"yes"],[ + AC_MSG_ERROR([libmilter is required if filtering is enabled]) + ]) +]) -if test x"$milterpath" != x"no" -then - LIBMILTER_INCDIRS="-I$milterpath/include" +AS_IF([test x"$milterpath" = x"yes"], [ + AC_CHECK_HEADER(libmilter/mfapi.h, + [], + AC_MSG_ERROR([libmilter/mfapi.h not found])) - saved_CC="$CC" - saved_CFLAGS="$CFLAGS" - saved_CPPFLAGS="$CPPFLAGS" - saved_LDFLAGS="$LDFLAGS" - saved_LIBS="$LIBS" + AC_SEARCH_LIBS([smfi_register], + [milter], + [LIBMILTER_LIBS="-lmilter"], + AC_MSG_ERROR([libmilter not found])) - CC="$PTHREAD_CC" - LIBS="$outer_LIBS $PTHREAD_LIBS $saved_LIBS" - CPPFLAGS="$LIBMILTER_INCDIRS $saved_CPPFLAGS" - CFLAGS="$PTHREAD_CFLAGS $saved_CFLAGS" - LDFLAGS="$outer_LDFLAGS $PTHREAD_CFLAGS $saved_LDFLAGS" - - breakloop="no" - for d in lib lib64 lib/libmilter - do - unset ac_cv_search_smfi_register - LDFLAGS="$outer_LDFLAGS $PTHREAD_CFLAGS -L$milterpath/$d $saved_LDFLAGS" - AC_SEARCH_LIBS([smfi_register], [milter], - [ - LIBMILTER_LIBDIRS="-L$milterpath/$d" - LIBMILTER_LIBS="-lmilter" - breakloop="yes" - ]) - - AC_CHECK_FUNC([smfi_insheader], - AC_DEFINE([HAVE_SMFI_INSHEADER], 1, - [Define if libmilter has smfi_insheader()])) - - AC_CHECK_FUNC([smfi_opensocket], - AC_DEFINE([HAVE_SMFI_OPENSOCKET], 1, - [Define if libmilter has smfi_opensocket()])) - - AC_CHECK_FUNC([smfi_progress], - AC_DEFINE([HAVE_SMFI_PROGRESS], 1, - [Define if libmilter has smfi_progress()])) - - AC_CHECK_FUNC([smfi_setsymlist], - AC_DEFINE([HAVE_SMFI_SETSYMLIST], 1, - [Define if libmilter has smfi_setsymlist()])) - - AC_CHECK_FUNC([smfi_version], - AC_DEFINE([HAVE_SMFI_VERSION], 1, - [Define if libmilter has smfi_version()])) - - if test x"$breakloop" = x"yes" - then - break - fi - done - if test x"$LIBMILTER_LIBDIRS" = x"" - then - AC_MSG_ERROR([libmilter not found]) - fi - - CC="$saved_CC" - CPPFLAGS="$saved_CPPFLAGS" - CFLAGS="$saved_CFLAGS" - LDFLAGS="$saved_LDFLAGS" - LIBS="$saved_LIBS" -fi + AC_CHECK_FUNCS([smfi_insheader smfi_opensocket smfi_progress smfi_setsymlist smfi_version]) +]) -AC_SUBST(LIBMILTER_INCDIRS) -AC_SUBST(LIBMILTER_LIBDIRS) AC_SUBST(LIBMILTER_LIBS) # diff --git a/opendkim/Makefile.am b/opendkim/Makefile.am index 4aa615c1..e3d1d10e 100644 --- a/opendkim/Makefile.am +++ b/opendkim/Makefile.am @@ -26,7 +26,7 @@ opendkim_SOURCES = opendkim.c opendkim.h opendkim-ar.c opendkim-ar.h opendkim-ar opendkim_CC = $(PTHREAD_CC) opendkim_CFLAGS = $(PTHREAD_CFLAGS) $(LIBCRYPTO_CFLAGS) $(COV_CFLAGS) opendkim_CPPFLAGS = -I$(srcdir)/../libopendkim $(LIBCRYPTO_CPPFLAGS) -opendkim_LDFLAGS = $(LIBCRYPTO_LIBDIRS) $(LIBMILTER_LIBDIRS) $(PTHREAD_CFLAGS) $(COV_LDFLAGS) +opendkim_LDFLAGS = $(LIBCRYPTO_LIBDIRS) $(PTHREAD_CFLAGS) $(COV_LDFLAGS) opendkim_LDADD = ../libopendkim/libopendkim.la $(LIBMILTER_LIBS) $(LIBCRYPTO_LIBS) $(PTHREAD_LIBS) $(COV_LIBADD) $(LIBRESOLV) if USE_DB_OPENDKIM opendkim_CPPFLAGS += $(LIBDB_INCDIRS) @@ -88,7 +88,6 @@ opendkim_CPPFLAGS += -I$(srcdir)/../reprrd opendkim_LDADD += ../reprrd/libreprrd.la endif -opendkim_CPPFLAGS += $(LIBMILTER_INCDIRS) endif if STATS @@ -108,7 +107,7 @@ opendkim_testkey_CFLAGS = $(LIBCRYPTO_CFLAGS) $(COV_CFLAGS) $(PTHREAD_CFLAGS) opendkim_testkey_LDFLAGS = $(LIBCRYPTO_LIBDIRS) $(COV_LDFLAGS) $(PTHREAD_CFLAGS) opendkim_testkey_LDADD = ../libopendkim/libopendkim.la $(LIBCRYPTO_LIBS) $(LIBRESOLV) $(COV_LIBADD) $(PTHREAD_LIBS) if LUA -opendkim_testkey_CPPFLAGS += $(LIBLUA_INCDIRS) $(LIBMILTER_INCDIRS) +opendkim_testkey_CPPFLAGS += $(LIBLUA_INCDIRS) opendkim_testkey_LDFLAGS += $(LIBLUA_LIBDIRS) opendkim_testkey_LDADD += $(LIBLUA_LIBS) endif @@ -200,7 +199,7 @@ opendkim_genzone_CPPFLAGS += $(OPENLDAP_CPPFLAGS) opendkim_genzone_LDADD += $(OPENLDAP_LIBS) endif if LUA -opendkim_genzone_CPPFLAGS += $(LIBLUA_INCDIRS) $(LIBMILTER_INCDIRS) +opendkim_genzone_CPPFLAGS += $(LIBLUA_INCDIRS) opendkim_genzone_LDFLAGS += $(LIBLUA_LIBDIRS) opendkim_genzone_LDADD += $(LIBLUA_LIBS) endif @@ -250,7 +249,7 @@ opendkim_atpszone_CPPFLAGS += $(OPENLDAP_CPPFLAGS) opendkim_atpszone_LDADD += $(OPENLDAP_LIBS) endif if LUA -opendkim_atpszone_CPPFLAGS += $(LIBLUA_INCDIRS) $(LIBMILTER_INCDIRS) +opendkim_atpszone_CPPFLAGS += $(LIBLUA_INCDIRS) opendkim_atpszone_LDFLAGS += $(LIBLUA_LIBDIRS) opendkim_atpszone_LDADD += $(LIBLUA_LIBS) endif