#
#   Makefile for building the CEPHES MATHS library for C68
#
#   Assumes that Default DATA directory is one containing source and objects
#
#   This makefile at the moment does not build all parts of the Cephes
#   maths library although all source files in the library are mentioned
#   here.  This is merely because we have not yet done the work to check
#   out all these additional routines.

CC=cc -c
CFLAGS = -maxerr=5 -Qstackopt=3 -O

ASFLAGS =
CPPFLAGS =
MAC = qmac

AS = cc -c
ASM = mac
LD = ld
RM = rm

I   =   ${P}INCLUDE_

.SUFFIXES : _c _x _s _asm _o _rel _hdr _h

#   The following define the versions of the stdio routines that
#   are included to support the floating point options

S = win1_SRC_LIB_C_STDIO_
# S = win1_SRC_LIB_C_ESTDIO34_
STDIO=   $S_f_cvt_o        $S_f_fprintf_o    $S_f_fscanf_o \
         $S_f_guard_o      $S_f_pow10_o      $S_f_printf_o \
         $S_f_scanf_o      $S_f_sprintf_o    $S_f_sscanf_o \
         $S_f_tvc_o        $S_f_vfprintf_o   $S_f_vprintf_o \
         $S_f_vsprintf_o

#   The following are routines that are also in the LIBM_A library
#   as well as the LIBCEPHES_A library.   For some reason these do
#   not appear to be supplied with the CEPHES library.  We have
#   included them to try and keep thw two libraries in sync.

M = win1_SRC_LIB_M_
LIBM=   ${M}copysign_o      ${M}fmod_o \
        ${M}hypot_o         ${M}remainder_o

#   These are the generic ANSI C specified routines that are
#   supplied with the CEPHES library.

CM = CMATH_
CMATH_SRC = ${CM}acosh_c    ${CM}asin_c     ${CM}asinh_c    ${CM}atan_c \
            ${CM}atanh_c    ${CM}cbrt_c     ${CM}chbevl_c \
            ${CM}const_c    ${CM}cosh_c     ${CM}drand_c \
            ${CM}exp_c      ${CM}exp10_c    ${CM}fabs_c     ${CM}floor_c \
            ${CM}log_c      ${CM}log10_c    ${CM}mtherr_c \
            ${CM}polevl_c   ${CM}pow_c      ${CM}powi_c     ${CM}round_c \
            ${CM}sin_c      ${CM}sincos_c   ${CM}sinh_c     ${CM}sqrt_c \
            ${CM}tan_c      ${CM}tanh_c 
CMATH_EXTRA=${CM}cheby_c    ${CM}ftilib_mak ${CM}index      ${CM}mconf_h \
            ${CM}mod2pi_c   ${CM}mthutl_c   ${CM}mtst_c     ${CM}polevl_asm

CMATH_OBJ = ${CM}acosh_o    ${CM}asin_o     ${CM}asinh_o    ${CM}atan_o \
            ${CM}atanh_o    ${CM}cbrt_o     ${CM}chbevl_o \
            ${CM}const_o    ${CM}cosh_o     ${CM}drand_o \
            ${CM}exp_o      ${CM}exp10_o    ${CM}fabs_o     ${CM}floor_o \
            ${CM}log_o      ${CM}log10_o    ${CM}mtherr_o \
            ${CM}polevl_o   ${CM}pow_o      ${CM}powi_o     ${CM}round_o \
            ${CM}sin_o      ${CM}sincos_o   ${CM}sinh_o     ${CM}sqrt_o \
            ${CM}tan_o      ${CM}tanh_o

CP = CPROB_
CPROB_SRC = ${CP}bdtr_c     ${CP}btdtr_c    ${CP}chdtr_c \
            ${CP}fdtr_c     ${CP}gamma_c    ${CP}gdtr_c \
            ${CP}igam_c     ${CP}igami_c    ${CP}incbet_c   ${CP}incbi_c \
            ${CP}nbdtr_c    ${CP}ndtr_c     ${CP}ndtri_c \
            ${CP}pdtr_c     ${CP}stdtr_c 
CPROB_EXTRA=${CP}drand_c    ${CP}index      ${CP}mconf_h    ${CP}mtherr_c
CPROB_OBJ = ${CP}bdtr_o     ${CP}btdtr_o    ${CP}chdtr_o  \
            ${CP}fdtr_o     ${CP}gamma_o    ${CP}gdtr_o \
            ${CP}igam_o     ${CP}igami_o    ${CP}incbet_o   ${CP}incbi_o \
            ${CP}nbdtr_o    ${CP}ndtr_o     ${CP}ndtri_o \
            ${CP}pdtr_o     ${CP}stdtr_o 

