#
# ${R_HOME}/src/nmath/standalone/Makefile

VPATH = @srcdir@
srcdir = @srcdir@
top_srcdir = @top_srcdir@

top_builddir = ../../..
subdir = src/nmath/standalone

include $(top_builddir)/Makeconf
## avoid LTO and OpenMP
CFLAGS = @CFLAGS@
R_OPENMP_CFLAGS =

SOURCES_NMATH = \
	mlutils.c \
	d1mach.c i1mach.c \
	fmax2.c fmin2.c fprec.c fround.c ftrunc.c \
	sign.c fsign.c \
	imax2.c imin2.c \
	chebyshev.c log1p.c lgammacor.c gammalims.c stirlerr.c bd0.c \
	gamma.c lgamma.c gamma_cody.c beta.c lbeta.c polygamma.c cospi.c \
	bessel_i.c bessel_j.c bessel_k.c bessel_y.c \
	choose.c \
	snorm.c sexp.c \
	dgamma.c pgamma.c qgamma.c rgamma.c \
	dbeta.c pbeta.c qbeta.c rbeta.c \
	dunif.c punif.c qunif.c runif.c \
	dnorm.c pnorm.c qnorm.c rnorm.c \
	dlnorm.c plnorm.c qlnorm.c rlnorm.c \
	df.c pf.c qf.c rf.c dnf.c \
	dt.c pt.c qt.c rt.c dnt.c \
	dchisq.c pchisq.c qchisq.c rchisq.c rnchisq.c \
	dbinom.c pbinom.c qbinom.c rbinom.c \
	rmultinom.c \
	dcauchy.c pcauchy.c qcauchy.c rcauchy.c \
	dexp.c pexp.c qexp.c rexp.c \
	dgeom.c pgeom.c qgeom.c rgeom.c \
	dhyper.c phyper.c qhyper.c rhyper.c \
	dnbinom.c pnbinom.c qnbinom.c qnbinom_mu.c rnbinom.c \
	dpois.c ppois.c qpois.c rpois.c \
	dweibull.c pweibull.c qweibull.c rweibull.c \
	dlogis.c plogis.c qlogis.c rlogis.c \
	dnchisq.c pnchisq.c qnchisq.c \
	dnbeta.c pnbeta.c qnbeta.c \
	pnf.c pnt.c qnf.c qnt.c \
	ptukey.c qtukey.c \
	toms708.c wilcox.c \
	signrank.c
SOURCES = $(SOURCES_NMATH) std_unif.c
DEPENDS = $(SOURCES:.c=.d)
OBJECTS = $(SOURCES:.c=.o)

distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
DISTFILES = Makefile.in test.c sunif.c libRmath.pc.in

Rexeclibdir_LIBRARIES = libRmath.a
libRmath_a_SOURCES = $(SOURCES)
libRmath_a_OBJECTS = $(OBJECTS)

## <FIXME>
## Change to 'libRmath.la' when using libtool for shlibs.
## Remove when using automake ...
libRmath_la = libRmath$(R_DYLIB_EXT)
## </FIXME>
Rexeclibdir_LTLIBRARIES = $(libRmath_la)
libRmath_la_SOURCES = $(SOURCES)
libRmath_la_OBJECTS = $(OBJECTS:.o=.lo)
libRmath_la_LDFLAGS =

CLEANFILES = Makedeps *.d *.o *.lo test check.log $(SOURCES)
DISTCLEANFILES = Makefile $(Rexeclibdir_LIBRARIES) $(Rexeclibdir_LTLIBRARIES)

DEFS = -DHAVE_CONFIG_H -DMATHLIB_STANDALONE
ALL_CPPFLAGS = $(R_XTRA_CPPFLAGS) -I$(srcdir)/.. $(CPPFLAGS) $(DEFS)

.SUFFIXES:
.SUFFIXES: .c .d .o .lo

@r_cc_lo_rules_frag@


all: Makefile inc static shared

inc: Makefile
	(cd ../../include; $(MAKE) Rmath.h)

## can't run test, as that depends on OS-specific way to set library path.
## clean is useful, but forces a remake each time which MM did not want
#check: all # clean

