diff mbox

[v3] autofs: allow to use libtirpc instead of internal C implementation

Message ID 20170323071058.GA29887@waldemar-brodkorb.de
State Changes Requested
Headers show

Commit Message

Waldemar Brodkorb March 23, 2017, 7:10 a.m. UTC
uClibc-ng plans to remove 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@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
---
 package/autofs/0004-libtirpc-via-pkgconfig.patch | 83 ++++++++++++++++++++++++
 package/autofs/Config.in                         |  7 +-
 package/autofs/autofs.mk                         |  5 ++
 3 files changed, 91 insertions(+), 4 deletions(-)
 create mode 100644 package/autofs/0004-libtirpc-via-pkgconfig.patch

Comments

Waldemar Brodkorb April 2, 2017, 3:40 a.m. UTC | #1
ping?

Waldemar Brodkorb wrote,

> uClibc-ng plans to remove 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@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
Thomas Petazzoni April 8, 2017, 2:05 p.m. UTC | #2
Hello,

On Thu, 23 Mar 2017 08:10:58 +0100, Waldemar Brodkorb wrote:
> uClibc-ng plans to remove 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@openadk.org>

This is almost good, but there are still a few issues. I had fixed most
of them locally, but one needs a bit more work.

> diff --git a/package/autofs/0004-libtirpc-via-pkgconfig.patch b/package/autofs/0004-libtirpc-via-pkgconfig.patch
> new file mode 100644
> index 0000000..784b4c6
> --- /dev/null
> +++ b/package/autofs/0004-libtirpc-via-pkgconfig.patch
> @@ -0,0 +1,83 @@
> +Use pkg-config to find libtirpc headers
> +
> +Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>

Please format your patch with Git. The Git repo is available at
https://git.kernel.org/pub/scm/linux/storage/autofs/autofs.git/, create
a branch based on the release_5_1_2 tag, and import the three existing
patches.

> ++AC_PATH_PROGS(PKG_CONFIG, pkg-config, no)
> ++
> + # save current flags
> + af_check_libtirpc_save_cflags="$CFLAGS"
> + af_check_libtirpc_save_ldflags="$LDFLAGS"
> +-CFLAGS="$CFLAGS -I/usr/include/tirpc"
> +-LDFLAGS="$LDFLAGS -ltirpc"
> ++
> ++TIRPC_LIBS=`$PKG_CONFIG --libs libtirpc`
> ++TIRPC_FLAGS=`$PKG_CONFIG --cflags libtirpc`

Please PKG_CHECK_MODULES() instead.

> diff --git a/package/autofs/autofs.mk b/package/autofs/autofs.mk
> index 23e6836..580b04a 100644
> --- a/package/autofs/autofs.mk
> +++ b/package/autofs/autofs.mk
> @@ -32,6 +32,11 @@ AUTOFS_CONF_OPTS = \
>  	--with-path="$(BR_PATH)" \
>  	--with-hesiod=no
>  
> +ifeq ($(BR2_PACKAGE_LIBTIRPC),y)
> +AUTOFS_DEPENDENCIES += libtirpc host-pkgconf

Once PKG_CHECK_MODULES is used, host-pkgconf should be an unconditional
dependency, because it will be needed for autoreconf to work.

Please also add this new patch to the list of patches that justify the
AUTORECONF = YES.

> +AUTOFS_CONF_OPTS += --with-libtirpc

Please add:

else
AUTOFS_CONF_OPTS += --without-libtirpc

Thanks!

Thomas
Waldemar Brodkorb April 8, 2017, 7:03 p.m. UTC | #3
Hi Thomas,
Thomas Petazzoni wrote,

