SDK=
LINKTYPE=
CFG=
PREFIX=
PREFIX_DOS=
PERL=
NMAKE=nmake /nologo

all : libs apps snmptrapd snmpd local

clean : apps_clean libs_clean snmptrapd_clean snmpd_clean local_clean

!IF "$(SDK)" == "true"
snmpd : snmpdsdk_
snmpd_clean : snmpdsdk_clean_
netsnmpmibs : netsnmpmibssdk_
netsnmpmibs_clean : netsnmpmibssdk_clean_
!ELSE
snmpd : snmpd_
snmpd_clean : snmpd_clean_
netsnmpmibs : netsnmpmibs_	
netsnmpmibs_clean : netsnmpmibs_clean_
!ENDIF

!IF "$(LINKTYPE)" == "static"
libsnmp : libsnmp_
libsnmp_clean : libsnmp_clean_
!ELSE
libsnmp : libsnmp_dll_
libsnmp_clean : libsnmp_dll_clean_
!ENDIF

libs : libagent libhelpers libsnmp libnetsnmptrapd netsnmpmibs 
libs_clean : libagent_clean libhelpers_clean libsnmp_clean libnetsnmptrapd_clean netsnmpmibs_clean

apps : snmpdf snmpset snmpusm snmptest snmptrap snmpvacm snmpwalk snmpdelta snmptable snmpstatus snmpbulkget snmpget snmpgetnext snmpbulkwalk snmptranslate encode_keychange snmpnetstat

apps_clean : snmpdf_clean snmpset_clean snmpusm_clean snmptest_clean snmptrap_clean snmpvacm_clean snmpwalk_clean snmpdelta_clean snmptable_clean snmpstatus_clean snmpbulkget_clean snmpget_clean snmpgetnext_clean snmpbulkwalk_clean snmptranslate_clean encode_keychange_clean snmpnetstat_clean

local : snmpconf mib2c traptoemail

local_clean : snmpconf_clean mib2c_clean traptoemail_clean

perl :
!IF "$(LINKTYPE)" == "static"
	-@echo .
	-@echo WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
	-@echo ===============================================================
	-@echo Building Perl modules using static SNMPLIB library.
	-@echo .
	-@echo Some modules will not function correctly with the static version
	-@echo of the SNMPLIB library.
	-@echo .
	-@echo nmake perl_test will not complete due to a crash in the OID
	-@echo module.
	-@echo ===============================================================
	-@echo .
	-@echo .
!ELSE	# dynamic/static check
	-@echo .
	-@echo WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
	-@echo ===============================================================
	-@echo Building Perl modules using dynamic (DLL) SNMPLIB library.
	-@echo .
	-@echo Net-SNMP is NOT a thread safe program, which is a requirement
	-@echo for any application using a dynamic link library (DLL). 
	-@echo Running multiple programs (including multiple Perl scripts)
	-@echo that use NETSNMP.DLL can result in unpredictable results.
	-@echo ===============================================================
	-@echo .
	-@echo .
!ENDIF	# dynamic/static check
	cd ..\perl
!IF "$(CFG)" == "release"
	perl Makefile.PL CAPI=TRUE -NET-SNMP-IN-SOURCE=TRUE
!ELSE	# release/debug check
	perl Makefile.PL CAPI=TRUE -NET-SNMP-IN-SOURCE=TRUE -NET-SNMP-DEBUG=TRUE
!ENDIF	# release/debug check
	$(NMAKE)
	cd ..\win32

perl_test :
!IF "$(LINKTYPE)" == "static" # Check in case test triggers build
	-@echo .
	-@echo Perl test aborted.
	-@echo Perl modules must be build against dynamic (DLL) libraries
	-@echo .
!ELSE	# dynamic/static check
	cd ..\perl
	$(NMAKE) test
	cd ..\win32
!ENDIF	# dynamic/static check

perl_install :
!IF "$(LINKTYPE)" == "static" # Check in case install triggers build
	-@echo .
	-@echo Perl install aborted.
	-@echo Perl modules must be build against dynamic (DLL) libraries
	-@echo .
