SUBDIRS = gmap gstruct

.PHONY: all clean $(SUBDIRS)

OBJECTS = bamreader.o bamtally.o iit.o variantsummary.o genome.o R_init_gmapR.o

R_SRC_DIR = ${CURDIR}
PREFIX = ${R_SRC_DIR}/../inst/usr
INCLUDE_DIR = $(PREFIX)/include

GSTRUCT_LIB = $(PREFIX)/$(LIBnn)/libgstruct-1.0.a
GSTRUCT_INCLUDE_DIR = $(INCLUDE_DIR)/gstruct

SAMTOOLS_LIB = samtools/libbam.a

PATCH_O = samtools_patch.o
KNETFILE_O = knetfile.o
BAMOBJ_0 = \
  bgzf.o kstring.o bam_aux.o bam.o bam_import.o sam.o bam_index.o	\
  bam_pileup.o bam_lpileup.o bam_md.o razf.o faidx.o \
  $(KNETFILE_O) bam_sort.o sam_header.o bam_reheader.o kprobaln.o $(PATCH_O)
BAMOBJ=$(BAMOBJ_0:%=samtools/%)
DFLAGS = -D_USE_KNETFILE -D_FILE_OFFSET_BITS=64 \
  -U_FORTIFY_SOURCE -DBGZF_CACHE \
  -Dfprintf=_samtools_fprintf \
  -Dexit=_samtools_exit \
  -Dabort=_samtools_abort

PKG_CPPFLAGS += -I$(INCLUDE_DIR)
PKG_LIBS += $(GSTRUCT_LIB) $(SAMTOOLS_LIB) -lz

SHLIB = gmapR.so

all: $(SHLIB) gmap

$(SHLIB): $(OBJECTS) $(GSTRUCT_LIB)
	$(SHLIB_LINK) -o $@ $(OBJECTS) $(ALL_LIBS)

$(OBJECTS): $(GSTRUCT_INCLUDE_DIR) $(OBJECTS:%.o=%.c)

samtools/%.o: samtools/%.c
	$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(DFLAGS) -c $< -o $@

$(GSTRUCT_LIB) $(GSTRUCT_INCLUDE_DIR): gstruct

$(SAMTOOLS_LIB): $(BAMOBJ)
	$(AR) -crus $@ $(BAMOBJ)

$(SUBDIRS): %: %/Makefile $(SAMTOOLS_LIB)
	cd $@; \
	$(MAKE) install

gstruct/Makefile: gstruct/configure
	cd $(dir $@); \
        CFLAGS="-g -O3" \
	./configure --enable-static --disable-shared \
	            --prefix=${PREFIX} --includedir=${GSTRUCT_INCLUDE_DIR} \
	            --libdir=${PREFIX}/${LIBnn} \
	            --with-samtools-lib=${R_SRC_DIR}/samtools \
		    --disable-maintainer-mode \
                    --disable-binaries
## does not appear to be a true dependency yet
##	            --with-gmap=${PREFIX}/bin

gmap/Makefile: gmap/configure
	cd $(dir $@); \
	 ./configure --with-gmapdb=${GMAPDB} --prefix=${PREFIX} \
	            --libdir=${PREFIX}/${LIBnn} --disable-maintainer-mode

clean:
	for dir in $(SUBDIRS); do \
	  $(MAKE) -C $$dir distclean; \
	done
	rm -f *.o *.so *.dll