##########################################################################
#
# Makefile for OUTLUI.DLL
#
# Usage:    NMAKE           (builds DEBUG library)
#    or:    NMAKE RELEASE=1 (builds RELEASE library -- no debug symbols)
#    or:    NMAKE clean     (erase all compiled files)
#
# Environment variables:
#       DEVROOT_DIR=<path>  (root dir for sample code development)
#
##########################################################################

LIBNAME       = outlui

!ifndef DEVROOT_DIR
!error You must define DEVROOT_DIR (ole20 sub-tree)
!endif
!ifndef INCLUDE
!error You must define INCLUDE (non ole20 include files)
!endif
!ifndef LIB
!error You must deinfe LIB (non ole20 libraries)
!endif
!ifndef OLEBUILD
OLEBUILD=NT
!endif

OLE2_H=$(DEVROOT_DIR)\h
OLE2_LIB=$(DEVROOT_DIR)\lib

!ifndef SAMPLE_DIR
SAMPLE_DIR = $(DEVROOT_DIR)\samples
!endif
SRC_DIR   = $(SAMPLE_DIR)\$(APP)

MAKEFILE = makefile

# ============================================================================
# File: M A K E F I L E
# 
#  NMAKE description file for the OLE2.0 User Interface DLL
#
# Copyright (C) Microsoft Corporation, 1992-1993.  All Rights Reserved.
# Microsoft Confidential.
# ============================================================================

# ----------------------------------------------------------------------------
#                          U I M A K E . I N I
# ----------------------------------------------------------------------------


!if "$(OLEBUILD)" == "DOS" || "$(OLEBUILD)" == ""
DOS=1
!endif

!if "$(OLEBUILD)" == "NT"
NT=1

!if "$(MACHINE)" == "i386" || "$(MACHINE)" == ""
MACHINE    = i386
MACHINE_D  = _X86_
MACHINE_CC = cl386
!endif

!if "$(MACHINE)" == "MIPS"
MACHINE    = mips
MACHINE_D  = _MIPS_
MACHINE_CC = cc
!endif

!endif

!include "uimake.ini"

!ifndef LANG
LANG=USA
!endif

!ifndef BUILD
BUILD=dll
!endif

GOAL: MAKEINI
    nmake -f $(MAKEFILE) PRELUDE SETFLAGS $(LIBNAME).$(BUILD)


MAKEINI:
    nmake -f $(MAKEFILE) LIBNAME=$(LIBNAME) LANG=$(LANG) BUILD=$(BUILD) RESOURCE=RESOUCE REL_DIR=$(OLEREL_DIR) DEBUG


!if "$(INSTALL_DIR)"==""
INSTALL_DIR = $(REL_DIR)
!endif

#use src/tok pairs to build if localized version
!if ("$(LANG)"!="USA") && ("$(LANG)"!="usa")
SRCTOK=1
!endif

# ----------------------------------------------------------------------------
#                      O B J E C T   F I L E   L I S T
# ----------------------------------------------------------------------------

UI_COBJS = \
           D^\busy.obj\
           D^\common.obj\
           D^\convert.obj\
           D^\dbgutil.obj\
           D^\drawicon.obj\
           D^\hatch.obj\
           D^\icon.obj\
           D^\iconbox.obj\
           D^\insobj.obj\
           D^\links.obj\
           D^\msgfiltr.obj\
           D^\enumfetc.obj\
           D^\objfdbk.obj\
           D^\ole2ui.obj\
           D^\olestd.obj\
           D^\targtdev.obj\
           D^\oleutl.obj\
           D^\pastespl.obj\
           D^\regdb.obj\
           D^\resimage.obj\
           D^\utility.obj\

UI_NOPCOBJS = \
           D^\geticon.obj\

UI_DLLOBJS = \
           D^\dllfuncs.obj\

PRECOMPOBJ=$(O)precomp.obj

PRECOMP=$(O)precomp.pch