!ELSE	# dynamic/static check
	cd ..\perl
	$(NMAKE) install
	cd ..\win32
!ENDIF	# dynamic/static check

perl_clean :
	cd ..\perl
	$(NMAKE) clean
	cd ..\win32


##############
#
# Build
# 
libagent ::
	cd libagent
	$(NMAKE) all
	cd ..
       
libhelpers ::
	cd libhelpers
	$(NMAKE) all
	cd ..
	
libsnmp_ ::
	cd libsnmp
	$(NMAKE) all
	cd ..
	
libsnmp_dll_ ::
	cd libsnmp_dll
	$(NMAKE) all
	cd ..
	
libnetsnmptrapd ::
	cd libnetsnmptrapd
	$(NMAKE) all
	cd ..

netsnmpmibs_ ::
	cd netsnmpmibs
	$(NMAKE) all
	cd ..

netsnmpmibssdk_ ::
	cd netsnmpmibssdk
	$(NMAKE) all
	cd ..

snmpdf ::
	cd snmpdf
	$(NMAKE) all
	cd ..

snmpset ::
	cd snmpset
	$(NMAKE) all
	cd ..

snmpusm ::
	cd snmpusm
	$(NMAKE) all
	cd ..

snmptest ::
	cd snmptest
	$(NMAKE) all
	cd ..

snmptrap ::
	cd snmptrap
	$(NMAKE) all
	cd ..

snmpvacm ::
	cd snmpvacm
	$(NMAKE) all
	cd ..

snmpwalk ::
	cd snmpwalk
	$(NMAKE) all
	cd ..

snmpdelta ::
	cd snmpdelta
	$(NMAKE) all
	cd ..

snmptable ::
	cd snmptable
	$(NMAKE) all
	cd ..

snmpstatus ::
	cd snmpstatus
	$(NMAKE) all
	cd ..

snmpbulkget ::
	cd snmpbulkget
	$(NMAKE) all
	cd ..

snmpget ::
	cd snmpget
	$(NMAKE) all
	cd ..

snmpgetnext ::
	cd snmpgetnext
	$(NMAKE) all
	cd ..

snmpbulkwalk ::
	cd snmpbulkwalk
	$(NMAKE) all
	cd ..

snmptranslate ::
	cd snmptranslate
	$(NMAKE) all
	cd ..

encode_keychange ::
	cd encode_keychange
	$(NMAKE) all
	cd ..

snmpnetstat ::
	cd snmpnetstat
	$(NMAKE) all
	cd ..

snmptrapd ::
	cd snmptrapd
	$(NMAKE) all
	cd ..

snmpd_ ::
	cd snmpd
	$(NMAKE) all
	cd ..

snmpdsdk_ ::
	cd snmpdsdk
	$(NMAKE) all
	cd ..

snmpconf ::
	cd local
	$(NMAKE) snmpconf
	cd ..

mib2c ::
	cd local
	$(NMAKE) mib2c
	cd ..

traptoemail ::
	cd local
	$(NMAKE) traptoemail
	cd ..

##############
#
# Clean
# 
libagent_clean ::
	cd libagent
	$(NMAKE) clean
	cd ..
       
libhelpers_clean ::
	cd libhelpers
	$(NMAKE) clean
	cd ..
	
libsnmp_clean_ ::
	cd libsnmp
	$(NMAKE) clean
	cd ..

libsnmp_dll_clean_ ::
	cd libsnmp_dll
	$(NMAKE) clean
	cd ..

libnetsnmptrapd_clean ::
	cd libnetsnmptrapd
	$(NMAKE) clean
	cd ..

netsnmpmibs_clean_ ::
	cd netsnmpmibs
	$(NMAKE) clean
	cd ..

netsnmpmibssdk_clean_ ::
	cd netsnmpmibssdk
	$(NMAKE) clean
	cd ..

snmpdf_clean ::
	cd snmpdf
	$(NMAKE) clean
	cd ..

snmpset_clean ::
	cd snmpset
	$(NMAKE) clean
	cd ..

snmpusm_clean ::
	cd snmpusm
	$(NMAKE) clean
	cd ..

