Author: Greg Schuler, NCBI ; Kirill Rotmistrovsky, NCBI ;

# Electronic PCR commandline tools: build instructions

Version: 2.3.12

1. Build
   1. Unix/gcc instructions
      1. Make arguments
      2. Mac OS/X with gcc
   2. Windows/BorlandC++ instructions
   3. Windows/MS-VisualC++8.0 instructions
2. Files
   1. Sources common to forward and reverse e-PCR binaries
   2. Forward e-PCR source files
   3. Reverse e-PCR source files
   4. Extra files
   5. Build files

Build e-PCR and reverse e-PCR (re-PCR, famap) binaries with GNU make and GCC.

## Build

### Unix/gcc instructions

1. Unpack archive
2. Edit stand/config.mk if nesessary
3. run gmake links depend all OPTIMIZE=6

#### Make arguments

One can use following arguments to make:

OPTIMIZE=[0-9]
  to pass with -O argument to compiler (default is build debug version)
srcdir={path-to-src}
  to set path to sources
objdir={path-to-obj}
  to set path where to place .o
tgtdir={target-path}
  to set path where to put targets (libepcr.a and executable files)

#### Mac OS/X with gcc

Use LF64LDFLAGS= LF64CCFLAGS=-DNATIVE_LARGEFILES (yes, space after first "=") argument with gmake since Mac OS/2 does not have (and does not need) *64 file functions and off64_t

### Windows/BorlandC++ instructions

1. Unpack archive
2. Edit stand/Makefile.bcc55-w32 if nesessary
3. run make all -f stand/Makefile.bcc55-w32

### Windows/MS-VisualC++8.0 instructions

1. Unpack archive
2. Edit stand/Makefile.vc8 if nesessary
3. run nmake all -f stand/Makefile.vc8

## Files

e-PCR package includes two tool sets: forward e-PCR (e-PCR) and reverse e-PCR (re-PCR, fahash and famap). These binaries share some source files, that are compiled as libepcr.a library.

Directory stand/ contains makefiles to use with GCC. Change stand/config.mk to update compiler and compiling options. Makefiles should be OK for GNU make.

### Sources common to forward and reverse e-PCR binaries

build_cfg.h
  macroses that control compilation with/without NCBI toolkit
defaults.h
  defaults for e-PCR program (used also in library)
mswin.h
  windows compatibility defines and declarations
native64.h
  native 64bit file access compatibility defines and declarations
strref.hpp
  class for passing reference to string data
sts_i.hpp
  generic STS interface class
hashset.hpp
  hash calculating class declaration (allows set of discontiguos words)
hashset.cpp
  hash calculating class implementation
align.hpp
  align or compare two sequences allowing mismatches and gaps, declarations
align.cpp
  align or compare two sequences allowing mismatches and gaps, implementation
minilcs.hpp
  align two sequences templat class
faread.hpp
  read fasta files, declarations
faread.cpp
  read fasta files, implementation
mmap.hpp
  mmap(2) wrapper for huge files and no page boundary restriction, declarations
mmap.cpp
  mmap(2) wrapper for huge files and no page boundary restriction, implementation
getopt.c
  getopt implementation -- to compile for windows

### Forward e-PCR source files

e-PCR_main.cpp
  main for e-PCR commandline program
stsmatch_i.hpp
  STS lookup algorithm declarations
stsmatch_i.cpp
  STS lookup algorithm implementation
stsfilter.cpp
  Postprocessor for STS lookup
stsmatch_m.hpp
  STS and STS hash table implementation for mmapable UniSTS file, declarations
stsmatch_m.cpp
  STS and STS hash table implementation for mmapable UniSTS file, implementation
stsmatch.hpp
  Some useful callbacks declarations
stsmatch.cpp
  Some useful callbacks, implementation

### Reverse e-PCR source files

bin-io.hpp
  Generic read/write integers and strings
fahash_defines.h
  Internal defines for fahash
fahash_internal.hpp
  Internal defines for fahash
fahash.hpp
  Hash sequence words in file, declarations
fahash_create.cpp
  Hash sequence words in file, creating hash file, abstract
fahash_create1.cpp
  Hash sequence words in file, creating hash file version 1 implementation
fahash_create2.cpp
  Hash sequence words in file, creating hash file version 2 implementation
fahash_lookup.cpp
  Hash sequence words in file, lookup algorithm implementation
fast_seqio.hpp
  Fast access to regions of sequences, declarations
fast_seqio_read.cpp
  Fast access to regions of sequences, implementation
fast_seqio_write.cpp
  Fast access to regions of sequences, create sequence file implementation
famap_main.cpp
  main for commandline tool to create/dump mmapable file
fahash_main.cpp
  main for commandline tool to create hash file
sts.hpp
  simple implementation for STS class
re-PCR_main.cpp
  main for reverse e-PCR commandline tool

### Extra files

seqcmp_main.cpp
  Main file for align.?pp test

### Build files

Makefile
  Master makefile
stand/version.mk
  Version definitions
stand/config.mk
  Compiler options
stand/Makefile.libepcr
  libepcr makefile
stand/Makefile.cmd_epcr
  e-PCR makefile
stand/Makefile.cmd_repcr
  re-PCR makefile
stand/Makefile.cmd_famap
  famap makefile
stand/Makefile.cmd_fahash
  fahash makefile
stand/Makefile.cmd_seqcmp
  seqcmp makefile
stand/Makefile.bcc55-w32
  makefile for BorlandC++/win32
stand/Makefile.vc8
  makefile for MS Visual C++ 8.0