# ----------------------------------------------------------------------------
#                       R E S O U R C E   L I S T
# ----------------------------------------------------------------------------
RES =      \
           busy.h                           \
           common.h                         \
           convert.h                        \
           edlinks.h                        \
           geticon.h                        \
           icon.h                           \
           iconbox.h                        \
           insobj.h                         \
           msgfiltr.h                       \
           enumfetc.h                       \
           ole2ui.h                         \
           pastespl.h                       \
           resimage.h                       \
           $(RESOURCE)\STATIC\default.ico   \
           $(RESOURCE)\STATIC\bang.ico   \
           $(RESOURCE)\STATIC\egares.bmp    \
           $(RESOURCE)\STATIC\hivgares.bmp  \
           $(RESOURCE)\STATIC\vgares.bmp    \
           $(RESOURCE)\$(LANG)\strings.rc   \
           $(RESOURCE)\$(LANG)\busy.dlg     \
           $(RESOURCE)\$(LANG)\convert.dlg  \
           $(RESOURCE)\$(LANG)\fileopen.dlg \
           $(RESOURCE)\$(LANG)\icon.dlg     \
           $(RESOURCE)\$(LANG)\insobj.dlg   \
           $(RESOURCE)\$(LANG)\links.dlg    \
           $(RESOURCE)\$(LANG)\pastespl.dlg \
           $(RESOURCE)\$(LANG)\prompt.dlg   \
           $(RESOURCE)\ole2ui.rcv   \
           $(RESOURCE)\$(LANG)\verlocal.h   \

# ----------------------------------------------------------------------------
#         D E B U G   S T A T I C   L I B   M A K E   P A R A M E T E R S
# ----------------------------------------------------------------------------
DEBUGLIB:  
    @echo Creating DEBUG LIB <<uimake.ini
#  This is the DEBUG static .LIB UILibrary INI file
MSG=DEBUG Static LIB Version ($$(LANG))
DEBUG=1
MODEL=M
# Make a static library called OLE2UI.LIB
LIBNAME=OLE2UI
REL_DIR=$(REL_DIR)
OLEREL_DIR=$(OLEREL_DIR)
OBJ=DEBUGLIB
BUILD=LIB
RESOURCE=RESOURCE
CFLAGS=-c -Od -GA2s -W3 -Zpei -A$(MODEL) -D_DEBUG
RFLAGS=-D DEBUG
LFLAGS=/MAP:FULL /CO /LINE /NOD /NOE /SE:300
UILIBS=mlibcew libw ole2 storage shell commdlg toolhelp
CC=cl
AS=masm
RS=rc
LK=link
LANG=$(LANG)
LIBOBJS = $$(UI_COBJS:D^\=DEBUGLIB^\) $$(UI_NOPCOBJS:D^\=DEBUGLIB\NOPC^\)
<<KEEP
   @echo Creating <<uiclass.h
#define OLEUICLASS1 "$(LIBNAME)Class1"
#define OLEUICLASS2 "$(LIBNAME)Class2"
<<KEEP
    @echo Enter "$(MAKE)" to make Debug static LIB UILibrary
    

# ----------------------------------------------------------------------------
#      R E T A I L   S T A T I C   L I B   M A K E   P A R A M E T E R S
# ----------------------------------------------------------------------------
RETAILIB:  
    @echo Creating RETAIL LIB <<uimake.ini
#  This is the RETAIL static .LIB UILibrary INI file
MSG=RETAIL Static LIB Version ($$(LANG))
RETAIL=1
MODEL=M
# Make a static library called OLE2UI.LIB
LIBNAME=OLE2UI
REL_DIR=$(REL_DIR)
OLEREL_DIR=$(OLEREL_DIR)
OBJ=RETAILIB
BUILD=LIB
RESOURCE=RESOURCE
CFLAGS=-c -Os -GA2s -W3 -Zpe -A$(MODEL)
RFLAGS=
LFLAGS=/MAP:FULL /LINE /NOD /NOE /SE:300
UILIBS=mlibcew libw ole2 storage shell commdlg toolhelp
CC=cl
AS=masm
RS=rc
LK=link
LANG=$(LANG)
LIBOBJS = $$(UI_COBJS:D^\=RETAILIB^\) $$(UI_NOPCOBJS:D^\=RETAILIB\NOPC^\)
<<KEEP
   @echo Creating <<uiclass.h
