#############################################################################
#
# Makefile for AGC.dll
#
# Environment variable Requirements:
#   
#    INCLUDE=foo           // can be set to anything, must be set
#    PATH=                 // must have proper nmake on path
#    FEDROOT=<path>        // MUST point to base of fed src enlistment
#    BCBINDIR=<path>       // optional, unless using BCHK=
#    TTBINDIR=<path>       // optional, unless using TRUETIME=
#
# nmake args:
#
#   Clean        // will delete all files in destination dir
#   Full         // will Clean, then build all derived files
#   debug=       // builds a debug build (default)
#   retail=      // builds a retail build
#   test=        // retail but with the _DEBUG preprocessor symbol defined
#                // NOT valid in combination with BCHK=, TRUETIME=, or ICAP=
#   VER=         // must have this argument, \\msr\federation\builds\$(VER) is created/needed
#   BCHK=        // if you want to do a boundschecker build.
#                   note:  you must have BC already installed locally and define BCBINDIR to
#                          point to the directory where nmcl.exe and nmlink.exe reside.
#                          You can use the BCOPTS variable to add options to the BC compile.
#   TRUETIME=    // if you want to instrument the build using Numega TrueTime
#                   note:  you must have TrueTime already installed locally and define TTBINDIR to
#                          point to the directory where the TrueTime nmcl.exe and nmlink.exe reside.  
#                          You can use the TTOPTS variable to add options to the TT compile.
#   VERBOSE=     // if you want verbose build mode. (default is non-verbose)
#
#  All derived files (temp files, .res, output of midl, *.obj, *.exe/.dll...
#  are placed directly into the appropriate tree under $(FEDROOT)\Objs.
#
#  The $(FEDROOT)\Objs tree is created on demand.
#  Since no derived files are placed in the source tree, multiple builds
#  can be run SIMULTANEOUSLY.
#


#############################################################################
# Environment Variables
#

SRCROOT=AGC
MAINTARGROOT=AGC
MAINTARGEXT=dll
INCLUDELOCAL=$(FEDSRC)\ZLib;$(FEDSRC)\Igc;$(FEDSRC)\Test\Inc;$(DESTDIR);$(FEDEXT)\dx6\include;$(FEDEXT)\Zone;$(FEDEXT)\sbn\include
PCHROOT=pch
PCHINC=$(FEDSRC)\ZLib\*.h $(FEDSRC)\Igc\*.h
PCHINCLOCAL=
PROJCLEAN=ProjectClean
MIDLINCLOCAL=/I ..\test\Inc /I ..\Inc
CARGSLOCAL=/D _ATL_STATIC_REGISTRY /D _WINDLL /D _USRDLL


#############################################################################
# Rules
#

!include "..\makefile.inc"


#############################################################################
# Build Targets
#

RARGS=/l 0x409 $(RARGSFLAVOR)

IDLTARGS= $(DESTDIR)\AGCIDL.h      \
          $(DESTDIR)\AGC.h         \
          $(DESTDIR)\AGC.tlb

