#=====================================================================
#
# Toplevel makefile for OMNeT++ libraries and programs
#
# platform: Windows NT, Windows 2000
# compiler: MSVC 6.0
#
#=====================================================================

#
# Options
#
include configuser.vc

MOPTS=/nologo
MAKEFILE=/F Makefile.vc

# Win9x, ME not supported (shell is crippled)
!if "$(OS)"!="Windows_NT"
!error This makefile only works on NT (NT4.0, Win2K, XP)
!endif

# envir_ilib only needed if dlls are to be built
!if "$(LIB_SUFFIX)"==".dll"
ENVIR_ILIB=envir_ilib
!else
ENVIR_ILIB=
!endif


#=====================================================================
#
# Main targets
#
#=====================================================================


all: check-env components reminder

components: libs progs configsamples samples configtutorial thetutorial


#=====================================================================
#
# OMNeT++ components
#
#=====================================================================

LIBS=$(ENVIR_ILIB) sim envir cmdenv tkenv nedxml
PROGS=utils nedc gned plove
SAMPLES=dyna fddi fifo1 fifo2 hcube hist nim token dyna2 topo demo

#
# Group targets. Note that utils has to be built BEFORE other libs and progs.
#
libs: utils $(LIBS)
progs: $(PROGS)
samples: $(SAMPLES)
docs: api nedxml-api manual


#
# Libraries
#

envir_ilib:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\envir && $(MAKE) $(MOPTS) $(MAKEFILE) envir.ilib

sim:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\sim && $(MAKE) $(MOPTS) $(MAKEFILE)

envir:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\envir && $(MAKE) $(MOPTS) $(MAKEFILE)

cmdenv:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\cmdenv && $(MAKE) $(MOPTS) $(MAKEFILE)

tkenv:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\tkenv && $(MAKE) $(MOPTS) $(MAKEFILE)

nedxml:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\nedxml && $(MAKE) $(MOPTS) $(MAKEFILE)

#
# Programs
#

nedc:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\nedc && $(MAKE) $(MOPTS) $(MAKEFILE)

gned:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\gned && $(MAKE) $(MOPTS) $(MAKEFILE)

plove:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SRC_DIR:/=\)\plove && $(MAKE) $(MOPTS) $(MAKEFILE)

utils:
	@echo ===== Compiling $@ ====
	echo @$(WISH:/=\) -f $(OMNETPP_ROOT)/bitmaps/showpics > $(OMNETPP_ROOT:/=\)\bitmaps\showpics.bat
	cd /d $(OMNETPP_SRC_DIR:/=\)\utils &&  $(MAKE) $(MOPTS) $(MAKEFILE)

#
# Sample programs
#

dyna:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\dyna && $(MAKE) $(MOPTS) $(MAKEFILE)

fddi:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\fddi && $(MAKE) $(MOPTS) $(MAKEFILE)

fifo1:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\fifo1 && $(MAKE) $(MOPTS) $(MAKEFILE)

fifo2:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\fifo2 && $(MAKE) $(MOPTS) $(MAKEFILE)

hcube:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\hcube && $(MAKE) $(MOPTS) $(MAKEFILE)

hist:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\hist && $(MAKE) $(MOPTS) $(MAKEFILE)

nim:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\nim && $(MAKE) $(MOPTS) $(MAKEFILE)

token:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\token && $(MAKE) $(MOPTS) $(MAKEFILE)

dyna2:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\dyna2 && $(MAKE) $(MOPTS) $(MAKEFILE)

topo:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\topo && $(MAKE) $(MOPTS) $(MAKEFILE)

demo:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\)\demo && $(MAKE) $(MOPTS) $(MAKEFILE)

thetutorial:
	@echo ===== Compiling $@ ====
	cd /d $(OMNETPP_TUTORIAL_DIR:/=\)\queues && $(MAKE) $(MOPTS) $(MAKEFILE)


#
# Documentation
#
api:
	cd /d $(OMNETPP_INCL_DIR:/=\) && $(MAKE) $(MOPTS) $(MAKEFILE) doc

nedxml-api:
	cd /d $(OMNETPP_SRC_DIR:/=\)\nedxml && $(MAKE) $(MOPTS) $(MAKEFILE) doc

manual:
	cd /d $(OMNETPP_DOC_DIR:/=\)\usman && $(MAKE) $(MOPTS) $(MAKEFILE)

#
# Tests
#
tests: check-env libs progs
	@echo ===== Running tests ====
        @cd /d $(OMNETPP_TEST_DIR:/=\) && call runtest.cmd

#=====================================================================
#
# Utilities
#
#=====================================================================