#define OLEUICLASS1 "$(LIBNAME)Class1"
#define OLEUICLASS2 "$(LIBNAME)Class2"
<<KEEP
    @echo Enter "$(MAKE)" to make Retail static LIB UILibrary

# ----------------------------------------------------------------------------
#                 D E B U G   M A K E   P A R A M E T E R S
# ----------------------------------------------------------------------------
!ifdef NT

DEBUG:  
    @echo Creating DEBUG for NT <<uimake.ini
#  This is the DEBUG UILibrary INI file
MSG=DEBUG Version ($$(LANG))
DEBUG=1
LIBNAME=$(LIBNAME)
REL_DIR=$(REL_DIR)
OLEREL_DIR=$(OLEREL_DIR)
OBJ=DEBUG
RESOURCE=RESOURCE

CC        = $(MACHINE_CC)
DEFS1     = /D$(MACHINE_D) /D_DEBUG /D_DEBUGTRACE=0 /DWIN32 /DOLE2SHIP
DEFS2     = /D$(MACHINE)=1 /D_NTWIN /D_WINDOWS /DWINVER=0x030A /D_DLL
CFLAGS    = $$(DEFS1) $$(DEFS2) /Z7 /Od /c /Fc /G3 /W3 /nologo $(CL)
LFLAGS    = -subsystem:windows -machine:$(MACHINE) -debug:mapped,full -debugtype:both
RFLAGS    = /DWIN32 /D_DEBUG /DOLE2SHIP
UILIBS1   = mpr.lib crtdll.lib 
UILIBS2	  = ole2w32.lib storag32.lib
UILIBS3   = kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib comdlg32.lib
UILIBS    = $$(UILIBS1) $$(UILIBS2) $$(UILIBS3)

LK        = link32

LANG      = $(LANG)
RS        = rc

DLLOBJS = $$(UI_DLLOBJS:D^\=DEBUG^\)
LIBOBJS = $$(UI_COBJS:D^\=DEBUG^\) $$(UI_NOPCOBJS:D^\=DEBUG\NOPC^\)
<<KEEP
   @echo Creating <<uiclass.h
#define OLEUICLASS1 "$(LIBNAME)Class1"
#define OLEUICLASS2 "$(LIBNAME)Class2"
<<KEEP
    @echo Enter "$(MAKE)" to make Debug UILibrary

!else

DEBUG:  
    @echo Creating DEBUG <<uimake.ini
#  This is the DEBUG UILibrary INI file
MSG=DEBUG DLL Version ($$(LANG))
DEBUG=1
MODEL=M
LIBNAME=$(LIBNAME)
REL_DIR=$(REL_DIR)
OLEREL_DIR=$(OLEREL_DIR)
OBJ=DEBUG
BUILD=DLL
RESOURCE=RESOURCE
CFLAGS=-c -Od -GD2s -W3 -Zpei -AMw -D_DEBUG -DDLL_VER -D_WINDLL
RFLAGS=-D DEBUG -D DLL_VER
LFLAGS=/MAP:FULL /CO /LINE /NOD /NOE /SE:300
UILIBS=mdllcew libw ole2 storage shell commdlg toolhelp
CC=cl
RS=rc
LK=link
LANG=$(LANG)
DLLOBJS = $$(UI_DLLOBJS:D^\=DEBUG^\)
LIBOBJS = $$(UI_COBJS:D^\=DEBUG^\) $$(UI_NOPCOBJS:D^\=DEBUG\NOPC^\)
<<KEEP
   @echo Creating <<uiclass.h
