#compress for release command
#zip -r {filename.zip} {foldername}

USEREADLINE ?= yes
USEBOOST ?= yes
USEHDF5 ?= yes
USEGSL ?= yes
LOGFILE_NAME ?= yes
VERSION = "\"1.47.0\""
RELEASE_DATE = "\"1/21/22\""

# Optimize to level 3:
    CXXFLAGS += -O3 -std=c++11
    LDFLAGS += -std=c++11 -pthreads

ifeq  ($(strip $(LOGFILE_NAME)),yes)
    LOGFILE_NAME="\"mothur.logfile\""
endif


#if you are a mac user use the following line
#TARGET_ARCH += -arch x86_64

#if you using cygwin to build Windows the following line
#CXX = x86_64-w64-mingw32-g++
#CC = x86_64-w64-mingw32-g++
#TARGET_ARCH += -m64 -static

#if you are a linux user use the following line
#CXXFLAGS += -mtune=generic


CXXFLAGS += -DRELEASE_DATE=${RELEASE_DATE} -DVERSION=${VERSION}

# if you do not want to use the readline library, set this to no.
# make sure you have the library installed
ifeq  ($(strip $(USEREADLINE)),yes)
    CXXFLAGS += -DUSE_READLINE
    LIBS += -lreadline
endif


#The boost libraries allow you to read gz files.
ifeq  ($(strip $(USEBOOST)),yes)
    #statically link so the boost install is not required on users machine
    BOOST_INCLUDE_DIR="/usr/local/include"
    BOOST_LIBRARY_DIR="/usr/local/lib"

    #windows paths
    #BOOST_INCLUDE_DIR="/usr/x86_64-w64-mingw32/sys-root/mingw/include"
    #BOOST_LIBRARY_DIR="/usr/x86_64-w64-mingw32/sys-root/mingw/lib"

    CXXFLAGS += -DUSE_BOOST -I ${BOOST_INCLUDE_DIR}

    LIBS += ${BOOST_LIBRARY_DIR}/libboost_system.a
    LIBS += ${BOOST_LIBRARY_DIR}/libboost_iostreams.a
    LIBS += ${BOOST_LIBRARY_DIR}/libboost_filesystem.a
    LIBS += ${BOOST_LIBRARY_DIR}/libz.a
    
endif

#User specified HDF5 library
ifeq  ($(strip $(USEHDF5)),yes)

    HDF5_INCLUDE_DIR="/usr/local/include"
    HDF5_LIBRARY_DIR="/usr/local/lib"

    LDFLAGS +=  -L ${HDF5_LIBRARY_DIR} 
    LIBS += ${HDF5_LIBRARY_DIR}/libhdf5_hl_cpp.a
    LIBS += ${HDF5_LIBRARY_DIR}/libhdf5_cpp.a
    LIBS += ${HDF5_LIBRARY_DIR}/libhdf5_hl.a
    LIBS += ${HDF5_LIBRARY_DIR}/libhdf5.a

    CXXFLAGS += -DUSE_HDF5 -I ${HDF5_INCLUDE_DIR}
endif

#User specified GSL library
ifeq  ($(strip $(USEGSL)),yes)
    GSL_LIBRARY_DIR ?= "\"/usr/local/gsl/lib\""
    GSL_INCLUDE_DIR ?= "\"/usr/local/gsl/include\""

#windows paths
#GSL_INCLUDE_DIR="/usr/x86_64-w64-mingw32/sys-root/mingw/include" 
#GSL_LIBRARY_DIR="/usr/x86_64-w64-mingw32/sys-root/mingw/lib"


    LDFLAGS += -L ${GSL_LIBRARY_DIR}
    LIBS += ${GSL_LIBRARY_DIR}/libgsl.a
    LIBS += ${GSL_LIBRARY_DIR}/libgslcblas.a

    CXXFLAGS += -DUSE_GSL -I ${GSL_INCLUDE_DIR}

endif

#
# INCLUDE directories for mothur
#
#
    VPATH=source/calculators:source/chimera:source/classifier:source/clearcut:source/commands:source/communitytype:source/datastructures:source/engines:source/metastats:source/read:source/svm:source/
    skipUchime := source/uchime_src/
    subdirs :=  $(sort $(dir $(filter-out  $(skipUchime), source/, $(wildcard source/*/))))
    subDirIncludes = $(patsubst %, -I %, $(subdirs))
    subDirLinking =  $(patsubst %, -L%, $(subdirs))
    CXXFLAGS += -I. $(subDirIncludes)
    LDFLAGS += $(subDirLinking)


#
# Get the list of all .cpp files, rename to .o files
#
    OBJECTS=$(patsubst %.cpp,%.o,$(wildcard $(addsuffix *.cpp,$(subdirs))))
    OBJECTS+=$(patsubst %.c,%.o,$(wildcard $(addsuffix *.c,$(subdirs))))
    OBJECTS+=$(patsubst %.cpp,%.o,$(wildcard *.cpp))
    OBJECTS+=$(patsubst %.c,%.o,$(wildcard *.c))

mothur : $(OBJECTS)
    $(CXX) $(LDFLAGS) $(TARGET_ARCH) -o $@ $(OBJECTS) $(LIBS)
    strip mothur

%.o : %.c %.h
    $(COMPILE.c) $(OUTPUT_OPTION) $<
%.o : %.cpp %.h
    $(COMPILE.cpp) $(OUTPUT_OPTION) $<
%.o : %.cpp %.hpp
    $(COMPILE.cpp) $(OUTPUT_OPTION) $<


clean :
    @rm -f $(OBJECTS)
