Skip to contentSkip to conversation

package/exim: remove libnsl linking and fix native tools build

PATCH New Romain Naour 3 participants 5 messages May 17, 2018 – May 19, 2018

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/2 package/exim: remove libnsl linking and fix native tools build

glibc now considers its built-in libnsl as being obsolete, and requires passing --enable-obsolete-libnsl to have it built and installed. libnsl is now provided as a separate project [1], but it isn't packaged yet in Buildroot.

In preparation for dropping --enable-obsolete-libnsl from the glibc package, this commit ensures that exim doesn't use libnsl. It was already the case for uclibc and musl toolchains, so this commit simply extends that to make sure libnsl is also not used with glibc toolchains.

Only Exim's nis.so and nisplus.so lookup modules require libnsl, but they are not build by default. So we can safely remove -lnsl from the Makefile-Linux. If someone want these modules, a new libnsl package must be added first to provide nsl library.

This also fixes the following build error on recent distributions where libnsl is not installed (e.g. Fedora 28 which has switched to the new libnsl library that brings IPV6 support. [2]):

/bin/sh ../scripts/Configure-os.c
/usr/bin/gcc buildconfig.c
/usr/bin/ld: cannot find -lnsl
collect2: error: ld returned 1 exit status

This happens while exim builds a host tool named buildconfig. The build is done in build-br/Makefile, which in turn is assembled by concatenating together several makefiles, including OS/Makefile-Linux. So the buildconfig tool will be built with the same $(LIBS) as the target executables, including -lnsl. Removing -lnsl also fixes building buildconfig since it does not need libnsl.

Fixes:
http://autobuild.buildroot.net/results/a362dfef9e5187931431000c54f03f841d17c847

[1] https://github.com/thkukuk/libnsl.git
[2] https://fedoraproject.org/wiki/Changes/NISIPv6

---
v3: Also comment the buildconfig build issue on the host with Fedora 28 (Luca)
Add a comment about this issue in exim.mk

---
 package/exim/exim.mk | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
package/exim/exim.mk +7 -3
index 37eab501a4..f258ac2753 100644
@@ -72,13 +72,17 @@ define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL
 endef
 endif
 
-# only glibc provides libnsl, remove -lnsl for all other toolchains
+# Only Exim's nis.so and nisplus.so lookup modules require libnsl,
+# but they are not build by default.
+# libnsl has been deprecated from Glibc and no other libc provide it.
+# There is no libnsl package in Buildroot yet.
+# Remove -lnsl for all toolchains.
 # http://bugs.exim.org/show_bug.cgi?id=1564
-ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),)
+# This also fixes a host build issue on recent distributions where
+# libnsl is not installed by default.
 define EXIM_REMOVE_LIBNSL_FROM_MAKEFILE
 	$(SED) 's/-lnsl//g' $(@D)/OS/Makefile-Linux
 endef
-endif
 
 # musl does not provide struct ip_options nor struct ip_opts (but it is
 # available with both glibc and uClibc)
Signature · 1 line
2.14.3
#1 lore raw

PATCH v3 2/2 Revert "glibc: install the obsolete libnsl"

libnsl from Glibc is deprecated and should not be used anymore. Remove libnsl.so.* from GLIBC_LIBS_LIB.

libnsl is now an separate library that can be packaged later if necessary [1].

Note: libnsl from Glibc doesn't build with gcc 8 due new warning [2].

[1] https://github.com/thkukuk/libnsl.git
[2] http://patchwork.sourceware.org/patch/26437

This reverts commit 398747f5fafca8c07e696612d8eded53d4f935c7.

---
 package/glibc/glibc.mk | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
package/glibc/glibc.mk +1 -2
index 3ab673c0cc..c1c5ac687f 100644
@@ -100,7 +100,6 @@ define GLIBC_CONFIGURE_CMDS
 		--disable-profile \
 		--without-gd \
 		--enable-obsolete-rpc \
-		--enable-obsolete-nsl \
 		--enable-kernel=$(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)) \
 		--with-headers=$(STAGING_DIR)/usr/include)
 	$(GLIBC_ADD_MISSING_STUB_H)
@@ -113,7 +112,7 @@ endef
 
 GLIBC_LIBS_LIB = \
 	ld*.so.* libanl.so.* libc.so.* libcrypt.so.* libdl.so.* libgcc_s.so.* \
-	libm.so.* libnsl.so.* libpthread.so.* libresolv.so.* librt.so.* \
+	libm.so.* libpthread.so.* libresolv.so.* librt.so.* \
 	libutil.so.* libnss_files.so.* libnss_dns.so.* libmvec.so.*
 
 ifeq ($(BR2_PACKAGE_GDB),y)
Signature · 1 line
2.14.3
#2 lore raw