#define OLEUICLASS1 "$(LIBNAME)Class1"
#define OLEUICLASS2 "$(LIBNAME)Class2"
<<KEEP
    @echo Enter "$(MAKE)" to make Debug UILibrary

!endif
# ----------------------------------------------------------------------------
#                R E T A I L   D L L   M A K E   P A R A M E T E R S
# ----------------------------------------------------------------------------
RETAIL:
    @echo Creating RETAIL <<uimake.ini
#  This is the RETAIL UILibrary INI file
MSG=RETAIL DLL Version ($$(LANG))
RETAIL=1
MODEL=M
LIBNAME=$(LIBNAME)
REL_DIR=$(REL_DIR)
OLEREL_DIR=$(OLEREL_DIR)
OBJ=RETAIL
BUILD=DLL
RESOURCE=RESOURCE
CFLAGS=-c -Os -GD2s -W3 -Zpe -AMw -DOPTIMIZE -DDLL_VER -D_WINDLL
RFLAGS=-D DLL_VER
LFLAGS=/MAP /NOD /NOE /SE:300 /AL:16
UILIBS=mdllcew libw ole2 storage shell commdlg toolhelp
CC=cl
RS=rc
LK=link
LANG=$(LANG)
DLLOBJS = $$(UI_DLLOBJS:D^\=RETAIL^\)
LIBOBJS = $$(UI_COBJS:D^\=RETAIL^\) $$(UI_NOPCOBJS:D^\=RETAIL\NOPC^\)
<<KEEP
   @echo Creating <<uiclass.h
#define OLEUICLASS1 "$(LIBNAME)Class1"
#define OLEUICLASS2 "$(LIBNAME)Class2"
<<KEEP
    @echo Enter "$(MAKE)" to make Retail UILibrary

!if [if not exist $(OBJ)\*. md $(OBJ) >nul]
!error Object subdirectory $(OBJ)\ could not be created
!endif
!if [if not exist $(OBJ)\NOPC\*. md $(OBJ)\NOPC > nul]
!error non-precompiled header object subdirectory $(OBJ)\NOPC\ could not be created
!endif

#select language for version resource if localized version
!if ("$(LANG)"!="USA") && ("$(LANG)"!="usa")
RFLAGS=$(RFLAGS) -D VER_LOC
!endif

!if ("$(LIBNAME)"=="PUBOLEUI")
RFLAGS=$(RFLAGS) -D PUBLISHER
!endif

.SUFFIXES: .c .asm .obj .res .rc .def .bmp .ico .exe .dll .cod .str

O=.\$(OBJ)^\

# ----------------------------------------------------------------------------
#                     I N F E R E N C E   R U L E S
# ----------------------------------------------------------------------------
# compile C file without precompiled headers into object directory\NOPC
# dont compile c files etc for lcoalized builds.
!ifndef SRCTOK

{}.c{$(O)NOPC\}.obj: 
    @echo   Compiling $(@B).c  
!ifdef DOS
    SET CL=$(CFLAGS)
    $(CC) -Fo$(O)NOPC\$(@B) $(@B).c
!else
    $(CC) $(CFLAGS) -Fo$(O)NOPC\$(@B) $(@B).c
!endif

# compile C file into object directory
{}.c{$(O)}.obj: 
    @echo   Compiling $(@B).c  
!ifdef DOS
    SET CL=$(CFLAGS) -Yuole2ui.h -Fp$(O)precomp.pch
    $(CC) -Fo$(O)$(@B) $(@B).c
!else
    $(CC) $(CFLAGS) -Yuole2ui.h -Fp$(O)precomp.pch -Fo$(O)$(@B) $(@B).c
!endif

!endif
#endif SRCTOK

{}.rc{$(O)}.res:
    @echo   Resource Compiling $(@B).res  
    $(RS) -I $(RESOURCE)\$(LANG);$(RESOURCE)\static;$(RESOURCE) -FO $(O)$(@B).res -R $(RFLAGS) $(@B).rc
    -del $(LIBNAME).dll