OBJS= $(DESTDIR)\AGC.obj                \
      $(DESTDIR)\AGCGlobal.obj          \
      $(DESTDIR)\AGCVector.obj          \
      $(DESTDIR)\AGCOrientation.obj     \
      $(DESTDIR)\AGCEvent.obj           \
      $(DESTDIR)\AGCEventData.obj       \
      $(DESTDIR)\AGCEventDef.obj        \
      $(DESTDIR)\AGCEventLogger.obj     \
      $(DESTDIR)\AGCEventIDRange.obj    \
      $(DESTDIR)\AGCEventIDRanges.obj   \
      $(DESTDIR)\AGCCommand.obj         \
      $(DESTDIR)\AGCVersionInfo.obj     \
      $(DESTDIR)\AGCDBParams.obj        \
      $(DESTDIR)\AGCGameParameters.obj  \
      $(DESTDIR)\TCNullStream.obj       \
      $(DESTDIR)\TCUtility.obj          \
      $(DESTDIR)\TCMarshalByValue.obj   \
      $(DESTDIR)\TCStrings.obj          \
      $(DESTDIR)\AdminSessionHelper.obj \
      $(DESTDIR)\AGCHullType.obj        \
      $(DESTDIR)\AGCModel.obj           \
      $(DESTDIR)\AGCModels.obj          \
      $(DESTDIR)\AGCProbe.obj           \
      $(DESTDIR)\AGCProbes.obj          \
      $(DESTDIR)\AGCGame.obj            \
      $(DESTDIR)\AGCShip.obj            \
      $(DESTDIR)\AGCShips.obj           \
      $(DESTDIR)\AGCStation.obj         \
      $(DESTDIR)\AGCStations.obj        \
      $(DESTDIR)\AGCAleph.obj           \
      $(DESTDIR)\AGCAlephs.obj          \
      $(DESTDIR)\AGCSector.obj          \
      $(DESTDIR)\AGCSectors.obj         \
      $(DESTDIR)\AGCTeam.obj            \
      $(DESTDIR)\AGCTeams.obj           \
      $(DESTDIR)\AGCAsteroid.obj        \
      $(DESTDIR)\AGCAsteroids.obj       \
      $(DESTDIR)\pch.obj

LIBS= $(LIBSFLAVOR) \
      kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib        \
      advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib \
      version.lib delayimp.lib ws2_32.lib dplayx.lib comsupp.lib

USERLIBS= $(DESTDIR)\AGCGuid.lib                            \
          $(FEDROOT)\Objs\$(FLAVOR)\Test\TCLib\TCLib.lib    \
          $(FEDROOT)\Objs\$(FLAVOR)\ZLib\ZLib.lib           \
          $(FEDROOT)\Objs\$(FLAVOR)\_utility\Utility.lib    \
          $(FEDROOT)\Objs\$(FLAVOR)\igc\igc.lib             \
          $(DXROOT)\lib\dxguid.lib                          \
          $(FEDEXT)\sbn\lib\nt50\uuid.lib

RESFILE = $(DESTDIR)\AGC.res

DLLFLAGS= /DLL /DEF:AGC.def

LARGS= /LIBPATH:$(FEDEXT)\Vc\lib                     \
       /OUT:$(MAINTARGFULLPATH) /SUBSYSTEM:CONSOLE   \
       $(LARGSFLAVOR) /PDB:$(PDB) $(NOLOGO)          \
       /delayload:ole32.dll /delayload:oleaut32.dll  \
       /delayload:user32.dll /delayload:advapi32.dll \
       /MACHINE:I386 $(DLLFLAGS)


#############################################################################
#
# Dependencies
#

$(MAINTARGFULLPATH) : $(DESTDIR) $(IDLTARGS) $(RESFILE) $(OBJS) $(USERLIBS) $(DESTDIR)\AGCGuid.lib
  $(LINK) $(LARGS) $(OBJS) $(RESFILE) $(LIBS) $(USERLIBS)
  $(MAPSYM) -o $(DESTDIR)\$(MAINTARGROOT).sym $(DESTDIR)\$(MAINTARGROOT).map 2> NUL

!ifdef browse
$(BSCTARG) : $(DESTDIR)\*.sbr
  @echo Creating browse info file ($(MAINTARGROOT).bsc)...
  $(BSCMAKE) /nologo /Iu /o$(BSCTARG) $(DESTDIR)\*.sbr
!endif

$(PROJCLEAN): UnregServer
  $(REMDIR) $(DESTDIR)

XMLTransforms: $(DESTDIR)\AGCEventsCPP.h   \
               $(DESTDIR)\AGCEventsIDL.idl \
               $(DESTDIR)\AGCEventsMC.mc   \
               $(DESTDIR)\AGCEventsRC2.rc2 \
               $(DESTDIR)\AGCEventsRCH.h   

