#
# Copyright (C) 2011-2020   Michele Martone   <michelemartone _AT_ users.sourceforge.net>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
sinclude Makeconf
# Makeconf is created by the configure script.
# You can also not use it but set explicitly the following:
CXXFLAGS=$(SPARSERSB_CXXFLAGS) $(OCTAVE_FUNC_DEFINES)
LDFLAGS=$(shell $(MKOCTFILE) -p LDFLAGS) $(SPARSERSB_LDFLAGS)
CXXFLAGS_CXX11=$(SPARSERSB_CXX11)

.PHONY: all check

SPARSERSB_OCT=sparsersb.oct
all: $(SPARSERSB_OCT)

tags: *.cc
	ctags *

#library:
#	true # if test "$(RSBLIBDIR)" = $(shell pwd)/../lib ; then \
#	# echo "Will build librsb so to have RSBINCDIR=$(RSBINCDIR) and RSBLIBDIR=$(RSBLIBDIR)"; \
#		# make -C $(RSBLIBDIR) ; fi

$(SPARSERSB_OCT): sparsersb.cc
	LFLAGS="$(LDFLAGS)" LDFLAGS="$(LDFLAGS)" CXXFLAGS="$(CXXFLAGS) $(CXXFLAGS_CXX11)" $(MKOCTFILE) -D'RSB_SPARSERSB_LABEL=sparsersb' -o $@ $<
rtest: $(SPARSERSB_OCT)
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent ../inst/sparsersbtester.m
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent ../bin/octavebench.m ../bin/pd.mtx
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent ../bin/octavebench.m 
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent --eval 'test sparsersbtg'
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent --eval 'test sparsersb'

bench: $(SPARSERSB_OCT)
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent ../bin/obench.m
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent ../bin/lsbench.m
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent ../inst/sparsersbbench.m

itests: tests
	SPARSERSB_TEST=1 $(OCTAVE) --norc --silent --eval 'demo sparsersb'
	
tests: rtest
check: tests

clean:
	-$(RM) *.o octave-core core *.oct *~ tags

srut:
	awk -f srut.awk < sparsersb.cc  > sparsersb.cc.new
	mv sparsersb.cc.new sparsersb.cc

# This is expected to work on author's machine.
#dist_old:
#	echo "warning: we are making a tarball out of SVN repositories: NOT this checked out copy."
#	rm -fR $(PACKAGE_NAME)
#	svn export `svn info  | grep URL | sed 's/^.* //;s/src$$//'g` $(PACKAGE_NAME)
#	cd $(PACKAGE_NAME)/src && sh autogen.sh && cd -
#	rm -fR $(PACKAGE_NAME)/src/old
#	rm -fR $(PACKAGE_NAME)/src/TODO.txt
#	rm -fR $(PACKAGE_NAME)/src/oldjunk
#	tar czf $(PACKAGE_NAME).tgz $(PACKAGE_NAME)
#	tar tzf $(PACKAGE_NAME).tgz

SPARSERSB=sparsersb-1.0.8
ARCHIVE=$(HOME)/src/sparsersb-archives
GPGSIGNCMD=gpg -sbav -u 1DBB555AEA359B8AAF0C6B88E0E669C8EF1258B8 

help:
	@echo "# As a user, './configure ... .; make;' shall suffice."
	@echo "# If you are developing, you might be interested in 'make' followed by either of dist, sdist, sign, tarballs, html-doc."

dist: tarballs html-doc

sdist: sign tarballs html-doc

sign: tarballs html-doc
	$(GPGSIGNCMD) $(ARCHIVE)/$(SPARSERSB).tar.gz
	gpg --verify  $(ARCHIVE)/$(SPARSERSB).tar.gz.asc
	$(GPGSIGNCMD) $(ARCHIVE)/sparsersb-html.tar.gz
	gpg --verify  $(ARCHIVE)/sparsersb-html.tar.gz.asc

tarballs:
	rm -f $(ARCHIVE)/$(SPARSERSB).tar
	hg archive -t tar  $(ARCHIVE)/$(SPARSERSB).tar  --exclude '*.hgignore' -X ".hg*"
	rm -f ../../$(SPARSERSB)
	ln -s `pwd`/.. ../../$(SPARSERSB)
	cd ../.. && tar rf $(ARCHIVE)/$(SPARSERSB).tar --add-file $(SPARSERSB)/src/configure
	cd ../.. && tar  f $(ARCHIVE)/$(SPARSERSB).tar \
	       	        --delete $(SPARSERSB)/.hg_archival.txt --delete $(SPARSERSB)/.hgtags --delete $(SPARSERSB)/.hgignore
	#tar tvf $(SPARSERSB).tar
	gzip -f  $(ARCHIVE)/$(SPARSERSB).tar
	tar tvzf $(ARCHIVE)/$(SPARSERSB).tar.gz

html-doc:
	rm -fR   ./octfiles-tmp ./sparsersb-html $(SPARSERSB)
	mkdir -p ./octfiles-tmp 
	#tar xvzf $(ARCHIVE)/$(SPARSERSB).tar.gz
	# If missing.. pkg install -forge generate_html
	$(OCTAVE) --norc --eval 'pkg prefix ./octfiles-tmp ; echo on; diary sparsersb-diary-install.log; more off; pkg install -verbose '$(ARCHIVE)/$(SPARSERSB).tar.gz'; echo off; pkg load generate_html; generate_package_html ("sparsersb", "sparsersb-html", "octave-forge")'
	tar czf $(ARCHIVE)/sparsersb-html.tar.gz sparsersb-html
	echo "You maybe want to remove dirs: ./octfiles-tmp ./sparsersb-html $(SPARSERSB)"
	ls -l   $(ARCHIVE)/sparsersb-html.tar.gz $(ARCHIVE)/$(SPARSERSB).tar.gz 
	md5sum  $(ARCHIVE)/sparsersb-html.tar.gz $(ARCHIVE)/$(SPARSERSB).tar.gz 
	cd $(ARCHIVE)/
	
doc: $(SPARSERSB_OCT)
	$(OCTAVE) --norc -q --eval 'help sparsersb' | grep -v 'is a function from the'  > ../doc/sparsersb.txt

