#-*- Makefile -*-
include ../gnuwin32/MkRules
R_HOME = ../..

GIT = `if [ -d "$(top_builddir)/.git" ]; then echo "git"; fi`

VER = $(shell sed -e 's/\([^ ]*\).*/\1/' ../../VERSION)

## keep these in step with ./Makefile.in
SRC_HEADERS = R.h S.h Rdefines.h Rembedded.h Rinternals.h
## this deliberately does not include Rinterfaces.h, which is Unix-only
OBJ_HEADERS = Rconfig.h Rmath.h Rversion.h
GW32_HEADERS = iconv.h psignal.h

## This omits GetX11Image.h QuartzDevice.h eventloop.h
R_EXT_HEADERS = \
  Altrep.h Applic.h Arith.h BLAS.h Boolean.h Callbacks.h Complex.h \
  Connections.h Constants.h Error.h \
  GraphicsDevice.h GraphicsEngine.h Itermacros.h \
  Lapack.h Linpack.h MathThreads.h Memory.h \
  Parse.h Print.h PrtUtil.h R-ftp-http.h RS.h Rallocators.h Random.h \
  Rdynload.h Riconv.h RStartup.h Utils.h libextern.h \
  stats_package.h stats_stubs.h Visibility.h

all: fixh config.h trioremap.h
	@echo 'installing C headers'
	@mkdir -p $(R_HOME)/include/R_ext
	@cp -p $(SRC_HEADERS) $(OBJ_HEADERS) iconv.h $(R_HOME)/include
	@(cd R_ext; cp -p $(R_EXT_HEADERS) ../../../include/R_ext)
	@cp -p ../extra/graphapp/graphapp.h ../extra/graphapp/ga.h \
	  $(R_HOME)/include

version: Rversion.h

fixh: $(GW32_HEADERS) $(OBJ_HEADERS)
	@$(ECHO) done > fixh

ifeq "$(WIN)" "64"
config.h: ../gnuwin32/fixed/h/config.h ../../VERSION
	@$(SED) -e 's/@VERSION@/$(VER)/' -e 's/@ST@/8/' $< > $@
else
config.h: ../gnuwin32/fixed/h/config.h ../../VERSION
	@$(SED) -e 's/@VERSION@/$(VER)/' -e 's/@ST@/4/' $< > $@
endif

Rconfig.h: ../gnuwin32/fixed/h/Rconfig.h
	@cp $< $@

iconv.h: ../gnuwin32/fixed/h/iconv.h
	@cp $< $@

psignal.h: ../gnuwin32/fixed/h/psignal.h
	@cp $< $@

Rversion.h: $(R_HOME)/VERSION $(R_HOME)/SVN-REVISION $(R_HOME)/tools/GETVERSION
	@sh $(R_HOME)/tools/GETVERSION > $@

Rmath.h0: Rmath.h0.in $(R_HOME)/VERSION Makefile.win
	@$(SED) \
	  -e  's/@RMATH_HAVE_WORKING_LOG1P@/# define HAVE_WORKING_LOG1P 1/' \
	  -e "s/@PACKAGE_VERSION@/`sed 's/\([^ ]*\).*/\1/' < $(R_HOME)/VERSION`/" $< > Rmath.h0

Rmath.h: Rmath.h0
	@sh $(R_HOME)/tools/copy-if-change $< $@

trioremap.h: ../gnuwin32/fixed/h/trioremap.h
	@cp $< $@

## If we do not have svn, get the old file from SVN-REVISION.bak (if poss).
## This needs to be copy-on-change.
## The date from svn info is not in GMT, but we have decided to live
## with that as they changed the format in svn 1.4.x
## <FIXME> USE_SVNVERSION does not work if there is no 'svnversion'
FORCE:
$(R_HOME)/SVN-REVISION: FORCE
	@if test -f  $(R_HOME)/SVN-REVISION ; then \
	  cp -p $(R_HOME)/SVN-REVISION $(R_HOME)/SVN-REVISION.bak ; \
	fi
ifdef USE_SVNVERSION
	@LC_ALL=C svnversion ../.. | sed -n 's/^/Revision: /p' > svn-tmp || rm -f svn-tmp
	@grep -v exported svn-tmp > /dev/null || rm -f svn-tmp
else
	@(cd ../..; LC_ALL=C $(GIT) svn info || echo "Revision: unknown") 2> /dev/null \
	  | sed -n '/^Revision/p' > svn-tmp
	@if grep unknown svn-tmp > /dev/null ; then \
	  rm svn-tmp; \
	fi
endif
	@if test -f svn-tmp ; then \
	  (cd ../..; LC_ALL=C TZ=GMT $(GIT) svn info || echo "Last Changed Date: unknown") 2> /dev/null \
	    | sed -n '/^Last Changed Date:/p' | sed 's/[0-9][0-9]:.*//' \
	    >> svn-tmp ; \
	else \
	  rm -f svn-tmp ; \
	fi
	@if test -f svn-tmp; then \
	  if test ! -f $@ || ! cmp svn-tmp $@ > /dev/null ; then\
	    cp svn-tmp $@; \
	  fi ; \
	else \
	  cp -p $(R_HOME)/SVN-REVISION.bak $@ 2> /dev/null || \
	  (echo "Revision: 00000" > $@; \
	   echo "Last Changed Date: 2006-00-00" >> $@) ; \
	fi 
	@rm -f svn-tmp $(R_HOME)/SVN-REVISION.bak

distclean:
	$(RM) -f Rmath.h0 fixh
