summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsnehring <7978778+snehring@users.noreply.github.com>2022-05-17 02:45:08 -0500
committerGitHub <noreply@github.com>2022-05-17 09:45:08 +0200
commitd566330a337eaeff8a0b5dea46fbdeeacf402d15 (patch)
tree9f89ecb370c98b9a4c906161c5aaed35a93ee95b
parent446cbf4b5a4b902fe90aeda9376e4671557617f7 (diff)
downloadspack-d566330a337eaeff8a0b5dea46fbdeeacf402d15.tar.gz
spack-d566330a337eaeff8a0b5dea46fbdeeacf402d15.tar.bz2
spack-d566330a337eaeff8a0b5dea46fbdeeacf402d15.tar.xz
spack-d566330a337eaeff8a0b5dea46fbdeeacf402d15.zip
pindel: fixing compilation issues for gcc5+ (#28387)
-rw-r--r--var/spack/repos/builtin/packages/pindel/gcc-5-compat.patch100
-rw-r--r--var/spack/repos/builtin/packages/pindel/package.py28
2 files changed, 110 insertions, 18 deletions
diff --git a/var/spack/repos/builtin/packages/pindel/gcc-5-compat.patch b/var/spack/repos/builtin/packages/pindel/gcc-5-compat.patch
new file mode 100644
index 0000000000..427fb691d4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pindel/gcc-5-compat.patch
@@ -0,0 +1,100 @@
+diff --git a/src/bddata.cpp b/src/bddata.cpp
+index 7820084..270f242 100644
+--- a/src/bddata.cpp
++++ b/src/bddata.cpp
+@@ -2,6 +2,12 @@
+ #include <fstream>
+ #include "bddata.h"
+
++// return the 'absolute value' of the difference between two unsigned ints
++inline unsigned int unsigned_abs_sub(unsigned int a, unsigned int b)
++{
++ return(a>b)?a-b:b-a;
++}
++
+ BDData::BDData() : m_currentWindow( &g_dummyChromosome, 0, 0 )
+ {
+ m_breakDancerMask = NULL;
+@@ -114,7 +120,7 @@ void BDData::loadBDFile(const std::string& filename) {
+
+ firstPos += g_SpacerBeforeAfter; // ??? ask Kai
+ secondPos += g_SpacerBeforeAfter;
+- if (firstChrName == secondChrName && secondChrName != "" && abs(firstPos - secondPos) < 500)
++ if (firstChrName == secondChrName && secondChrName != "" && unsigned_abs_sub(firstPos, secondPos) < 500)
+ continue;
+ if ( firstChrName!="" && secondChrName!="") {
+ BreakDancerCoordinate firstBDCoordinate( firstChrName, firstPos );
+@@ -162,10 +168,10 @@ void SortRPByChrPos(std::vector <RP_READ> & Reads_RP) { // no interchromosome RP
+ }*/
+ bool RecipicalOverlap(RP_READ & first, RP_READ & second) {
+ int distance = 1000;
+- if (abs(first.PosA - first.PosA1) > distance) return false;
+- if (abs(first.PosB - first.PosB1) > distance) return false;
+- if (abs(second.PosA - second.PosA1) > distance) return false;
+- if (abs(second.PosB - second.PosB1) > distance) return false;
++ if (unsigned_abs_sub(first.PosA, first.PosA1) > distance) return false;
++ if (unsigned_abs_sub(first.PosB, first.PosB1) > distance) return false;
++ if (unsigned_abs_sub(second.PosA, second.PosA1) > distance) return false;
++ if (unsigned_abs_sub(second.PosB, second.PosB1) > distance) return false;
+ float cutoff = 0.9;
+
+ unsigned FirstPosA = (first.PosA + first.PosA1)/2;
+@@ -377,7 +383,7 @@ void ModifyRP(std::vector <RP_READ> & Reads_RP) {
+ Reads_RP[first].PosB = Reads_RP[first].PosB + Reads_RP[first].ReadLength;
+ Reads_RP[first].PosB1 = Reads_RP[first].PosB1 + Reads_RP[first].ReadLength;
+ }
+- if (Reads_RP[first].ChrNameA == Reads_RP[first].ChrNameB && abs(Reads_RP[first].PosA - Reads_RP[first].PosB) < 500) Reads_RP[first].Visited = true;
++ if (Reads_RP[first].ChrNameA == Reads_RP[first].ChrNameB && unsigned_abs_sub(Reads_RP[first].PosA, Reads_RP[first].PosB) < 500) Reads_RP[first].Visited = true;
+ //std::cout << "Final: " << Reads_RP[first].ChrNameA << " " << Reads_RP[first].DA << " " << Reads_RP[first].PosA << "\t" << Reads_RP[first].ChrNameB << " " << Reads_RP[first].DB << " " << Reads_RP[first].PosB << std::endl;
+ }
+ }
+diff --git a/src/genotyping.cpp b/src/genotyping.cpp
+index 58e2978..d258734 100644
+--- a/src/genotyping.cpp
++++ b/src/genotyping.cpp
+@@ -35,6 +35,11 @@
+ #include <algorithm>
+ #include <math.h>
+
++// return the 'absolute value' of the difference between two unsigned ints
++inline unsigned int unsigned_abs_sub(unsigned int a, unsigned int b)
++{
++ return(a>b)?a-b:b-a;
++}
+
+ void doGenotyping (ControlState & CurrentState, UserDefinedSettings* userSettings ) {
+ const int SV_Genotype_Cutoff = 1000;
+@@ -124,7 +129,7 @@ void doGenotyping (ControlState & CurrentState, UserDefinedSettings* userSetting
+ // step 4 for each variant, do genotyping
+ for (unsigned SV_index =0; SV_index < AllSV4Genotyping.size(); SV_index++) {
+ // step 4.1 if type == DEL, GenotypeDel
+- if (AllSV4Genotyping[SV_index].ChrA == AllSV4Genotyping[SV_index].ChrB && abs(AllSV4Genotyping[SV_index].PosA - AllSV4Genotyping[SV_index].PosB) < SV_Genotype_Cutoff) {
++ if (AllSV4Genotyping[SV_index].ChrA == AllSV4Genotyping[SV_index].ChrB && unsigned_abs_sub(AllSV4Genotyping[SV_index].PosA, AllSV4Genotyping[SV_index].PosB) < SV_Genotype_Cutoff) {
+ std::cout << "Skip One SV " << OneSV.Type << " " << OneSV.ChrA << " " << OneSV.PosA << " "
+ << OneSV.CI_A << " " << OneSV.ChrB << " " << OneSV.PosB << " "
+ << OneSV.CI_B << std::endl;
+diff --git a/src/pindel.cpp b/src/pindel.cpp
+index 7d8b3a5..c137ce7 100644
+--- a/src/pindel.cpp
++++ b/src/pindel.cpp
+@@ -123,6 +123,11 @@ std::vector<Parameter *> parameters;
+
+ UserDefinedSettings* userSettings;
+
++// return the 'absolute value' of the difference between two unsigned ints
++inline unsigned int unsigned_abs_sub(unsigned int a, unsigned int b)
++{
++ return(a>b)?a-b:b-a;
++}
+
+ // #########################################################
+
+@@ -1557,7 +1562,7 @@ void MergeInterChr(ControlState& currentState, UserDefinedSettings *usersettings
+ for (unsigned index_b = index_a; index_b < All.size(); index_b++) {
+ if (index_a == index_b) continue;
+ if (All[index_a].FirstChrName == All[index_b].FirstChrName && All[index_a].SecondChrName == All[index_b].SecondChrName) {
+- if (abs(All[index_a].FirstPos - All[index_b].FirstPos) < 10 && abs(All[index_a].SecondPos - All[index_b].SecondPos) < 10 && All[index_a].NumSupport + All[index_b].NumSupport >= cutoff) {
++ if (unsigned_abs_sub(All[index_a].FirstPos, All[index_b].FirstPos) < 10 && unsigned_abs_sub(All[index_a].SecondPos, All[index_b].SecondPos) < 10 && All[index_a].NumSupport + All[index_b].NumSupport >= cutoff) {
+
+ INToutputfile << "chr\t" << All[index_a].FirstChrName << "\tpos\t" << unsigned((All[index_a].FirstPos + All[index_b].FirstPos) / 2) << "\tchr\t" << All[index_a].SecondChrName << "\tpos\t"
+ << unsigned((All[index_a].SecondPos + All[index_b].SecondPos) / 2) << "\tseq\t" << All[index_a].InsertedSequence << "\tsupport\t" << All[index_a].NumSupport + All[index_b].NumSupport << "\tINFOR\t"
diff --git a/var/spack/repos/builtin/packages/pindel/package.py b/var/spack/repos/builtin/packages/pindel/package.py
index 8ad0bffee7..38d8cfa193 100644
--- a/var/spack/repos/builtin/packages/pindel/package.py
+++ b/var/spack/repos/builtin/packages/pindel/package.py
@@ -21,26 +21,18 @@ class Pindel(MakefilePackage):
version('0.2.5', sha256='9908940d090eff23d940c3b6f2f6b3fc2bb1fd3b7a2d553cc81eed240a23fd9f')
depends_on('htslib@1.7:')
- #
- # This Makefile2 stuff is due to the original installer,
- # The author wants to run make twice, the first
- # time generates a Makefile.local then returns "false"
- # User is then suppose to run make again and the
- # package will compile. This is an attempt to
- # stay as close to the original installer as possible
- #
+
+ # GCC > 4.8 seems to dislike calling abs on an unsigned integer
+ # replace ambiguous calls to abs() on the difference between two
+ # unsigned ints with a one line funtion that returns the 'absolute
+ # value' of the difference between two unsigned ints.
+ patch('gcc-5-compat.patch', when='@0.2.5b8%gcc@5:')
+
+ build_directory = 'src'
def edit(self, spec, prefix):
- copy('Makefile', 'Makefile2')
- myedit = FileFilter('Makefile2')
- myedit.filter('-include Makefile.local', '#removed include')
- myedit.filter('@false', '#removed autofailure')
-
- def build(self, spec, prefix):
- make("Makefile.local", "-f",
- "Makefile2",
- "HTSLIB=%s" % spec['htslib'].prefix)
- make("HTSLIB=%s" % spec['htslib'].prefix)
+ filter_file('include ../Makefile.local', '', 'src/Makefile')
+ filter_file('Makefile.local', '', 'src/Makefile')
def install(self, spec, prefix):
mkdirp(prefix.bin)