# Perl script for creating and maintaining RichEdit makefiles

###
# Main script
###
&build_makefile();

sub build_makefile {
	open(MAKEFILE, ">makefile");
	
	print MAKEFILE <<"EOT"

# NT build environment
# Allow for customization through a decoration file
!IFDEF NTMAKEENV
!include \$(NTMAKEENV)\\makefile.def
!ENDIF

!IF EXIST("makefile.cfg")
!INCLUDE "makefile.cfg"
!ENDIF

# The following builds are supported

!IF "\$(BUILD)" == "" 
BUILD=w32_x86_dbg
!MESSAGE No Build specified. Defaulting to w32_x86_dbg
!ENDIF

!IF "\$(ODIR)" == ""
ODIR = .\\
!MESSAGE No output directory specified.  Defaulting to current directory
!ENDIF

!IF "\$(BUILD)" == "w32_x86_dbg"

INCLUDE = \$(INCLUDE)
CFLAGS = -DDEBUG -Od
CFLAGS = \$(CFLAGS) -DWIN32 -D_WINDOWS -D_X86_ -DWINNT
CFLAGS = \$(CFLAGS) -Gz -Gm -Zi
LFLAGS =
LFLAGS = \$(LFLAGS) ..\\lib\\x86\\msls31d.lib delayimp.lib -delayload:msls31d.dll
LFLAGS = \$(LFLAGS) ..\\lib\\x86\\usp10.lib -delayload:usp10.dll -delay:unload
LFLAGS = \$(LFLAGS) kernel32.lib
LFLAGS = \$(LFLAGS) advapi32.lib
LFLAGS = \$(LFLAGS) gdi32.lib
LFLAGS = \$(LFLAGS) user32.lib
LFLAGS = /entry:DllMain\@12 /debug \$(LFLAGS)
CPP = cl \$(CFLAGS)
CL = cl \$(CFLAGS)
RCFLAGS=  \$(USERRCFLAGS) -dINCLUDETLB -dDEBUG
LINKER = link
CHKSTK = ..\\lib\\x86\\chkstk.obj
FTOL = ..\\lib\\x86\\ftol.obj
MEMMOVE = ..\\lib\\x86\\memmove.obj
MEMSET = ..\\lib\\x86\\memset.obj
MEMCMP = ..\\lib\\x86\\memcmp.obj
MEMCPY = ..\\lib\\x86\\memcpy.obj
STRLEN = ..\\lib\\x86\\strlen.obj

!ELSEIF "\$(BUILD)" == "w32_x86_shp"

INCLUDE = \$(INCLUDE)
CFLAGS = -O1 \$(USERDEFS)
CFLAGS = \$(CFLAGS) -DWIN32 -D_WINDOWS -D_X86_ -DWINNT
CFLAGS = \$(CFLAGS) -GFz
LFLAGS = 
LFLAGS = \$(LFLAGS) ..\\lib\\x86\\msls31.lib delayimp.lib -delayload:msls31.dll
LFLAGS = \$(LFLAGS) ..\\lib\\x86\\usp10.lib -delayload:usp10.dll -delay:unload
LFLAGS = \$(LFLAGS) kernel32.lib
LFLAGS = \$(LFLAGS) advapi32.lib
LFLAGS = \$(LFLAGS) gdi32.lib
LFLAGS = \$(LFLAGS) user32.lib
LFLAGS = /opt:ref /incremental:no /entry:DllMain\@12 \$(LFLAGS)
CPP = cl \$(CFLAGS)
CL = cl \$(CFLAGS)
LINKER = link
RCFLAGS=  \$(USERRCFLAGS) -dINCLUDETLB
CHKSTK = ..\\lib\\x86\\chkstk.obj
FTOL = ..\\lib\\x86\\ftol.obj
MEMMOVE = ..\\lib\\x86\\memmove.obj
MEMSET = ..\\lib\\x86\\memset.obj
MEMCMP = ..\\lib\\x86\\memcmp.obj
MEMCPY = ..\\lib\\x86\\memcpy.obj
STRLEN = ..\\lib\\x86\\strlen.obj

!ELSEIF "\$(BUILD)" == "wce_x86em_dbg"

PATH = \\msdev\\wce\\bin;\$(PATH)
PATH = \\Program^ Files\\DevStudio\\wce\\bin;\$(PATH)
INCLUDE = ..\\wceinc
LIB = ..\\wcelib\\x86\\common\\ce\\debug
LIB = \$(LIB);\\msdev\\wce\\lib\\x86em
LIB = \$(LIB);\\Program^ Files\\DevStudio\\wce\\lib\\wce100\\x86em
LIB = \$(LIB);\\msdev\\lib
CFLAGS = -DDEBUG -Od
CFLAGS = \$(CFLAGS) -DWIN32 -D_WINDOWS -DPEGASUS
CFLAGS = \$(CFLAGS) -D_X86_ -Dx86 -DUNDER_NT
CPP = cl \$(CFLAGS)
CL = cl \$(CFLAGS)
LINKER = cl
LFLAGS = \$(LFLAGS) coredll.lib user32.lib
LFLAGS = -entry:_DllMainCRTStartup -ignore:4078 \$(LFLAGS)

!ELSEIF "\$(BUILD)" == "wce_x86em_shp"

PATH = \\msdev\\wce\\bin;\$(PATH)
PATH = \\Program^ Files\\DevStudio\\wce\\bin;\$(PATH)
INCLUDE = ..\\wceinc
LIB = ..\\wcelib\\x86\\common\\ce\\retail
LIB = \$(LIB);\\msdev\\wce\\lib\\x86em
LIB = \$(LIB);\\Program^ Files\\DevStudio\\wce\\lib\\wce100\\x86em
LIB = \$(LIB);\\msdev\\lib
CFLAGS = \$(CFLAGS) -DWIN32 -D_WINDOWS -DPEGASUS
CFLAGS = \$(CFLAGS) -D_X86_ -Dx86 -DUNDER_NT
CPP = cl \$(CFLAGS)
CL = cl \$(CFLAGS)
LINKER = cl
LFLAGS = \$(LFLAGS) coredll.lib user32.lib
LFLAGS = -entry:_DllMainCRTStartup -ignore:4078 -align:4096 \$(LFLAGS)

!ELSEIF "\$(BUILD)" == "wce_sh3_dbg"

PATH = \\msdev\\wce\\bin;\$(PATH)
PATH = \\Program^ Files\\DevStudio\\wce\\bin;\$(PATH)
INCLUDE = ..\\wceinc
LIB = ..\\wcelib\\shx\\common\\ce\\debug
LIB = \$(LIB);\\msdev\\wce\\lib\\wcesh
LIB = \$(LIB);\\Program^ Files\\DevStudio\\wce\\lib\\wce100\\wcesh
CFLAGS = -DDEBUG -Od -Zi
CFLAGS = \$(CFLAGS) -DWIN32 -D_WINDOWS -DPEGASUS
CFLAGS = \$(CFLAGS) -DSHx -DUNDER_CE
CPP = shcl \$(CFLAGS)
CL = shcl \$(CFLAGS)
LINKER = shcl
LFLAGS = \$(LFLAGS) coredll.lib
LFLAGS = -entry:_DllMainCRTStartup -ignore:4078 \$(LFLAGS)

!ELSEIF "\$(BUILD)" == "wce_sh3_shp"

PATH = \\msdev\\wce\\bin;\$(PATH)
PATH = \\Program^ Files\\DevStudio\\wce\\bin;\$(PATH)
INCLUDE = ..\\wceinc
LIB = ..\\wcelib\\shx\\common\\ce\\retail
LIB = \$(LIB);\\msdev\\wce\\lib\\wcesh
LIB = \$(LIB);\\Program^ Files\\DevStudio\\wce\\lib\\wce100\\wcesh
CFLAGS = -O1
CFLAGS = \$(CFLAGS) -DWIN32 -D_WINDOWS -DPEGASUS
CFLAGS = \$(CFLAGS) -DSHx -DUNDER_CE
CPP = shcl \$(CFLAGS)
CL = shcl \$(CFLAGS)
LINKER = shcl
LFLAGS = \$(LFLAGS) coredll.lib
LFLAGS = -entry:_DllMainCRTStartup -ignore:4078 \$(LFLAGS)

!ELSE

!ERROR \$(BUILD) Unknown Build.  Need to learn this one.

!ENDIF 

INCLUDE = .;..\\inc;..\\lsinc;..\\tom;\$(INCLUDE);\\otools9\\inc\\win
CFLAGS = \$(USERCFLAGS) \$(CFLAGS) -DUNICODE -nologo
CFLAGS = \$(CFLAGS) -Zl -W4 -Ob1 -FR -GX-
CFLAGS = \$(CFLAGS) -YX_common.h

LFLAGS = \$(USERLFLAGS) \$(LFLAGS) /nologo
LFLAGS = /implib:riched20.lib /def:riched20.def /ignore:4078 /map \$(LFLAGS) /NODEFAULTLIB:uuid.lib
LFLAGS = /dll /out:\$(ODIR)\\riched20.dll /base:0x48000000 \$(LFLAGS)

.c\{\$(ODIR)\}.obj:
	cl \$(CFLAGS) /c -Fo\$\@ \$\<

.cpp\{\$(ODIR)\}.obj:
	cl \$(CFLAGS) /c -Fo\$\@ \$\<

all: \$(ODIR)\\dxfrobj.obj \\
	\$(ODIR)\\tomsel.obj \\
	\$(ODIR)\\dispml.obj \\
	\$(ODIR)\\doc.obj \\
    \$(ODIR)\\rtflex.obj \\
	\$(ODIR)\\render.obj \\
	\$(ODIR)\\dispprt.obj \\
	\$(ODIR)\\measure.obj \\
	\$(ODIR)\\util.obj \\
    \$(ODIR)\\host.obj \\
	\$(ODIR)\\select.obj \\
	\$(ODIR)\\callmgr.obj \\
	\$(ODIR)\\dfreeze.obj \\
    \$(ODIR)\\rtext.obj \\
	\$(ODIR)\\rtfwrit.obj \\
	\$(ODIR)\\propchg.obj \\
	\$(ODIR)\\m_undo.obj \\
	\$(ODIR)\\rtfwrit2.obj \\
    \$(ODIR)\\clasifyc.obj \\
	\$(ODIR)\\cmsgflt.obj \\
	\$(ODIR)\\ime.obj \\
	\$(ODIR)\\magellan.obj \\
	\$(ODIR)\\text.obj \\
	\$(ODIR)\\runptr.obj \\
    \$(ODIR)\\disp.obj \\
	\$(ODIR)\\format.obj \\
	\$(ODIR)\\antievt.obj \\
	\$(ODIR)\\reinit.obj \\
    \$(ODIR)\\objmgr.obj \\
	\$(ODIR)\\ldte.obj \\
	\$(ODIR)\\rtfread2.obj \\
    \$(ODIR)\\dragdrp.obj \\
	\$(ODIR)\\urlsup.obj \\
	\$(ODIR)\\CFPF.obj \\
	\$(ODIR)\\uuid.obj \\
    \$(ODIR)\\frunptr.obj \\
	\$(ODIR)\\edit.obj \\
	\$(ODIR)\\line.obj \\
	\$(ODIR)\\TOMFMT.obj \\
    \$(ODIR)\\dispsl.obj \\
	\$(ODIR)\\coleobj.obj \\
	\$(ODIR)\\object.obj \\
	\$(ODIR)\\osdc.obj \\
	\$(ODIR)\\tomrange.obj \\
    \$(ODIR)\\notmgr.obj \\
	\$(ODIR)\\font.obj \\
	\$(ODIR)\\HASH.obj \\
	\$(ODIR)\\rtfread.obj \\
    \$(ODIR)\\lbhost.obj \\
    \$(ODIR)\\cbhost.obj \\
    \$(ODIR)\\devdsc.obj \\
    \$(ODIR)\\debug.obj \\
	\$(ODIR)\\range.obj \\
	\$(ODIR)\\array.obj \\
	\$(ODIR)\\TOMDOC.obj \\
	\$(ODIR)\\textserv.obj \\
	\$(ODIR)\\w32sys.obj \\
	\$(ODIR)\\ols.obj \\
	\$(ODIR)\\olsole.obj \\
	\$(ODIR)\\uspi.obj \\
	\$(ODIR)\\txtbrk.obj \\
	\$(ODIR)\\iaccess.obj \\
	\$(CHKSTK) \\
	\$(FTOL) \\
	\$(MEMMOVE) \\
	\$(MEMSET) \\
	\$(MEMCMP) \\
	\$(MEMCPY) \\
	\$(STRLEN)
	
	rc \$(RCFLAGS) richedit.rc
	\$(LINKER) \$(LFLAGS) \$\*\* richedit.res
	bscmake /oriched20.bsc /nologo \*.sbr

clean:
	-del riched20.dll
	-del *.lib
	-del *.obj
	-del *.sbr
	-del *.pch
	-del *.pdb
	-del *.idb
	-del *.ilk
EOT
;

	close (MAKEFILE);
	$ENV{'include'} = '.;..\inc;..\..\tom';
	$cppfiles = "antievt.cpp ";
	$cppfiles .= "array.cpp ";
	$cppfiles .= "callmgr.cpp ";
	$cppfiles .= "cfpf.cpp ";
	$cppfiles .= "clasifyc.cpp ";
	$cppfiles .= "cmsgflt.cpp ";
	$cppfiles .= "coleobj.cpp ";
	$cppfiles .= "debug.cpp ";
	$cppfiles .= "devdsc.cpp ";
	$cppfiles .= "dfreeze.cpp ";
	$cppfiles .= "disp.cpp ";
	$cppfiles .= "dispml.cpp ";
	$cppfiles .= "dispprt.cpp ";
	$cppfiles .= "dispsl.cpp ";
	$cppfiles .= "doc.cpp ";
	$cppfiles .= "dragdrp.cpp ";
	$cppfiles .= "dxfrobj.cpp ";
	$cppfiles .= "edit.cpp ";
	$cppfiles .= "font.cpp ";
	$cppfiles .= "format.cpp ";
	$cppfiles .= "frunptr.cpp ";
	$cppfiles .= "hash.cpp ";
	$cppfiles .= "host.cpp ";
	$cppfiles .= "ime.cpp ";
	$cppfiles .= "ldte.cpp ";
	$cppfiles .= "line.cpp ";
	$cppfiles .= "m_undo.cpp ";
	$cppfiles .= "magellan.cpp ";
	$cppfiles .= "measure.cpp ";
	$cppfiles .= "notmgr.cpp ";
	$cppfiles .= "object.cpp ";
	$cppfiles .= "objmgr.cpp ";
	$cppfiles .= "osdc.cpp ";
	$cppfiles .= "propchg.cpp ";
	$cppfiles .= "range.cpp ";
	$cppfiles .= "reinit.cpp ";
	$cppfiles .= "render.cpp ";
	$cppfiles .= "rtext.cpp ";
	$cppfiles .= "rtflex.cpp ";
	$cppfiles .= "rtflog.cpp ";
	$cppfiles .= "rtfread.cpp ";
	$cppfiles .= "rtfread2.cpp ";
	$cppfiles .= "rtfwrit.cpp ";
	$cppfiles .= "rtfwrit2.cpp ";
	$cppfiles .= "runptr.cpp ";
	$cppfiles .= "select.cpp ";
	$cppfiles .= "text.cpp ";
	$cppfiles .= "textserv.cpp ";
	$cppfiles .= "tokens.cpp ";
	$cppfiles .= "tomdoc.cpp ";
	$cppfiles .= "tomfmt.cpp ";
	$cppfiles .= "tomrange.cpp ";
	$cppfiles .= "tomsel.cpp ";
	$cppfiles .= "urlsup.cpp ";
	$cppfiles .= "util.cpp ";
	$cppfiles .= "uuid.cpp ";
	$cppfiles .= "w32sys.cpp ";
	$cppfiles .= "w32win32.cpp ";
	$cppfiles .= "w32wince.cpp ";
	$cppfiles .= "ols.cpp ";
	$cppfiles .= "olsobj.cpp ";
	$cppfiles .= "lbhost.cpp ";
	$cppfiles .= "cbhost.cpp ";
	$cppfiles .= "uspi.cpp ";
	$cppfiles .= "txtbrk.cpp ";
	$cppfiles .= "iaccess.cpp ";


	print $cppfiles;
	system ("mkdep -n -s .obj $cppfiles >> makefile");
}