!ifndef SRCTOK
{}.c.cod:
    @echo   Making $(@B).cod  
!ifdef DOS
    SET CL=$(CFLAGS) -f -Fc
    $(CC) $(@B).c
!else
    $(CC) $(CFLAGS) -f- -Fc $(@B).c
!endif
!endif
#endif SRCTOK


# rules for creating rc & dlg files for localized verisons from src/tok pairs
!ifdef SRCTOK

$(RESOURCE)\$(LANG)\busy.dlg : $(RESOURCE)\$(LANG)\busy.tok $(RESOURCE)\src\busy.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\convert.dlg : $(RESOURCE)\$(LANG)\convert.tok $(RESOURCE)\src\convert.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\fileopen.dlg : $(RESOURCE)\$(LANG)\fileopen.tok $(RESOURCE)\src\fileopen.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\icon.dlg : $(RESOURCE)\$(LANG)\icon.tok $(RESOURCE)\src\icon.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\insobj.dlg : $(RESOURCE)\$(LANG)\insobj.tok $(RESOURCE)\src\insobj.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\links.dlg : $(RESOURCE)\$(LANG)\links.tok $(RESOURCE)\src\links.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\pastespl.dlg : $(RESOURCE)\$(LANG)\pastespl.tok $(RESOURCE)\src\pastespl.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\prompt.dlg : $(RESOURCE)\$(LANG)\prompt.tok $(RESOURCE)\src\prompt.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@

$(RESOURCE)\$(LANG)\strings.rc : $(RESOURCE)\$(LANG)\strings.tok $(RESOURCE)\src\strings.src
    tok -q -f $*.tok $(RESOURCE)\src\$(@B).src > $@
!endif

# ----------------------------------------------------------------------------
#                 D E P E N D   F I L E   C R E A T I O N
# ----------------------------------------------------------------------------
UI_CFILE = $(UI_COBJS:.obj=.c) $(UI_DLLOBJS:.obj=.c)
UI_NOPCFILE = $(UI_NOPCOBJS:.obj=.c)
DEPEND: nul
    @echo Making a NEW dependancy file.
    mkdep -p $$(O) -s .obj $(UI_CFILE:D^\=) > tmp.tmp
    sed "s/:/: $$(PRECOMP)/g" < tmp.tmp > depend
    -del tmp.tmp
    mkdep -p $$(O)NOPC\ -s .obj $(UI_NOPCFILE:D^\=) >> depend
    mkdep -p $$(O) -s .pch precomp.c >> depend

# ----------------------------------------------------------------------------
#                      W E L C O M E   B A N N E R
# ----------------------------------------------------------------------------
PRELUDE:
   @echo  ͻ
   @echo   Makefile for UILibrary 
   @echo  ͼ
   @echo            $(MSG)
!ifndef SRCTOK
   set INCLUDE=$(OLEREL_DIR);$(INCLUDE)
   set LIB=$(OLEREL_DIR);$(LIB)
!endif

SETFLAGS:
   set INCLUDE=$(INCLUDE);$(OLE2_H)
   set LIB=$(LIB);$(OLE2_LIB)


# ----------------------------------------------------------------------------
#                        G O A L   T A R G E T S
# ----------------------------------------------------------------------------
!include "depend"

CLEAN: CleanUp GOAL

CleanUp: MAKEINI
    nmake -f $(MAKEFILE) SETFLAGS Delete

Delete:
    -echo y|del .\$(OBJ)\*.*
    -del $(LIBNAME).dll
    -del $(LIBNAME).lib

!ifndef SRCTOK

$(O)precomp.pch: precomp.c
!ifdef DOS
    SET CL=$(CFLAGS) -Fp$(O)precomp.pch -Ycole2ui.h 
    $(CC) -Fo$(O)$(@B) precomp.c
!else
    $(CC) $(CFLAGS) -Fp$(O)precomp.pch -Ycole2ui.h -Fo$(O)$(@B) precomp.c