check-env:
	@echo ===== Checking environment =====
	@if not .%OS%.==.Windows_NT. echo ERROR: This makefile can ONLY be used on NT4.0 or Windows 2000! For Win95/98/ME, use Makefile.98!
	@echo  Checking if $(CXX) works...
	@$(CXX) /? /nologo <nul > nul || echo ERROR: Could not run $(CXX). Probably PATH does not contain its BIN or DLL directory. && exit 1
	@echo Checking if OMNETPP_ROOT is correctly set...
	@cd /d $(OMNETPP_ROOT:/=\) || echo ERROR: The directory defined in configuser.vc as OMNETPP_ROOT does not exist. && exit 1
	@echo Checking if TCL_LIB/TCL_VER is correctly set...
	@cd /d $(_TCL_LIBRARY:/=\) || echo ERROR: The directory $(_TCL_LIBRARY) does not exist. TK_DIR or TK_VER defined in configuser.vc might be wrong. && exit 1

configsamples:
	@echo ===== Configuring .dsp files for samples =====
	cd /d $(OMNETPP_SAMPLES_DIR:/=\) && cc2cpp.bat
	for %%i in ( $(SAMPLES) ) do \
	    cd /d $(OMNETPP_SAMPLES_DIR:/=\)\%%i && \
	    $(REPLACE:/=\) %%i.dsp.in - "@OMNETPP_INCL_DIR@" "$(OMNETPP_INCL_DIR)" | \
	    $(REPLACE:/=\) -          - "@OMNETPP_LIB_DIR@"  "$(OMNETPP_LIB_DIR)"  | \
	    $(REPLACE:/=\) -          - "@OMNETPP_BIN_DIR@"  "$(OMNETPP_BIN_DIR:/=\)"  | \
	    $(REPLACE:/=\) -          - "@TK_LIB_PATH@" "$(TK_LIB_DIR)" | \
	    $(REPLACE:/=\) -          - "@TCL_LIB@"     "$(TCL_LIB)"    | \
	    $(REPLACE:/=\) -    %%i.dsp "@TK_LIB@"      "$(TK_LIB)"

configtutorial:
	@echo ===== Configuring .dsp files for tutorial/queues =====
	-cd /d $(OMNETPP_TUTORIAL_DIR:/=\)\queues && ren *.cc *.cpp 2>nul
	cd /d $(OMNETPP_TUTORIAL_DIR:/=\)\queues && \
	$(REPLACE:/=\) queues.dsp.in - "@OMNETPP_INCL_DIR@" "$(OMNETPP_INCL_DIR)" | \
	$(REPLACE:/=\) -             - "@OMNETPP_LIB_DIR@"  "$(OMNETPP_LIB_DIR)"  | \
	$(REPLACE:/=\) -             - "@OMNETPP_BIN_DIR@"  "$(OMNETPP_BIN_DIR:/=\)"  | \
	$(REPLACE:/=\) -             - "@TK_LIB_PATH@" "$(TK_LIB_DIR)" | \
	$(REPLACE:/=\) -             - "@TCL_LIB@"     "$(TCL_LIB)"    | \
	$(REPLACE:/=\) -    queues.dsp "@TK_LIB@"      "$(TK_LIB)"


clean:
	-for %%i in ( $(LIBS) $(PROGS) ) do \
	    cd /d $(OMNETPP_SRC_DIR:/=\)\%%i && $(MAKE) $(MOPTS) $(MAKEFILE) clean
	-del /q $(OMNETPP_BIN_DIR:/=\)\*.
	-del /q $(OMNETPP_BIN_DIR:/=\)\*.exe
	-del /q $(OMNETPP_BIN_DIR:/=\)\*.bat
	-del /q $(OMNETPP_BIN_DIR:/=\)\opp_*.*
	-del /q $(OMNETPP_BIN_DIR:/=\)\neddoc.xsl
	-del /q $(OMNETPP_LIB_DIR:/=\)\*.lib
	-del /q $(OMNETPP_LIB_DIR:/=\)\*.dll
	-del /q $(OMNETPP_LIB_DIR:/=\)\*.ilib
	-for %%i in ( $(SAMPLES) ) do \
	    cd /d $(OMNETPP_SAMPLES_DIR:/=\)\%%i && $(MAKE) $(MOPTS) $(MAKEFILE) clean
	-cd /d $(OMNETPP_TUTORIAL_DIR:/=\)\queues && $(MAKE) $(MOPTS) $(MAKEFILE) clean

depend:
	for %%i in ( $(LIBS) $(PROGS) ) do \
	    cd /d $(OMNETPP_SRC_DIR:/=\)\%%i && $(MAKE) $(MOPTS) $(MAKEFILE) depend
	for %%i in ( $(SAMPLES) ) do \
	    cd /d $(OMNETPP_SAMPLES_DIR:/=\)\%%i && $(MAKE) $(MOPTS) $(MAKEFILE) depend
	cd /d $(OMNETPP_TUTORIAL_DIR:/=\)\queues && $(MAKE) $(MOPTS) $(MAKEFILE) depend

reminder:
!IF "$(TCL_LIBRARY)" == ""
	@echo ***
	@echo *** Don't forget to set the TCL_LIBRARY environment variable!
	@echo *** TCL_LIBRARY=$(_TCL_LIBRARY)
	@echo ***
!ENDIF



syntax highlighted by Code2HTML, v. 0.9.1