PATCH v3 1/2 package/exim: remove libnsl linking and fix native tools build

In reply to Romain Naour

Hi Romain,

On Thu, May 17, 2018 at 09:21:39AM +0200, Romain Naour wrote:

[snip]

Quoted 4 lines
package/exim/exim.mk +3 -1
-# only glibc provides libnsl, remove -lnsl for all other toolchains
+# Only Exim's nis.so and nisplus.so lookup modules require libnsl,
+# but they are not build by default.
+# libnsl has been deprecated from Glibc and no other libc provide it.

package/exim/exim.mk define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL · line 81

Quoted 10 lines
package/exim/exim.mk +4 -2
+# There is no libnsl package in Buildroot yet.
+# Remove -lnsl for all toolchains.
 # http://bugs.exim.org/show_bug.cgi?id=1564
-ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),)
+# This also fixes a host build issue on recent distributions where
+# libnsl is not installed by default.
 define EXIM_REMOVE_LIBNSL_FROM_MAKEFILE
 	$(SED) 's/-lnsl//g' $(@D)/OS/Makefile-Linux
 endef
-endif

It only occurred to me now. Since this is now unconditional we should use a regular patch. sed is used here only because the modification used to be conditional, and we don't do conditional patching. But this no longer holds.

Quoted 2 lines
 # musl does not provide struct ip_options nor struct ip_opts (but it is
 # available with both glibc and uClibc)

baruch

Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -
#3 lore raw

PATCH v3 1/2 package/exim: remove libnsl linking and fix native tools build

Hi Baruch,

Le 17/05/2018 ? 09:26, Baruch Siach a ?crit?:

Quoted 16 lines

Hi Romain,

On Thu, May 17, 2018 at 09:21:39AM +0200, Romain Naour wrote:

[snip]

Quoted 10 lines
package/exim/exim.mk +7 -2
-# only glibc provides libnsl, remove -lnsl for all other toolchains
+# Only Exim's nis.so and nisplus.so lookup modules require libnsl,
+# but they are not build by default.
+# libnsl has been deprecated from Glibc and no other libc provide it.
+# There is no libnsl package in Buildroot yet.
+# Remove -lnsl for all toolchains.
 # http://bugs.exim.org/show_bug.cgi?id=1564
-ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),)
+# This also fixes a host build issue on recent distributions where
+# libnsl is not installed by default.
Quoted 8 lines

package/exim/exim.mk define EXIM_USE_DEFAULT_CONFIG_FILE_OPENSSL · line 81

Quoted 4 lines

define EXIM_REMOVE_LIBNSL_FROM_MAKEFILE

package/exim/exim.mk +0 -1
 	$(SED) 's/-lnsl//g' $(@D)/OS/Makefile-Linux
 endef
-endif

It only occurred to me now. Since this is now unconditional we should use a regular patch. sed is used here only because the modification used to be conditional, and we don't do conditional patching. But this no longer holds.

Ok, It's done in the v4.
Thanks for the review!

Best regards,
Romain

Quoted 6 lines
Quoted 3 lines
 # musl does not provide struct ip_options nor struct ip_opts (but it is
 # available with both glibc and uClibc)

baruch

#4 lore raw

PATCH v3 1/2 package/exim: remove libnsl linking and fix native tools build

In reply to Romain Naour

Hello,

Quoted 15 lines · Romain Naour

glibc now considers its built-in libnsl as being obsolete, and requires passing --enable-obsolete-libnsl to have it built and installed. libnsl is now provided as a separate project [1], but it isn't packaged yet in Buildroot.

In preparation for dropping --enable-obsolete-libnsl from the glibc package, this commit ensures that exim doesn't use libnsl. It was already the case for uclibc and musl toolchains, so this commit simply extends that to make sure libnsl is also not used with glibc toolchains.

Only Exim's nis.so and nisplus.so lookup modules require libnsl, but they are not build by default. So we can safely remove -lnsl from the Makefile-Linux. If someone want these modules, a new libnsl package must be added first to provide nsl library.

Quoted 8 lines

This also fixes the following build error on recent distributions where libnsl is not installed (e.g. Fedora 28 which has switched to the new libnsl library that brings IPV6 support. [2]):

/bin/sh ../scripts/Configure-os.c
/usr/bin/gcc buildconfig.c
/usr/bin/ld: cannot find -lnsl
collect2: error: ld returned 1 exit status

I don't really agree that this patch is the good solution for this specific problem. The good approach is to not use $(LIBS) at all when building the buildconfig host program. I've committed this:

https://git.buildroot.org/buildroot/commit/?id=b872d829d092059ae8d5e86115d1515164d01a74

That being said, I believe your change is still useful, but doing it as a patch to exim like Baruch proposed is a better solution.

Could you rework your patch, and its commit log, according to this ?

Thanks a lot!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com