snmptest_clean ::
	cd snmptest
	$(NMAKE) clean
	cd ..

snmptrap_clean ::
	cd snmptrap
	$(NMAKE) clean
	cd ..

snmpvacm_clean ::
	cd snmpvacm
	$(NMAKE) clean
	cd ..

snmpwalk_clean ::
	cd snmpwalk
	$(NMAKE) clean
	cd ..

snmpdelta_clean ::
	cd snmpdelta
	$(NMAKE) clean
	cd ..

snmptable_clean ::
	cd snmptable
	$(NMAKE) clean
	cd ..

snmpstatus_clean ::
	cd snmpstatus
	$(NMAKE) clean
	cd ..

snmpbulkget_clean ::
	cd snmpbulkget
	$(NMAKE) clean
	cd ..

snmpget_clean ::
	cd snmpget
	$(NMAKE) clean
	cd ..

snmpgetnext_clean ::
	cd snmpgetnext
	$(NMAKE) clean
	cd ..

snmpbulkwalk_clean ::
	cd snmpbulkwalk
	$(NMAKE) clean
	cd ..

snmptranslate_clean ::
	cd snmptranslate
	$(NMAKE) clean
	cd ..

encode_keychange_clean ::
	cd encode_keychange
	$(NMAKE) clean
	cd ..

snmpnetstat_clean ::
	cd snmpnetstat
	$(NMAKE) clean
	cd ..

snmptrapd_clean ::
	cd snmptrapd
	$(NMAKE) clean
	cd ..

snmpd_clean_ ::
	cd snmpd
	$(NMAKE) clean
	cd ..

snmpdsdk_clean_ ::
	cd snmpdsdk
	$(NMAKE) clean
	cd ..

snmpconf_clean ::
	cd local
	$(NMAKE) snmpconf_clean
	cd ..

mib2c_clean ::
	cd local
	$(NMAKE) mib2c_clean
	cd ..

traptoemail_clean ::
	cd local
	$(NMAKE) traptoemail_clean
	cd ..

##############

help ::
        @-echo "NMAKE option    Description"
        @-echo "============    =============================================="
        @-echo "                                                              "
        @-echo "all             libs apps snmptrapd snmpd                     "
        @-echo "clean           libs_clean apps_clean snmptrapd_clean         "
        @-echo "                snmpd_clean                                   "
        @-echo "libs            libagent libhelpers libsnmp libnetsnmptrapd   "
        @-echo "                netsnmpmibs                                   "
        @-echo "libs_clean      libagent_clean libhelpers_clean               "
        @-echo "                libnetsnmptrapd_clean libsnmp_clean           "
        @-echo "                netsnmpmibs_clean                             "
        @-echo "                                                              "
        @-echo "apps            encode_keychange snmpbulkget snmpbulkwalk     "
        @-echo "                snmpdelta snmpdf snmpget snmpgetnext          "
        @-echo "                snmpnetstsat snmpset snmpstatus snmptable     "
        @-echo "                snmptest snmptranslate snmptrap snmpusm       "
        @-echo "                snmpvacm snmpwalk                             "
        @-echo "                                                              "
        @-echo "apps_clean      (clean all the apps)                          "
        @-echo "                                                              "
        @-echo "local           snmpconf, mib2c, traptoemail                  "
        @-echo "local_clean     snmpconf_clean, mib2c_clean, traptoemail_clean"
        @-echo "                                                              "
        @-echo "snmptrapd       Trap daemon                                   "
        @-echo "snmptrapd_clean Trap daemon clean                             "
        @-echo "                                                              "
        @-echo "snmpd           Agent                                         "
        @-echo "snmpd_clean     Agent clean                                   "
        @-echo "                                                              "
        @-echo "install         Install Net-SNMP without Perl                 "
        @-echo "                                                              "
        @-echo "perl            Configure (in source) and then nmake          "
        @-echo "perl_clean      Perl clean                                    "
        @-echo "perl_test       Perl tests                                    "
        @-echo "perl_install    Perl installs                                 "


