##!dmake -f

# main goal of this Makefile:
# suppl_$(_MODEL): FreeDos library
# This library is automatically copied into $(FDLIB)

# source in the Free-Dos initialization 
.INCLUDE .FIRST .IGNORE : fd_init.mk ../fd_init.mk ../../fd_init.mk
# source in the status information of the last make process

#
#Project related settings
#
PRG = 
XPRG = suppl_$(_MODEL).lib
SRC = _flags.c _getdcwd.c addu.c byte2par.c ctrlbrk.c dfnexpan.c dfnisunc.c \
	dfnmatc2.c dfnmatch.c dfnmerge.c dfnpath.c dfnsearc.c dfnsplit.c \
	dfnsquee.c dfntruen.c dmemcmp.c dmemcmp2.c dmemcmp3.c dmemcmpf.c \
	dmemupr.c dmemuprf.c dosalloc.c dosfree.c dossize.c dstrappc.c \
	dstrappe.c dstrbeg.c dstrcat.c dstrchar.c dstrcmp.c dstrcmpf.c \
	dstrconc.c dstrcpy.c dstrcstr.c dstrdup.c dstrleft.c dstrmid.c \
	dstrrepl.c dstrrigh.c dstrstri.c dstrtail.c dstrtoke.c dstrtrim.c \
	dstrupr.c dstruprf.c env_add.c env_chg.c env_chk.c env_cpy.c env_del.c \
	env_dvar.c env_fany.c env_find.c env_fora.c env_free.c env_len.c \
	env_mstr.c env_mtch.c env_new.c env_nosp.c env_nost.c env_put.c \
	env_repl.c env_scnt.c env_scpy.c env_sctl.c env_sdup.c env_sget.c \
	env_shel.c env_sins.c env_size.c env_sput.c env_sset.c env_strg.c \
	env_strs.c env_sub.c fcompare.c fmemcmp.c fmemcmpi.c fmemcpy.c fmemove.c \
	fmemset.c fnorm.c fputmc.c fstrchr.c fstrcmp.c fstrcmpi.c fstrcpy.c \
	fstrlen.c \
	invokedo.c isodigit.c \
	longaddi.c longaddu.c longclr.c longdivi.c longdivu.c longmuli.c \
	longmulu.c longseti.c longsetu.c longshln.c longshrn.c longsubi.c \
	longsubu.c mcb_apar.c mcb_env.c mcb_is.c mcb_leng.c mcb_mstr.c mcb_nxt.c \
	mcb_owne.c mcb_pare.c mcb_psp.c mcb_shel.c mcb_toen.c mcb_walk.c \
	memcmpi.c peekd.c peekdd.c poked.c pokedd.c stpcat.c strtod.c toupperx.c \
	toxdigit.c
OBJ = _flags.obj _getdcwd.obj addu.obj byte2par.obj ctrlbrk.obj \
	dfnexpan.obj dfnisunc.obj dfnmatc2.obj dfnmatch.obj dfnmerge.obj \
	dfnpath.obj dfnsearc.obj dfnsplit.obj dfnsquee.obj dfntruen.obj \
	dmemcmp.obj dmemcmp2.obj dmemcmp3.obj dmemcmpf.obj dmemupr.obj \
	dmemuprf.obj dosalloc.obj dosfree.obj dossize.obj dstrappc.obj \
	dstrappe.obj dstrbeg.obj dstrcat.obj dstrchar.obj dstrcmp.obj \
	dstrcmpf.obj dstrconc.obj dstrcpy.obj dstrcstr.obj dstrdup.obj \
	dstrleft.obj dstrmid.obj dstrrepl.obj dstrrigh.obj dstrstri.obj \
	dstrtail.obj dstrtoke.obj dstrtrim.obj dstrupr.obj dstruprf.obj \
	env_add.obj env_chg.obj env_chk.obj env_cpy.obj env_del.obj env_dvar.obj \
	env_fany.obj env_find.obj env_fora.obj env_free.obj env_len.obj \
	env_mstr.obj env_mtch.obj env_new.obj env_nosp.obj env_nost.obj \
	env_put.obj env_repl.obj env_scnt.obj env_scpy.obj env_sctl.obj \
	env_sdup.obj env_sget.obj env_shel.obj env_sins.obj env_size.obj \
	env_sput.obj env_sset.obj env_strg.obj env_strs.obj env_sub.obj \
	fcompare.obj fmemcmp.obj fmemcmpi.obj fmemcpy.obj fmemove.obj \
	fmemset.obj fnorm.obj fputmc.obj fstrchr.obj fstrcmp.obj fstrcmpi.obj \
	fstrcpy.obj fstrlen.obj \
	invokedo.obj isodigit.obj longaddi.obj longaddu.obj \
	longclr.obj longdivi.obj longdivu.obj longmuli.obj longmulu.obj \
	longseti.obj longsetu.obj longshln.obj longshrn.obj longsubi.obj \
	longsubu.obj mcb_apar.obj mcb_env.obj mcb_is.obj mcb_leng.obj \
	mcb_mstr.obj mcb_nxt.obj mcb_owne.obj mcb_pare.obj mcb_psp.obj \
	mcb_shel.obj mcb_toen.obj mcb_walk.obj memcmpi.obj peekd.obj peekdd.obj \
	poked.obj pokedd.obj stpcat.obj strtod.obj toupperx.obj toxdigit.obj
