[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#942073: marisa: perl bindings are broken when linked with gcc-9



Control: tag -1 patch

On Wed, Oct 09, 2019 at 11:45:39PM +0300, Niko Tyni wrote:
> Package: libmarisa-perl
> Version: 0.2.5-3
> Severity: grave
> Control: block 935737 with -1
> 
> As noticed by the autopkgtest checks, the marisa Perl bindings are
> totally broken in sid after the recent Perl 5.30 rebuild:

> It looks like this regressed with the gcc 8 -> 9 move. Linking the
> DSO manually with gcc-8 makes it go away, as seen below.
> 
> I have no idea what goes wrong here, but I noticed that broken versions
> of blib/arch/auto/marisa/marisa.so have no NEEDED entry for libmarisa.so.0
> (as seen with 'objdump -p').

There seem to be several conflated issues here:

- debian/rules overrids LIBS to '-L../../lib/marisa/.libs' but doesn't
  include '-lmarisa'

- debian/rules setting of LDDLFLAGS used to mask this by including
  '-L../../lib/marisa/.libs -lmarisa', but this ends up too early in
  the linking command, so gcc-9 ignores it for the objects later in
  the command

- the LDDFLAGS part of this would not be needed and ExtUtils::MakeMaker
  would do the right thing if the marisa library was already built when
  Makefile.PL was run

Proposed patch attached.
-- 
Niko Tyni   ntyni@debian.org
>From f715c42ea44727eee6e7971bcc5270c409f01321 Mon Sep 17 00:00:00 2001
From: Niko Tyni <ntyni@debian.org>
Date: Tue, 15 Oct 2019 08:36:22 +0100
Subject: [PATCH] Fix debian/rules for perl bindings

We need to run Makefile.PL only after the library is built.

Closes: 942073
---
 debian/rules | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/debian/rules b/debian/rules
index 4e2b6cf..01f9db9 100755
--- a/debian/rules
+++ b/debian/rules
@@ -33,18 +33,18 @@ override_dh_auto_configure:
 	dh_auto_configure
 	make -C bindings
 	cd bindings/python; sed -i "s/__version__/$(DEB_VERSION_UPSTREAM)/" setup.py
+
+override_dh_auto_build:
+	dh_auto_build
 	cd bindings/perl; perl Makefile.PL \
 	    INSTALL_BASE=$(CURDIR)/debian/libmarisa-perl/usr \
 	    INSTALLARCHLIB=$(CURDIR)/debian/libmarisa-perl$(PERL_VENDOR_ARCH) \
 	    INSTALLSITEARCH=$(CURDIR)/debian/libmarisa-perl$(PERL_VENDOR_ARCH) \
 	    INSTALLVENDORARCH=$(CURDIR)/debian/libmarisa-perl$(PERL_VENDOR_ARCH) \
 	    INC="-I../../include" \
-	    LIBS="-L../../lib/marisa/.libs" \
+	    LIBS="-L../../lib/marisa/.libs -lmarisa" \
 	    CCFLAGS="$(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)" \
-	    LDDLFLAGS="-shared -L/usr/local/lib -L../../lib/marisa/.libs -lmarisa -fstack-protector $(shell dpkg-buildflags --get LDFLAGS)"
-
-override_dh_auto_build:
-	dh_auto_build
+	    LDDLFLAGS="-shared -L/usr/local/lib -fstack-protector $(shell dpkg-buildflags --get LDFLAGS)"
 	# Build for each Python 3 version
 	cd bindings/python; \
 	    set -ex; for python in $(PYTHON3); do \
-- 
2.23.0.rc1


Reply to: