[Debian-med-packaging] Bug#976340: jellyfish: Fails to build on some architectures

Andreas Tille andreas at an3as.eu
Mon Mar 1 16:18:40 GMT 2021


Hi,

(debian-perl in CC since this might be connected to some Makefile.PL
which is not interpreted correctly.)

On Mon, Mar 01, 2021 at 12:27:45AM +0200, Adrian Bunk wrote:
> Control: reopen -1
> Control: tags -1 ftbfs
> Control: retitle -1 jellyfish FTBFS with -I in builddir
> 
> On Thu, Dec 03, 2020 at 05:06:00PM +0100, Andreas Tille wrote:
> > mips64el-linux-gnuabi64-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/build/jellyfishwEbe4/jellyfish-2.3.0/debian/tmp//usr/include/jellyfish-2.3.0 -I/usr/include/python3.9 -c swig_wrap.cpp -o build/temp.linux-mips64el-3.9/swig_wrap.o -std=c++0x
> > swig_wrap.cpp:2826:10: fatal error: jellyfish/mer_dna.hpp: No such file or directory
> >  2826 | #include <jellyfish/mer_dna.hpp>
> >       |          ^~~~~~~~~~~~~~~~~~~~~~~
> > compilation terminated.
> > error: command '/usr/bin/mips64el-linux-gnuabi64-gcc' failed with exit code 1
> > 
> > 
> > Any idea what might be wrong here?
> 
> I: NOTICE: Log filtering will replace 'build/jellyfish-IwEbe4/jellyfish-2.3.0' with '<<PKGBUILDDIR>>'
> I: NOTICE: Log filtering will replace 'build/jellyfish-IwEbe4' with '<<BUILDDIR>>'
> 
> Compare with -I/build/jellyfishwEbe4/jellyfish-2.3.0/debian/tmp//usr/include/jellyfish-2.3.0
> 
> jellyfish-IwEbe4 -> jellyfishwEbe4
> 
> This looks like a variant of the -L problem handled with
> debian/patches/fix_replacement_of_-L_option.patch

So your suspicion is that the issue is created in cases where the build
dir by chance contains a '-I' string, right?  I tried to verify this by
creating a build dir /tmp/jellyfish-I-L-test and simply called `debuild`
there (since I did not found any comparable sed invocation like in the
-L case).  Astonishingly the resulting error was different than expected:

...
Running Mkbootstrap for jellyfish ()
chmod 644 "jellyfish.bs"
"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- jellyfish.bs blib/arch/auto/jellyfish/jellyfish.bs 644
rm -f blib/arch/auto/jellyfish/jellyfish.so
x86_64-linux-gnu-gcc -g -O2 -ffile-prefix-map=/tmp/jellyfish-I-L-test=. -fstack-protector-strong -Wformat -Werror=format-security -Wl,-z,relro -Wl,-z,now -lpthread  -shared -L/usr/local/lib -fstack-protector-strong  swig_wrap.o  -o blib/arch/auto/jellyfish/jellyfish.so  \
   -ljellyfish-2.0 -lpthread   \
  
/usr/bin/ld: cannot find -ljellyfish-2.0
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:480: blib/arch/auto/jellyfish/jellyfish.so] Fehler 1
make[2]: Verzeichnis „/tmp/jellyfish-I-L-test/swig/perl5“ wird verlassen
...

(sorry for the German locale).  The relevant part in the Makefile that
was createt out of swig/perl5/Makefile.PL[1] seems to be:

...
# As Mkbootstrap might not write a file (if none is required)
# we use touch to prevent make continually trying to remake it.
# The DynaLoader only reads a non-empty file.
$(BASEEXT).bs : $(FIRST_MAKEFILE) $(BOOTDEP)
        $(NOECHO) $(ECHO) "Running Mkbootstrap for $(BASEEXT) ($(BSLOADLIBS))"
        $(NOECHO) $(PERLRUN) \
                "-MExtUtils::Mkbootstrap" \
                -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');"
        $(NOECHO) $(TOUCH) "$(BASEEXT).bs"
        $(CHMOD) $(PERM_RW) "$(BASEEXT).bs"
...


I admit I have no idea how to debug this or how to force the proper -L
option into this command line.  Any help is really appreciated.

Kind regards

     Andreas.


[1] https://salsa.debian.org/med-team/jellyfish/-/blob/master/swig/perl5/Makefile.PL

-- 
http://fam-tille.de



More information about the Debian-med-packaging mailing list