# Override the R binary with
#  make R=path-to-R-binary
R=R

all: TAGS make-man-pages.timestamp ../NAMESPACE

.PHONY : all clean clean_roxygen clean_homebrew models_doc \
	check_Rd_pdf clean_Rd_pdf roxygen homebrew
	
roxygen: ../NAMESPACE.roxygen
homebrew: ../NAMESPACE.ours

make-man-pages.timestamp: $(wildcard *.R) ../man/models.Rd
	./make-man-pages
	touch $@

clean :
	rm -f make-man-pages.timestamp
	rm -f ../NAMESPACE.roxygen
	rm -f ../NAMESPACE.ours
	$(MAKE) clean_Rd_pdf

TAGS : $(wildcard *.R)
	$(R) --vanilla -e 'library(utils); rtags(path=".", ofile="TAGS")'


## need option keep.source otherwise there is no attribute 'source'!!!!
../man/models.Rd: inlaEnv.R models.R models-generate.R utils.R version.R
	{ \
	  echo 'options(keep.source=TRUE)';\
	  echo 'source("inlaEnv.R")';\
	  echo 'source("models.R")';\
	  echo 'source("models-generate.R")';\
	  echo 'source("utils.R")';\
	  echo 'source("version.R")';\
	  echo 'inla.models.generate.Rd("../man/models.Rd")';\
	} | $(R) --vanilla

# Experimental method, not currently used
models_doc: ../R/models_documentation.R
../R/models_documentation.R: inlaEnv.R models.R models-generate.R utils.R version.R
	{ \
	  echo 'options(keep.source=TRUE)';\
	  echo 'source("inlaEnv.R")';\
	  echo 'source("models.R")';\
	  echo 'source("models-generate.R")';\
	  echo 'source("utils.R")';\
	  echo 'source("version.R")';\
	  echo 'inla.models.generate.roxygen("../R/models_documentation.R")';\
	} | $(R) --vanilla
	rm ../NAMESPACE
	{ \
	  echo 'devtools::document()';\
	} | $(R) --vanilla


## creating roxygen documentation also create the NAMESPACE file,
## which is no longer part of the repo, but created by concatenating
##   - NAMESPACE.init  (our initial setup)
##   - NAMESPACE.roxygen created by roxygen2
##   - NAMESPACE.ours created by our (old) system

../NAMESPACE.roxygen: $(wildcard *.R)
	-test -f ../NAMESPACE && mv -f ../NAMESPACE ../NAMESPACE.backup
	echo 'devtools::document()' | $(R) --vanilla 
	test -f ../NAMESPACE && mv -f ../NAMESPACE ../NAMESPACE.roxygen

define AWK_PROGRAM
{ \
 nf = split($$0, a, /!/) ;\
 if (nf == 2) print "S3method(" a[1] ", "  a[2] ")" ;\
 if (nf == 1) print "export(" a[1] ")" \
}
endef

../NAMESPACE.ours: $(wildcard *.R) make-man-pages.timestamp
	rm -f ../NAMESPACE.ours
	{ \
	  echo "# *** NAMESPACE contributions from our old system";\
	  echo "# The functions to be exported are defined in the R-code with";\
	  echo "# lines as:";\
	  echo "# ## Export: func1";\
	  echo "# ## Export: func1 func2";\
	  echo "# ## Export: method1!class";\
	  echo "# etc...";\
	} > ../NAMESPACE.ours
	LC_ALL=C ls -1 *.R \
	    | while read f; do \
	        egrep "^## *Export *:" $$f \
		    | while read ff; do \
	                echo $$ff \
			    | awk -F: '{print $$2}' \
			    | awk '{for(i=1;i<=NF;i++) print $$i}' \
	                    | awk '${AWK_PROGRAM}' ;\
	              done ;\
	      done \
	>> ../NAMESPACE.ours

../NAMESPACE: ../NAMESPACE.init ../NAMESPACE.roxygen ../NAMESPACE.ours
	{ \
		echo "## Generated by R/Makefile and R/make-make-pages; do not edit by hand" ;\
		for f in NAMESPACE.init NAMESPACE.ours NAMESPACE.roxygen; do \
			echo "" ;\
			echo "" ;\
			echo "## contributions from $$f" ;\
			cat ../$$f ;\
		done \
	} > ../NAMESPACE



clean_roxygen:
	rm -f ../NAMESPACE.roxygen
	grep -l "^% Generated by roxygen2" ../man/*.Rd \
	| while read f; do \
			rm $$f ;\
		done

clean_homebrew:
	rm -f ../NAMESPACE.ours
	grep -l "^%% WARNING! DO NOT EDIT!" ../man/*.Rd \
	| while read f; do \
			rm $$f ;\
		done
	grep -l "^%% DO NOT EDIT!" ../man/*.Rd \
	| while read f; do \
			rm $$f ;\
		done


# Generate the pdf files for the manual one by one to
# get easier information about location of latex issues 
check_Rd_pdf: $(patsubst %.Rd,%.pdf,$(wildcard ../man/*.Rd))

../man/%.pdf: ../man/%.Rd
	$(R) --vanilla CMD Rd2pdf --force --no-preview --output=$@ $<
	
clean_Rd_pdf:
	rm -f ../man/*.pdf