$(DESTDIR)\AGCEventsCPP.h    : AGCEvents.xml AGCEventsCPP.xsl
  @echo Transforming AGCEvents.xml through AGCEventsCPP.xsl
  cscript //NoLogo XMLXForm.js AGCEvents.xml AGCEventsCPP.xsl $(DESTDIR)\AGCEventsCPP.h

$(DESTDIR)\AGCEventsIDL.idl  : AGCEvents.xml AGCEventsIDL.xsl
  @echo Transforming AGCEvents.xml through AGCEventsIDL.xsl
  cscript //NoLogo XMLXForm.js AGCEvents.xml AGCEventsIDL.xsl $(DESTDIR)\AGCEventsIDL.idl

$(DESTDIR)\AGCEventsMC.mc    : AGCEvents.xml AGCEventsMC.xsl
  @echo Transforming AGCEvents.xml through AGCEventsMC.xsl
  cscript //NoLogo XMLXForm.js AGCEvents.xml AGCEventsMC.xsl $(DESTDIR)\AGCEventsMC.mc

$(DESTDIR)\AGCEventsRC2.rc2  : AGCEvents.xml AGCEventsRC2.xsl
  @echo Transforming AGCEvents.xml through AGCEventsRC2.xsl
  cscript //NoLogo XMLXForm.js AGCEvents.xml AGCEventsRC2.xsl $(DESTDIR)\AGCEventsRC2.rc2

$(DESTDIR)\AGCEventsRCH.h    : AGCEvents.xml AGCEventsRCH.xsl
  @echo Transforming AGCEvents.xml through AGCEventsRCH.xsl
  cscript //NoLogo XMLXForm.js AGCEvents.xml AGCEventsRCH.xsl $(DESTDIR)\AGCEventsRCH.h

$(DESTDIR)\AGC0409.bin    \
$(DESTDIR)\AGCEventsMC.rc : $(DESTDIR)\AGCEventsMC.mc 
  mc.exe -r $(DESTDIR) -h $(DESTDIR) $(DESTDIR)\AGCEventsMC.mc

$(DESTDIR)\AGCIDL.h    \
$(DESTDIR)\AGCIDL_d.c  \
$(DESTDIR)\AGCIDL_p.c  \
$(DESTDIR)\AGCIDL_i.c  : $(DESTDIR)\AGCEventsIDL.idl ..\Inc\AGCIDL.idl \
                         ..\Test\Inc\ScrRun.idl  \
                         ..\Test\TCAtl\VersionInfoImpl.idl
  $(MIDL) $(MIDLARGS) ..\Inc\AGCIDL.idl 2>NUL

$(DESTDIR)\AGC.h    \
$(DESTDIR)\AGC.tlb  \
$(DESTDIR)\AGC_i.c  : AGC.idl $(DESTDIR)\AGCIDL.h
  $(MIDL) $(MIDLARGS) .\AGC.idl 2>NUL

$(DESTDIR)\AGCGuid.obj : AGCGuid.c $(DESTDIR)\AGCIDL_i.c $(DESTDIR)\AGC_i.c
  $(CC) $(NOLOGO) /c /Fo$(DESTDIR)\AGCGuid.obj AGCGuid.c

$(DESTDIR)\AGCGuid.lib : $(DESTDIR)\AGCGuid.obj
  $(LIB) $(NOLOGO) /out:$(DESTDIR)\AGCGuid.lib $(DESTDIR)\AGCGuid.obj

