| # Makefile for R for Windows Installers | |
| include ../MkRules | |
| ## Formerly in MkRules | |
| FIND = find | |
| R_HOME = ../../.. | |
| include $(R_HOME)/share/make/vars.mk | |
| ## use this to install other packages from main library | |
| EXTRA_PKGS = | |
| ## Default display mode, 0=MDI, 1=SDI | |
| MDISDI = 0 | |
| ## Default help style, 0=plain text, 1=HTML | |
| HelpStyle = 1 | |
| ## Used to set Registry entries | |
| Producer = R-core | |
| ifeq "$(WIN)" "64" | |
| ifneq ($(strip $(HOME32)),) | |
| SUFF = win | |
| else | |
| SUFF = win64 | |
| endif | |
| else | |
| SUFF = win32 | |
| endif | |
| FULLVERSION=`cat ../../../VERSION` | |
| RPREFIX = $(shell ../../../bin$(R_ARCH)/Rscript ../fixed/rwver.R) | |
| LIBFILES = $(foreach i, $(R_PKGS_BASE) $(R_PKGS_RECOMMENDED) translations $(EXTRA_PKGS), $(R_HOME)/library/$i) | |
| INFO_FILES = COPYING README | |
| DOC_INFO_FILES = AUTHORS COPYING FAQ RESOURCES THANKS CHANGES \ | |
| NEWS NEWS.0 NEWS.1 NEWS.2 | |
| GW_INFO_FILES = COPYRIGHTS README.Rterm ../../doc/manual/rw-FAQ | |
| ETC_FILES = Rprofile.site Rconsole Rdevga rgb.txt repositories Rcmd_environ | |
| # we don't want share/{Makefile.in,java,sh} installed | |
| SHARE_DIRS = R dictionaries encodings licenses make Rd texmf zoneinfo | |
| all: $(RPREFIX)-win.exe | |
| msi: $(RPREFIX)-$(SUFF).msi | |
| imagedir: | |
| $(RM) -R $(RPREFIX) | |
| $(MKDIR) $(RPREFIX) | |
| $(CP) -pR $(R_HOME)/bin $(R_HOME)/modules $(RPREFIX) | |
| # copy base and recommended packages | |
| $(MKDIR) -p $(RPREFIX)/library | |
| $(CP) -pR $(LIBFILES) $(RPREFIX)/library | |
| $(RM) $(RPREFIX)/library/*/MD5 | |
| $(RM) $(RPREFIX)/*/Makefile.in | |
| $(MKDIR) -p $(RPREFIX)/etc$(R_ARCH) | |
| $(CP) -p $(foreach i,$(ETC_FILES),$(R_HOME)/etc/$i) $(RPREFIX)/etc | |
| if test -f "$(R_HOME)/etc/curl-ca-bundle.crt"; then \ | |
| $(CP) -p "$(R_HOME)/etc/curl-ca-bundle.crt" $(RPREFIX)/etc; \ | |
| fi | |
| $(CP) -p $(R_HOME)/etc$(R_ARCH)/Makeconf $(RPREFIX)/etc$(R_ARCH) | |
| # copy info and documentation files | |
| $(MKDIR) -p $(RPREFIX)/doc | |
| $(CP) -p $(R_HOME)/doc/CRAN_mirrors.csv $(RPREFIX)/doc | |
| $(CP) -p $(R_HOME)/doc/BioC_mirrors.csv $(RPREFIX)/doc | |
| $(MKDIR) -p $(RPREFIX)/doc/manual/images | |
| $(CP) -pR $(R_HOME)/doc/html $(RPREFIX)/doc | |
| $(CP) -p $(R_HOME)/doc/manual/*.html $(R_HOME)/doc/manual/*.pdf \ | |
| $(RPREFIX)/doc/manual | |
| $(CP) -p $(R_HOME)/doc/manual/images/*.png $(RPREFIX)/doc/manual/images | |
| # html copies of these are in doc/manual, and we don't have FAQ PDF on menus | |
| $(RM) $(RPREFIX)/doc/manual/R-FAQ.pdf | |
| $(RM) $(RPREFIX)/doc/html/R-admin.html | |
| $(RM) $(RPREFIX)/doc/html/index-default.html | |
| # | |
| $(CP) -p $(foreach i,$(INFO_FILES),$(R_HOME)/$i) $(RPREFIX) | |
| $(CP) -p $(foreach i,$(DOC_INFO_FILES),$(R_HOME)/doc/$i) $(RPREFIX)/doc | |
| $(CP) -p $(foreach i,$(GW_INFO_FILES),../$i) $(RPREFIX)/doc | |
| $(CP) -p $(RPREFIX)/doc/CHANGES $(RPREFIX) | |
| $(SED) -e s/@RWVER@/$(RPREFIX)/g \ | |
| -e s/@RVER@/$(RVER)/g \ | |
| -e "s/@FULLVERSION@/$(FULLVERSION)/g" ../README > $(RPREFIX)/README.$(RPREFIX) | |
| $(SED) -e 3,5d ../README.packages > $(RPREFIX)/doc/README.packages | |
| # convert docs and batch files to CRLF: might already be on Windows, though. | |
| zip -q dosfiles.zip $(RPREFIX)/* $(RPREFIX)/doc/* | |
| unzip -qao dosfiles.zip | |
| $(RM) dosfiles.zip | |
| $(CP) -p $(R_HOME)/doc/NEWS.pdf $(RPREFIX)/doc | |
| $(CP) -p $(R_HOME)/doc/NEWS.rds $(R_HOME)/doc/NEWS.2.rds $(R_HOME)/doc/NEWS.3.rds $(R_HOME)/doc/CHANGES.rds $(RPREFIX)/doc | |
| # | |
| # files to make source packages | |
| $(MKDIR) -p $(RPREFIX)/share \ | |
| $(RPREFIX)/src/library $(RPREFIX)/src/gnuwin32 | |
| $(CP) $(R_HOME)/doc/html/logo.jpg $(R_HOME)/doc/html/Rlogo.svg $(RPREFIX)/doc/html | |
| $(CP) $(R_HOME)/doc/KEYWORDS* $(RPREFIX)/doc | |
| $(CP) -pR $(R_HOME)/include $(RPREFIX) | |
| $(CP) -pR $(foreach i,$(SHARE_DIRS),$(R_HOME)/share/$i) $(RPREFIX)/share | |
| # This is odd -- better to clean the copy | |
| (cd ..; $(MAKE) --no-print-directory PKGDIR=. pkgclean-windlgs) | |
| $(CP) -pR ../windlgs $(RPREFIX)/src/library | |
| ifeq "$(WIN)" "64" | |
| # Edit Makeconf | |
| $(SED) -i -e 's!# INSTALLER-BUILD:!!' $(RPREFIX)/etc/x64/Makeconf | |
| # Edit Rcmd_environ | |
| $(SED) -i -e 's!# INSTALLER-BUILD:!!' $(RPREFIX)/etc/Rcmd_environ | |
| # Edit base package profile | |
| $(SED) -i -e 's!# INSTALLER-BUILD:!!' $(RPREFIX)/library/base/R/Rprofile | |
| endif | |
| # test dir | |
| mkdir $(RPREFIX)/tests | |
| $(MAKE) --no-print-directory -C ../../../tests -f Makefile.win \ | |
| INST_TO=../src/gnuwin32/installer/$(RPREFIX)/tests install-tests | |
| # | |
| $(FIND) $(RPREFIX) -name .svn -prune -exec rm -Rf \{\} \; | |
| $(FIND) $(RPREFIX) -name \*~ -delete | |
| md5sums: | |
| @echo "adding MD5 checksums" | |
| @(cd $(RPREFIX); echo "tools:::.installMD5sums(\".\")" | \ | |
| R_DEFAULT_PACKAGES=NULL LC_COLLATE=C R_OSTYPE=windows \ | |
| ../../../../$(BINDIR)/Rterm.exe --vanilla --no-echo) | |
| PDF_FILES = $(wildcard $(RPREFIX)/library/*/doc/*.pdf) | |
| fixups: | |
| echo "make.packages.html(.Library,temp=FALSE,verbose=FALSE)" | $(RPREFIX)/$(BINDIR)/Rterm.exe --vanilla --no-echo LC_COLLATE=C | |
| $(CP) -pRf $(R_HOME)/Tcl $(RPREFIX) | |
| $(RM) $(RPREFIX)/Tcl*/lib/*.lib | |
| ifneq ($(strip $(QPDF)),) | |
| @for f in $(PDF_FILES); do \ | |
| "$(QPDF)/bin/qpdf" $${f} tmp.pdf; \ | |
| mv tmp.pdf $${f}; \ | |
| done | |
| endif | |
| 32bit: | |
| ifeq "$(WIN)" "64" | |
| ifneq ($(strip $(HOME32)),) | |
| @echo "------------ including 32-bit files" | |
| (cd "$(HOME32)"; zip -qr9X 32bit */i386 library/*/libs/i386 bin/R.exe bin/Rscript.exe) | |
| unzip -qo "$(HOME32)/32bit" -d $(RPREFIX) | |
| rm "$(HOME32)/32bit.zip" | |
| mkdir -p $(RPREFIX)/Tcl | |
| $(CP) -pRf "$(HOME32)/Tcl/bin" "$(HOME32)/Tcl/lib" $(RPREFIX)/Tcl | |
| for f in $(R_PKGS_RECOMMENDED); do \ | |
| sed -e 's/Archs: x64/Archs: i386, x64/' \ | |
| ../../../library/$${f}/DESCRIPTION \ | |
| > $(RPREFIX)/library/$${f}/DESCRIPTION; \ | |
| done | |
| # Edit Makeconf file to default Rtools location | |
| $(SED) -e 's!^BINPREF [?]= .*!BINPREF ?= "$$(RTOOLS40_ROOT)/mingw32/bin/"!' \ | |
| $(HOME32)/etc/i386/Makeconf > $(RPREFIX)/etc/i386/Makeconf | |
| else | |
| @echo "------------ not including 32-bit files" | |
| endif | |
| endif | |
| extras: | |
| for f in $(DLLs32); do \ | |
| cp "$$f" $(RPREFIX)/bin/i386; \ | |
| done | |
| for f in $(DLLs64); do \ | |
| cp "$$f" $(RPREFIX)/bin/x64; \ | |
| done | |
| ## for Inno Setup installer | |
| R.iss: JRins.R header1.iss types3264.iss types32.iss types64.iss code.iss \ | |
| reg.iss reg3264.iss reg64.iss \ | |
| CustomMsg.iss imagedir fixups 32bit extras md5sums \ | |
| ../../../VERSION ../../../SVN-REVISION | |
| ../../../bin$(R_ARCH)/Rscript JRins.R \ | |
| $(RPREFIX) $(RPREFIX) $(MDISDI) \ | |
| $(HelpStyle) $(Producer) "$(ISDIR)" | |
| $(RPREFIX)-win.exe: R.iss | |
| "$(ISDIR)/iscc" R.iss > $(RPREFIX).log 2>&1 | |
| ## for MSI installer | |
| uuidgen.exe: uuidgen.o | |
| $(CC) -o $@ $< -lole32 | |
| # currently use about 3500: allow for EXTRA_PKGS | |
| uuids: uuidgen.exe | |
| ./uuidgen 10000 > $@ | |
| files.wxs: imagedir fixups 32bit extras md5sums | |
| "$(WIX3DIR)/heat" dir $(RPREFIX) -sw5150 -nologo -o $@ | |
| R.wxs: WIXins.R uuids files.wxs | |
| ../../../bin$(R_ARCH)/Rscript WIXins.R $(RPREFIX) $(RPREFIX) $(WIX_PERSONAL) || (rm -f $@;exit 1) | |
| $(RPREFIX)-$(SUFF).msi: R.wxs License.rtf | |
| "$(WIX3DIR)/candle" R.wxs > $(RPREFIX).log 2>&1 | |
| "$(WIX3DIR)/light" -out $@ R.wixobj -dcl:high \ | |
| -ext WixUIExtension -sw1076 -sval -spdb >> $(RPREFIX).log 2>&1 | |
| ## too often this fails to empty directories. | |
| clean: | |
| rm -Rf R.iss *.log R.wxs files.wxs R.wixobj uuidgen.o uuidgen.exe uuids | |
| -rm -Rf $(RPREFIX) | |
| distclean: clean | |
| rm -f R*-win*.exe R*-win*.msi | |
| myR: | |
| echo "make.packages.html(.Library, verbose=FALSE)" | "$(IMAGEDIR)/$(BINDIR)/Rterm.exe" --vanilla --no-echo LC_COLLATE=C | |
| @echo "adding MD5 checksums" | |
| @(cd "$(IMAGEDIR)"; echo "tools:::.installMD5sums(\".\")" | \ | |
| R_DEFAULT_PACKAGES=NULL LC_COLLATE=C R_OSTYPE=windows \ | |
| "$(IMAGEDIR)/$(BINDIR)/Rterm.exe" --vanilla --no-echo) | |
| ../../../bin$(R_ARCH)/Rscript JRins.R \ | |
| $(RPREFIX) "$(IMAGEDIR)" $(MDISDI) \ | |
| $(HelpStyle) $(Producer) "$(ISDIR)" | |
| "$(ISDIR)/iscc" R.iss > myR.log |