#-*- Makefile -*-

## Defaults for user settings, see MkRules.dist for descriptions. Rtools42
## assumes that the compiler toolchain (e.g. gcc, as, ...) is on PATH
LOCAL_SOFT ?= $(shell which `echo $(CC) | sed -e 's/ .*//g'` | sed -e 's!/bin/[^/]\+!!g')
EXT_LIBS ?= $(LOCAL_SOFT)
G_FLAG ?= -gdwarf-2
USE_ATLAS ?= NO
ATLAS_PATH ?= 
MULTI ?=
TOOL_PATH ?=
BINPREF ?= 
BINPREF64 ?= 
COMPILED_BY ?= gcc-$(shell $(CC) --version | egrep -o "([0-9]{1,}\.){2,}[0-9]{1,}")
M_ARCH ?=
AS_ARCH ?=
RC_ARCH ?=
DT_ARCH ?=
WIN ?= 64
USE_ICU ?= YES
ICU_PATH ?= 
ICU_LIBS ?= -lsicuin -lsicuuc $(EXT_LIBS)/lib/sicudt.a -lstdc++
USE_CAIRO ?= YES
CAIRO_CPPFLAGS ?= -I$(EXT_LIBS)/include/cairo
CAIRO_LIBS ?= "-lcairo -lfontconfig -lfreetype -lpng -lpixman-1 -lexpat -lharfbuzz -lbz2 -lintl -lz -liconv -lgdi32 -lmsimg32"
CURL_CA_BUNDLE ?=
USE_LIBCURL = yes
CURL_LIBS ?= -lcurl -lzstd -lrtmp -lssl -lssh2 -lgcrypt -lcrypto -lgdi32 -lz -lws2_32 -lgdi32 -lcrypt32 -lidn2 -lunistring -liconv -lgpg-error -lwldap32 -lwinmm

BUILD_HTML ?= NO
MIKTEX ?= TRUE
TEXI2ANY ?= texi2any
TEXI2DVI = env COMSPEC= texi2dvi
MAKEINFO = texi2any
EOPTS ?= -mfpmath=sse -msse2 -mstackrealign
OPENMP ?= -fopenmp
PTHREAD ?= -pthread
ISDIR ?= C:/Program Files (x86)/Inno Setup 6
QPDF ?=
HOME32 ?=
DLLs32 ?=
DLLs64 ?=
WIX3DIR ?=
WIX_PERSONAL ?= 0

## =============== end of user setting defaults  ===================


ifeq "$(MULTI)" "64"
WIN = 64
M_ARCH = -m64
AS_ARCH = --64
RC_ARCH = -F pe-x86-64
DT_ARCH = -m i386:x86-64 --as-flags --64
BINPREF64 = $(TOOL_PATH)
endif
ifeq "$(MULTI)" "32"
WIN = 32
# these are normally the defaults
M_ARCH = -m32
AS_ARCH = --32
RC_ARCH = -F pe-i386
DT_ARCH = -m i386 --as-flags --32
BINPREF = $(TOOL_PATH)
endif


ifeq "$(WIN)" "64"
R_ARCH = /x64
arch_DEFS = -DR_ARCH='"x64"'
BINPREF = $(BINPREF64)
SYMPAT = 's/^.* [BCDRT] / /p'
NM_FILTER ?= | $(SED) -e '/[.]refptr[.]/d' -e '/[.]weak[.]/d'
else
R_ARCH = /i386
arch_DEFS = -DR_ARCH='"i386"'
SYMPAT = 's/^.* [BCDRT] _/ /p'
endif

## -std=c99 would force __STRICT_ANSI__ disabling strdup etc, and also alloca
C99FLAG=-std=gnu99

## earlier Rtools needed -sjlj; the alternative is -dw2, which failed building R.
GCC4_SUFF=

BINDIR=bin$(R_ARCH)

