[Debian-med-packaging] C++ help needed for psortb

Andreas Tille andreas at an3as.eu
Tue Apr 18 20:15:21 UTC 2017


Hi,

I intend to package psortb in Debian Med team[1].  To successfully build
this package I needed to re-arrange the package layout of biosquid and
hmmer2 since psortb is using code from those project but only provides
the according header files.  This was solved by proper -dev packages -
however, these reside currently in experimental.  So if you intend to
reproduce the issue described below you need to add experimental to your
sources.list to fullfil the Build-Dependency relations.

When building psortb I'm running into


...
g++ -c  -Isrc/include `pkg-config --cflags libsquid` `pkg-config --cflags libhmmer2` -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv -fno-strict-aliasing -pipe -I/usr/local/include -       D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2 -fdebug-prefix-map=/build/psortb-3.0.4+dfsg=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -                   D_FORTIFY_SOURCE=2   -DVERSION=\"0.02\" -DXS_VERSION=\"0.02\" -fPIC "-I/usr/lib/x86_64-linux-gnu/perl/5.24/CORE"   HMM.c
hmm-binding.cpp: In member function ‘HMMReport* HMM::search(char*)’:
hmm-binding.cpp:138:15: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
          FALSE);
               ^
hmm-binding.cpp: In member function ‘void HMM::init(char*, int, int)’:
hmm-binding.cpp:245:20: error: ‘CUT_NONE’ was not declared in this scope
   thresh.autocut = CUT_NONE;
                    ^~~~~~~~
Makefile:346: recipe for target 'hmm-binding.o' failed
...


The relevant code in algorithm-hmm/hmm-binding.cpp is

136     PostprocessSignificantHit(ghit, dhit, trace, model, dseq, seqlen, "SEQ",
137                               NULL, NULL, doForward, score, doNull2, &thresh,
138                               FALSE);

where the problem is the declaration of the argument thresh which is done
in algorithm-hmm/hmm.h:


class HMM {
...
  struct threshold_s thresh;
...
}


The definition of the structure threshold_s can be found in
/usr/include/hmmer2/structs.h (of package libhmmer2-dev) and
looks like

struct threshold_s {
  float  globT;                 /* T parameter: keep only hits > globT bits */
  double globE;                 /* E parameter: keep hits < globE E-value   */
  float  domT;                  /* T parameter for individual domains       */
  double domE;                  /* E parameter for individual domains       */
                                /* autosetting of cutoffs using Pfam annot: */
  enum { CUT_NONE, CUT_GA, CUT_NC, CUT_TC } autocut;
  int   Z;                      /* nseq to base E value calculation on      */
};


>From my naive ANSII C programmers perspective the definition looks
sensible and the enum correctly initialised with CUT_NONE - but there
seem to be some issues in C++ which I'm unaware about.

Any hint how to fix this would be welcome.

Kind regards

       Andreas.


[1] https://anonscm.debian.org/git/debian-med/psortb.git

-- 
http://fam-tille.de



More information about the Debian-med-packaging mailing list