On Wed, 2017-06-28 at 12:29 +0200, Waldemar Brodkorb wrote: > When trying to cross-compile autofs for example with a buildsystem > like buildroot, the compilation fails in case the user wants to use > libtirpc library as RPC implementation. A hard coded include path > in aclocal.m4 is used. Other opensource software like rpcbind or > nfs-utils are suing autotools pkgconfig infrastructure to find > the libtirpc headers and to pass the correct linker flags. > > Convert configure.in to use PKG_CHECK_MODULES and remove the > hand written autoconf macros from aclocal.m4. > > To autoreconf the package you need pkg-config or pkgconf installed, > which provides the needed autoconf macros in pkg.m4. For an > non-automake project a full path to pkg.m4 is required. > > This fixes cross-compilation of autofs and allows to use > alternative C libraries as uClibc-ng without internal RPC > support to be used in cross-compiling environments. > > Signed-off-by: Waldemar Brodkorb <wbx@xxxxxxxxxxx> > --- > v1 -> v2: > - add a better commit decription > - add back missing TIRPC_WORKAROUND/WITH_LIBTIRPC defines > - add back AC_CHECK_FUNCS([getrpcbyname getservbyname]) > > For autoheader/autoconf to generate configure/config.h you > need to have pkg-config installed on your development machine. > When the user does not have installed pkg-config later, he > can use autofs without libtirpc as before. > Configure will fail when the user use --with-libtirpc and > pkg-config is not installed. Thanks for this, I'll have a look through it. > > --- > Makefile.conf.in | 3 ++- > Makefile.rules | 2 +- > aclocal.m4 | 48 ------------------------------------------------ > configure.in | 16 ++++++++++++++-- > 4 files changed, 17 insertions(+), 52 deletions(-) > > diff --git a/Makefile.conf.in b/Makefile.conf.in > index 2bc3202..f879e26 100644 > --- a/Makefile.conf.in > +++ b/Makefile.conf.in > @@ -64,7 +64,8 @@ RPCGEN = @PATH_RPCGEN@ > RANLIB = @PATH_RANLIB@ > > # Use libtirpc if requested and available > -TIRPCLIB = @TIRPCLIB@ > +TIRPCLIB = @TIRPC_LIBS@ > +TIRPCCFLAGS = @TIRPC_CFLAGS@ > > # Use dmalloc for memory debuging > DMALLOCLIB = @DMALLOCLIB@ > diff --git a/Makefile.rules b/Makefile.rules > index 7d1af2e..0edf9bf 100644 > --- a/Makefile.rules > +++ b/Makefile.rules > @@ -46,7 +46,7 @@ CFLAGS += -D_REENTRANT -D_FILE_OFFSET_BITS=64 > LIBS += -lpthread > > ifdef TIRPCLIB > -CFLAGS += -I/usr/include/tirpc > +CFLAGS += $(TIRPCCFLAGS) > LIBS += $(TIRPCLIB) > endif > > diff --git a/aclocal.m4 b/aclocal.m4 > index 00811e0..31ca602 100644 > --- a/aclocal.m4 > +++ b/aclocal.m4 > @@ -399,51 +399,3 @@ fi > LIBS="$af_check_ldap_parse_page_control_save_libs" > ]) > > -dnl ----------------------------------------------------------------------- > --- > -dnl AF_CHECK_LIBTIRPC > -dnl > -dnl Use libtirpc for rpc transport > -dnl ----------------------------------------------------------------------- > --- > -AC_DEFUN([AF_CHECK_LIBTIRPC], > -[ > -# save current flags > -af_check_libtirpc_save_cflags="$CFLAGS" > -af_check_libtirpc_save_libs="$LIBS" > -CFLAGS="$CFLAGS -I/usr/include/tirpc" > -LIBS="$LIBS -ltirpc" > - > -AC_TRY_LINK( > - [ #include <rpc/rpc.h> ], > - [ CLIENT *cl; > - struct sockaddr_in addr; > - int fd; > - unsigned long ul; struct timeval t; unsigned int ui; > - cl = clntudp_bufcreate(&addr,ul,ul,t,&fd,ui,ui); ], > - [ af_have_libtirpc=yes > - AC_MSG_RESULT(yes) ], > - [ AC_MSG_RESULT(no) ]) > - > -if test "$af_have_libtirpc" = "yes"; then > - AC_DEFINE(WITH_LIBTIRPC,1, [Define to 1 if you have the libtirpc library > installed]) > - AC_DEFINE(TIRPC_WORKAROUND,1, [Define to 1 to use the libtirpc tsd usage > workaround]) > - TIRPCLIB="-ltirpc" > -fi > - > -AC_CHECK_FUNCS([getrpcbyname getservbyname]) > - > -# restore flags > -CFLAGS="$af_check_libtirpc_save_cflags" > -LIBS="$af_check_libtirpc_save_libs" > -]) > - > -AC_DEFUN([AF_WITH_LIBTIRPC], > -[AC_MSG_CHECKING([if libtirpc is requested and available]) > -AC_ARG_WITH(libtirpc, > -[ --with-libtirpc use libtirpc if available], > -[if test "$withval" = yes; then > - AF_CHECK_LIBTIRPC() > -else > - AC_MSG_RESULT(no) > -fi], [AC_MSG_RESULT(no)]) > -]) > - > diff --git a/configure.in b/configure.in > index 0521252..71e9573 100644 > --- a/configure.in > +++ b/configure.in > @@ -11,6 +11,9 @@ define([AC_CACHE_LOAD], )dnl > define([AC_CACHE_SAVE], )dnl > AC_INIT(.autofs-5.1.3) > > +# for pkg-config macros > +m4_include([/usr/share/aclocal/pkg.m4]) > + > # > # autofs installs by default in /usr > # > @@ -124,8 +127,17 @@ AC_SUBST(flagdir) > # > # Use libtirpc > # > -AF_WITH_LIBTIRPC() > -AC_SUBST(TIRPCLIB) > +PKG_PROG_PKG_CONFIG() > +AC_ARG_WITH([libtirpc], AS_HELP_STRING([--with-libtirpc], [use libtirpc if > available])) > +if test "x$with_libtirpc" = "xyes"; then > + PKG_CHECK_MODULES([TIRPC],[libtirpc],[ > + AC_DEFINE(WITH_LIBTIRPC,1, > + [Define to 1 if you have the libtirpc library > installed]) > + AC_DEFINE(TIRPC_WORKAROUND,1, > + [Define to 1 to use the libtirpc tsd usage > workaround]) > + ]) > + AC_CHECK_FUNCS([getrpcbyname getservbyname]) > +fi > > # > # Optional include dmalloc -- To unsubscribe from this list: send the line "unsubscribe autofs" in