PKG_CXXFLAGS=-I. -I"./ClustalW" -I"./Muscle" -pthread
PKG_LIBS=$(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -lpthread

PKG_CXXFLAGS=-I. -I"./ClustalW" -I"./Muscle" -I"./ushuffle" -pthread
PKG_LIBS=$(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -lpthread

# Include all C++ files in src/ and its subdirectories: src/ClustalW and src/Muscle
# use cpp <- dir("src", "*\\.cpp$", full.names = TRUE, recursive = TRUE)
# cat(sub("src/", "", cpp), sep=" ") to export all the cpp files
SOURCES=ClustalW/alignment/Alignment.cpp \
ClustalW/alignment/AlignmentOutput.cpp \
ClustalW/alignment/ObjectiveScore.cpp ClustalW/alignment/Sequence.cpp \
ClustalW/Clustal.cpp ClustalW/fileInput/ClustalFileParser.cpp \
ClustalW/fileInput/EMBLFileParser.cpp ClustalW/fileInput/FileParser.cpp \
ClustalW/fileInput/FileReader.cpp ClustalW/fileInput/GDEFileParser.cpp \
ClustalW/fileInput/InFileStream.cpp ClustalW/fileInput/MSFFileParser.cpp \
ClustalW/fileInput/PearsonFileParser.cpp ClustalW/fileInput/PIRFileParser.cpp \
ClustalW/fileInput/RSFFileParser.cpp ClustalW/general/ClustalWResources.cpp \
ClustalW/general/DebugLog.cpp ClustalW/general/InvalidCombination.cpp \
ClustalW/general/OutputFile.cpp ClustalW/general/Stats.cpp \
ClustalW/general/SymMatrix.cpp ClustalW/general/UserParameters.cpp \
ClustalW/general/Utility.cpp ClustalW/general/VectorOutOfRange.cpp \
ClustalW/Help.cpp ClustalW/interface/CommandLineParser.cpp \
ClustalW/multipleAlign/Iteration.cpp \
ClustalW/multipleAlign/LowScoreSegProfile.cpp ClustalW/multipleAlign/MSA.cpp \
ClustalW/multipleAlign/MyersMillerProfileAlign.cpp \
ClustalW/multipleAlign/ProfileBase.cpp \
ClustalW/multipleAlign/ProfileStandard.cpp \
ClustalW/multipleAlign/ProfileWithSub.cpp \
ClustalW/pairwise/FastPairwiseAlign.cpp \
ClustalW/pairwise/FullPairwiseAlign.cpp \
ClustalW/substitutionMatrix/SubMatrix.cpp ClustalW/tree/AlignmentSteps.cpp \
ClustalW/tree/ClusterTree.cpp ClustalW/tree/ClusterTreeOutput.cpp \
ClustalW/tree/NJTree.cpp ClustalW/tree/RandomGenerator.cpp \
ClustalW/tree/Tree.cpp ClustalW/tree/TreeInterface.cpp \
ClustalW/tree/UnRootedClusterTree.cpp ClustalW/tree/UPGMA/Node.cpp \
ClustalW/tree/UPGMA/RootedClusterTree.cpp \
ClustalW/tree/UPGMA/RootedGuideTree.cpp \
ClustalW/tree/UPGMA/RootedTreeOutput.cpp \
ClustalW/tree/UPGMA/UPGMAAlgorithm.cpp \
Muscle/aligngivenpath.cpp Muscle/aligngivenpathsw.cpp \
Muscle/aligntwomsas.cpp Muscle/aligntwoprofs.cpp Muscle/aln.cpp \
Muscle/alpha.cpp Muscle/anchors.cpp Muscle/bittraceback.cpp \
Muscle/blosum62.cpp Muscle/blosumla.cpp Muscle/clust.cpp Muscle/cluster.cpp \
Muscle/clwwt.cpp Muscle/color.cpp Muscle/cons.cpp Muscle/diaglist.cpp \
Muscle/diffobjscore.cpp Muscle/diffpaths.cpp Muscle/difftrees.cpp \
Muscle/difftreese.cpp Muscle/distcalc.cpp Muscle/distfunc.cpp \
Muscle/distpwkimura.cpp Muscle/domuscle.cpp Muscle/dosp.cpp \
Muscle/dpreglist.cpp Muscle/drawtree.cpp Muscle/edgelist.cpp \
Muscle/enumopts.cpp Muscle/enumtostr.cpp Muscle/estring.cpp Muscle/fasta.cpp \
Muscle/fasta2.cpp Muscle/fastclust.cpp Muscle/fastdist.cpp \
Muscle/fastdistjones.cpp Muscle/fastdistkbit.cpp Muscle/fastdistkmer.cpp \
Muscle/fastdistmafft.cpp Muscle/fastdistnuc.cpp Muscle/fastscorepath2.cpp \
Muscle/finddiags.cpp Muscle/finddiagsn.cpp Muscle/glbalign.cpp \
Muscle/glbalign352.cpp Muscle/glbaligndiag.cpp Muscle/glbalignla.cpp \
Muscle/glbalignle.cpp Muscle/glbalignns.cpp Muscle/glbalignsimple.cpp \
Muscle/glbalignsp.cpp Muscle/glbalignspn.cpp Muscle/glbalignss.cpp \
Muscle/glbalndimer.cpp Muscle/globals.cpp Muscle/globalslinux.cpp \
Muscle/globalsosx.cpp Muscle/globalsother.cpp Muscle/globalswin32.cpp \
Muscle/gonnet.cpp Muscle/gotowt.cpp Muscle/henikoffweight.cpp \
Muscle/henikoffweightpb.cpp Muscle/html.cpp Muscle/hydro.cpp \
Muscle/intmath.cpp Muscle/local.cpp Muscle/main.cpp Muscle/makerootmsa.cpp \
Muscle/makerootmsab.cpp Muscle/maketree.cpp Muscle/mhack.cpp \
Muscle/mpam200.cpp Muscle/msa.cpp Muscle/msa2.cpp Muscle/msadistkimura.cpp \
Muscle/msf.cpp Muscle/muscle.cpp Muscle/muscleout.cpp Muscle/nucmx.cpp \
Muscle/nwdasimple.cpp Muscle/nwdasimple2.cpp Muscle/nwdasmall.cpp \
Muscle/nwrec.cpp Muscle/nwsmall.cpp Muscle/objscore.cpp Muscle/objscore2.cpp \
Muscle/objscoreda.cpp Muscle/onexception.cpp Muscle/options.cpp \
Muscle/outweights.cpp Muscle/pam200mafft.cpp Muscle/params.cpp Muscle/phy.cpp \
Muscle/phy2.cpp Muscle/phy3.cpp Muscle/phy4.cpp Muscle/phyfromclust.cpp \
Muscle/phyfromfile.cpp Muscle/physeq.cpp Muscle/phytofile.cpp \
Muscle/posgap.cpp Muscle/ppscore.cpp Muscle/profdb.cpp Muscle/profile.cpp \
Muscle/profilefrommsa.cpp Muscle/progalign.cpp Muscle/progress.cpp \
Muscle/progressivealign.cpp Muscle/pwpath.cpp Muscle/readmx.cpp \
Muscle/realigndiffs.cpp Muscle/realigndiffse.cpp Muscle/refine.cpp \
Muscle/refinehoriz.cpp Muscle/refinesubfams.cpp Muscle/refinetree.cpp \
Muscle/refinetreee.cpp Muscle/refinevert.cpp \
Muscle/refinew.cpp Muscle/savebest.cpp Muscle/scoredist.cpp \
Muscle/scoregaps.cpp Muscle/scorehistory.cpp Muscle/scorepp.cpp Muscle/seq.cpp \
Muscle/seqvect.cpp Muscle/setblosumweights.cpp Muscle/setgscweights.cpp \
Muscle/setnewhandler.cpp Muscle/spfast.cpp Muscle/sptest.cpp \
Muscle/stabilize.cpp Muscle/subfam.cpp Muscle/subfams.cpp Muscle/sw.cpp \
Muscle/termgaps.cpp Muscle/textfile.cpp Muscle/threewaywt.cpp \
Muscle/tomhydro.cpp Muscle/traceback.cpp Muscle/tracebackopt.cpp \
Muscle/tracebacksw.cpp Muscle/treefrommsa.cpp Muscle/typetostr.cpp \
Muscle/upgma2.cpp Muscle/usage.cpp Muscle/validateids.cpp Muscle/vtml2.cpp \
Muscle/writescorefile.cpp RClustalW.cpp RClustalWMain.cpp RcppExports.cpp \
RMuscle.cpp \
ushuffle.c \
ushuffler.cpp

# Obtain the object files
OBJECTS=ClustalW/alignment/Alignment.o \
ClustalW/alignment/AlignmentOutput.o \
ClustalW/alignment/ObjectiveScore.o ClustalW/alignment/Sequence.o \
ClustalW/Clustal.o ClustalW/fileInput/ClustalFileParser.o \
ClustalW/fileInput/EMBLFileParser.o ClustalW/fileInput/FileParser.o \
ClustalW/fileInput/FileReader.o ClustalW/fileInput/GDEFileParser.o \
ClustalW/fileInput/InFileStream.o ClustalW/fileInput/MSFFileParser.o \
ClustalW/fileInput/PearsonFileParser.o ClustalW/fileInput/PIRFileParser.o \
ClustalW/fileInput/RSFFileParser.o ClustalW/general/ClustalWResources.o \
ClustalW/general/DebugLog.o ClustalW/general/InvalidCombination.o \
ClustalW/general/OutputFile.o ClustalW/general/Stats.o \
ClustalW/general/SymMatrix.o ClustalW/general/UserParameters.o \
ClustalW/general/Utility.o ClustalW/general/VectorOutOfRange.o \
ClustalW/Help.o ClustalW/interface/CommandLineParser.o \
ClustalW/multipleAlign/Iteration.o \
ClustalW/multipleAlign/LowScoreSegProfile.o ClustalW/multipleAlign/MSA.o \
ClustalW/multipleAlign/MyersMillerProfileAlign.o \
ClustalW/multipleAlign/ProfileBase.o \
ClustalW/multipleAlign/ProfileStandard.o \
ClustalW/multipleAlign/ProfileWithSub.o \
ClustalW/pairwise/FastPairwiseAlign.o \
ClustalW/pairwise/FullPairwiseAlign.o \
ClustalW/substitutionMatrix/SubMatrix.o ClustalW/tree/AlignmentSteps.o \
ClustalW/tree/ClusterTree.o ClustalW/tree/ClusterTreeOutput.o \
ClustalW/tree/NJTree.o ClustalW/tree/RandomGenerator.o \
ClustalW/tree/Tree.o ClustalW/tree/TreeInterface.o \
ClustalW/tree/UnRootedClusterTree.o ClustalW/tree/UPGMA/Node.o \
ClustalW/tree/UPGMA/RootedClusterTree.o \
ClustalW/tree/UPGMA/RootedGuideTree.o \
ClustalW/tree/UPGMA/RootedTreeOutput.o \
ClustalW/tree/UPGMA/UPGMAAlgorithm.o \
Muscle/aligngivenpath.o Muscle/aligngivenpathsw.o \
Muscle/aligntwomsas.o Muscle/aligntwoprofs.o Muscle/aln.o \
Muscle/alpha.o Muscle/anchors.o Muscle/bittraceback.o \
Muscle/blosum62.o Muscle/blosumla.o Muscle/clust.o Muscle/cluster.o \
Muscle/clwwt.o Muscle/color.o Muscle/cons.o Muscle/diaglist.o \
Muscle/diffobjscore.o Muscle/diffpaths.o Muscle/difftrees.o \
Muscle/difftreese.o Muscle/distcalc.o Muscle/distfunc.o \
Muscle/distpwkimura.o Muscle/domuscle.o Muscle/dosp.o \
Muscle/dpreglist.o Muscle/drawtree.o Muscle/edgelist.o \
Muscle/enumopts.o Muscle/enumtostr.o Muscle/estring.o Muscle/fasta.o \
Muscle/fasta2.o Muscle/fastclust.o Muscle/fastdist.o \
Muscle/fastdistjones.o Muscle/fastdistkbit.o Muscle/fastdistkmer.o \
Muscle/fastdistmafft.o Muscle/fastdistnuc.o Muscle/fastscorepath2.o \
Muscle/finddiags.o Muscle/finddiagsn.o Muscle/glbalign.o \
Muscle/glbalign352.o Muscle/glbaligndiag.o Muscle/glbalignla.o \
Muscle/glbalignle.o Muscle/glbalignns.o Muscle/glbalignsimple.o \
Muscle/glbalignsp.o Muscle/glbalignspn.o Muscle/glbalignss.o \
Muscle/glbalndimer.o Muscle/globals.o Muscle/globalslinux.o \
Muscle/globalsosx.o Muscle/globalsother.o Muscle/globalswin32.o \
Muscle/gonnet.o Muscle/gotowt.o Muscle/henikoffweight.o \
Muscle/henikoffweightpb.o Muscle/html.o Muscle/hydro.o \
Muscle/intmath.o Muscle/local.o Muscle/main.o Muscle/makerootmsa.o \
Muscle/makerootmsab.o Muscle/maketree.o Muscle/mhack.o \
Muscle/mpam200.o Muscle/msa.o Muscle/msa2.o Muscle/msadistkimura.o \
Muscle/msf.o Muscle/muscle.o Muscle/muscleout.o Muscle/nucmx.o \
Muscle/nwdasimple.o Muscle/nwdasimple2.o Muscle/nwdasmall.o \
Muscle/nwrec.o Muscle/nwsmall.o Muscle/objscore.o Muscle/objscore2.o \
Muscle/objscoreda.o Muscle/onexception.o Muscle/options.o \
Muscle/outweights.o Muscle/pam200mafft.o Muscle/params.o Muscle/phy.o \
Muscle/phy2.o Muscle/phy3.o Muscle/phy4.o Muscle/phyfromclust.o \
Muscle/phyfromfile.o Muscle/physeq.o Muscle/phytofile.o \
Muscle/posgap.o Muscle/ppscore.o Muscle/profdb.o Muscle/profile.o \
Muscle/profilefrommsa.o Muscle/progalign.o Muscle/progress.o \
Muscle/progressivealign.o Muscle/pwpath.o Muscle/readmx.o \
Muscle/realigndiffs.o Muscle/realigndiffse.o Muscle/refine.o \
Muscle/refinehoriz.o Muscle/refinesubfams.o Muscle/refinetree.o \
Muscle/refinetreee.o Muscle/refinevert.o \
Muscle/refinew.o Muscle/savebest.o Muscle/scoredist.o \
Muscle/scoregaps.o Muscle/scorehistory.o Muscle/scorepp.o Muscle/seq.o \
Muscle/seqvect.o Muscle/setblosumweights.o Muscle/setgscweights.o \
Muscle/setnewhandler.o Muscle/spfast.o Muscle/sptest.o \
Muscle/stabilize.o Muscle/subfam.o Muscle/subfams.o Muscle/sw.o \
Muscle/termgaps.o Muscle/textfile.o Muscle/threewaywt.o \
Muscle/tomhydro.o Muscle/traceback.o Muscle/tracebackopt.o \
Muscle/tracebacksw.o Muscle/treefrommsa.o Muscle/typetostr.o \
Muscle/upgma2.o Muscle/usage.o Muscle/validateids.o Muscle/vtml2.o \
Muscle/writescorefile.o RClustalW.o RClustalWMain.o RcppExports.o \
RMuscle.o \
ushuffle.o \
ushuffler.o

.PHONY: all clean

# Make the shared object
all: $(SHLIB)

# Provide recipe to remove all objects
clean:
	rm -f $(OBJECTS)