install ::
	cd ..
        @-echo Creating $(PREFIX_DOS) sub-directories
        @-mkdir $(PREFIX_DOS) > NUL:
        @-mkdir $(PREFIX_DOS)\bin > NUL:
        @-mkdir $(PREFIX_DOS)\etc > NUL:
        @-mkdir $(PREFIX_DOS)\etc\snmp > NUL:
        @-mkdir $(PREFIX_DOS)\share > NUL:
        @-mkdir $(PREFIX_DOS)\share\snmp > NUL:
        @-mkdir $(PREFIX_DOS)\share\snmp\mibs > NUL:
        @-mkdir $(PREFIX_DOS)\share\snmp\snmpconf-data > NUL:
        @-mkdir $(PREFIX_DOS)\share\snmp\snmpconf-data\snmp-data > NUL:
        @-mkdir $(PREFIX_DOS)\share\snmp\snmpconf-data\snmpd-data > NUL:
        @-mkdir $(PREFIX_DOS)\share\snmp\snmpconf-data\snmptrapd-data > NUL:
        @-mkdir $(PREFIX_DOS)\snmp > NUL:
        @-mkdir $(PREFIX_DOS)\snmp\persist > NUL:
        @-mkdir $(PREFIX_DOS)\temp > NUL:
        @-mkdir $(PREFIX_DOS)\include > NUL:
        @-mkdir $(PREFIX_DOS)\include\net-snmp > NUL:
        @-mkdir $(PREFIX_DOS)\include\net-snmp\agent > NUL:

	@-echo Copying MIB files to $(PREFIX_DOS)\share\snmp\mibs
        @-Copy mibs\*.txt $(PREFIX_DOS)\share\snmp\mibs > NUL:

	@-echo Copying compiled programs to $(PREFIX_DOS)\bin
        @-Copy win32\bin\$(CFG)\*.exe $(PREFIX_DOS)\bin > NUL:

	@-echo Copying (local) scripts to $(PREFIX_DOS)\bin
	@-Copy win32\bin\$(CFG)\snmpconf $(PREFIX_DOS)\bin > NUL:
	@-Copy win32\local\snmpconf.bat $(PREFIX_DOS)\bin > NUL:
	@-Copy win32\bin\$(CFG)\mib2c $(PREFIX_DOS)\bin > NUL:
	@-Copy win32\local\mib2c.bat $(PREFIX_DOS)\bin > NUL:
	@-Copy win32\bin\$(CFG)\traptoemail $(PREFIX_DOS)\bin > NUL:
	@-Copy win32\local\traptoemail.bat $(PREFIX_DOS)\bin > NUL:

	@-echo Copying snmpconf files to $(PREFIX_DOS)\share\snmp\snmpconf-data\snmp-data
        @-Copy local\snmpconf.dir\snmp-data\*.* $(PREFIX_DOS)\share\snmp\snmpconf-data\snmp-data > NUL:
        @-Copy local\snmpconf.dir\snmpd-data\*.* $(PREFIX_DOS)\share\snmp\snmpconf-data\snmpd-data > NUL:
        @-Copy local\snmpconf.dir\snmptrapd-data\*.* $(PREFIX_DOS)\share\snmp\snmpconf-data\snmptrapd-data > NUL:

	@-echo Copying mib2c config files to $(PREFIX_DOS)\share\snmp
        @-Copy local\mib2c*.conf $(PREFIX_DOS)\share\snmp > NUL:

	@-echo Copying header files to $(PREFIX_DOS)\include
        @-copy win32\net-snmp\*.h $(PREFIX_DOS)\include\net-snmp > NUL:
        @-copy win32\net-snmp\agent\*.h $(PREFIX_DOS)\include\net-snmp\agent > NUL:

	@-echo Copying DLL files to $(PREFIX_DOS)
        @-Copy win32\bin\$(CFG)\*.dll $(PREFIX_DOS)\bin > NUL:

	@-echo Copying DLL files to %SYSTEMROOT%\System32
        @-Copy win32\bin\$(CFG)\*.dll %SYSTEMROOT%\System32 > NUL:

        @-echo Done copying files to $(PREFIX_DOS)
        cd win32