> Hello,
> 
> On Thu, 23 Mar 2017 08:10:58 +0100, Waldemar Brodkorb wrote:
> > uClibc-ng plans to remove 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@openadk.org>
> 
> This is almost good, but there are still a few issues. I had fixed most
> of them locally, but one needs a bit more work.
> 
> > diff --git a/package/autofs/0004-libtirpc-via-pkgconfig.patch b/package/autofs/0004-libtirpc-via-pkgconfig.patch
> > new file mode 100644
> > index 0000000..784b4c6
> > --- /dev/null
> > +++ b/package/autofs/0004-libtirpc-via-pkgconfig.patch
> > @@ -0,0 +1,83 @@
> > +Use pkg-config to find libtirpc headers
> > +
> > +Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
> 
> Please format your patch with Git. The Git repo is available at
> https://git.kernel.org/pub/scm/linux/storage/autofs/autofs.git/, create
> a branch based on the release_5_1_2 tag, and import the three existing
> patches.

Okay, I understand this.
 
> > ++AC_PATH_PROGS(PKG_CONFIG, pkg-config, no)
> > ++
> > + # save current flags
> > + af_check_libtirpc_save_cflags="$CFLAGS"
> > + af_check_libtirpc_save_ldflags="$LDFLAGS"
> > +-CFLAGS="$CFLAGS -I/usr/include/tirpc"
> > +-LDFLAGS="$LDFLAGS -ltirpc"
> > ++
> > ++TIRPC_LIBS=`$PKG_CONFIG --libs libtirpc`
> > ++TIRPC_FLAGS=`$PKG_CONFIG --cflags libtirpc`
> 
> Please PKG_CHECK_MODULES() instead.

I tried, but failed. Do you have some examples how
PKG_CHECK_MODULES() should be used? I am not a autotool expert, so I
am unsure how to create a patch which will be accepted by upstream.

best regards
 Waldemar
Thomas Petazzoni April 8, 2017, 7:38 p.m. UTC | #4
Hello,

On Sat, 8 Apr 2017 21:03:46 +0200, Waldemar Brodkorb wrote:
> > Please PKG_CHECK_MODULES() instead.  
> 
> I tried, but failed. Do you have some examples how
> PKG_CHECK_MODULES() should be used? I am not a autotool expert, so I
> am unsure how to create a patch which will be accepted by upstream.

See https://autotools.io/pkgconfig/pkg_check_modules.html, it's a good
and simple tutorial on how to use PKG_CHECK_MODULES().

Best regards,

Thomas
Waldemar Brodkorb April 10, 2017, 5:33 a.m. UTC | #5
Hi Thomas,
Thomas Petazzoni wrote,

> Hello,
> 
> On Sat, 8 Apr 2017 21:03:46 +0200, Waldemar Brodkorb wrote:
> > > Please PKG_CHECK_MODULES() instead.  
> > 
> > I tried, but failed. Do you have some examples how
> > PKG_CHECK_MODULES() should be used? I am not a autotool expert, so I
> > am unsure how to create a patch which will be accepted by upstream.
> 
> See https://autotools.io/pkgconfig/pkg_check_modules.html, it's a good
> and simple tutorial on how to use PKG_CHECK_MODULES().

I have seen the tutorial, I thought about a howto with more real
life examples. I looked into nfs-utils and linux-pam and tried
some stuff, but unfortunately I failed.

I am given up for now.

best regards
 Waldemar
diff mbox

Patch

