blob: 6ee11524281eeba2a577cf6f7b1951a069556d20 [file] [log] [blame]
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 "$(CAIRO_HOME)" ""
@$(MK) -C ../library/grDevices/src/cairo -f Makefile.win all \
WIN=$(WIN) CAIRO_HOME=$(CAIRO_HOME)
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)
ifdef DEBUG
CFLAGS += $(G_FLAG)
FFLAGS += $(G_FLAG)
DLLFLAGS =
else
DLLFLAGS = -s
endif
R-DLLFLAGS = -mwindows
LIBEXTRAS = -L"$(EXT_LIBS)"/lib$(R_ARCH) -lpcre -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='$(FFLAGS)'
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
clean: cleanwin
@$(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
distclean: clean
@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 ../../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
-$(MAKE) -C installer 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
cleanwin: 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)
-$(MAKE) -C installer clean
# ===== 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 --slave
## 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