!endif
!endif
#endif SRCTOK

$(O)ole2ui.res: ole2ui.rc $(RES)

ole2ui.rc : $(RESOURCE)\$(LANG)\strings.rc

#
# Build .LIB static library
#

$(LIBNAME).lib: $(LIBOBJS) $(PRECOMPOBJ)
    -del $(O)$(LIBNAME).lib
    lib @<<
$(O)$(LIBNAME).lib
y
$(PRECOMPOBJ: = +) $(LIBOBJS: = +)

<<
    copy $(O)$(LIBNAME).lib $(LIBNAME).lib

#
# Build .DLL dynamic-link library
#

!if "$(OLEBUILD)" == "NT"
!else
$(O)$(LIBNAME).lib: $(LIBOBJS) $(PRECOMPOBJS)
    -del $(O)$(LIBNAME).lib
    lib @<<
$(O)$(LIBNAME).lib
y
$(PRECOMPOBJ: = +) $(LIBOBJS: = +)

<<
!endif

!if "$(OLEBUILD)" == "NT"

$(LIBNAME).dll: $(LIBNAME).d32 $(PRECOMPOBJS) $(LIBOBJS) $(DLLOBJS) $(O)ole2ui.res
    @echo Linking ...
    lib32  -out:$*.lib -def:$(LIBNAME).d32 -machine:$(MACHINE) $(LIBOBJS) $(DLLOBJS)
    cvtres -$(MACHINE) $(O)ole2ui.res -o $*.rs
    link32 $(LFLAGS)  -entry:LibMain@12 @<<$(BUILD_DIR)\ole2util.lnk
    $(LIBNAME).exp $(LIBOBJS) $(DLLOBJS) $(PRECOMPOBJ) $*.rs -out:$@ -map:$*.map -dll $(UILIBS) 
<<KEEP

!else
$(O)$(LIBNAME).exe: $(O)$(LIBNAME).lib $(DLLOBJS) $(O)ole2ui.res
   @echo į Linking UILibrary 
   @echo Creating <<$(O)$(@B).lnk
$(LFLAGS) +
$(PRECOMPOBJ: = +^
)+
$(DLLOBJS: = +^
)+

$(O)$(@B)
$(@B).map
$(UILIBS) $(O)$(LIBNAME).lib
$(LIBNAME).def
<<KEEP

   $(LK) @$(O)$(@B).lnk
   $(RS) -31 $(RFLAGS) $(O)ole2ui.res $(O)$(LIBNAME).exe

!ifndef SRCTOK
$(LIBNAME).dll: $(O)$(LIBNAME).exe ole2ui.def
    copy $(O)$(LIBNAME).exe $(LIBNAME).dll
    mapsym -n -l $(LIBNAME).map
    implib $(LIBNAME).lib $(LIBNAME).dll
!else
$(LIBNAME).dll: $(O)ole2ui.res
    copy $(RESOURCE)\USA\$(LIBNAME).dll $(LIBNAME).dll
    $(RS) -31 -K $(RFLAGS) $(O)ole2ui.res $(LIBNAME).dll
!endif
!endif
#endif SRCTOK


install: MAKEINI
    nmake -f $(MAKEFILE) SETFLAGS InstallAll

# install built library to $(INSTALL_DIR) dir
InstallAll:
    copy $(LIBNAME).dll $(INSTALL_DIR)
    copy $(LIBNAME).lib $(INSTALL_DIR)
    copy $(LIBNAME).sym $(INSTALL_DIR)
    copy ole2ui.h $(INSTALL_DIR)
    copy msgfiltr.h $(INSTALL_DIR)
    copy enumfetc.h $(INSTALL_DIR)
    copy regdb.h $(INSTALL_DIR)
    copy olestd.h $(INSTALL_DIR)
    copy geticon.h $(INSTALL_DIR)
    copy ole2ui.rc $(INSTALL_DIR)
    copy uiclass.h $(INSTALL_DIR)
	
# EOF ========================================================================
