[Buildroot] [PATCH v4] autofs: allow to use libtirpc instead of internal C implementation
Waldemar Brodkorb
wbx at openadk.org
Tue Jun 27 16:50:51 UTC 2017
uClibc-ng removed internal RPC implementation as it
is ipv4 only and can not be used for most important RPC software
rpcbind and nfs-utils.
musl does not implement RPC and GNU C library deprecated the
internal implementation a while ago.
It is still possible to use the C library implementation.
Signed-off-by: Waldemar Brodkorb <wbx at openadk.org>
---
v1 -> v2:
- Thomas Petazzoni wants to keep legacy C library provided RPC
support
v2 -> v3:
- combine with BR2_PACKAGE_LIBTIRPC conditionally, suggested by
Baruch Siach
v3 -> v4:
- add patch to use pkg-config to search libtirpc
- automatically use it when BR2_TOOLCHAIN_HAS_NATIVE_RPC isn't
available
- tested with glibc/uclibc-ng toolchains
---
...fig-to-search-for-libtirpc-to-fix-cross-c.patch | 129 +++++++++++++++++++++
package/autofs/Config.in | 7 +-
package/autofs/autofs.mk | 10 +-
3 files changed, 141 insertions(+), 5 deletions(-)
create mode 100644 package/autofs/0002-use-pkg-config-to-search-for-libtirpc-to-fix-cross-c.patch
diff --git a/package/autofs/0002-use-pkg-config-to-search-for-libtirpc-to-fix-cross-c.patch b/package/autofs/0002-use-pkg-config-to-search-for-libtirpc-to-fix-cross-c.patch
new file mode 100644
index 0000000..29c3075
--- /dev/null
+++ b/package/autofs/0002-use-pkg-config-to-search-for-libtirpc-to-fix-cross-c.patch
@@ -0,0 +1,129 @@
+From 7582cb88121d1ca4431def9175469e1590e9c29f Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx at openadk.org>
+Date: Tue, 27 Jun 2017 18:11:56 +0200
+Subject: [PATCH] use pkg-config to search for libtirpc to fix
+ cross-compilation
+
+Signed-off-by: Waldemar Brodkorb <wbx at openadk.org>
+---
+ Makefile.conf.in | 3 ++-
+ Makefile.rules | 2 +-
+ aclocal.m4 | 48 ------------------------------------------------
+ configure.in | 11 +++++++++--
+ 4 files changed, 12 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..43a2776 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/pkconf
++m4_include([pkg.m4])
++
+ #
+ # autofs installs by default in /usr
+ #
+@@ -124,8 +127,12 @@ AC_SUBST(flagdir)
+ #
+ # Use libtirpc
+ #
+-AF_WITH_LIBTIRPC()
+-AC_SUBST(TIRPCLIB)
++PKG_PROG_PKG_CONFIG()
++
++AC_ARG_WITH([libtirpc], AS_HELP_STRING([--with-libtirpc], [Build with the TIRPC library]))
++if test "x$with_libtirpc" = "xyes"; then
++ PKG_CHECK_MODULES([TIRPC],[libtirpc])
++fi
+
+ #
+ # Optional include dmalloc
+--
+2.1.4
+
diff --git a/package/autofs/Config.in b/package/autofs/Config.in
index 8e08357..efb0ec2 100644
--- a/package/autofs/Config.in
+++ b/package/autofs/Config.in
@@ -2,8 +2,8 @@ config BR2_PACKAGE_AUTOFS
bool "autofs"
depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
depends on BR2_USE_MMU
- depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
depends on !BR2_STATIC_LIBS # dlfcn
+ select BR2_PACKAGE_LIBTIRPC if !BR2_TOOLCHAIN_HAS_NATIVE_RPC
help
Autofs controls the operation of the automount daemons. The
automount daemons automatically mount filesystems when they
@@ -15,7 +15,6 @@ config BR2_PACKAGE_AUTOFS
http://www.linuxfromscratch.org/blfs/view/svn/general/autofs.html
-comment "autofs needs a toolchain w/ NPTL, RPC, dynamic library"
+comment "autofs needs a toolchain w/ NPTL and dynamic library"
depends on BR2_USE_MMU
- depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS || \
- !BR2_TOOLCHAIN_HAS_NATIVE_RPC
+ depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS
diff --git a/package/autofs/autofs.mk b/package/autofs/autofs.mk
index 148ab1b..eb28306 100644
--- a/package/autofs/autofs.mk
+++ b/package/autofs/autofs.mk
@@ -9,7 +9,8 @@ AUTOFS_SOURCE = autofs-$(AUTOFS_VERSION).tar.xz
AUTOFS_SITE = $(BR2_KERNEL_MIRROR)/linux/daemons/autofs/v5
AUTOFS_LICENSE = GPL-2.0+
AUTOFS_LICENSE_FILES = COPYING COPYRIGHT
-AUTOFS_DEPENDENCIES = host-flex host-bison
+AUTOFS_DEPENDENCIES = host-flex host-bison host-pkgconf
+AUTOFS_AUTORECONF = YES
# autofs looks on the build machine for the path of modprobe, so tell
# it explicitly where it will be located on the target.
@@ -31,4 +32,11 @@ AUTOFS_CONF_OPTS = \
AUTOFS_MAKE_ENV = DONTSTRIP=1
+ifeq ($(BR2_TOOLCHAIN_HAS_NATIVE_RPC),)
+AUTOFS_CONF_OPTS += --with-libtirpc
+AUTOFS_DEPENDENCIES += libtirpc
+else
+AUTOFS_CONF_OPTS += --without-libtirpc
+endif
+
$(eval $(autotools-package))
--
2.1.4
More information about the buildroot
mailing list