check:
	@rm -f check.log
	@if test -n "${TEST_MC_CORES}"; then \
	  $(MAKE) -j ${TEST_MC_CORES} all > check.log 2>&1; \
	else \
	  $(MAKE) all > check.log 2>&1; \
	fi
	@$(ECHO) "check output can be found in src/nmath/standalone/check.log"

Copy:
	@$(ECHO) "Copying source files"
	@test -f std_unif.c || $(LN_S) $(srcdir)/sunif.c std_unif.c
	@for f in $(SOURCES_NMATH); do \
	  test -f $${f} || $(LN_S) $(srcdir)/../$${f} . ; \
	done

static: inc ../../include/Rconfig.h Copy Makedeps
	@$(MAKE) $(Rexeclibdir_LIBRARIES)

shared: inc ../../include/Rconfig.h Copy Makedeps
	@$(MAKE) $(Rexeclibdir_LTLIBRARIES)

../../include/Rconfig.h:
	(cd $(@D); $(MAKE) $(@F))

Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@

Makedeps: Makefile Copy ../../include/Rconfig.h
	@$(MAKE) $(DEPENDS)
	@cat $(DEPENDS) | $(SED) -e 's/^\([^:]*\)\.o\([ 	]\)*:/\1.o \1.lo\2:/' >> Makefile
	@touch $@

libRmath.a: $(libRmath_a_OBJECTS)
	@rm -Rf $@
	$(AR) -cr $@ $(libRmath_a_OBJECTS)
	$(RANLIB) $@

## under peculiar circumstances, $(LIBM) here helps.
$(libRmath_la): $(libRmath_la_OBJECTS)
	$(DYLIB_LINK) -o $@ $(libRmath_la_LDFLAGS) $(libRmath_la_OBJECTS) $(LIBM)

test: $(srcdir)/test.c
	$(CC) -o $@ $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(srcdir)/test.c \
	  -L. -lRmath $(LIBM)

install: installdirs install-header @WANT_R_FRAMEWORK_FALSE@ install-pc
@WANT_R_FRAMEWORK_FALSE@	@!(test -f $(libRmath_la)) || $(SHELL) $(top_srcdir)/tools/copy-if-change $(libRmath_la) $(DESTDIR)$(libdir)/$(libRmath_la)
@WANT_R_FRAMEWORK_FALSE@	@!(test -f libRmath.a) || $(SHELL) $(top_srcdir)/tools/copy-if-change libRmath.a $(DESTDIR)$(libdir)/libRmath.a
@WANT_R_FRAMEWORK_TRUE@	@!(test -f $(libRmath_la)) || cp $(libRmath_la) $(R_FRAMEWORK_DIR)/Versions/$(FW_VERSION)/Resources/lib/$(libRmath_la) && install_name_tool -id $(R_FRAMEWORK_DIR)/Versions/$(FW_VERSION)/Resources/lib/$(libRmath_la) $(R_FRAMEWORK_DIR)/Versions/$(FW_VERSION)/Resources/lib/$(libRmath_la)
@WANT_R_FRAMEWORK_TRUE@	@!(test -f libRmath.a) || $(SHELL) $(top_srcdir)/tools/copy-if-change libRmath.a $(R_FRAMEWORK_DIR)/Versions/$(FW_VERSION)/Resources/lib/libRmath.a

install-strip: installdirs install-header install-pc
	@if test -f $(libRmath_la); then \
	  $(INSTALL) $(libRmath_la) "$(libdir)/$(libRmath_la)"; \
	  if test -n "$(STRIP_SHARED_LIB)"; then \
	    $(STRIP_SHARED_LIB) "$(DESTDIR)$(libdir)/$(libRmath_la)"; \
	  fi; \
	fi
	@!(test -f libRmath.a) || $(SHELL) $(top_srcdir)/tools/copy-if-change libRmath.a $(DESTDIR)$(libdir)/libRmath.a

install-header:
	@(cd ../../include; $(MAKE) Rmath.h)
