DOWNSTREAM_SO_NUMBER = YOU_MUST_SET_THIS

CC = gcc
CFLAGS ?= -O2 -Wall -Wextra
LDFLAGS ?=
LDLIBS = -lm

INSTALL = install -p
PREFIX ?= /usr/local
LIBDIR ?= $(PREFIX)/lib
INCLUDEDIR ?= $(PREFIX)/include
BINDIR ?= $(PREFIX)/bin

all: run_features lib

# https://github.oom/chlubba/catch22/wiki/Installation-and-Testing
OBJECTS = \
	butterworth.o \
	CO_AutoCorr.o \
	DN_HistogramMode_10.o \
	DN_HistogramMode_5.o \
	DN_Mean.o \
	DN_OutlierInclude.o \
	DN_Spread_Std.o \
	FC_LocalSimple.o \
	fft.o \
	helper_functions.o \
	histcounts.o \
	IN_AutoMutualInfoStats.o \
	MD_hrv.o \
	PD_PeriodicityWang.o \
	SB_BinaryStats.o \
	SB_CoarseGrain.o \
	SB_MotifThree.o \
	SB_TransitionMatrix.o \
	SC_FluctAnal.o \
	splinefit.o \
	SP_Summaries.o \
	stats.o

%.o: %.c
	$(CC) $(CFLAGS) -fpic -c -o $@ $^

libcatch22.so.0.$(DOWNSTREAM_SO_NUMBER): $(OBJECTS)
	$(CC) $(LDFLAGS) -Wl,-soname,libcatch22.so.0.$(DOWNSTREAM_SO_NUMBER) -shared -o $@ $^ $(LDLIBS)

libcatch22.so: libcatch22.so.0.$(DOWNSTREAM_SO_NUMBER)
	ln -svf libcatch22.so.0.$(DOWNSTREAM_SO_NUMBER) libcatch22.so

lib: libcatch22.so libcatch22.so.0.$(DOWNSTREAM_SO_NUMBER)

run_features: main.o libcatch22.so
	$(CC) $(LDFLAGS) -o $@ main.o -L. -lcatch22 $(LDLIBS)

clean:
	$(RM) *.so* *.o run_features

install: all
	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
	$(INSTALL) -t $(DESTDIR)$(LIBDIR) libcatch22.so.0.$(DOWNSTREAM_SO_NUMBER)
	ln -s libcatch22.so.0.$(DOWNSTREAM_SO_NUMBER) $(DESTDIR)$(LIBDIR)/libcatch22.so
	$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)/catch22
	$(INSTALL) -t $(DESTDIR)$(INCLUDEDIR)/catch22 -m 0644 *.h
	$(INSTALL) -d $(DESTDIR)$(BINDIR)
	$(INSTALL) -t $(DESTDIR)$(BINDIR) run_features

.PHONY: clean lib install