diff --git a/package/autofs/0004-libtirpc-via-pkgconfig.patch b/package/autofs/0004-libtirpc-via-pkgconfig.patch
new file mode 100644
index 0000000..784b4c6
--- /dev/null
+++ b/package/autofs/0004-libtirpc-via-pkgconfig.patch
@@ -0,0 +1,83 @@ 
+Use pkg-config to find libtirpc headers
+
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+
+diff -Nur autofs-5.1.2.orig/aclocal.m4 autofs-5.1.2/aclocal.m4
+--- autofs-5.1.2.orig/aclocal.m4	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/aclocal.m4	2017-03-21 20:10:06.441615642 +0100
+@@ -411,11 +411,18 @@
+ dnl --------------------------------------------------------------------------
+ AC_DEFUN([AF_CHECK_LIBTIRPC],
+ [
++
++AC_PATH_PROGS(PKG_CONFIG, pkg-config, no)
++
+ # save current flags
+ af_check_libtirpc_save_cflags="$CFLAGS"
+ af_check_libtirpc_save_ldflags="$LDFLAGS"
+-CFLAGS="$CFLAGS -I/usr/include/tirpc"
+-LDFLAGS="$LDFLAGS -ltirpc"
++
++TIRPC_LIBS=`$PKG_CONFIG --libs libtirpc`
++TIRPC_FLAGS=`$PKG_CONFIG --cflags libtirpc`
++
++CFLAGS="$CFLAGS $TIRPC_FLAGS"
++LIBS="$LIBS $TIRPC_LIBS"
+ 
+ AC_TRY_LINK(
+     [ #include <rpc/rpc.h> ],
+@@ -431,7 +438,8 @@
+ 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"
++    TIRPCINCLUDE=$TIRPC_FLAGS
++    TIRPCLIB=$TIRPC_LIBS
+ fi
+ 
+ AC_CHECK_FUNCS([getrpcbyname getservbyname])
+@@ -439,6 +447,7 @@
+ # restore flags
+ CFLAGS="$af_check_libtirpc_save_cflags"
+ LDFLAGS="$af_check_libtirpc_save_ldflags"
++
+ ])
+ 
+ AC_DEFUN([AF_WITH_LIBTIRPC],
+diff -Nur autofs-5.1.2.orig/configure.in autofs-5.1.2/configure.in
+--- autofs-5.1.2.orig/configure.in	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/configure.in	2017-03-20 22:01:57.191254563 +0100
+@@ -126,6 +126,7 @@
+ #
+ AF_WITH_LIBTIRPC()
+ AC_SUBST(TIRPCLIB)
++AC_SUBST(TIRPCINCLUDE)
+ 
+ #
+ # Optional include dmalloc
+diff -Nur autofs-5.1.2.orig/Makefile.conf.in autofs-5.1.2/Makefile.conf.in
+--- autofs-5.1.2.orig/Makefile.conf.in	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/Makefile.conf.in	2017-03-20 21:59:38.341881802 +0100
+@@ -62,6 +62,7 @@
+ 
+ # Use libtirpc if requested and available
+ TIRPCLIB = @TIRPCLIB@
++TIRPCINCLUDE = @TIRPCINCLUDE@
+ 
+ # Use dmalloc for memory debuging
+ DMALLOCLIB = @DMALLOCLIB@
+diff -Nur autofs-5.1.2.orig/Makefile.rules autofs-5.1.2/Makefile.rules
+--- autofs-5.1.2.orig/Makefile.rules	2016-06-15 04:40:44.000000000 +0200
++++ autofs-5.1.2/Makefile.rules	2017-03-20 22:03:25.590675167 +0100
+@@ -45,10 +45,8 @@
+ CFLAGS += -D_REENTRANT -D_FILE_OFFSET_BITS=64
+ LIBS += -lpthread
+ 
+-ifdef TIRPCLIB
+-CFLAGS += -I/usr/include/tirpc
++CFLAGS += $(TIRPCINCLUDE)
+ LIBS += $(TIRPCLIB)
+-endif
+ 
+ ifdef DMALLOCLIB
+ LIBS += $(DMALLOCLIB)
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 23e6836..580b04a 100644
--- a/package/autofs/autofs.mk
+++ b/package/autofs/autofs.mk
@@ -32,6 +32,11 @@  AUTOFS_CONF_OPTS = \
 	--with-path="$(BR_PATH)" \
 	--with-hesiod=no
 
+ifeq ($(BR2_PACKAGE_LIBTIRPC),y)
+AUTOFS_DEPENDENCIES += libtirpc host-pkgconf
+AUTOFS_CONF_OPTS += --with-libtirpc
+endif
+
 AUTOFS_MAKE_ENV = DONTSTRIP=1
 
 $(eval $(autotools-package))