@WANT_R_FRAMEWORK_FALSE@	@$(SHELL) $(top_srcdir)/tools/copy-if-change ../../include/Rmath.h $(DESTDIR)$(includedir)/Rmath.h
@WANT_R_FRAMEWORK_TRUE@	@$(SHELL) $(top_srcdir)/tools/copy-if-change ../../include/Rmath.h $(R_FRAMEWORK_DIR)/Versions/$(FW_VERSION)/Resources/include/Rmath.h

installdirs:
@WANT_R_FRAMEWORK_FALSE@	@$(MKINSTALLDIRS) $(DESTDIR)$(includedir)
@WANT_R_FRAMEWORK_FALSE@	@$(MKINSTALLDIRS) $(DESTDIR)$(libdir)
@WANT_R_FRAMEWORK_TRUE@	@$(MKINSTALLDIRS) $(R_FRAMEWORK_DIR)/Versions/$(FW_VERSION)/Resources/include
@WANT_R_FRAMEWORK_TRUE@	@$(MKINSTALLDIRS) $(R_FRAMEWORK_DIR)/Versions/$(FW_VERSION)/Resources/lib

## ?= is not portable make syntax, so we conditionalize this.
@WANT_R_FRAMEWORK_TRUE@RMATH_FRAMEWORK_DIR ?= /Library/Frameworks/Rmath.framework
install-Rmath-framework: $(libRmath_la)
	@(cd ../../include; $(MAKE) Rmath.h)
	@$(MKINSTALLDIRS) $(RMATH_FRAMEWORK_DIR)/Versions/$(VERSION)/Headers
	@cp $(libRmath_la) $(RMATH_FRAMEWORK_DIR)/Versions/$(VERSION)/Rmath
	@install_name_tool -id $(RMATH_FRAMEWORK_DIR)/Versions/$(VERSION)/Rmath $(RMATH_FRAMEWORK_DIR)/Versions/$(VERSION)/Rmath
	@$(SHELL) $(top_srcdir)/tools/copy-if-change ../../include/Rmath.h $(RMATH_FRAMEWORK_DIR)/Versions/$(VERSION)/Headers/Rmath.h
	@rm -f $(RMATH_FRAMEWORK_DIR)/Versions/Current $(RMATH_FRAMEWORK_DIR)/Headers $(RMATH_FRAMEWORK_DIR)/Rmath
	@ln -sf $(VERSION) $(RMATH_FRAMEWORK_DIR)/Versions/Current
	@ln -sf Versions/Current/Headers $(RMATH_FRAMEWORK_DIR)/Headers
	@ln -sf Versions/Current/Rmath $(RMATH_FRAMEWORK_DIR)/Rmath

install-pc:
	@$(MKINSTALLDIRS) "$(DESTDIR)$(libdir)/pkgconfig"
	@$(SED) -e "s:@libdir:$(libdir):" -e "s:@includedir:$(includedir):" \
	  -e 's/@VERSION/$(VERSION)/' -e 's/@libm/$(LIBM)/' $(srcdir)/libRmath.pc.in \
	  > "$(DESTDIR)$(libdir)/pkgconfig/libRmath.pc"

uninstall:
	@rm -f $(DESTDIR)$(includedir)/Rmath.h $(DESTDIR)$(libdir)/$(libRmath_la) $(DESTDIR)$(libdir)/libRmath.a "$(DESTDIR)$(libdir)/pkgconfig/libRmath.pc"
@WANT_R_FRAMEWORK_TRUE@	@rm -f $(R_FRAMEWORK_DIR)/Versions/$(VERSION)/Resources/include/Rmath.h $(R_FRAMEWORK_DIR)/Versions/$(VERSION)/Resources/lib/libRmath.a $(R_FRAMEWORK_DIR)/Versions/$(VERSION)/Resources/lib/$(libRmath_la)

mostlyclean: clean
clean:
	@-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
	@-rm -Rf .libs _libs
distclean: clean
	@-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean: distclean

distdir: $(DISTFILES)
	@for f in $(DISTFILES); do \
	  test -f $(distdir)/$${f} \
	    || ln $(srcdir)/$${f} $(distdir)/$${f} 2>/dev/null \
	    || cp -p $(srcdir)/$${f} $(distdir)/$${f}; \
	done

## Automagically generated dependencies:

