building from source on linux machine

The link to the “build from source on linux” points you to the version for MAC, I think. I tweaked the “makefile” by

  1. commenting out the “if you are a MAC user” block
  2. uncommenting the “if you are a linux user” block.
  3. I also renamed the file “Makefile”

Then I needed to tweak the file “mk” in the subdirectory uchime_src.
3. comment out the static linkage option so the block looks like this
LINK_OPTS=
#if [ uname -s == Linux ] ; then

LINK_OPTS=-static

#fi

  1. Oh yeah – the “clean” and “install” targets of the “Makefile” do not work correctly.
    Ranther than fixing them I just cleaned and installed by hand. You may wish to
    modify the targets accordingly

  2. SUGGESTION: archive as a tarball as this is more commonly done in linux – unzip is not
    usually included in most distros whereas tar and gzip are. Call the base directory mothur
    and then tar-zip it up one level higher
    tar cvf mothur.1.33.tar mothur
    gzip mothur.1.33.tar


6. SUGGESTION: include an INSTALL file in the mothur base directory:

#################################################

INSTALL (goes in mothur base directory

###############################################
To install on linux, just extract, make and clean. If you want
a local installation execute the ln -s command

tar xvfz mothur.1.33.tar.gz
cd mothur
make
rm .o
rm uchime_src/
.o
ln -s pwd/mothur /usr/local/bin/mothur


7. Other Files attached: ######################################### ### Makefile (revised, goes in the mothur base directory) ########################################## ################################################### # # Makefile for mothur # Created: June 29, 2010 # ###################################################

Macros

USEMPI ?= no
64BIT_VERSION ?= yes
USEREADLINE ?= yes
USECOMPRESSION ?= no
MOTHUR_FILES="“Enter_your_default_path_here”"
RELEASE_DATE = "“4/4/2014"”
VERSION = "“1.33.3"”
FORTAN_COMPILER = gfortran
FORTRAN_FLAGS =

Optimize to level 3:

CXXFLAGS += -O3

ifeq ($(strip $(64BIT_VERSION)),yes)
#if you are using centos uncomment the following lines
#CXX = g++44
#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++
#FORTAN_COMPILER = x86_64-w64-mingw32-gfortran
#TARGET_ARCH += -m64 -static

#if you are a linux user use the following line
CXXFLAGS += -mtune=native -march=native
CXXFLAGS += -DBIT_VERSION
FORTRAN_FLAGS = -m64
endif


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

ifeq ($(strip $(MOTHUR_FILES)),"“Enter_your_default_path_here”")
else
CXXFLAGS += -DMOTHUR_FILES=${MOTHUR_FILES}
endif


# 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\ -lncurses endif
ifeq ($(strip $(USEMPI)),yes) CXX = mpic++ CXXFLAGS += -DUSE_MPI endif

if you want to enable reading and writing of compressed files, set to yes.

The default is no. this may only work on unix-like systems, not for windows.


ifeq ($(strip $(USECOMPRESSION)),yes) CXXFLAGS += -DUSE_COMPRESSION endif

INCLUDE directories for mothur

CXXFLAGS += -I.

Get the list of all .cpp files, rename to .o files

OBJECTS=$(patsubst %.cpp,%.o,$(wildcard *.cpp))
OBJECTS+=$(patsubst %.c,%.o,$(wildcard *.c))
OBJECTS+=$(patsubst %.f,%.o,$(wildcard *.f))

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

strip mothur

uchime:
cd uchime_src && ./mk && mv uchime … && cd …

fortranSource:
${FORTAN_COMPILER} -c $(FORTRAN_FLAGS) *.f

install : mothur

cp mothur …/Release/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) @rm -f uchime


###################################### ### mk (goes in the uchime_src subdirectory of the mothur base directory #################################### #!/bin/bash CPPNames='addtargets2 alignchime alignchimel alnparams alpha alpha2 fractid getparents globalalign2 make3way mx myutils path searchchime seqdb setnucmx sfasta tracebackbit uchime_main usort viterbifast writechhit' ObjNames='addtargets2.o alignchime.o alignchimel.o alnparams.o alpha.o alpha2.o fractid.o getparents.o globalalign2.o make3way.o mx.o myutils.o path.o searchchime.o seqdb.o setnucmx.o sfasta.o tracebackbit.o uchime_main.o usort.o viterbifast.o writechhit.o'

rm -f *.o mk.stdout mk.stderr tmp.stderr

for CPPName in $CPPNames
do
echo $CPPName >> /dev/tty
g++ $ENV_GCC_OPTS -c -O3 -msse2 -mfpmath=sse -D_FILE_OFFSET_BITS=64 -DNDEBUG=1 -DUCHIMES=1 $CPPName.cpp -o $CPPName.o >> mk.stdout 2>> tmp.stderr
cat tmp.stderr
cat tmp.stderr >> mk.stderr
rm -f tmp.stderr
done

LINK_OPTS=
#if [ uname -s == Linux ] ; then

LINK_OPTS=-static

#fi
g++ $LINK_OPTS $ENV_LINK_OPTS -g -o uchime $ObjNames >> mk.stdout 2>> tmp.stderr
cat tmp.stderr
cat tmp.stderr >> mk.stderr
rm -f tmp.stderr

strip uchime
ls -lh uchime
sum uchime