package/exim: remove libnsl linking and fix native tools build
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
@@ -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
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
@@ -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
PATCH v3 1/2 package/exim: remove libnsl linking and fix native tools build
In reply to Romain NaourHi 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 -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_MAKEFILEpackage/exim/exim.mk +0
-1$(SED) 's/-lnsl//g' $(@D)/OS/Makefile-Linux endef -endifIt 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
PATCH v3 1/2 package/exim: remove libnsl linking and fix native tools build
In reply to Romain NaourHello,
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/gccbuildconfig.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