HDR = environ.h fmemory.h suppl.h dynstr.h dfnmatch.c mcb.h dfn.h
.IF $(_COMPILER) == MC
OBJ_ADD = cb_catch.obj carry.obj \
	dfnumerg.obj dfnuspli.obj dfnuexpa.obj dfnusque.obj
.ELSE
OBJ_ADD = dfnumerg.obj dfnuspli.obj dfnuexpa.obj dfnusque.obj
.ENDIF

# What additionial source we have for which compiler
SRC_ADD = dfnumerg.c dfnuspli.c dfnuexpa.c dfnusque.c
SRC_ADD_MC = cb_catch.asm carry.asm

MODELS_MC = s
MODELS_BC = t s m c l h
MYCFLAGS = # TEST=YES
MSGLIB !:= 
MSGDCL !:= 
# Check out, which objects are needed

#
#First target
#
all .GROUP : $(CFG) $(XPRG)	# copy library into Free-Dos library dir
	-+copy $(XPRG) $(FDLIB) >nul
	-+copy $(XPRG:db).lst $(FDLIB) >nul
	-+copy *.h $(FDINC) >nul
	-+copy *.h $(MCDIR) >nul

#
# Create the distribution ZIP
#
dist distribution .PHONY .NOSTATE .GROUP : clobber $(CFG)
	if "$(VERSION)" == "" echo No version information accessable!
	if "$(VERSION)" == "" goto ende
	grep "Release Version $(VERSION)" history
	if not errorlevel 1 echo Version $(VERSION) already released!
	if not errorlevel 1 goto ende
	echo. >changed.111
	echo Release Version $(VERSION): >>changed.111
	echo. >>changed.111
	if exist changed type changed >>changed.111
	if exist changed del changed >nul
	ren changed.111 changed
	if not exist changed goto ende
	call cii
	type $(mktmp $(SRC:t"\n")\n) >compile.ccc
	type $(mktmp $(SRC:db:+".obj":t"\n")\n) >compile.lll
