[Debian-med-packaging] Bug#853375: C++ help needed (Was: Bug#853375: disulfinder: ftbfs with GCC-7)

Christian Seiler christian at iwakd.de
Sat Aug 26 21:05:16 UTC 2017


Hi Andreas,

On 08/26/2017 10:08 PM, Andreas Tille wrote:
> I moved disulfinder to Git[1] and tried to track down this issue with my
> limited C++ knowledge but failed.  The issue is
> 
> ...
> make[3]: Entering directory '/build/disulfinder-1.2.11/disulfind/src'
> g++ -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fdebug-prefix-map=/build/disulfinder-1.2.11=. -fstack-protector-strong -Wformat -Werror=format-security -DDEFAULT_PKGDATADIR=\"/usr/share/disulfind
> In file included from Input/utils.h:1:0,
>                  from Input/GlobalDescriptor.cpp:3:
> Input/../Common/Matrix.h: In constructor 'Matrix<DATATYPE>::Matrix(int, int, DATATYPE*)':
> Input/../Common/Matrix.h:208:3: error: 'Exception' has not been declared
>    Exception::Assert(nrows>0 && ncols>0,"construction of empty matrix");
>    ^~~~~~~~~
> Input/../Common/Matrix.h: In constructor 'Matrix<DATATYPE>::Matrix(int, int, const DATATYPE&)':
> Input/../Common/Matrix.h:221:3: error: 'Exception' has not been declared
>    Exception::Assert(nrows>0 && ncols>0,"construction of empty matrix");
>    ^~~~~~~~~
> Input/../Common/Matrix.h: In constructor 'Matrix<DATATYPE>::Matrix(int, int, DATATYPE**)':
> Input/../Common/Matrix.h:232:3: error: 'Exception' has not been declared
>    Exception::Assert(nrows>0 && ncols>0, "construction of empty matrix");
>    ^~~~~~~~~
> Input/../Common/Matrix.h: In member function 'void Matrix<DATATYPE>::Resize(int, int)':
> Input/../Common/Matrix.h:288:3: error: 'Exception' has not been declared
>    Exception::Assert(nrows>0 && ncols>0, "construction of empty matrix");
>    ^~~~~~~~~
> ...
> 
> 
> As far as I can see Exception is declared in
>    disulfind/src/Common/Exception.h
> which is also included in Matrix.h.
> 
> Any hint what might be wrong here?

Common/Exception.h uses __EXCEPTION_H as its include guard macro name (so
that it's included only once) - unfortunately <bits/exception.h> from
GCC7 uses the same guard macro name. Hence Common/Exception.h is not
actually processed in your case.

The bug is in your package, see
https://stackoverflow.com/a/228797
for a summary of the rules regarding identifiers in C++; the guard macro
name clearly intrudes on the namespace reserved for the compiler.

Change the guard macro name to something else, e.g.

#ifndef DISULFIND_COMMON_EXCEPTION_H
#define DISULFIND_COMMON_EXCEPTION_H

and then it should work again in GCC7.

Regards,
Christian



More information about the Debian-med-packaging mailing list