diff options
author | David Seifert <soap@gentoo.org> | 2016-09-18 13:25:38 +0200 |
---|---|---|
committer | David Seifert <soap@gentoo.org> | 2016-09-18 13:33:03 +0200 |
commit | 9f39270bff954737259cc2b52e97e0bde41f7d2b (patch) | |
tree | 82a797bb3adfb94a67bea21bcd1aadb7490cfd7b | |
parent | 653725d2f387fcdc2fc6eb2c94f445021576bfc3 (diff) | |
download | gentoo-9f39270bff954737259cc2b52e97e0bde41f7d2b.tar.gz gentoo-9f39270bff954737259cc2b52e97e0bde41f7d2b.tar.xz |
sci-biology/lagan: Allow for compiling with GCC 6
Gentoo-bug: 594148
* EAPI=6
* Also fix QA violations due to implicit declarations and
incorrectly formatted fprintf calls.
Package-Manager: portage-2.3.0
-rw-r--r-- | sci-biology/lagan/files/lagan-2.0-fix-c++14.patch | 473 | ||||
-rw-r--r-- | sci-biology/lagan/files/lagan-2.0-qa-implicit-declarations.patch | 96 | ||||
-rw-r--r-- | sci-biology/lagan/lagan-2.0-r3.ebuild | 72 |
3 files changed, 641 insertions, 0 deletions
diff --git a/sci-biology/lagan/files/lagan-2.0-fix-c++14.patch b/sci-biology/lagan/files/lagan-2.0-fix-c++14.patch new file mode 100644 index 00000000000..9865f2756c5 --- /dev/null +++ b/sci-biology/lagan/files/lagan-2.0-fix-c++14.patch @@ -0,0 +1,473 @@ +Fix building with C++14, which errors out due to namespace collisions with std::end +in C++14 mode, due to crappy 'using namespace std' declared everywhere. +See also: https://bugs.gentoo.org/show_bug.cgi?id=594148 + +--- a/src/ancseq.cpp ++++ b/src/ancseq.cpp +@@ -30,7 +30,6 @@ + #include <stdlib.h> + #include <stdio.h> + +-using namespace std; + + #include "util.cpp" + #include "faindex.cpp" +--- a/src/ancseqrest.cpp ++++ b/src/ancseqrest.cpp +@@ -31,7 +31,6 @@ + #include <stdlib.h> + #include <stdio.h> + +-using namespace std; + + #define fastaRowLength 50 + typedef char* pchar; +--- a/src/cutmfa.cpp ++++ b/src/cutmfa.cpp +@@ -45,7 +45,6 @@ + #include <stdlib.h> + #include <stdio.h> + +-using namespace std; + + // TODO refactor in classes and normal make project + +--- a/src/glocal/glocal.cpp ++++ b/src/glocal/glocal.cpp +@@ -7,9 +7,9 @@ + } + + //vectors that would be needed globally +-vector<Fragment> fragments; +-vector<Point>startPoints; +-vector<Point>endPoints; ++std::vector<Fragment> fragments; ++std::vector<Point>startPoints; ++std::vector<Point>endPoints; + long long int numFragments; + InterPoint inter; + +@@ -19,7 +19,7 @@ + RI RI_regions[1<<(UPSTRANDBITS+DOWNSTRANDBITS+RELPOSBITS)]; + LI LI_regions[1<<(UPSTRANDBITS+DOWNSTRANDBITS+RELPOSBITS)]; + +-vector<class Score*> scoreFunctions[1<<(UPSTRANDBITS+DOWNSTRANDBITS+RELPOSBITS)]; ++std::vector<class Score*> scoreFunctions[1<<(UPSTRANDBITS+DOWNSTRANDBITS+RELPOSBITS)]; + + Name allNames; + +--- a/src/glocal/io.cpp ++++ b/src/glocal/io.cpp +@@ -3,9 +3,9 @@ + #include<io.h> + #include<algorithm> + +-extern vector <Fragment> fragments; +-extern vector <Point> startPoints; +-extern vector <Point> endPoints; ++extern std::vector <Fragment> fragments; ++extern std::vector <Point> startPoints; ++extern std::vector <Point> endPoints; + extern Name allNames; + + bool PointCompare(const Point &f1, const Point &f2) { +@@ -223,8 +223,8 @@ + startPoints.push_back(startPoint); + endPoints.push_back(endPoint); + } +- sort(startPoints.begin(), startPoints.end(), PointCompare); +- sort(endPoints.begin(), endPoints.end(), PointCompare); ++ std::sort(startPoints.begin(), startPoints.end(), PointCompare); ++ std::sort(endPoints.begin(), endPoints.end(), PointCompare); + } + + +--- a/src/glocal/leftinfluence.cpp ++++ b/src/glocal/leftinfluence.cpp +@@ -154,8 +154,8 @@ + + if (second->score == -1) { return TRUE; } + +- dummy.seq1Start = max(first->seq1End, second->seq1End) + 2; +- dummy.seq2Start = max(first->getSeq2End(LeftInfluence->reflectFlag), second->getSeq2End(LeftInfluence->reflectFlag)) + 1; ++ dummy.seq1Start = std::max(first->seq1End, second->seq1End) + 2; ++ dummy.seq2Start = std::max(first->getSeq2End(LeftInfluence->reflectFlag), second->getSeq2End(LeftInfluence->reflectFlag)) + 1; + + if (first->getSeq2End(LeftInfluence->reflectFlag) > second->getSeq2End(LeftInfluence->reflectFlag)) { + dummy.nameIter = first->nameIter; +@@ -444,7 +444,7 @@ + temp.seq1 = col - diag; + temp.seq2 = col; + +- pair<Point,LI*> pairp(temp, LeftInfluence); ++ std::pair<Point,LI*> pairp(temp, LeftInfluence); + tempinter = inter.insert(pairp); + + colInter->second = tempinter; +--- a/src/glocal/leftinfluence.h ++++ b/src/glocal/leftinfluence.h +@@ -39,15 +39,15 @@ + + + +-typedef list<Fragment*> Owner; +-typedef map <long long int ,Owner::iterator,longlongCompare2> CBound; ++typedef std::list<Fragment*> Owner; ++typedef std::map <long long int ,Owner::iterator,longlongCompare2> CBound; + +-typedef multimap <Point ,struct LI *,paircomp> InterPoint; ++typedef std::multimap <Point ,struct LI *,paircomp> InterPoint; + +-typedef map <long long int ,InterPoint::iterator,longlongCompare2> CInter; +-typedef map <long long int,Owner::iterator,longlongCompare2> DBound; ++typedef std::map <long long int ,InterPoint::iterator,longlongCompare2> CInter; ++typedef std::map <long long int,Owner::iterator,longlongCompare2> DBound; + +-typedef map <long long int,InterPoint::iterator,longlongCompare2> DInter; ++typedef std::map <long long int,InterPoint::iterator,longlongCompare2> DInter; + + + +--- a/src/glocal/rightinfluence.h ++++ b/src/glocal/rightinfluence.h +@@ -17,7 +17,7 @@ + }; + + +-typedef map<const long long int , Fragment*,longlongCompare> Active; ++typedef std::map<const long long int , Fragment*,longlongCompare> Active; + + typedef struct RI { + //List of active regions +--- a/src/glocal/score.cpp ++++ b/src/glocal/score.cpp +@@ -4,7 +4,7 @@ + #include<rightinfluence.h> + #include<fstream> + +-extern vector<class Score*> scoreFunctions[1<<(UPSTRANDBITS+DOWNSTRANDBITS+RELPOSBITS)]; ++extern std::vector<class Score*> scoreFunctions[1<<(UPSTRANDBITS+DOWNSTRANDBITS+RELPOSBITS)]; + + + float Score::getScore(Fragment *up, Fragment * down) { +@@ -36,7 +36,7 @@ + + + void initScoreFunctionPointers(char * scoreFileName) { +- ifstream SFP; ++ std::ifstream SFP; + char line[255]; + + SFP.open(scoreFileName); +--- a/src/glocal/structs.h ++++ b/src/glocal/structs.h +@@ -12,7 +12,6 @@ + #include <list> + #include <string.h> + +-using namespace std; + + #define RIGHT 0 + #define LEFT 1 +@@ -49,7 +48,7 @@ + }; + + +-typedef map<const char*,long long int ,ltstr> Name; ++typedef std::map<const char*,long long int ,ltstr> Name; + + + typedef struct Fragment { +--- a/src/lagan2mfa.cpp ++++ b/src/lagan2mfa.cpp +@@ -6,7 +6,6 @@ + #include <stdlib.h> + #include <stdio.h> + +-using namespace std; + + // TODO refactor in classes and normal make project + +--- a/src/makecons.cpp ++++ b/src/makecons.cpp +@@ -18,7 +18,6 @@ + #include <ctype.h> + #include <time.h> + +-using namespace std; + + #define fastaRowLength 50 + #define bufSize 2000 +--- a/src/utils/Glue.cpp ++++ b/src/utils/Glue.cpp +@@ -170,7 +170,7 @@ + } + + void printCoordinates (int seq, int begin, int end){ +- cout << seqs[seq].getID() << ":" << getSeqCoord(seq, begin) << "-" << getSeqCoord(seq, end) << " "; ++ std::cout << seqs[seq].getID() << ":" << getSeqCoord(seq, begin) << "-" << getSeqCoord(seq, end) << " "; + } + + int printRegion (int begin, int end){ +@@ -183,7 +183,7 @@ + score += rescoreRegion (seqs[i], seqs[j], begin, end); + } + } +- cout << score << endl; ++ std::cout << score << std::endl; + return score; + } + +@@ -223,7 +223,7 @@ + } + } + +- cout << "= score=" << score << endl; ++ std::cout << "= score=" << score << std::endl; + } + + int countLets (SafeVector<char> &data){ +@@ -355,7 +355,7 @@ + FILE* outfile; + + if (argc < 2 || argc > 3){ +- cerr << "Usage: Glue align.mfa \n" << endl; ++ std::cerr << "Usage: Glue align.mfa \n" << std::endl; + exit (1); + } + +@@ -375,7 +375,7 @@ + SafeVector<int> merged1label, merged2label; + int begin1 = 1, end1 = 1; + +- ifstream data (argv[1]); ++ std::ifstream data (argv[1]); + int alignNum = 0; + strand.push_back ('?'); // nothing for alignNum 0 + +@@ -452,7 +452,7 @@ + SafeVector<char> temp1 (begin1 - 1, 'N'); + SafeVector<char> temp2 (begin1 - 1, '-'); + +- for (int i = 0; i < min ((int) temp2.size(), CNTG_BRK_N); i++) ++ for (int i = 0; i < std::min ((int) temp2.size(), CNTG_BRK_N); i++) + temp2[i] = 'N'; + + merged1 = merge (temp1, merged1); +@@ -471,12 +471,12 @@ + if (isalpha(merged2[j])) pos2++; + + if (merged1label[j] == i){ +- min1 = min (min1, pos1); +- max1 = max (max1, pos1); ++ min1 = std::min (min1, pos1); ++ max1 = std::max (max1, pos1); + } + if (merged2label[j] == i){ +- min2 = min (min2, pos2); +- max2 = max (max2, pos2); ++ min2 = std::min (min2, pos2); ++ max2 = std::max (max2, pos2); + } + } + +@@ -489,6 +489,6 @@ + fprintf (outfile, "%d %d %d 0 0 0 0 %c 0 %d %d\n", i, min1, max1, strand[i], min2, max2); + } + +- printMFA (cout, merged1, string ("first"), 60); +- printMFA (cout, merged2, string ("second"), 60); ++ printMFA (std::cout, merged1, std::string ("first"), 60); ++ printMFA (std::cout, merged2, std::string ("second"), 60); + } +--- a/src/utils/MultiSequence.h ++++ b/src/utils/MultiSequence.h +@@ -12,7 +12,6 @@ + #include "Sequence.h" + #include "SafeVector.h" + +-using namespace std; + + class MultiSequence { + private: +@@ -54,10 +53,10 @@ + + // Read in all of the Sequences in an MFA file and append them to the + // existing MultiSequence object. +- void addRawFromMFA (const string& filename){ ++ void addRawFromMFA (const std::string& filename){ + + // open up file for reading +- ifstream infile (filename.c_str()); ++ std::ifstream infile (filename.c_str()); + + // check for error + assert (!infile.fail()); +@@ -75,7 +74,7 @@ + + // Read in all of the Sequences in an MFA file and append them to the + // existing MultiSequence object. +- void addRawFromMFA (ifstream &infile){ ++ void addRawFromMFA (std::ifstream &infile){ + + // check for error + assert (!infile.fail()); +@@ -89,7 +88,7 @@ + } + + // Writes sequences to outfile in XMFA format. +- void writeToXMFA (ostream &outfile, int numColumns) const { ++ void writeToXMFA (std::ostream &outfile, int numColumns) const { + for (int i = 0; i < (int) sequences.size(); ++i){ + sequences[i].writeToXMFA (outfile, numColumns); + } +--- a/src/utils/Output.h ++++ b/src/utils/Output.h +@@ -2,18 +2,18 @@ + #define OUTPUT_H + + // print reversed string in MFA format +-void printMFA (ostream &outfile, SafeVector<char> &data, string comment, int numColumns){ ++void printMFA (std::ostream &outfile, SafeVector<char> &data, std::string comment, int numColumns){ + + int charsWritten = 0; + +- outfile << ">" << comment << endl; ++ outfile << ">" << comment << std::endl; + for (int i = 0; i < (int) data.size(); i++){ + outfile << data[i]; + charsWritten++; +- if (charsWritten % numColumns == 0) outfile << endl; ++ if (charsWritten % numColumns == 0) outfile << std::endl; + } + +- if (charsWritten % numColumns != 0) outfile << endl; ++ if (charsWritten % numColumns != 0) outfile << std::endl; + } + + +--- a/src/utils/SafeVector.h ++++ b/src/utils/SafeVector.h +@@ -10,7 +10,6 @@ + #include <assert.h> + #include <vector> + +-using namespace std; + + // class derived from the STL std::vector + template<class TYPE> +@@ -19,9 +18,9 @@ + + // miscellaneous constructors + SafeVector () {} +- SafeVector (size_t size) : vector<TYPE>(size) {} +- SafeVector (size_t size, const TYPE &value) : vector<TYPE>(size, value) {} +- SafeVector (const SafeVector &source) : vector<TYPE>(source) {} ++ SafeVector (size_t size) : std::vector<TYPE>(size) {} ++ SafeVector (size_t size, const TYPE &value) : std::vector<TYPE>(size, value) {} ++ SafeVector (const SafeVector &source) : std::vector<TYPE>(source) {} + + #ifdef ENABLE_CHECKS + +--- a/src/utils/Sequence.h ++++ b/src/utils/Sequence.h +@@ -8,15 +8,14 @@ + #include <string> + #include "SafeVector.h" + +-using namespace std; + + class Sequence { + + private: + + // Read header of MFA/XMFA file. +- bool readHeader (ifstream &infile, bool &isXMFA){ +- string header; ++ bool readHeader (std::ifstream &infile, bool &isXMFA){ ++ std::string header; + + while (true){ + +@@ -24,7 +23,7 @@ + if (infile.fail() || infile.eof()) return false; + + // get new header line +- getline (infile, header); ++ std::getline (infile, header); + + // check that header line is not empty + if (header.length() != 0) break; +@@ -64,7 +63,7 @@ + int startCoord; // sequence position of first character + int endCoord; // sequence position of last character + char direction; // + or - +- string comment; // comments ++ std::string comment; // comments + + public: + +@@ -77,7 +76,7 @@ + } + + // Constructor. Reads in a sequence from the input file. +- Sequence (ifstream &infile){ ++ Sequence (std::ifstream &infile){ + + bool isXMFA = true; + +@@ -147,7 +146,7 @@ + } + + // Constructor. Gets sequence from array data. +- Sequence (SafeVector<char> data, string comment) : data(data), comment(comment) { ++ Sequence (SafeVector<char> data, std::string comment) : data(data), comment(comment) { + length = data.size() - 1; + id = 0; + startCoord = 1; +@@ -165,7 +164,7 @@ + return temp; + } + +- const string getComment () const { ++ const std::string getComment () const { + return comment; + } + +@@ -197,9 +196,9 @@ + const int getEndCoord () const { assert (isValid); return endCoord; } + + // Print XMFA header only. +- void writeXMFAHeader (ostream &outfile) const { ++ void writeXMFAHeader (std::ostream &outfile) const { + assert (isValid); +- outfile << '>' << id << ':' << startCoord << '-' << endCoord << ' ' << direction << ' ' << comment << endl; ++ outfile << '>' << id << ':' << startCoord << '-' << endCoord << ' ' << direction << ' ' << comment << std::endl; + } + + // Return sequence ID. +@@ -209,20 +208,20 @@ + void setID (int id) { assert (isValid); this->id = id; } + + // Writes sequence to XMFA format. +- void writeToXMFA (ostream &outfile, int numColumns) const { ++ void writeToXMFA (std::ostream &outfile, int numColumns) const { + + assert (isValid); + + // print XMFA header +- outfile << ">" << comment << endl; ++ outfile << ">" << comment << std::endl; + // outfile << '>' << id << ':' << startCoord << '-' << endCoord << ' ' << direction << ' ' << comment << endl; + + // print character data + for (int i = 1; i <= length; ++i){ + outfile << data[i]; +- if (i % numColumns == 0) outfile << endl; ++ if (i % numColumns == 0) outfile << std::endl; + } +- if (length % numColumns != 0) outfile << endl; ++ if (length % numColumns != 0) outfile << std::endl; + } + }; + diff --git a/sci-biology/lagan/files/lagan-2.0-qa-implicit-declarations.patch b/sci-biology/lagan/files/lagan-2.0-qa-implicit-declarations.patch new file mode 100644 index 00000000000..4ba4ce49d77 --- /dev/null +++ b/sci-biology/lagan/files/lagan-2.0-qa-implicit-declarations.patch @@ -0,0 +1,96 @@ +Fix QA warnings due to implicit declarations: +* filebuffer.c:123:34: warning: implicit declaration of function ‘toupper’ [-Wimplicit-function-declaration] +* temp[i] = (strchr (alphabet, toupper ((char) i)) != 0) ? + +--- a/src/filebuffer.c ++++ b/src/filebuffer.c +@@ -3,6 +3,7 @@ + #include <string.h> + #include <stdio.h> + #include <assert.h> ++#include <ctype.h> + + #ifdef CHAOS__FLAG + char* alphabet = "ATCGNPCMHDEKRQSILVFYWX*"; +--- a/src/mlagan.c ++++ b/src/mlagan.c +@@ -934,6 +934,7 @@ + return k; + } + ++int printXMFAAlign(FILE* outfile, align* myalign); + + int main(int argc, char** argv) { + FileBuffer seqfile; +--- a/src/order.c ++++ b/src/order.c +@@ -398,6 +398,9 @@ + free(ends); + } + ++int printMFAAlign(char* seq1, char* seq2, align* myalign, char* n1, char* n2); ++int printXMFAAlign(char* seq1, char* seq2, align* myalign, char* n1, char* n2); ++ + void doAlign(dmat* mydm, seq* seq1, seq* seq2) { + align *a = (align*) makeAlign(mydm, seq1->lets, seq2->lets); + // printf("into printing\n"); +--- a/src/prolagan.c ++++ b/src/prolagan.c +@@ -949,6 +949,7 @@ + return k; + } + ++int printXMFAAlign(FILE* outfile, align* myalign); + + int main(int argc, char** argv) { + FileBuffer seqfile; +--- a/src/utils/contigorder.c ++++ b/src/utils/contigorder.c +@@ -12,7 +12,7 @@ + int dummy, i; + + if (!(file = fopen (filename, "r"))){ +- fprintf (stderr, "contigorder: Error opening file: %s\n"); ++ fprintf (stderr, "contigorder: Error opening file: %s\n", filename); + exit (1); + } + +@@ -49,7 +49,7 @@ + } + + if (!(file = fopen (filename, "r"))){ +- fprintf (stderr, "contigorder: Error opening file: %s\n"); ++ fprintf (stderr, "contigorder: Error opening file: %s\n", filename); + exit (1); + } + +--- a/src/utils/cstat.c ++++ b/src/utils/cstat.c +@@ -3,6 +3,7 @@ + #include <string.h> + #include <math.h> + #include <assert.h> ++#include <ctype.h> + + #define MAX_SEQ 31 + #define MAX(a,b) ((a)>(b)?(a):(b)) +--- a/src/utils/overlay.c ++++ b/src/utils/overlay.c +@@ -2,6 +2,7 @@ + #include <stdio.h> + #include <assert.h> + #include <string.h> ++#include <ctype.h> + + #define MAX_SEQS 63 + #define MIN2(y,z) ((y)<(z))?(y):(z) +--- a/src/utils/scorecontigs.c ++++ b/src/utils/scorecontigs.c +@@ -3,6 +3,7 @@ + #include <string.h> + #include <math.h> + #include <assert.h> ++#include <ctype.h> + + #define MAX_SEQ 1024 + #define MAX(a,b) ((a)>(b)?(a):(b)) diff --git a/sci-biology/lagan/lagan-2.0-r3.ebuild b/sci-biology/lagan/lagan-2.0-r3.ebuild new file mode 100644 index 00000000000..68cd7960621 --- /dev/null +++ b/sci-biology/lagan/lagan-2.0-r3.ebuild @@ -0,0 +1,72 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=6 + +inherit toolchain-funcs + +MY_P="lagan20" + +DESCRIPTION="The LAGAN suite of tools for whole-genome multiple alignment of genomic DNA" +HOMEPAGE="http://lagan.stanford.edu/lagan_web/index.shtml" +SRC_URI="http://lagan.stanford.edu/lagan_web/${MY_P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +IUSE="" +KEYWORDS="~amd64 ~x86" + +RDEPEND="dev-lang/perl" + +S="${WORKDIR}/${MY_P}" + +PATCHES=( + "${FILESDIR}/${PN}-2.0-flags.patch" + "${FILESDIR}/${PN}-2.0-gcc4.3.patch" + "${FILESDIR}/${PN}-2.0-fix-c++14.patch" + "${FILESDIR}/${PN}-2.0-qa-implicit-declarations.patch" +) + +src_prepare() { + sed -i "/use Getopt::Long;/ i use lib \"/usr/$(get_libdir)/${PN}/lib\";" "${S}/supermap.pl" || die + # NB: Testing with glibc-2.10 has uncovered a bug in src/utils/Sequence.h + # where libc getline is erroneously used instead of own getline + sed -i 's/getline/my_getline/' "${S}"/src/{anchors.c,glocal/io.cpp} || die + + default +} + +src_compile() { + emake \ + CC=$(tc-getCC) \ + CXX=$(tc-getCXX) \ + CXXFLAGS="${CXXFLAGS}" \ + CFLAGS="${CFLAGS}" +} + +src_install() { + newbin lagan.pl lagan + newbin slagan.pl slagan + dobin mlagan + rm -f lagan.pl slagan.pl utils/Utils.pm || die + + insinto /usr/$(get_libdir)/${PN}/lib + doins Utils.pm + + exeinto /usr/$(get_libdir)/${PN}/utils + doexe utils/* + + exeinto /usr/$(get_libdir)/${PN} + doexe *.pl anchors chaos glocal order prolagan + + insinto /usr/$(get_libdir)/${PN} + doins *.txt + + dosym /usr/$(get_libdir)/${PN}/supermap.pl /usr/bin/supermap + + echo "LAGAN_DIR=\"/usr/$(get_libdir)/${PN}\"" > 99${PN} || die + doenvd 99${PN} + + dodoc Readmes/README.* +} |