$(DESTDIR)\AGC.obj               : $(PCHFILE)
$(DESTDIR)\AGCGlobal.obj         : $(PCHFILE)
$(DESTDIR)\AGCVector.obj         : $(PCHFILE)
$(DESTDIR)\AGCOrientation.obj    : $(PCHFILE)
$(DESTDIR)\AGCEvent.obj          : $(PCHFILE)
$(DESTDIR)\AGCEventData.obj      : $(PCHFILE)
$(DESTDIR)\AGCEventDef.obj       : $(PCHFILE) $(DESTDIR)\AGCEventsCPP.h
$(DESTDIR)\AGCEventLogger.obj    : $(PCHFILE)
$(DESTDIR)\AGCEventIDRange.obj   : $(PCHFILE)
$(DESTDIR)\AGCEventIDRanges.obj  : $(PCHFILE)
$(DESTDIR)\AGCCommand.obj        : $(PCHFILE)
$(DESTDIR)\AGCVersionInfo.obj    : $(PCHFILE)
$(DESTDIR)\AGCDBParams.obj       : $(PCHFILE)
$(DESTDIR)\AGCGameParameters.obj : $(PCHFILE)
$(DESTDIR)\TCNullStream.obj      : $(PCHFILE)
$(DESTDIR)\TCUtility.obj         : $(PCHFILE)
$(DESTDIR)\TCMarshalByValue.obj  : $(PCHFILE)
$(DESTDIR)\TCStrings.obj         : $(PCHFILE)
$(DESTDIR)\AdminSessionHelper.obj: $(PCHFILE)
$(DESTDIR)\AGCHullType.obj       : $(PCHFILE)
$(DESTDIR)\AGCModel.obj          : $(PCHFILE)
$(DESTDIR)\AGCModels.obj         : $(PCHFILE)
$(DESTDIR)\AGCProbe.obj          : $(PCHFILE)
$(DESTDIR)\AGCProbes.obj         : $(PCHFILE)
$(DESTDIR)\AGCGame.obj           : $(PCHFILE)
$(DESTDIR)\AGCShip.obj           : $(PCHFILE)
$(DESTDIR)\AGCShips.obj          : $(PCHFILE)
$(DESTDIR)\AGCStation.obj        : $(PCHFILE)
$(DESTDIR)\AGCStations.obj       : $(PCHFILE)
$(DESTDIR)\AGCAleph.obj          : $(PCHFILE)
$(DESTDIR)\AGCAlephs.obj         : $(PCHFILE)
$(DESTDIR)\AGCSector.obj         : $(PCHFILE)
$(DESTDIR)\AGCSectors.obj        : $(PCHFILE)
$(DESTDIR)\AGCTeam.obj           : $(PCHFILE)
$(DESTDIR)\AGCTeams.obj          : $(PCHFILE)
$(DESTDIR)\AGCAsteroid.obj       : $(PCHFILE)
$(DESTDIR)\AGCAsteroids.obj      : $(PCHFILE)

$(RESFILE): $(FEDSRC)\Inc\VerRes.rc $(MAINTARGROOT).rc $(MAINTARGROOT).rc2 resource.h *.rgs \
            $(DESTDIR)\AGCEventsRC2.rc2 $(DESTDIR)\AGCEventsRCH.h   \
            $(DESTDIR)\AGCEventsMC.rc $(DESTDIR)\AGC.tlb
   @echo Compiling Resources...
   @copy $(MAINTARGROOT).rc $(DESTDIR)
   @echo #define FLAVOR "$(FLAVOR)" >>$(DESTDIR)\$(MAINTARGROOT).rc
   @type $(FEDSRC)\Inc\VerRes.rc >>$(DESTDIR)\$(MAINTARGROOT).rc
   $(RC) $(RARGS) /D "DLL" /Fo$(DESTDIR)\$(MAINTARGROOT).res $(DESTDIR)\$(MAINTARGROOT).rc

RegServer:
  $(REGDLL)

UnregServer:
  @echo Unregistering $(MAINTARGFULLPATH)...
  $(UNREGDLL)
  @if not exist $(MAINTARGFULLPATH) echo File $(MAINTARGFULLPATH) does not exist
  @if exist $(DESTDIR)\RegSvr32.trg del $(DESTDIR)\RegSvr32.trg

$(DESTDIR)\RegSvr32.trg:
  @echo Registering $(MAINTARGFULLPATH)...
  $(REGDLL)
  @echo regsvr32 execution time > $(DESTDIR)\RegSvr32.trg
  @if not exist $(MAINTARGFULLPATH) echo File $(MAINTARGFULLPATH) does not exist

BuildAndReg: $(MAINTARGFULLPATH) $(DESTDIR)\RegSvr32.trg
