Skip to contentSkip to conversation

autofs: allow to use libtirpc instead of internal C implementation

PATCH Superseded Waldemar Brodkorb 2 participants 6 messages Mar 23, 2017 – Apr 10, 2017

v3 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 autofs: allow to use libtirpc instead of internal C implementation

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.

---
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
package/autofs/0004-libtirpc-via-pkgconfig.patch new file +83 -0
new file mode 100644
index 0000000..784b4c6
@@ -0,0 +1,83 @@
+Use pkg-config to find libtirpc headers
+
+Signed-off-by: Waldemar Brodkorb <[email protected]>
+
+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)
package/autofs/Config.in +3 -4
index 8e08357..efb0ec2 100644
@@ -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
package/autofs/autofs.mk +5 -0
index 23e6836..580b04a 100644
@@ -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))
Signature · 1 line
2.1.4
#1 lore raw

PATCH v3 1/1 autofs: allow to use libtirpc instead of internal C implementation

ping?

Waldemar Brodkorb wrote,

Quoted 13 lines

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.

---
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

#2 lore raw

PATCH v3 1/1 autofs: allow to use libtirpc instead of internal C implementation

In reply to Waldemar Brodkorb

Hello,

Quoted 8 lines · Waldemar Brodkorb

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.

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.

package/autofs/0004-libtirpc-via-pkgconfig.patch line 3

Quoted 9 lines
package/autofs/0004-libtirpc-via-pkgconfig.patch new file +3 -0
new file mode 100644
index 0000000..784b4c6
@@ -0,0 +1,83 @@
+Use pkg-config to find libtirpc headers
+
+Signed-off-by: Waldemar Brodkorb <[email protected]>

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.

package/autofs/0004-libtirpc-via-pkgconfig.patch line 22

Quoted 10 lines
package/autofs/0004-libtirpc-via-pkgconfig.patch new file +10 -0
++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.

package/autofs/autofs.mk AUTOFS_CONF_OPTS = \ · line 36

Quoted 10 lines
package/autofs/autofs.mk +2 -0
index 23e6836..580b04a 100644
@@ -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.

package/autofs/autofs.mk AUTOFS_CONF_OPTS = \ · line 37

Quoted 1 line
package/autofs/autofs.mk +1 -0
+AUTOFS_CONF_OPTS += --with-libtirpc

Please add:

else
AUTOFS_CONF_OPTS += --without-libtirpc

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#3 lore raw

PATCH v3 1/1 autofs: allow to use libtirpc instead of internal C implementation

Hi Thomas,
Thomas Petazzoni wrote,

Quoted 15 lines

Hello,

Quoted 8 lines · Waldemar Brodkorb

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.

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.

Quoted 14 lines

package/autofs/0004-libtirpc-via-pkgconfig.patch line 3

Quoted 9 lines
package/autofs/0004-libtirpc-via-pkgconfig.patch new file +3 -0
new file mode 100644
index 0000000..784b4c6
@@ -0,0 +1,83 @@
+Use pkg-config to find libtirpc headers
+
+Signed-off-by: Waldemar Brodkorb <[email protected]>

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.

Quoted 11 lines

package/autofs/0004-libtirpc-via-pkgconfig.patch line 22

Quoted 10 lines
package/autofs/0004-libtirpc-via-pkgconfig.patch new file +10 -0
++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`
Quoted 1 line

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

#4 lore raw

PATCH v3 1/1 autofs: allow to use libtirpc instead of internal C implementation

Hello,

Quoted 5 lines · Waldemar Brodkorb
Quoted 1 line

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

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#5 lore raw

PATCH v3 1/1 autofs: allow to use libtirpc instead of internal C implementation

Hi Thomas,
Thomas Petazzoni wrote,

Quoted 11 lines

Hello,

Quoted 5 lines · Waldemar Brodkorb
Quoted 1 line

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