# As this Makefile is prepared only for Micro-C and Borland C
	type $(mktmp $(SRC_ADD:t"\n")\n) >dyn_src
	type $(mktmp $(SRC_ADD:db:+".obj":t"\n")\n) >dyn_obj
	type $(mktmp $(SRC_ADD_MC:t"\n")\n) >mc_compi.ccc
	type $(mktmp $(SRC_ADD_MC:db:+".obj":t"\n")\n) >mc_compi.lll
	type $(mktmp $(SRC_ADD_BC:t"\n")\n) >bc_compi.ccc
	type $(mktmp $(SRC_ADD_BC:db:+".obj":t"\n")\n) >bc_compi.lll
	type readme.1 >file_id.diz
	type $(mktmp \t\tRelease Version $(VERSION)\n) >>file_id.diz
	type readme.2 >>file_id.diz
	echo VERSION_MAJOR := $(VERSION_MAJOR) >version.mk
	echo VERSION_MINOR := %@eval[$(VERSION_MINOR)+1] >>version.mk
	mk_dist
	$Y
	cd dist
	zip -9 -r -m SUPPL$(VERSION:s/.//) fdos file_id.diz
	$Y

# Check, if this will compile under other circumstances
.IF $(LASTMAKEINFO) != $(LASTMAKE)
libcpyecho .PHONY .NOINFER .NOSTATE :
	+-@echo Change in Make parameters detected, local files invalid!

libcpy .PHONY .GROUP .NOINFER .NOSTATE .SEQUENTIAL : libcpyecho libclobber $(CFG)
	echo LASTMAKE := $(LASTMAKEINFO) >lastmake.mk
.ELSE
libcpy .PHONY .GROUP .NOINFER .NOSTATE :
.ENDIF
# Get the library to be alterred; preserve a copy of the lib if the make
# fails. Use "ren" to preserve the original time stamp
	if exist $(XPRG) goto ende
	if not exist $(FDLIB)\$(XPRG) goto ende
	ren $(FDLIB)\$(XPRG) .\$(XPRG) >nul
	copy $(XPRG) $(FDLIB) >nul

# all_libs : suppl_s suppl_t suppl_m suppl_c suppl_l suppl_h
.INIT .NOINFER .NOSTATE : $(CFG) errlist libcpy # Will make the utilizing files

#
#C initialization file
#
.IF $(CFG)
# Compiler configuration file, for Borland C only
# options: no Windows, no RTTI, use pre-compiled headers, no floating point

CONFIGURATION = -W-	\
-X-	\
-H	\
-I.;$(INCDIR)	\
-L.;$(LIBDIR)	\
-H=suppl.csm	\
-f-	\
-ff-	\
-m$(_MODEL) \
-w

.IF $(_COMPILER) == BC45
CONFIGURATION += -RT-
.ENDIF

$(CFG) .NOSTATE : $(MAKEFILE:s/-f//)
	Cat $(mktmp $(CONFIGURATION:t"\n")\n) >$@

.ENDIF


suppl_t : 
	$(MAKE) MODEL!:=t all
suppl_s : 
	$(MAKE) MODEL!:=s all
suppl_m : 
	$(MAKE) MODEL!:=m all
suppl_c : 
	$(MAKE) MODEL!:=c all
suppl_l : 
	$(MAKE) MODEL!:=l all
suppl_h : 
	$(MAKE) MODEL!:=h all


$(XPRG) .LIBRARY .SWAP : $(OBJ_ADD) $(OBJ)

cb_catch.obj : cb_catch.asm

#MAKEDEP START
#MAKEDEP DEFINE dfnumerg.c:=dfnmerge.c SUPPORT_UNC_PATH
#MAKEDEP DEFINE dfnuspli.c:=dfnsplit.c SUPPORT_UNC_PATH
#MAKEDEP DEFINE dfnuexpa.c:=dfnexpan.c SUPPORT_UNC_PATH
#MAKEDEP DEFINE dfnusque.c:=dfnsquee.c SUPPORT_UNC_PATH
#MAKEDEP DEFINE dfnumatc.c:=dfnmatch.c SUPPORT_UNC_PATH
#MAKEDEP DEFINE dfnumat2.c:=dfnmatc2.c SUPPORT_UNC_PATH
dfnumerg.c .GROUP : dfnmerge.c
	echo #define SUPPORT_UNC_PATH >$@
	type $< >>$@
dfnuspli.c .GROUP : dfnsplit.c
	echo #define SUPPORT_UNC_PATH >$@
	type $< >>$@
dfnuexpa.c .GROUP : dfnexpan.c
	echo #define SUPPORT_UNC_PATH >$@
	type $< >>$@
dfnusque.c .GROUP : dfnsquee.c
	echo #define SUPPORT_UNC_PATH >$@
	type $< >>$@
dfnumatc.c .GROUP : dfnmatch.c
	echo #define SUPPORT_UNC_PATH >$@
	type $< >>$@
dfnumat2.c .GROUP : dfnmatc2.c
	echo #define SUPPORT_UNC_PATH >$@
	type $< >>$@
dfnumatc.obj : dfnumatc.c \
	 dfn.h
dfnusque.obj : dfnusque.c \
	 dfn.h
dfnuexpa.obj : dfnuexpa.c \
	 dfn.h dynstr.h
dfnuspli.obj : dfnuspli.c \
	 dfn.h dynstr.h
dfnumerg.obj : dfnumerg.c \
	 dfn.h
dfnumat2.obj : dfnumat2.c \
	 dfn.h dfnmatch.c
fstrcmpi.obj : fstrcmpi.c
dosalloc.obj : dosalloc.c \
	 mcb.h suppl.h
env_size.obj : env_size.c \
	 environ.h mcb.h suppl.h
longseti.obj : longseti.c \
	 suppl.h
dstrmid.obj : dstrmid.c \
	 dynstr.h
ctrlbrk.obj : ctrlbrk.c
mcb_shel.obj : mcb_shel.c \
	 mcb.h
mcb_is.obj : mcb_is.c \
	 mcb.h
env_sset.obj : env_sset.c \
	 environ.h
env_sub.obj : env_sub.c \
	 environ.h fmemory.h
_flags.obj : _flags.c
longsetu.obj : longsetu.c \
	 suppl.h
dstrtail.obj : dstrtail.c \
	 dynstr.h
mcb_psp.obj : mcb_psp.c \
	 mcb.h
env_new.obj : env_new.c \
	 environ.h suppl.h
env_sget.obj : env_sget.c \
	 environ.h
isodigit.obj : isodigit.c \
	 dynstr.h
dosfree.obj : dosfree.c \
	 suppl.h
longdivi.obj : longdivi.c \
	 suppl.h
fstrchr.obj : fstrchr.c
dmemuprf.obj : dmemuprf.c \
	 dynstr.h
dmemcmpf.obj : dmemcmpf.c \
	 dynstr.h
env_sdup.obj : env_sdup.c \
	 environ.h fmemory.h
mcb_mstr.obj : mcb_mstr.c \
	 environ.h mcb.h
longdivu.obj : longdivu.c \
	 suppl.h
env_cpy.obj : env_cpy.c \
	 environ.h fmemory.h
toxdigit.obj : toxdigit.c \
	 dynstr.h
peekdd.obj : peekdd.c
dfnsplit.obj : dfnsplit.c \
	 dfn.h dynstr.h
dstrbeg.obj : dstrbeg.c \
	 dynstr.h
fputmc.obj : fputmc.c
dstrcstr.obj : dstrcstr.c \
	 dynstr.h
mcb_toen.obj : mcb_toen.c \
	 mcb.h
dstrchar.obj : dstrchar.c \
	 dynstr.h
dmemcmp.obj : dmemcmp.c \
	 dynstr.h
dstrtoke.obj : dstrtoke.c \
	 dynstr.h
env_scpy.obj : env_scpy.c \
	 environ.h fmemory.h
fstrlen.obj : fstrlen.c
dstrcmp.obj : dstrcmp.c \
	 dynstr.h
longshrn.obj : longshrn.c \
	 suppl.h
dstrstri.obj : dstrstri.c \
	 dynstr.h
dstruprf.obj : dstruprf.c \
	 dynstr.h
dstrcmpf.obj : dstrcmpf.c \
	 dynstr.h
mcb_env.obj : mcb_env.c \
	 mcb.h
env_chg.obj : env_chg.c \
	 environ.h
longmuli.obj : longmuli.c \
	 suppl.h
env_find.obj : env_find.c \
	 environ.h fmemory.h
mcb_pare.obj : mcb_pare.c \
	 mcb.h
longmulu.obj : longmulu.c \
	 suppl.h
dfnsearc.obj : dfnsearc.c \
	 dfn.h dynstr.h environ.h
fmemcpy.obj : fmemcpy.c
env_del.obj : env_del.c \
	 environ.h mcb.h suppl.h
dstrconc.obj : dstrconc.c \
	 dynstr.h
dfnmatc2.obj : dfnmatc2.c \
	 dfn.h dfnmatch.c
fstrcpy.obj : fstrcpy.c
dfnpath.obj : dfnpath.c \
	 dfn.h dynstr.h
env_strg.obj : env_strg.c \
	 environ.h
dstrdup.obj : dstrdup.c \
	 dynstr.h
mcb_apar.obj : mcb_apar.c \
	 mcb.h
env_dvar.obj : env_dvar.c \
	 environ.h fmemory.h
env_sput.obj : env_sput.c \
	 environ.h fmemory.h
longaddi.obj : longaddi.c \
	 suppl.h
env_strs.obj : env_strs.c \
	 environ.h
env_put.obj : env_put.c \
	 environ.h
mcb_owne.obj : mcb_owne.c \
	 mcb.h
dfnexpan.obj : dfnexpan.c \
	 dfn.h dynstr.h
dmemcmp3.obj : dmemcmp3.c \
	 dynstr.h
env_free.obj : env_free.c \
	 environ.h fmemory.h mcb.h
longaddu.obj : longaddu.c \
	 suppl.h
_getdcwd.obj : _getdcwd.c \
	 dfn.h
env_sins.obj : env_sins.c \
	 environ.h fmemory.h
dstrappe.obj : dstrappe.c \
	 dynstr.h
mcb_nxt.obj : mcb_nxt.c \
	 mcb.h
dfnmatch.obj : dfnmatch.c \
	 dfn.h
dfnsquee.obj : dfnsquee.c \
	 dfn.h
env_nosp.obj : env_nosp.c \
	 environ.h
pokedd.obj : pokedd.c
invokedo.obj : invokedo.c \
	 suppl.h
strtod.obj : strtod.c
env_fany.obj : env_fany.c \
	 dynstr.h environ.h fmemory.h suppl.h
fnorm.obj : fnorm.c
env_add.obj : env_add.c \
	 environ.h fmemory.h
dfnisunc.obj : dfnisunc.c \
	 dfn.h dynstr.h
env_chk.obj : env_chk.c \
	 environ.h mcb.h suppl.h
dossize.obj : dossize.c \
	 mcb.h suppl.h
env_repl.obj : env_repl.c \
	 environ.h fmemory.h mcb.h suppl.h
dmemupr.obj : dmemupr.c \
	 dynstr.h
dstrupr.obj : dstrupr.c \
	 dynstr.h
stpcat.obj : stpcat.c
dmemcmp2.obj : dmemcmp2.c \
	 dynstr.h
longshln.obj : longshln.c \
	 suppl.h
dstrrigh.obj : dstrrigh.c \
	 dynstr.h
fcompare.obj : fcompare.c
fmemove.obj : fmemove.c \
	 fmemory.h
byte2par.obj : byte2par.c
env_fora.obj : env_fora.c \
	 environ.h
env_mtch.obj : env_mtch.c \
	 dynstr.h environ.h fmemory.h suppl.h
dfntruen.obj : dfntruen.c \
	 dfn.h dynstr.h suppl.h
longclr.obj : longclr.c \
	 suppl.h
dstrrepl.obj : dstrrepl.c
env_sctl.obj : env_sctl.c \
	 environ.h
dstrcpy.obj : dstrcpy.c \
	 dynstr.h
peekd.obj : peekd.c
env_shel.obj : env_shel.c \
	 mcb.h
fmemcmpi.obj : fmemcmpi.c
dstrappc.obj : dstrappc.c \
	 dynstr.h
longsubi.obj : longsubi.c \
	 suppl.h
env_scnt.obj : env_scnt.c \
	 environ.h
fmemcmp.obj : fmemcmp.c
addu.obj : addu.c
longsubu.obj : longsubu.c \
	 suppl.h
memcmpi.obj : memcmpi.c
mcb_walk.obj : mcb_walk.c \
	 mcb.h
poked.obj : poked.c
fstrcmp.obj : fstrcmp.c
env_mstr.obj : env_mstr.c \
	 mcb.h
env_nost.obj : env_nost.c \
	 environ.h mcb.h
toupperx.obj : toupperx.c \
	 dynstr.h suppl.h
dstrleft.obj : dstrleft.c \
	 dynstr.h
dstrcat.obj : dstrcat.c \
	 dynstr.h
dstrtrim.obj : dstrtrim.c \
	 dynstr.h
fmemset.obj : fmemset.c
mcb_leng.obj : mcb_leng.c \
	 mcb.h
dfnmerge.obj : dfnmerge.c \
	 dfn.h
env_len.obj : env_len.c \
	 environ.h fmemory.h
#MAKEDEP STOP

LIB_CLEAN := dfnumerg.c dfnuspli.c dfnuexpa.c dfnusque.c
libclobber ?= LIB_CLEAN := 
libclobber : clobber
.IF $(CFG)
	+Type $(mktmp $(CONFIGURATION)) >$(CFG)
.ENDIF

clean ::
	-$(RM) /sfl=1 1$(mktmp $(LIB_CLEAN) $(LIB_CLEAN:db:+".obj"))
	-$(RM) /sf suppl_*.bak suppl_*.lst
	-$(RM) /sf *.xcc *.xll *.ccc *.lll

clobber ::
	-$(RM) /sfl=1 1$(mktmp suppl_?.lib $(OBJ) q*.asm q*.cp $$*.asm $$*.cp lastmake.mk)

# source in the Free-Dos standard targets 
.INCLUDE .FIRST .IGNORE : fd_exit.mk ../fd_exit.mk ../../fd_exit.mk