ifdef USE_IMPLIBS
IMPDIR=lib
else
IMPDIR=$(BINDIR)
endif

AR = $(BINPREF)ar
CAT=cat
CC=$(BINPREF)gcc$(GCC4_SUFF) $(C99FLAG) $(M_ARCH)
CP=cp
# as set by make
CPP=$(CC) -E
DLL=$(CC)
DLLTOOL=$(BINPREF)dlltool
## some versions have trouble with paths, so we always need this
## even for native builds
DLLTOOLFLAGS=--as $(BINPREF)as $(DT_ARCH) -k
ECHO=echo
FC=$(BINPREF)gfortran$(GCC4_SUFF) $(M_ARCH)
FLIBS=-lgfortran -lquadmath
LINKER=$(MAIN_LD)
MAIN_LD=$(CC)
## MAKEINFO = $(TEXI2ANY)
MKDIR=mkdir
NM=$(BINPREF)nm
RANLIB = $(BINPREF)ranlib
RESCOMP=$(BINPREF)windres $(RC_ARCH)
SHLIB_LD=$(CC)
SHLIB_LDFLAGS=-shared

## If the Fortran compiler is gfortran >= 7, add
## -fno-optimize-sibling-calls to avoid recent gfortran optimizations
## that break with LAPACK/BLAS-style passing of length-1 strings
## (without hidden arguments giving their lengths).
##
## One could also use -ftail-call-workaround=2, which would be less
## restrictive, and has been added after the breakages were discovered.
## However, it is documented that this option may be removed in the future.
## https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90329

GFVER = $(shell echo "__GNUC__" | $(FC) -E -P -)
GF7OPTS =
ifneq ($(GFVER),"")
GF7OPTS = $(shell [ $(GFVER) -ge 7 ] && echo "-fno-optimize-sibling-calls")
endif

ifneq "$(LTO)" ""
AR = $(BINPREF)gcc-ar
NM = $(BINPREF)gcc-nm
RANLIB = $(BINPREF)gcc-ranlib
DLLFLAGS += $(CFLAGS)
endif

# as set by make
RM=rm -f
SED=sed
SORT=sort

.SUFFIXES:
.SUFFIXES: .c .cc .cpp .C .f .o .a .def .exp .dll .exe .d .f90 .f95 .m .S

.c.d:
	@echo "making $@ from $<"
	@$(CC) -MM $(CPPFLAGS) $($*-CPPFLAGS) $(DEFINES) $< -o $@

.c.o:
	$(CC) $(CPPFLAGS) $($*-CPPFLAGS) $(CFLAGS) $($*-CFLAGS) $(DEFINES) -c $< -o $@

.f.o:
	$(FC) $(FFLAGS) $($*-FFLAGS) -c $< -o $@

## $($*-LINKFLAGS) is used for Rgui Rterm and Rscript
%.exe:
	$(LINKER) $(LINKFLAGS) $($*-LINKFLAGS) -o $@ $^ $($*-LIBS) $(LIBS)

## It does little sense to have $($*-DLLFLAGS) here (and not in etc/Makeconf)
## $($*-DLLLIBS) is used for R and lapack
%.dll:
	@$(ECHO) EXPORTS > $*.def
	@$(NM) $^ | $(SED) -n $(SYMPAT) $(NM_FILTER) >> $*.def
	$(DLL) -shared $(DLLFLAGS) $($*-DLLFLAGS) -o $@ $*.def $^ $($*-DLLLIBS) $(DLLLIBS)
	@$(RM) $*.def

## It does no sense to have $($*-DLLTOOLFLAGS) here, and it is unused.
lib%.dll.a: %.def
	$(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --input-def $*.def --output-lib $@

%.a:
#	@$(ECHO) -------- Building $@ from $^ --------
	@$(RM) $@
	$(AR) crs $@ $^

%.o: %.rc
	$(RESCOMP) $(RESFLAGS) $($*-RESFLAGS) -i $< -o $@
