#-*- Makefile -*-
#
# ${R_HOME}/src/library/Makefile

srcdir = .
top_srcdir = ../..
top_builddir = ../..

include ../gnuwin32/MkRules
include ../../share/make/vars.mk

ECHO = echo
MKINSTALLDIRS = mkdir -p
INSTALL_DATA = cp
RVER = $(shell cut -d' ' -f1 ../../VERSION | sed -n 1p)

R_EXE = $(top_builddir)/$(BINDIR)/Rterm --vanilla --slave

.SUFFIXES: .Rdts

all: R

## beware there is a bootstrapping problem here: tools uses tools to
## dump its namespace. So it works initially, but not to update.
## When base is made we need to use 'date' to set the timestamp in
## its DESCRIPTION, so we remake it before dumping the DESCRIPTION files.

## VERSION is needed to use mkdesc2 in packages base and tools.
## R_ARCH is needed for etc$(R_ARCH)/Makecomf in */src/Makefile.win
R:
	@$(MKINSTALLDIRS) $(top_builddir)/library
	@for pkg in base tools compiler; do \
	  $(MAKE) -C $${pkg} -f Makefile.win R_ARCH=$(R_ARCH) VERSION=$(RVER) \
	    all install-tests || exit 1; \
	done
	@if test -z "$(R_NO_BASE_COMPILE)"; then \
	  for pkg in base tools; do \
	    $(MAKE) -C $${pkg} -f Makefile.win mklazycomp || exit 1; \
	  done; \
	else \
	  for pkg in base tools; do \
	    $(MAKE) -C $${pkg} -f Makefile.win Rlazy || exit 1; \
	  done; \
	fi
	@for pkg in $(R_PKGS_BASE1); do \
	  $(MAKE) -C $${pkg} -f Makefile.win \
             R_ARCH=$(R_ARCH) EXT_LIBS="$(EXT_LIBS)" \
	     all install-tests || exit 1; \
	done
	@$(MAKE) -C translations -f Makefile.win
	@(cd base && $(MAKE) -f Makefile.win mkdesc)
	@$(ECHO) "tools:::.vinstall_package_descriptions_as_RDS(\"$(top_builddir)/library\", \"$(R_PKGS_BASE)\")" | \
	  R_DEFAULT_PACKAGES=tools LC_ALL=C $(R_EXE) > /dev/null
	@$(ECHO) "installing parsed NAMESPACE files"
	@rm -f $(top_builddir)/library/tools/Meta/nsInfo.rds
	@$(ECHO) "tools:::.vinstall_package_namespaces_as_RDS(\"$(top_builddir)/library\", \"$(R_PKGS_BASE)\")" | \
	  R_DEFAULT_PACKAGES=tools LC_ALL=C $(R_EXE) > /dev/null

## do Rdobjects before metadata before help indices
docs:
	@$(MAKE) -f Makefile.win Rdobjects
	@$(MAKE) -f Makefile.win metadata
	@$(MAKE) -f Makefile.win help-indices
ifeq ($(strip $(BUILD_HTML)),YES)
	@$(MAKE) -f Makefile.win Rdfiles
endif
	@touch stamp-docs

# fix the order to make best use of parallel builds
RD-TS = base.Rdts stats.Rdts utils.Rdts methods.Rdts graphics.Rdts grDevices.Rdts datasets.Rdts grid.Rdts tools.Rdts tcltk.Rdts splines.Rdts stats4.Rdts compiler.Rdts parallel.Rdts
# RD-TS = $(R_PKGS_BASE:=.Rdts)
Rd-ts: $(RD-TS)

%.Rdts:
	@$(ECHO) "options(warn=1);tools:::.install_package_Rd_objects(\"$(srcdir)/$*\", \"$(top_builddir)/library/$*\")" | R_DEFAULT_PACKAGES=NULL $(R_EXE) || exit 1
	@$(ECHO) -n " $*$(ECHO_C)"

Rdobjects:
	@$(ECHO) -n "installing parsed Rd:"
	@$(MAKE) -f Makefile.win Rd-ts
	@$(ECHO)

help-indices:
	@$(ECHO) -n "writing indices for package:"
	@for pkg in $(R_PKGS_BASE); do \
	  $(ECHO) -n " $${pkg}" ; \
	  $(ECHO) "options(warn=1);tools:::.writePkgIndices(\"$${pkg}\", \"$(top_builddir)/library/$${pkg}\")" | R_DEFAULT_PACKAGES=utils LC_ALL=C $(R_EXE) || exit 1; \
	done
	@$(ECHO)

## FIXME: do this in parallel (but avoid interleaving output)
Rdfiles:
	@$(ECHO) "building all R object docs"
	@for pkg in $(R_PKGS_BASE); do \
	  $(ECHO) "tools:::.convertRdfiles(\"$(srcdir)/$${pkg}\", \"$(top_builddir)/library/$${pkg}\", silent = TRUE)" | LC_ALL=C $(R_EXE) || exit 1; \
	done

vignettes:
	@for pkg in grid parallel utils; do \
	    $(ECHO) "building/updating vignettes for package '$${pkg}' ..."; \
	    ($(ECHO) "tools:::.install_package_vignettes(\"$(srcdir)/$${pkg}\", \"$(top_builddir)/library/$${pkg}\")") | \
	        R_DEFAULT_PACKAGES="utils,tools" LC_ALL=C \
		  R_LIBS_USER= R_LIBS_SITE= \
	          $(R_EXE) > /dev/null; \
	done
	@rm -Rf .vignettes

metadata:
	@$(ECHO) "building/updating package metadata ..."
	@$(ECHO) "tools:::.vinstall_package_indices(\"$(srcdir)\", \"$(top_builddir)/library\", \"$(R_PKGS_BASE)\")" | \
	  R_DEFAULT_PACKAGES=tools LC_ALL=C $(R_EXE) > /dev/null

clean:
	@for pkg in $(R_PKGS_BASE); do \
	  $(MAKE) --no-print-directory -C $${pkg} \
	    -f Makefile.win R_ARCH=$(R_ARCH) clean-win; \
	done
	-@rm -f stamp-*


### ----------- targets for R-core use ----------
### These are intended to be run on an already-built R, possibly after
### editing the code in a standard package.
### Targets of the same name can be run in individual package directories.
### These do not change datasets (no R code)
### R_PKGS_BASE2 is all except datasets and methods.

### They are not currently safe for a parallel make.

## methods needs to be dumped, so is omitted here.
Rsimple:
	@for pkg in $(R_PKGS_BASE2); do \
	  $(MAKE) -C $${pkg} -f Makefile.win Rsimple || exit 1; \
	done

## Lazy-loaded, not compiled
Rlazy:
	@for pkg in $(R_PKGS_BASE2) methods; do \
	  $(MAKE) -C $${pkg} -f Makefile.win Rlazy || exit 1; \
	done

## Lazy-loaded, compiled
Rlazycomp:
	@for pkg in $(R_PKGS_BASE2) methods; do \
	  $(MAKE) -C $${pkg} -f Makefile.win Rlazycomp || exit 1; \
	done

