# Makefile for GNU-make
#
# 2013-05-16

include ../Makefile.config

CFG = debug
#CFG = release

MUESLI_MEX_INSTALL_DIR = $(HOME)/tools/matlab/local/matlab8/muesli

# GCC compilers for Matlab are defined in mexopts.sh

############################# end of user part #############################

# info: from Matlab R2006b, the flag '-largeArrayDims' must be used
#       when creating a mex binary file with the 'mex' command, for
#       sparse arrays under a 64bit machine.

#-----------------------------------------------------------------------

ifeq '$(CFG)' 'debug'
  MEX = mex -f ./mexopts.sh -g
else # release
  MEX = mex -f ./mexopts.sh -O
endif

# Extension differs for 32 bits and 64 bits linux machine...
ifeq '$(X86_64)' '"yes"'
  EXT = mexa64
  MEX_OPT = -largeArrayDims
else # i386
  EXT = mexglx
  MEX_OPT =
endif

PREPRO_FLAGS =
CFLAGS = -I$(ZLIB_INCL)

all : mbfread.$(EXT) \
      mbfwrite.$(EXT)

mbfread.$(EXT) : mbfread.o mbfread_gateway.o swap_bytes.o \
                   f90_gzlib.o zlib_f90.o
	$(MEX) -fortran -o $@ $^ -lz

mbfread.o : mbfread.F90 f90_gzlib.o
	$(MEX) $(PREPRO_FLAGS) -c $<

mbfread_gateway.o : mbfread_gateway.F90
	$(MEX) $(MEX_OPT) -c $<

#-----------------------------

mbfwrite.$(EXT) : mbfwrite.o mbfwrite_gateway.o rational_numbers.o swap_bytes.o \
                    f90_gzlib.o zlib_f90.o
	$(MEX) -fortran -o $@ $^ -lz

mbfwrite.o : mbfwrite.F90 rational_numbers.o f90_gzlib.o
	$(MEX) $(PREPRO_FLAGS) -c $<

mbfwrite_gateway.o : mbfwrite_gateway.F90
	$(MEX) $(MEX_OPT) -c $<

#-----------------------------

zlib_f90.o : ../misc/f90_gzlib/zlib_f90.c
	$(MEX) $(CFLAGS) -c $<

f90_gzlib.o : ../misc/f90_gzlib/f90_gzlib.F90 rational_numbers.o mod_mfdebug.o
	$(MEX) -c $<

rational_numbers.o : ../misc/rational_numbers/rational_numbers.F90
	$(MEX) -c $<

mod_mfdebug.o : ../mod_mfdebug.F90
	$(MEX) -c $<

swap_bytes.o : swap_bytes.f90
	$(MEX) -c $<

#-----------------------------

clean :
	rm -f *.o *.mod

distclean : clean
	rm -f *.mexglx *.mexa64

#-----------------------------

install : mbfread.$(EXT) mbfwrite.$(EXT) ../../src/mex/mbfread.m ../../src/mex/mbfwrite.m
	@test -d '$(MUESLI_MEX_INSTALL_DIR)' || (echo "MUESLI_MEX_INSTALL_DIR = '$(MUESLI_MEX_INSTALL_DIR)' doesn't exist!"; exit 1)
	cd $(MUESLI_MEX_INSTALL_DIR) && rm -f *.m *.$(EXT)
	cp mbfread.$(EXT) mbfwrite.$(EXT) $(MUESLI_MEX_INSTALL_DIR)
	cp ../../src/mex/*.m $(MUESLI_MEX_INSTALL_DIR)
	@echo ""; echo "  => MATLAB mex files installed"; echo ""

