####### Main Makefile for building the various biosig tools ####################
###
###  Copyright (C) 2010-2020 Alois Schloegl <alois.schloegl@gmail.com>
###  This file is part of the "BioSig for C/C++" repository
###  (biosig4c++) at http://biosig.sf.net/
###
################################################################################

exec_prefix ?= $(prefix)

first :: lib tools

java: lib
	$(MAKE) -C biosig4c++/java

lib:
	$(MAKE) -C biosig4c++ lib

tools: lib
	$(MAKE) -C biosig4c++ tools

mma mathematica: lib
	$(MAKE) -C biosig4c++/mma

mex4m matlab: lib
	$(MAKE) -C biosig4c++/mex mex4m

R: lib
	$(MAKE) -C biosig4c++/R

install ::
	$(MAKE) -C biosig4c++ install
	install -d $(DESTDIR)/usr/local/share/biosig/matlab
	cp -r biosig4matlab/* $(DESTDIR)/usr/local/share/biosig/matlab/
	-rm -rf $(DESTDIR)/usr/local/share/biosig/matlab/maybe-missing

uninstall ::
	$(MAKE) -C biosig4c++ uninstall
	-rm -rf $(DESTDIR)/usr/local/share/biosig

clean ::
	$(MAKE) -C biosig4c++/mma clean
	$(MAKE) -C biosig4c++ clean
	-rm mexbiosig*.src.tar.gz
	-rm biosig4octave*.src.tar.gz

distclean : clean
        # also configure.ac for list of files
	-rm config.log
	-rm config.status
	rm Makefile biosig4c++/Makefile biosig4c++/*/Makefile \
		biosig4c++/python/setup.py \
		biosig4c++/R/DESCRIPTION

ifneq (:,/usr/bin/java)
ifneq (:,/usr/bin/javac)
first :: lib
	-$(MAKE) -C biosig4c++/java
endif
clean ::
	-$(MAKE) -C biosig4c++/java clean
test ::
	-$(MAKE) -C biosig4c++/java test
endif

ifneq (:,:)
first :: lib
	$(MAKE) -C biosig4c++/mma
install ::
	-$(MAKE) -C biosig4c++/mma install
uninstall ::
	-$(MAKE) -C biosig4c++/mma uninstall
endif

ifneq (:,:)
MATLAB_MEX := $(shell dirname :)/mex
first ::
	$(MAKE) -C biosig4c++/mex mex4m
install ::
	$(MAKE) -C biosig4c++/mex install
uninstall ::
	$(MAKE) -C biosig4c++/mex uninstall
endif

# source package mexbiosig and biosig4octave
first :: biosig4octave
mexbiosig ::
	$(MAKE) -C biosig4c++ mexbiosig
	ln -sf biosig4c++/mex/mexbiosig-2.3.3.src.tar.gz
biosig4octave ::
	$(MAKE) -C biosig4c++ biosig4octave
	ln -sf biosig4c++/mex/biosig4octave-2.3.3.src.tar.gz

ifneq (:,/usr/bin/octave)
ifneq (:,/usr/bin/mkoctfile)
BIOSIG_MEX_DIR = $(DESTDIR)$(shell octave-config -p LOCALOCTFILEDIR)/biosig
BIOSIG_DIR     = $(DESTDIR)$(shell octave-config -p LOCALFCNFILEDIR)/biosig
first ::
	MKOCTFILE="/usr/bin/mkoctfile" $(MAKE) -C biosig4c++/mex mex4o
install ::
	# mexbiosig
	#-/usr/bin/octave --no-gui --eval "pkg install -global biosig4c++/mex/mexbiosig-2.3.3.src.tar.gz"
	# *.mex
	install -d $(BIOSIG_MEX_DIR)
	install biosig4c++/mex/*.mex $(BIOSIG_MEX_DIR)
	# biosig for octave and matlab
	install -d $(BIOSIG_DIR)
	cp -r biosig4matlab/*  $(BIOSIG_DIR)
	-rm -rf $(BIOSIG_DIR)/maybe-missing

uninstall ::
	# mexbiosig
	#-/usr/bin/octave --no-gui --eval "pkg uninstall -global mexbiosig"
	# *.mex
	-rm -rf $(BIOSIG_MEX_DIR)
	# biosig for octave and matlab
	-rm -rf $(BIOSIG_DIR)
endif
endif

ifneq (:,:)
first ::
	-$(MAKE) -C biosig4c++/php
install ::
	-$(MAKE) -C biosig4c++/php install
clean ::
	-$(MAKE) -C biosig4c++/php clean
endif

ifneq (:,/usr/bin/python3)
first :: python
python ::
	-PYTHON=/usr/bin/python3 $(MAKE) -C biosig4c++/python sdist
	-$(foreach py, $(shell pyversions -i),  PYTHON=$(py) $(MAKE) -C biosig4c++/python build; )
	-$(foreach py, $(shell py3versions -i), PYTHON=$(py) $(MAKE) -C biosig4c++/python build; )
install ::
	-PYTHON=/usr/bin/python3 $(MAKE) -C biosig4c++/python install
	-$(foreach py, $(shell pyversions -i),  PYTHON=$(py) $(MAKE) -C biosig4c++/python install; )
	-$(foreach py, $(shell py3versions -i), PYTHON=$(py) $(MAKE) -C biosig4c++/python install; )
uninstall ::
	-/usr/bin/python3 -m pip uninstall -y Biosig
	-$(foreach py, $(shell pyversions -i),  $(py) -m pip uninstall -y Biosig;)
	-$(foreach py, $(shell py3versions -i), $(py) -m pip uninstall -y Biosig;)
clean ::
	$(MAKE) -C biosig4c++/python clean
endif

ifneq (:,/usr/bin/R)
first ::
	-$(MAKE) -C biosig4c++/R build
install ::
	-$(MAKE) -C biosig4c++/R install
clean ::
	-$(MAKE) -C biosig4c++/R clean
endif

all: first #win32 win64 #sigviewer #win32/sigviewer.exe win64/sigviewer.exe #biosig_client biosig_server mma java tcl perl php ruby #sigviewer

#---- automatic remaking ---------------------------------------------------#
#   https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Automatic-Remaking.html#Automatic-Remaking
#---------------------------------------------------------------------------#
$(srcdir)/configure: configure.ac aclocal.m4
	autoconf

# autoheader might not change config.h.in, so touch a stamp file.
$(srcdir)/config.h.in: stamp-h.in
$(srcdir)/stamp-h.in: configure.ac aclocal.m4
	autoheader
	echo timestamp > '$(srcdir)/stamp-h.in'

config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status

Makefile: Makefile.in config.status
	./config.status

config.status: configure
	./config.status --recheck

