#-*- Makefile -*-
.SUFFIXES: .c .cc .cpp .C .f .o .a .def .exp .dll .exe .d

# Alternatives CYGWIN (-mno-cygwin), MINGW32 (mingw32 gcc), CROSS (Linux)
BUILD=MINGW32
# Set this to YES if you use MINGW32 and gcc-2.95.2.1 or later, or cygwin-1.1.
# HAVE_SHARED=YES

# Where does 'HTML Help Workshop' live? (unused if compiled HTML help is
# not requested. Spaces allowed.)
HHWDIR=C:/Program Files/HTML Help Workshop

# Where does Tcl/Tk live? Spaces allowed.
TCL_HOME = c:/packages/Tcl
TCL_VERSION = 83

ifeq ($(strip $(BUILD)),CYGWIN)
BINPREF=
MINGW32CFLAG=-mno-cygwin -DWIN32
MINGW32LDFLAG=-mno-cygwin
FLIBS=-lg2c
AWK=gawk
endif

ifeq ($(strip $(BUILD)),MINGW32)
BINPREF=
MINGW32CFLAG=
MINGW32LDFLAG=
FLIBS=-lg2c
AWK=gawk
endif

ifeq ($(strip $(BUILD)),CROSS)
# Next two might be i386-mingw32- or i586- depending on the cross-compiler.
BINPREF=i386-mingw32msvc-
# Set this to where the mingw32 include files are
HEADER=/packages/R-X/i386-mingw32msvc/include
MINGW32CFLAG=-isystem $(HEADER)
MINGW32LDFLAG=
FLIBS=-lg2c
AWK=awk
endif

PERL=perl
RM=rm -f
SED=sed
ECHO=echo
CP=cp
MKDIR=mkdir
CAT=cat
CC=$(BINPREF)gcc $(MINGW32CFLAG)
CXX=$(BINPREF)g++ $(MINGW32CFLAG)
F77=$(BINPREF)g77
AS=$(BINPREF)as
DLL_LDMAIN=gcc
DLL=$(BINPREF)$(DLL_LDMAIN) $(MINGW32LDFLAG)
DLLTOOL=$(BINPREF)dlltool -k --as $(AS)
LINKER=$(BINPREF)gcc $(MINGW32LDFLAG)
AR=$(BINPREF)ar
RANLIB=$(BINPREF)ranlib
NM=$(BINPREF)nm
CPP=$(CC) -E
RESCOMP=$(BINPREF)windres

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

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

.cc.o:
	$(CXX)  $(CXXFLAGS) $($*-CXXFLAGS) -c $< -o $@

.cpp.o:
	$(CXX)  $(CXXFLAGS) $($*-CXXFLAGS) -c $< -o $@

.C.o:
	$(CXX)  $(CXXFLAGS) $($*-CXXFLAGS) -c $< -o $@

%.exe:
	$(LINKER)  $(LINKFLAGS) $($*-LINKFLAGS) -o $@ $^ $($*-LIBS) $(LIBS)


%.dll %.def:
	@$(ECHO) ------- Building $@ from $^ --------
	$(ECHO) LIBRARY $* > $*.def
	$(ECHO) EXPORTS >> $*.def
	$(NM) $^ > Defs
	$(SED) -n '/^........ [BCDRT] _/s/^........ [BCDRT] _/ /p' Defs >> $*.def
	$(RM) Defs
ifeq ($(strip $(HAVE_SHARED)),YES)
	$(DLL) --shared $(DLLFLAGS) $($*-DLLFLAGS) -o $@  $*.def $^ $($*-DLLLIBS) $(DLLLIBS)
else
	$(DLL) -mdll -Wl,--base-file,$*.b $(DLLFLAGS) $($*-DLLFLAGS) -o $@  $^ $($*-DLLLIBS) $(DLLLIBS)
	$(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $@  --base-file $*.b --output-exp $*.e --def $*.def
	$(DLL) -mdll -Wl,--base-file,$*.b $(DLLFLAGS) $($*-DLLFLAGS) -o $@ $*.e $^ $($*-DLLLIBS) $(DLLLIBS)
	$(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $@ --base-file $*.b --output-exp $*.e --def $*.def
	$(DLL) -mdll $(DLLFLAGS) $($*-DLLFLAGS) -o $@  $*.e $^ $($*-DLLLIBS) $(DLLLIBS)
	$(RM)  $*.b $*.e
endif


lib%.a: %.def
	@$(ECHO) -------- Building $@ from $^ --------
	$(DLLTOOL) $(DLLTOOLFLAGS) $($*-DLLTOOLFLAGS) --dllname $*.dll --def $*.def --output-lib lib$*.a

%.a:
	@$(ECHO) -------- Building $@ from $^ --------
	$(AR) cr $@ $^
	$(RANLIB) $@


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