EG = EIGEN_
EIGEN_SRC = ${EG}blas_c     ${EG}eigens_c   ${EG}lmdif_c
EIGEN_EXTRA=${EG}eigasm_bat ${EG}eigtst_c   ${EG}index
EIGEN_OBJ = ${EG}blas_o     ${EG}eigens_o   ${EG}lmdif_o

EL = ELLF_
ELLF_SRC =  ${EL}ellie_c    ${EL}ellik_c    ${EL}ellpe_c \
            ${EL}ellpj_c    ${EL}ellpk_c
ELLF_EXTRA= ${EL}ellf_ans   ${EL}ellf_c     ${EL}ellf_doc   ${EL}ellf_mak \
            ${EL}ellf_que   ${EL}index      ${EL}mconf_h    ${EL}mtherr_c
ELLF_OBJ =  ${EL}ellie_o    ${EL}ellik_o    ${EL}ellpe_o \
            ${EL}ellpj_o    ${EL}ellpk_o 

IE = IEEE_
IEEE_SRC =  ${IE}econst_c   ${IE}eexp_c     ${IE}elog_c     ${IE}epow_c \
            ${IE}esqrt_c    ${IE}etanh_c    ${IE}etodec_c
IEEE_EXTRA= ${IE}ehead_h    ${IE}ieee_c     ${IE}index
IEEE_OBJ =  ${IE}econst_o   ${IE}eexp_o     ${IE}elog_o     ${IE}epow_o \
            ${IE}esqrt_o    ${IE}etanh_o    ${IE}etodec_o

LD = LDOUBLE_
LDOUBLE_SRC=${LD}acoshl_c   ${LD}asinhl_c   ${LD}asinl_c \
            ${LD}atanhl_c   ${LD}atanl_c    ${LD}cbrtl_c    ${LD}coshl_c \
            ${LD}exp10l_c   ${LD}exp2l_c    ${LD}expl_c     ${LD}floorl_c \
            ${LD}log10l_c   ${LD}log2l_c    ${LD}logl_c \
            ${LD}polevll_c  ${LD}powil_c    ${LD}powl_c \
            ${LD}sinhl_c    ${LD}sinl_c     ${LD}sqrtl_c \
            ${LD}tanhl_c    ${LD}tanl_c
LDOUBLE_EXTRA=${LD}index  ${LD}longlib_mak ${LD}longlib_rsp \
            ${LD}mconf_h    ${LD}mtherr_c
LDOUBLE_OBJ=${LD}acoshl_o   ${LD}asinhl_o   ${LD}asinl_o \
            ${LD}atanhl_o   ${LD}atanl_o    ${LD}cbrtl_o    ${LD}coshl_o \
            ${LD}exp10l_o   ${LD}exp2l_o    ${LD}expl_o     ${LD}floorl_o \
            ${LD}log10l_o   ${LD}log2l_o    ${LD}logl_o \
            ${LD}polevll_o  ${LD}powil_o    ${LD}powl_o \
            ${LD}sinhl_o    ${LD}sinl_o     ${LD}sqrtl_o \
            ${LD}tanhl_o    ${LD}tanl_o

ODE = ODE_
ODE_SRC =   ${ODE}rungek_c  ${ODE}ssystem_c ${ODE}adams3_c
ODE_EXTRA = ${ODE}index     ${ODE}int_h     ${ODE}note_doc  ${ODE}ssystem_mak

PO = POLYN_
POLYN_SRC = ${PO}polmisc_c  ${PO}polrt_c    ${PO}polyn_c
POLYN_EXTRA=${PO}euclid_c   ${PO}index      ${PO}polyr_c    \
            ${PO}revers_c
POLYN_OBJ = ${PO}polmisc_o  ${PO}polrt_o    ${PO}polyn_o

QF = QFLOAT_
QFLOAT_SRC= ${QF}qcalc_c    ${QF}qconst_c   ${QF}qexp_c     ${QF}qfloor_c \
            ${QF}qflt_c     ${QF}qflta_c    ${QF}qfltb_c    ${QF}qlog_c \
            ${QF}qpow_c     ${QF}qsqrt_c    ${QF}qsqrta_c   ${QF}qtanh_c
