R_HOME = ../.. ## first time through MkRules will not exist. ifeq ($(wildcard MkRules?local),MkRules.local) include MkRules.local endif include MkRules.rules include ../../share/make/vars.mk MK = $(MAKE) --no-print-directory all: @$(MK) MkRules @if test -f ../../SVN-REVISION ; then \ cp ../../SVN-REVISION ../../SVN-REVISION.bak ; \ fi @$(MK) rbuild @$(MK) -C ../library -f Makefile.win all WIN=$(WIN) @$(MK) -C ../library -f Makefile.win docs @$(MK) NEWSdocs htmldocs docfiles @$(MK) -C ../../po -f Makefile.win bytecode: bytecode-base bytecode-recommended bytecode-base: @$(MK) MkRules @if test -f ../../SVN-REVISION ; then \ cp ../../SVN-REVISION ../../SVN-REVISION.bak ; \ fi @$(MK) rbuild @$(MK) -C ../library -f Makefile.win bytecode WIN=$(WIN) @$(MK) -C ../library -f Makefile.win docs @$(MK) NEWSdocs htmldocs docfiles @$(MK) -C ../../po -f Makefile.win rpackages: @$(MK) -C ../library -f Makefile.win all WIN=$(WIN) EXT_LIBS="$(EXT_LIBS)" @$(MK) -C ../library -f Makefile.win docs cairodevices: ifneq "$(USE_CAIRO)" "" @$(MK) -C ../library/grDevices/src/cairo -f Makefile.win all \ WIN=$(WIN) CAIRO_LIBS=$(CAIRO_LIBS) CAIRO_CPPFLAGS=$(CAIRO_CPPFLAGS) endif ifeq ($(wildcard MkRules?local),MkRules.local) MkRules: MkRules.local MkRules.rules @cat MkRules.local MkRules.rules > MkRules else MkRules: MkRules.rules @cat MkRules.rules > MkRules endif CFLAGS = -O3 -Wall -pedantic $(EOPTS) FFLAGS = -O3 $(EOPTS) $(GF7OPTS) ifdef DEBUG CFLAGS += $(G_FLAG) FFLAGS += $(G_FLAG) DLLFLAGS = else DLLFLAGS = -s endif R-DLLFLAGS = -mwindows LIBEXTRAS = -L"$(EXT_LIBS)"/lib$(R_ARCH) -lpcre2-8 -lz -lbz2 -llzma ifdef USE_ICU LIBEXTRAS += -L"$(ICU_PATH)"/lib$(R_ARCH) $(ICU_LIBS) endif dllversion-RESFLAGS = -I../include CSOURCES = \ console.c dynload.c editor.c embeddedR.c extra.c malloc.c \ opt.c pager.c preferences.c psignal.c rhome.c rt_complete.c \ rui.c run.c shext.c sys-win32.c system.c dos_wglob.c OBJS = $(CSOURCES:.c=.o) dllversion.o ifeq "$(WIN)" "32" OBJS += e_pow.o endif MAINLIBS = ../main/libmain.a ../appl/libappl.a ../nmath/libnmath.a EXTRALIBS = getline/gl.a ../extra/xdr/libxdr.a \ ../extra/intl/libintl.a ../extra/trio/libtrio.a ../extra/tzone/libtz.a \ ../extra/tre/libtre.a R-DLLLIBS = $(OPENMP) -L. $(FLIBS) -lRblas -L../../$(IMPDIR) -lRgraphapp \ -lRiconv -lcomctl32 -lwinmm -lversion $(LIBEXTRAS) .PHONY: clean veryclean rlibs fixfiles front-ends rmodules CPPFLAGS = -I../include -I. -I../extra -DHAVE_CONFIG_H -DR_DLL_BUILD extra-CPPFLAGS = -I../library/grDevices/src Rpwd.exe: front-ends/Rpwd.exe $(CP) $< $@ front-ends/Rpwd.exe: $(MK) -C front-ends Rpwd ## watch out: R.dll and Rblas.dll depend on each other. rbuild: @$(MK) fixfiles @$(MK) -C ../include -f Makefile.win @$(MK) -C ../scripts -f Makefile.win ifdef USE_IMPLIBS @$(MK) libRiconv.dll.a endif @$(MK) libRblas.dll.a @$(MK) ../../$(BINDIR)/R.dll ifdef USE_IMPLIBS @$(MK) implibs endif @$(MK) Rblas @$(MK) front-ends COPYRIGHTS rmodules fixed/fixdesc rlibs: $(MK) -C ../extra/intl CFLAGS='$(CFLAGS)' -f Makefile.win $(MK) -C ../appl CFLAGS='$(CFLAGS)' FFLAGS='$(FFLAGS)' -f Makefile.win $(MK) -C ../nmath CFLAGS='$(CFLAGS)' FFLAGS='${FFLAGS}' -f Makefile.win $(MK) -C ../main CFLAGS='$(CFLAGS)' FFLAGS='$(FFLAGS)' malloc-DEFS='$(malloc-DEFS)' -f Makefile.win $(MK) -C ./getline CFLAGS='$(CFLAGS)' @for ex in graphapp xdr tre trio tzone win_iconv ; do \ $(MK) -C ../extra/$${ex} CFLAGS='$(CFLAGS)' -f Makefile.win || exit 1; \ done rmodules: @$(MKDIR) -p ../../modules$(R_ARCH) $(MK) -C ../modules -f Makefile.win \ CFLAGS='$(CFLAGS)' FFLAGS='$(FFLAGS)' COPYRIGHTS: ../../doc/COPYRIGHTS COPYRIGHTS.win cat $^ > $@ fixfiles: Rpwd.exe @$(MKDIR) -p ../../$(BINDIR) @$(MK) -C ./fixed ifdef USE_LIBCURL @if test -f "$(CURL_PATH)/etc/curl-ca-bundle.crt"; then \ $(CP) -p "$(CURL_PATH)/etc/curl-ca-bundle.crt" ../../etc; \ fi endif fixed/fixdesc: @sh fixed/GETDESC $(R_PKGS_BASE) translations dllversion.o: ../include/Rversion.h ## Rdll.hide has decoration which 64-bit builds lack ifeq "$(WIN)" "64" R.dll: $(OBJS) $(MAINLIBS) $(EXTRALIBS) @$(ECHO) EXPORTS > R.def @$(NM) $^ | $(SED) -n $(SYMPAT) | LC_COLLATE=C $(SORT) | \ uniq $(NM_FILTER) > R0.def @$(SED) -e's/@.*//' Rdll.hide | LC_COLLATE=C $(SORT) > R1.def @LC_COLLATE=C comm -23 R0.def R1.def >> R.def $(DLL) -shared $(DLLFLAGS) $($*-DLLFLAGS) -o $@ R.def $^ $($*-DLLLIBS) $(DLLLIBS) @$(RM) R.def R0.def R1.def else R.dll: $(OBJS) $(MAINLIBS) $(EXTRALIBS) @$(ECHO) EXPORTS > R.def @$(NM) $^ | $(SED) -n $(SYMPAT) | LC_COLLATE=C $(SORT) | uniq > R0.def @LC_COLLATE=C $(SORT) Rdll.hide > R1.def @LC_COLLATE=C comm -23 R0.def R1.def >> R.def $(DLL) -shared $(DLLFLAGS) $($*-DLLFLAGS) -o $@ R.def $^ $($*-DLLLIBS) $(DLLLIBS) @$(RM) R.def R0.def R1.def endif R.exp: $(OBJS) $(MAINLIBS) $(EXTRALIBS) @$(ECHO) LIBRARY R.dll > R.exp @$(ECHO) EXPORTS >> R.exp @$(NM) $^ | $(SED) -n $(SYMPAT) | LC_COLLATE=C $(SORT) | \ uniq $(NM_FILTER) > R0.def @LC_COLLATE=C comm -23 R0.def Rdll.hide >> R.exp @$(RM) R0.def Rdll: makeMakedeps libRblas.dll.a ../../$(BINDIR)/R.dll ../../$(BINDIR)/R.dll: FORCE @$(MK) fixfiles @$(MK) -C ../include -f Makefile.win @$(MK) rlibs @$(MK) makeMakedeps @$(MK) R.dll @$(MKDIR) -p ../../$(BINDIR) $(CP) R.dll ../../$(BINDIR) FORCE: implibs: libR.dll.a libRblas.dll.a @$(MKDIR) -p ../../lib @$(CP) $^ ../../lib libR.dll.a: R.exp $(DLLTOOL) $(DLLTOOLFLAGS) $(R-DLLTOOLFLAGS) --dllname R.dll \ --input-def $< --output-lib $@ libRiconv.dll.a: unicode/iconv.def $(DLLTOOL) $(DLLTOOLFLAGS) $(R-DLLTOOLFLAGS) --dllname Riconv.dll \ --input-def $< --output-lib $@ front-ends: $(MK) -C front-ends ../extra/tre/libtre.a: $(MK) -C ../extra/tre -f Makefile.win ../extra/trio/libtrio.a: $(MK) -C ../extra/trio -f Makefile.win NEWSdocs: @$(MK) -C ../../doc -f Makefile.win htmldocs: @$(ECHO) @$(ECHO) "------ Making HTML documentation ------" @$(MK) -C ../../doc/manual -f Makefile.win html # ===== BLAS ====== Rblas: @$(MK) -C ../extra/blas -f Makefile.win FFLAGS='-O2 $(EOPTS)' Rblas-clean: @$(MK) -C ../extra/blas -f Makefile.win clean libRblas.dll.a: ../extra/blas/Rblas.def @$(DLLTOOL) $(DLLTOOLFLAGS) --dllname Rblas.dll \ --input-def $< --output-lib $@ # ===== cleaning ====== ## used in installer/Makefile PKGDIR = ../library pkgclean-%: @(cd $(PKGDIR)/$*/src; rm -f *.d *.o *.dll *_res.rc Makedeps) EXTRA_DIRS = blas graphapp intl tre trio tzone xdr win_iconv cleaninstaller: -$(MAKE) -C installer clean # The installer has to be cleaned first, because cleaning it depends on Rscript # clean0 and cleanwin0 exclude the installer # clean, distclean and cleanwin clean also the installer clean0: cleanwin0 @$(MAKE) -C ../library -f Makefile.win clean $(RM) -f ../*/*.o ../*/*.a *.a ../*/*.d ../*/Makedeps fixed/fixdesc @for d in $(EXTRA_DIRS); do \ $(MAKE) -C ../extra/$${d} -f Makefile.win clean; \ done -$(MK) -C ../../doc/manual -f Makefile.win distclean -$(MK) -C ../nmath/standalone -f Makefile.win distclean -$(MK) -C ../modules -f Makefile.win clean -$(MK) -C ../../tests -f Makefile.win clean -$(MK) -C ../library/Recommended -f Makefile.win clean $(RM) -f ../library/methods/all.R ../../etc/curl-ca-bundle.crt clean: cleaninstaller clean0 distcleaninstaller: -$(MAKE) -C installer distclean distclean: cleaninstaller distcleaninstaller clean0 @for d in $(EXTRA_DIRS); do \ $(MAKE) -C ../extra/$${d} -f Makefile.win distclean; \ done @$(MAKE) -C ../../tests -f Makefile.win distclean $(RM) -R ../../bin ../../include ../../lib ../../library ../../modules $(RM) ../include/config.h ../include/iconv.h ../include/psignal.h \ ../include/Rconfig.h ../include/Rversion.h ../include/Rmath.h \ ../include/libintl.h ../include/trioremap.h $(RM) ../library/*/src/*.o ../library/*/src/*.a $(RM) ../library/*/src/*.d ../library/*/src/Makedeps $(RM) ../library/*/src/*.dll $(RM) ../library/*/src/windows/*.o ../library/*/src/windows/*.a $(RM) ../library/*/src/windows/*.d ../library/*/src/windows/Makedeps $(RM) ../library/*/src/windows/*.dll $(RM) -R ../library/*/check $(RM) ../library/*/tests/*.ps ../library/*/tests/*.pdf $(RM) ../library/tcltk/src/tcl$(TCL_VERSION).def \ ../library/tcltk//src/tk$(TCL_VERSION).def $(RM) R.exp COPYRIGHTS $(RM) ../../doc/html/index.html \ ../../doc/html/packages.html ../../doc/html/rwin.html \ ../../doc/html/rw-FAQ.html ../../doc/html/NEWS.html \ ../../doc/NEWS.rds ../../doc/NEWS.3.rds ../../doc/NEWS.2.rds \ ../../doc/NEWS ../../doc/NEWS.pdf \ ../../doc/CHANGES.rds ../../doc/html/CHANGES.html $(RM) ../../etc/Makeconf ../../etc/Rconsole ../../etc/Rdevga \ ../../etc/Rprofile.site ../../etc/rgb.txt ../../etc/Rcmd_environ \ ../../tests/*.Rout ../../tests/*.Rout.fail $(RM) -R ../../etc/i386 ../../etc/x64 # do both sub-archs $(RM) -R ../../share/zoneinfo $(MAKE) -C fixed distclean $(MAKE) -C ../include -f Makefile.win distclean @for pkg in $(R_PKGS_BASE) translations; do \ $(RM) ../library/$${pkg}/DESCRIPTION; \ done $(RM) ../../SVN-REVISION.bak $(RM) ../../doc/manual/rw-FAQ $(MAKE) -C cran clean $(RM) -R ../library/.vignettes # it gets left behind if there is an error $(RM) -R ../../share/locale # relic of earlier versions $(RM) MkRules Rpwd.exe # do this last of all veryclean: distclean $(RM) ../../doc/FAQ ../../doc/RESOURCES ../../doc/NEWS.rds \ ../../doc/html/resources.html ../../doc/html/NEWS.html \ ../../SVN-REVISION # not in SVN sources cleanwin0: MkRules fixfiles $(RM) *.o *.dll *.a *~ \#*\# .RData .Rhistory Makedeps *.d $(MAKE) -C ../extra/graphapp -f Makefile.win clean $(MAKE) -C fixed clean $(MAKE) -C getline clean $(MAKE) -C front-ends clean $(MAKE) -C ../library/grDevices/src/cairo -f Makefile.win clean WIN=$(WIN) cleanwin: cleaninstaller cleanwin0 # ===== testing ====== check check-devel check-all check-recommended: @$(MK) -C ../../tests -f Makefile.win $@ # ===== documentation ====== pdfdocs manuals: @$(MK) -C ../../doc/manual -f Makefile.win clean @$(MK) -C ../../doc/manual -f Makefile.win R_EXE = ../../$(BINDIR)/Rterm.exe --vanilla --no-echo ## must come after recommended vignettes: @$(MK) -C ../library -f Makefile.win vignettes ## ===================== Maintainer targets ======================== RVER-PAT = $(shell version=`cut -d' ' -f1 ../../VERSION | sed -n 1p`; if test "`cut -f2 -d' ' ../../VERSION`" = "Patched"; then version=`echo $${version} | sed 's/\.[0-9]*$$//'`; echo "$${version}-patched"; else echo "$${version}"; fi) CRANREC = cran.r-project.org::CRAN/src/contrib/$(RVER-PAT)/Recommended ## Use -c here to avoid re-downloading the same versions of files ## A recent rsync seems to need -p rsync-recommended: @(cd ../library; \ rsync --timeout=60 -rcvpC --delete \ --exclude=Makefile.in --exclude=Makefile.win --exclude=.cvsignore \ --include=*.tar.gz --exclude=*.tgz --exclude=*.ts \ --exclude=".svn" $(CRANREC) . ) @$(RM) ../library/Recommended/*.tgz @(cd ../library/Recommended; for i in ${R_PKGS_RECOMMENDED}; do cp -p $${i}*.tar.gz $${i}.tgz ; done) link-recommended: @$(RM) ../library/Recommended/*.tgz @(cd ../library/Recommended; for i in ${R_PKGS_RECOMMENDED} ; do cp -p $${i}*.tar.gz $${i}.tgz ; done) recommended: @$(ECHO) "--- Making recommended packages" @$(MK) -C ../library/Recommended -f Makefile.win ## Note that R_COMPILER_SUPPRESS_ALL is now on by default bytecode-recommended: @$(ECHO) "--- Making and compiling recommended packages" @rm ../library/Recommended/*.ts @R_COMPILE_PKGS=1 R_COMPILER_SUPPRESS_ALL=1 \ $(MK) -C ../library/Recommended -f Makefile.win RVER-MAJOR-MINOR = $(shell echo `cut -d'.' -f1,2 ../../VERSION`) CRANEXT = cran.r-project.org::CRAN/bin/windows/extsoft/$(RVER-MAJOR-MINOR)/ rsync-extsoft: ($(MKDIR) -p ../../extsoft; \ cd ../../extsoft; \ rsync --timeout=60 -rcvp --delete $(CRANEXT) . ) docfiles: @$(MK) -C ../../doc/manual -f Makefile.win FAQ EXTRA_PKGS= rinstaller: @$(MAKE) -C installer EXTRA_PKGS='$(EXTRA_PKGS)' @$(MAKE) -C installer clean crandir: ifeq "$(WIN)" "64" $(MAKE) -C cran all endif distribution: @$(MK) all @$(MK) cairodevices @$(MK) recommended @$(MK) vignettes @$(MK) manuals @$(MK) rinstaller @$(MK) crandir @$(RM) -f ../../SVN-REVISION.bak ## Builds what is needed in a 32-bit build to copy to 64/32-bit installer 32-bit: @$(MK) all @$(MK) cairodevices @$(MK) recommended ## ============= End of maintainer targets ======================== # Dependencies: malloc.c doesn't have any DEPS = $(CSOURCES:.c=.d) makeMakedeps: $(DEPS) @$(RM) Makedeps @cat $(DEPS) >> Makedeps -include Makedeps