EXES=\
averages	\
statistics	\
quantiles	\
histograms	\
gsl_statistics_distributions	\
gsl_running_statistics_distributions	\
gsl_quantiles_distributions	\
gsl_running_quantiles_distributions	\
boost_accumulators_distributions	\
gsl_histograms_distributions	\
gsl_logarithmic_histograms_distributions	\
gsl_multidimensional_histograms_distributions	\
multidimensional_histograms	\
\
container_numeric_operators	\

CPPFLAGS_FOR_FUNCTION=-DUSE_BOOST_FUNCTION
CPPFLAGS_FOR_UTILITY=-DUSE_BOOST_UTILITY
CPPFLAGS_FOR_INTERNAL_VALUE_TYPE=-DUSE_LONG_DOUBLE_AS_INTERNAL_VALUE_TYPE
#CPPFLAGS_FOR_INTERNAL_VALUE_TYPE=-UUSE_LONG_DOUBLE_AS_INTERNAL_VALUE_TYPE

CPPFLAGS=-I/opt/local/include $(CPPFLAGS_FOR_FUNCTION) $(CPPFLAGS_FOR_UTILITY) $(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE)
CXXFLAGS=-W -Wall -O3

all: $(EXES)

gsl_running_statistics_distributions: CPPFLAGS=-I/opt/local/x86/include $(CPPFLAGS_FOR_FUNCTION) $(CPPFLAGS_FOR_UTILITY) $(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE)
gsl_running_statistics_distributions: LDFLAGS=-L/opt/local/x86/lib
gsl_running_statistics_distributions: LDLIBS=-lgsl

gsl_statistics_distributions: LDFLAGS=-L/opt/local/lib
gsl_statistics_distributions: LDLIBS=-lgsl

gsl_running_quantiles_distributions: CPPFLAGS=-I/opt/local/x86/include $(CPPFLAGS_FOR_FUNCTION) $(CPPFLAGS_FOR_UTILITY) $(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE)
gsl_running_quantiles_distributions: LDFLAGS=-L/opt/local/x86/lib
gsl_running_quantiles_distributions: LDLIBS=-lgsl

gsl_quantiles_distributions: LDFLAGS=-L/opt/local/lib
gsl_quantiles_distributions: LDLIBS=-lgsl

boost_accumulators_distributions: CPPFLAGS=-I/opt/local/include $(CPPFLAGS_FOR_FUNCTION) $(CPPFLAGS_FOR_UTILITY) $(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE)

#gsl_histograms_distributions: CXX=c++
gsl_histograms_distributions: CXXFLAGS=-W -Wall -O3
#gsl_histograms_distributions: CXXFLAGS=-W -Wall -O3 -std=c++11
gsl_histograms_distributions: CPPFLAGS=-I/opt/local/x86/include $(CPPFLAGS_FOR_FUNCTION) $(CPPFLAGS_FOR_UTILITY) $(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE)
gsl_histograms_distributions: LDFLAGS=-L/opt/local/x86/lib
gsl_histograms_distributions: LDLIBS=-lgsl

#gsl_logarithmic_histograms_distributions: CXX=c++
gsl_logarithmic_histograms_distributions: CXXFLAGS=-W -Wall -O3 -I.
#gsl_logarithmic_histograms_distributions: CXXFLAGS=-W -Wall -O3 -I. -std=c++11
gsl_logarithmic_histograms_distributions: CPPFLAGS=-I/opt/local/x86/include $(CPPFLAGS_FOR_FUNCTION) $(CPPFLAGS_FOR_UTILITY) $(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE)
gsl_logarithmic_histograms_distributions: LDFLAGS=-L/opt/local/x86/lib
gsl_logarithmic_histograms_distributions: LDLIBS=-lgsl

gsl_multidimensional_histograms_distributions: CPPFLAGS=-I/opt/local/x86/include $(CPPFLAGS_FOR_FUNCTION) $(CPPFLAGS_FOR_UTILITY) $(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE)
gsl_multidimensional_histograms_distributions: LDFLAGS=-L/opt/local/x86/lib
gsl_multidimensional_histograms_distributions: LDLIBS=-lgsl