QFLOAT_EXTRA=${QF}calc100_doc ${QF}divn_asm ${QF}index      ${QF}mconf_h \
            ${QF}mtherr_c   ${QF}mulr_asm   ${QF}qcalc_h    ${QF}qfltd_asm \
            ${QF}qhead_asm  ${QF}qhead_h    ${QF}read_me    ${QF}subm_asm

RE = REMES_
REMES_SRC = ${RE}remesa_c   ${RE}remese_c   ${RE}remesf_c   ${RE}remesg_c \
            ${RE}remesp_c   ${RE}remess_c   ${RE}remesw_c   ${RE}simq_c 
REMES_EXTRA=${RE}index      ${RE}note_doc   ${RE}remes_c    ${RE}remes_h \
            ${RE}remes_mak

SOURCES=${CMATH_SRC}    ${CMATH_EXTRA} \
        ${CPROB_SRC}    ${CPROB_EXTRA} \
        ${ELLF_SRC}     ${ELLF_EXTRA} \
        ${EIGEN_SRC}    ${EIGEN_EXTRA} \
        ${IEEE_SRC}     ${IEEE_EXTRA} \
        ${LDOUBLE_SRC}  ${LDOUBLE_EXTRA} \
        ${ODE_SRC}      ${ODE_EXTRA} \
        ${POLYN_SRC     ${POLYN_EXTRA} \
        ${QFLOAT_SRC}   ${QFLOAT_EXTRA} \
        ${REMES_SRC}    ${REMES_EXTRA}

OBJECTS=$(CMATH_OBJ) $(CPROB_OBJ) $(ELLF_OBJ) 
# ${POLYN_OBJ} 

TESTPROG = ${CM}cheby   ${CM}mod2pi ${CM}mtst   ${EL}ellf

LIBPARTS = libcmath libcprob libellf
#libpolyn

all: libcephes_a slblist wlist ylist 
#libmxc_a

libcephes_a : ${LIBPARTS} ${LIBM} ${STDIO} libcephes_o slblist
        @rm -f  libfltpt_a
        slb -crv libcephes_a libcephes_o
        slb -crv -mslblist libcephes_a

libmxc_a :  matherrxc_o
        slb -crv libmxc_a matherrxc_o

libcmath : ${CMATH_SRC} ${CM}mconf_h
    @${CC} -V -I${CM} ${CFLAGS} ${ASFLAGS} ${CMATH_SRC}
    @touch libcmath

libcprob : ${CPROB_SRC} ${CP}mconf_h
    @${CC} -I${CP} ${CFLAGS} ${ASFLAGS} ${CPROB_SRC}
    @touch libcprob

libpolyn : ${POLYN_SRC} ${CM}mconf_h
    @${CC} -I${CM} ${CFLAGS} ${ASFLAGS} ${POLYN_SRC}
    @touch libpolyn

libellf : ${ELLF_SRC} ${EL}mconf_h
    @${CC} -I${EL} ${CFLAGS} ${ASFLAGS} ${ELLF_SRC}
    @touch libellf

slblist :  ${LIBPARTS} ${LIBM} ${STDIO}
        @slb -v -Lslblist_tmp $(OBJECTS) ${LIBM} ${STDIO}
        tsort slblist_tmp >slblist
        @rm -f slblist_tmp wlist ylist libcephes_a

wlist : slblist
        @slb -v -Wwlist -mslblist

ylist : slblist
        @slb -v -Yylist -mslblist

cheby : cheby_o
      ld -ocheby cheby_o -lfltpt -lm

${STDIO} :
    echo "Make STDIO Floating Point versions from the LIB_C_STDIO directory"

_x_o:
    cpp -P ${CPPFLAGS} $*_x $*_s
    ${AS} ${ASFLAGS} $*_s
    ${RM} $*_s

_x_s:
    cpp -A -dAS68 ${CPPFLAGS} $*_x $*_s

_c_o:
    ${CC} ${CPPFLAGS} ${CFLAGS} ${ASFLAGS} $<

_s_o:
    ${AS} ${ASFLAGS} $<

_asm_o :
    ${MAC} $*_asm -ERRORS $*_list -BIN $*_o -NOWINDS

_hdr_h :
    packhdr $*_hdr $*_h

clean :
        @rm -fv ${OBJECTS} libcmath libcprob libellf libpolyn

clobber : clean
        @rm -fv libcephes_a libmxc_a slblist wlist ylist ${LIBM} ${STDIO} libcephes_zip

zip :
        @zip libcephes cephes_doc index libcephes_asm makefile readme ${SOURCES}

#-------------------------- Header file dependencies -------------------------


${OBJECTS} :  ${I}math_h

