CSOURCES=io_png.c randmt.c
CXXSOURCES=util.cpp SPLE_lib.cpp DataProvider.cpp

COBJ=$(CSOURCES:.c=.o)
CXXOBJ=$(CXXSOURCES:.cpp=.o)
OBJ=$(COBJ) $(CXXOBJ)

CFLAGS=-O2
LDFLAGS=-lpng -lm
ifdef OMP
CFLAGS+=-fopenmp
LDFLAGS+=-lgomp
endif
CXXFLAGS=$(CFLAGS) -DNDEBUG -I./eigen

all: denoiseSPLE imsample

denoiseSPLE: $(OBJ) SPLE_denoise.o
	$(CXX) $^ $(LDFLAGS) -o $@

imsample: $(OBJ) imsample.o
	$(CXX) $^ $(LDFLAGS) -o $@

%.o: %.c %.h
	$(CC) -c $< $(CFLAGS) -o $@

%.o: %.cpp %.h
	$(CXX) -c $< $(CXXFLAGS) -o $@

clean:
	@rm -f *.o *.png core

dist_clean: clean
	@rm imsample denoiseSPLE

beautify:
	sed -i "s:[\t ]*$$::g" *.cpp *.h* makefile

identest:
	rm -f list.txt
	@echo "test if sple behaves the same way as its initial implementation"
	cp ./test/DataProvider.cpp8 DataProvider.cpp
	cp ./test/DataProvider.h8 DataProvider.h
	sh ./test/test.sh && echo "TEST PASSED" || $(MAKE) fail
	@rm -f dataCXX.cpp log list.txt
	@$(MAKE) dist_clean

fail:
	$(error local vs. online identity test failed)

EIGEN_URL=http://bitbucket.org/eigen/eigen/get/3.2.1.tar.gz
EIGEN_TGZ=3.2.1.tar.gz
EIGEN_DIR=eigen

$(EIGEN_TGZ):
	wget $(EIGEN_URL)

$(EIGEN_DIR): $(EIGEN_TGZ)
	mkdir $@
	# strip-components makes $@ the main folder
	tar xfz $< -C $@ --strip-components=1
	$(RM) $<