clean:
	rm -f $(EXES)

check: all
	./container_numeric_operators
	./multidimensional_histograms > outs/multidimensional_histograms$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./histograms > outs/histograms$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./quantiles > outs/quantiles.out
	./statistics > outs/statistics$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./averages > outs/averages$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./gsl_multidimensional_histograms_distributions | tee outs/gsl_multidimensional_histograms_distributions.out && diff -u outs/gsl_multidimensional_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_multidimensional_histograms_distributions.out > /dev/null
	./gsl_logarithmic_histograms_distributions | tee outs/gsl_logarithmic_histograms_distributions.out && diff -u outs/gsl_logarithmic_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_logarithmic_histograms_distributions.out > /dev/null
	./gsl_histograms_distributions | tee outs/gsl_histograms_distributions.out && diff -u outs/gsl_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_histograms_distributions.out > /dev/null
	./gsl_running_statistics_distributions | tee outs/gsl_running_statistics_distributions.out && diff -u outs/gsl_running_statistics_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_running_statistics_distributions.out > /dev/null
	./gsl_statistics_distributions | tee outs/gsl_statistics_distributions.out && diff -u outs/gsl_statistics_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_statistics_distributions.out > /dev/null
	./gsl_running_quantiles_distributions | tee outs/gsl_running_quantiles_distributions.out && diff -u outs/gsl_running_quantiles_distributions.out.bak outs/gsl_running_quantiles_distributions.out > /dev/null
	./gsl_quantiles_distributions | tee outs/gsl_quantiles_distributions.out && diff -u outs/gsl_quantiles_distributions.out.bak outs/gsl_quantiles_distributions.out > /dev/null
	./boost_accumulators_distributions | tee outs/boost_accumulators_distributions.out && diff -u outs/boost_accumulators_distributions.out.bak outs/boost_accumulators_distributions.out > /dev/null

update:
	./gsl_multidimensional_histograms_distributions | tee outs/gsl_multidimensional_histograms_distributions.out && diff -u outs/gsl_multidimensional_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_multidimensional_histograms_distributions.out > /dev/null && true || cp -p outs/gsl_multidimensional_histograms_distributions.out outs/gsl_multidimensional_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./gsl_logarithmic_histograms_distributions | tee outs/gsl_logarithmic_histograms_distributions.out && diff -u outs/gsl_logarithmic_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_logarithmic_histograms_distributions.out > /dev/null && true || cp -p outs/gsl_logarithmic_histograms_distributions.out outs/gsl_logarithmic_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./gsl_histograms_distributions | tee outs/gsl_histograms_distributions.out && diff -u outs/gsl_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_histograms_distributions.out > /dev/null && true || cp -p outs/gsl_histograms_distributions.out outs/gsl_histograms_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./gsl_running_statistics_distributions | tee outs/gsl_running_statistics_distributions.out && diff -u outs/gsl_running_statistics_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_running_statistics_distributions.out > /dev/null && true || cp -p outs/gsl_running_statistics_distributions.out outs/gsl_running_statistics_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./gsl_statistics_distributions | tee outs/gsl_statistics_distributions.out && diff -u outs/gsl_statistics_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out outs/gsl_statistics_distributions.out > /dev/null && true || cp -p outs/gsl_statistics_distributions.out outs/gsl_statistics_distributions$(CPPFLAGS_FOR_INTERNAL_VALUE_TYPE).out
	./gsl_running_quantiles_distributions | tee outs/gsl_running_quantiles_distributions.out && diff -u outs/gsl_running_quantiles_distributions.out.bak outs/gsl_running_quantiles_distributions.out > /dev/null && true || cp -p outs/gsl_running_quantiles_distributions.out outs/gsl_running_quantiles_distributions.out.bak
	./gsl_quantiles_distributions | tee outs/gsl_quantiles_distributions.out && diff -u outs/gsl_quantiles_distributions.out.bak outs/gsl_quantiles_distributions.out > /dev/null && true || cp -p outs/gsl_quantiles_distributions.out outs/gsl_quantiles_distributions.out.bak
