blob: a147c0492aef640a2f3f819497f15b9cd0c37b5b [file] [log] [blame]
#
# ${R_HOME}/src/library/Makefile
VPATH = @srcdir@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = ../..
subdir = src/library
include $(top_builddir)/Makeconf
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
DISTFILES = Makefile.in Makefile.win
SUBDIRS = profile $(R_PKGS_BASE) translations Recommended
R_EXE = $(top_builddir)/bin/R --vanilla --slave
.SUFFIXES: .inn .Rdts .Rdh
all: Makefile R
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
@BYTE_COMPILE_PACKAGES_FALSE@R_NO_BASE_COMPILE = true
## FIXME: do some of this in parallel?
## 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.
R:
@$(MKINSTALLDIRS) $(top_builddir)/library
@for pkg in profile translations base tools compiler; do \
(cd $${pkg} && $(MAKE) all) || exit 1; \
done
@if test -z "$(R_NO_BASE_COMPILE)"; then \
for pkg in base tools; do \
(cd $${pkg} && $(MAKE) mklazycomp) || exit 1; \
done; \
else \
for pkg in base tools; do \
(cd $${pkg} && $(MAKE) Rlazy) || exit 1; \
done; \
fi
@for pkg in $(R_PKGS_BASE1); do \
(cd $${pkg} && $(MAKE) all) || exit 1; \
done
@(cd base && $(MAKE) 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) Rdobjects
@$(MAKE) metadata
@$(MAKE) help-indices
@@BUILD_HTML_TRUE@$(MAKE) Rdfiles
@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)
.inn.Rdts:
@$(ECHO) "options(warn=1);tools:::.install_package_Rd_objects('$(srcdir)/$*',\
'$(top_builddir)/library/$*')" | \
R_DEFAULT_PACKAGES=NULL $(R_EXE) || exit 1
@$(ECHO) " $*"
Rdobjects:
@$(ECHO) "installing parsed Rd"
@for pkg in $(R_PKGS_BASE); do touch $${pkg}.inn; done
@$(MAKE) $(RD-TS)
.inn.Rdh:
@$(ECHO) "tools:::.writePkgIndices(\"$(srcdir)/$*\", \"$(top_builddir)/library/$*\")" | R_DEFAULT_PACKAGES=utils LC_ALL=C $(R_EXE) || exit 1
RD-H = $(R_PKGS_BASE:=.Rdh)
help-indices:
@$(ECHO) "writing package indices"
@for pkg in $(R_PKGS_BASE); do touch $${pkg}.inn; done
@$(MAKE) $(RD-H)
## 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
PDFLATEX = @PDFLATEX@
@USE_RECOMMENDED_PACKAGES_TRUE@ vignettes: vignettes-lattice
@USE_RECOMMENDED_PACKAGES_FALSE@ vignettes: vignettes-no-lattice
vignettes-lattice:
@if test -z "$(PDFLATEX)"; then \
$(ECHO) "'pdflatex' is needed to make vignettes but is missing on your system."; \
else \
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 \
fi
vignettes-no-lattice:
@mv $(srcdir)/grid/vignettes/grid.Rnw $(srcdir)/grid/vignettes/grid.Rnw-lattice
@cp $(srcdir)/grid/vignettes/grid.Rnw-nolattice $(srcdir)/grid/vignettes/grid.Rnw
@if test -z "$(PDFLATEX)"; then \
$(ECHO) "'pdflatex' is needed to make vignettes but is missing on your system."; \
else \
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 \
fi
@mv $(srcdir)/grid/vignettes/grid.Rnw-lattice $(srcdir)/grid/vignettes/grid.Rnw
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
install: installdirs
@$(ECHO) "installing packages ..."
@cp -R $(top_builddir)/library "$(DESTDIR)$(rhome)" || \
(cd $(top_builddir)/library; \
$(TAR) cf - . | (cd "$(DESTDIR)$(rhome)/library"; $(TAR) xmof -))
@$(ECHO) " building HTML index ..."
@$(ECHO) "utils:::make.packages.html(.Library, verbose=FALSE, docdir=\"$(DESTDIR)${rdocdir}\")" | \
R_DEFAULT_PACKAGES=NULL LC_ALL=C ${R_EXE} >/dev/null
installdirs:
@$(MKINSTALLDIRS) "$(DESTDIR)$(rhome)/library"
install-strip:
@$(MAKE) install
@if test -n "$(STRIP_SHARED_LIB)"; then \
$(STRIP_SHARED_LIB) "$(DESTDIR)$(rhome)/library"/*/libs/*${SHLIB_EXT}; \
fi
uninstall:
@$(ECHO) "uninstalling packages ..."
@(cd "$(DESTDIR)$(rhome)/library"; \
for p in $(R_PKGS) translations; do rm -Rf $${p}; done)
@rmdir "$(DESTDIR)$(rhome)/library" 2>/dev/null \
|| $(ECHO) " subdir $(DESTDIR)$(rhome)/library not removed"
install-tests:
@$(ECHO) "installing package tests ..."
@for pkg in $(R_PKGS_BASE); do \
if test -d "$(srcdir)/$${pkg}/tests"; then \
$(MKINSTALLDIRS) "$(DESTDIR)$(rhome)/library/$${pkg}/tests" ; \
for f in $(srcdir)/$${pkg}/tests/*; do \
$(INSTALL_DATA) $${f} "$(DESTDIR)$(rhome)/library/$${pkg}/tests"; \
done; \
fi; \
done
@USE_RECOMMENDED_PACKAGES_TRUE@ @(cd Recommended && $(MAKE) $@)
uninstall-tests:
@$(ECHO) "uninstalling package tests"
@for pkg in $(R_PKGS_BASE); do \
rm -Rf "$(DESTDIR)$(rhome)/library/$${pkg}/tests" ; \
done
@USE_RECOMMENDED_PACKAGES_TRUE@ @(cd Recommended && $(MAKE) $@)
mostlyclean: clean
clean:
@(for d in $(SUBDIRS); do rsd="$${d} $${rsd}"; done; \
for d in $${rsd}; do (cd $${d} && $(MAKE) $@); done)
-@rm -Rf .vignettes
-@rm -f stamp-* *.inn
distclean:
@(for d in $(SUBDIRS); do rsd="$${d} $${rsd}"; done; \
for d in $${rsd}; do (cd $${d} && $(MAKE) $@); done)
-@rm -f Makefile
maintainer-clean: distclean
TAGS info dvi check:
distdir: $(DISTFILES)
@for f in $(DISTFILES); do \
test -f $(distdir)/$${f} \
|| ln $(srcdir)/$${f} $(distdir)/$${f} 2>/dev/null \
|| cp -p $(srcdir)/$${f} $(distdir)/$${f}; \
done
@for d in $(SUBDIRS); do \
test -d $(distdir)/$${d} \
|| mkdir $(distdir)/$${d} \
|| exit 1; \
chmod 755 $(distdir)/$${d}; \
(cd $${d} && $(MAKE) distdir) \
|| exit 1; \
done
### ----------- 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 \
(cd $${pkg} && $(MAKE) Rsimple) || exit 1; \
done
## Lazy-loaded, not compiled
Rlazy:
@for pkg in $(R_PKGS_BASE2) methods; do \
(cd $${pkg} && $(MAKE) Rlazy) || exit 1; \
done
## Lazy-loaded, compiled
Rlazycomp:
@for pkg in $(R_PKGS_BASE2) methods; do \
(cd $${pkg} && $(MAKE) Rlazycomp) || exit 1; \
done