# Permission to use, copy, modify, and distribute this # software and its documentation for any purpose and without # fee is hereby granted, provided that the above copyright # notice appear in all copies and that both that copyright # notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in # advertising or publicity pertaining to distribution of the # software without specific, written prior permission. # M.I.T. makes no representations about the suitability of # this software for any purpose. It is provided "as is" # without express or implied warranty. # ------------------------------------------------------------------------------ # # Makefile for building c-ares test suite with MSVC. # # Usage: nmake /f makefile.msvc CFG= # # can be one of: [ lib-release | lib-debug | dll-release | dll-debug } # can be one of: [ all | arestest | clean } # # If is not specified then all targets are built. # If is not specified then lib-debug will be assumed. # # This makefile must be processed from the subdir where it is located. # # All results are generated below a subdirectory named msvcXXX. # # ------------------------------------------------------------------------------ # ------------------------------------------------ # c-ares static and dynamic libraries common base # file names for release and debug configurations # ------------------------------------------------ LIBNAME = cares STA_LIB_REL = lib$(LIBNAME) DYN_LIB_REL = $(LIBNAME) STA_LIB_DBG = $(STA_LIB_REL)d DYN_LIB_DBG = $(DYN_LIB_REL)d # ------------------------------------------- # Base names for c-ares DLL import libraries # ------------------------------------------- IMP_LIB_REL = $(DYN_LIB_REL) IMP_LIB_DBG = $(DYN_LIB_DBG) # -------------------------- # Runtime library selection # -------------------------- RTLIB = /MD RTLIBD = /MDd !IF "$(RTLIBCFG)" == "static" RTLIB = /MT RTLIBD = /MTd !ENDIF # ------------------------------------------- # Detect NMAKE version deducing MSVC version # ------------------------------------------- !IFNDEF _NMAKE_VER ! MESSAGE Macro _NMAKE_VER not defined. ! MESSAGE Use MSVC's NMAKE to process this makefile. ! ERROR See previous message. !ENDIF !IF "$(_NMAKE_VER)" == "6.00.8168.0" CC_VERS_NUM = 60 !ELSEIF "$(_NMAKE_VER)" == "6.00.9782.0" CC_VERS_NUM = 60 !ELSEIF "$(_NMAKE_VER)" == "7.00.8882" CC_VERS_NUM = 70 !ELSEIF "$(_NMAKE_VER)" == "7.00.9466" CC_VERS_NUM = 70 !ELSEIF "$(_NMAKE_VER)" == "7.00.9955" CC_VERS_NUM = 70 !ELSEIF "$(_NMAKE_VER)" == "7.10.2240.8" CC_VERS_NUM = 71 !ELSEIF "$(_NMAKE_VER)" == "7.10.3077" CC_VERS_NUM = 71 !ELSEIF "$(_NMAKE_VER)" == "8.00.40607.16" CC_VERS_NUM = 80 !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.42" CC_VERS_NUM = 80 !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.762" CC_VERS_NUM = 80 !ELSEIF "$(_NMAKE_VER)" == "9.00.20706.01" CC_VERS_NUM = 90 !ELSEIF "$(_NMAKE_VER)" == "9.00.21022.08" CC_VERS_NUM = 90 !ELSEIF "$(_NMAKE_VER)" == "9.00.30729.01" CC_VERS_NUM = 90 !ELSEIF "$(_NMAKE_VER)" == "10.00.20506.01" CC_VERS_NUM = 100 !ELSEIF "$(_NMAKE_VER)" == "10.00.21003.01" CC_VERS_NUM = 100 !ELSEIF "$(_NMAKE_VER)" == "10.00.30128.01" CC_VERS_NUM = 100 !ELSEIF "$(_NMAKE_VER)" == "10.00.30319.01" CC_VERS_NUM = 100 !ELSEIF "$(_NMAKE_VER)" == "10.00.40219.01" CC_VERS_NUM = 100 !ELSEIF "$(_NMAKE_VER)" == "11.00.50522.1" CC_VERS_NUM = 110 !ELSEIF "$(_NMAKE_VER)" == "11.00.50727.1" CC_VERS_NUM = 110 !ELSEIF "$(_NMAKE_VER)" == "11.00.51106.1" CC_VERS_NUM = 110 !ELSEIF "$(_NMAKE_VER)" == "11.00.60315.1" CC_VERS_NUM = 110 !ELSEIF "$(_NMAKE_VER)" == "12.00.21005.1" CC_VERS_NUM = 120 !ELSE ! MESSAGE Unknown value for _NMAKE_VER macro: "$(_NMAKE_VER)" ! MESSAGE Please, report this condition on the c-ares development ! MESSAGE mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/ ! ERROR See previous message. !ENDIF CC_VERS_STR = msvc$(CC_VERS_NUM) # --------------------------------------------------------- # Verify that current subdir is below the c-ares source one # --------------------------------------------------------- !IF ! EXIST(..\ares_init.c) ! MESSAGE Can not process Makefile.msvc from outside of c-ares test subdirectory. ! MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again. ! ERROR See previous message. !ENDIF # ------------------------------------------------------------------ # Base subdir is the common root from which other subdirs will hang, # the name depends on MSVC version being used when building c-ares. # ------------------------------------------------------------------ BASE_DIR = .\$(CC_VERS_STR) # Look for a built library of the same configuration in the directory above. LIB_BASE_DIR = ..\$(CC_VERS_STR) # ---------------------------------------- # Subdir holding sources for all projects # ---------------------------------------- SRCDIR = . # ------------------------- # Configuration validation # ------------------------- !IF "$(CFG)" == "" CFG = lib-debug !ENDIF VALID_CFGSET = FALSE !IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \ "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug" VALID_CFGSET = TRUE !ENDIF !IF "$(VALID_CFGSET)" == "FALSE" ! MESSAGE MSVC c-ares makefile ! MESSAGE ! MESSAGE Usage: nmake /f makefile.msvc CFG= ! MESSAGE ! MESSAGE can be one of: [ lib-release | lib-debug | dll-release | dll-debug } ! MESSAGE can be one of: [ all | arestest | clean } ! MESSAGE ! MESSAGE If is not specified then all targets are built. ! MESSAGE If is not specified then lib-debug will be assumed. ! MESSAGE ! ERROR Choose a valid configuration. !ENDIF # -------------------------------------------------------- # Project subdirs independent of configuration being used # -------------------------------------------------------- PROG_DIR = $(BASE_DIR)\arestest LIB_DIR = $(LIB_BASE_DIR)\cares GMOCK_DIR = gmock-1.7.0 GTEST_DIR = $(GMOCK_DIR)\gtest GMOCK_SRC_DIR = $(GMOCK_DIR)\src GTEST_SRC_DIR = $(GTEST_DIR)\src # --------------------------------------------------- # Subdirs which are configuration dependent are only # defined when a valid configuration has been given. # --------------------------------------------------- PROG_OUTDIR = $(PROG_DIR)\$(CFG) PROG_OBJDIR = $(PROG_OUTDIR)\obj LIB_OUTDIR = $(LIB_DIR)\$(CFG) # ------------------------------------- # TCP/IP stack settings # ------------------------------------- CFLAGS = /DWIN32 EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib # ----------------------------------------- # Switches that depend on compiler version # ----------------------------------------- !IF $(CC_VERS_NUM) == 60 PDB_NONE = /pdb:none PDBTYPE_CONSOLIDATE = /pdbtype:consolidate !ELSE !UNDEF PDB_NONE !UNDEF PDBTYPE_CONSOLIDATE !ENDIF !IF $(CC_VERS_NUM) <= 70 RT_ERROR_CHECKING = /GZ !ELSE RT_ERROR_CHECKING = /RTCsu !ENDIF # ---------------------------- # Assorted commands and flags # ---------------------------- CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2 /D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi /D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS $(RT_ERROR_CHECKING) CC_CFLAGS = $(CFLAGS) /I. /I.. /I $(GTEST_DIR)/include /I $(GMOCK_DIR)/include /W3 /EHsc /FD RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG" RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG" LINK_CMD_LIB = link.exe /lib /nologo LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE) LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE) # --------------------------------- # Configuration dependent settings # --------------------------------- !IF "$(CFG)" == "lib-release" CARES_TARGET = $(STA_LIB_REL).lib CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB CARES_LFLAGS = SPROG_CFLAGS = /DCARES_STATICLIB SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib CARES_LINK = $(LINK_CMD_LIB) SPROG_LINK = $(LINK_CMD_EXE_REL) CC_CMD = $(CC_CMD_REL) !ENDIF !IF "$(CFG)" == "lib-debug" CARES_TARGET = $(STA_LIB_DBG).lib CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD CARES_LFLAGS = SPROG_CFLAGS = /DCARES_STATICLIB SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib CARES_LINK = $(LINK_CMD_LIB) SPROG_LINK = $(LINK_CMD_EXE_DBG) CC_CMD = $(CC_CMD_DBG) !ENDIF !IF "$(CFG)" == "dll-release" CARES_TARGET = $(DYN_LIB_REL).dll CARES_CFLAGS = /DCARES_BUILDING_LIBRARY CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(PROG_OUTDIR)\$(IMP_LIB_REL).lib $(PDB_NONE) SPROG_CFLAGS = SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib CARES_LINK = $(LINK_CMD_DLL) SPROG_LINK = $(LINK_CMD_EXE_REL) CC_CMD = $(CC_CMD_REL) USE_RES_FILE = TRUE RC_CMD = $(RC_CMD_REL) !ENDIF !IF "$(CFG)" == "dll-debug" CARES_TARGET = $(DYN_LIB_DBG).dll CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(PROG_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(PROG_OUTDIR)\$(DYN_LIB_DBG).pdb $(PDBTYPE_CONSOLIDATE) SPROG_CFLAGS = SPROG_LFLAGS = /libpath:$(LIB_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib CARES_LINK = $(LINK_CMD_DLL) SPROG_LINK = $(LINK_CMD_EXE_DBG) CC_CMD = $(CC_CMD_DBG) USE_RES_FILE = TRUE RC_CMD = $(RC_CMD_DBG) !ENDIF # -------------------------------------------- # Makefile.inc provides lists of source files # -------------------------------------------- !INCLUDE .\Makefile.inc # ---------------------------- # Build lists of object files # ---------------------------- !IF [ECHO PROG_OBJS=^$(PROG_OBJDIR)\$(TESTSOURCES: = $(PROG_OBJDIR^)\) > .\prog_objs.inc] == 0 !INCLUDE .\prog_objs.inc !IF [DEL .\prog_objs.inc] !ENDIF !ELSE !ERROR Problem generating PROG_OBJS list. !ENDIF PROG_OBJS = $(PROG_OBJS:.cc=.obj) GTEST_OBJ = $(PROG_OBJDIR)\gtest-all.obj GMOCK_OBJ = $(PROG_OBJDIR)\gmock-all.obj # -------------------------------- # Only our custom inference rules # -------------------------------- .SUFFIXES: .SUFFIXES: .cc {$(SRCDIR)}.cc{$(PROG_OBJDIR)}.obj: $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< {$(GMOCK_SRC_DIR)}.cc{$(PROG_OBJDIR)}.obj: $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /I $(GMOCK_DIR) /Fo$@ /Fd$(@D)\ /c $< {$(GTEST_SRC_DIR)}.cc{$(PROG_OBJDIR)}.obj: $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /I $(GTEST_DIR) /Fo$@ /Fd$(@D)\ /c $< # --------------------------------------------------------------------- # Main targets # --------------------------------------------------------------------- ALL: arestest @ test: arestest $(PROG_OUTDIR)\arestest vtest: arestest $(PROG_OUTDIR)\arestest -v arestest: $(TESTSOURCES) $(PROB_OUTDIR) $(PROG_OBJDIR) $(PROG_OBJS) $(GTEST_OBJ) $(GMOCK_OBJ) $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG_OUTDIR)\arestest.exe $(PROG_OBJS) $(GTEST_OBJ) $(GMOCK_OBJ) @if exist $(PROG_OUTDIR)\arestest.exe.manifest mt -nologo -manifest $(PROG_OUTDIR)\arestest.exe.manifest -outputresource:$(PROG_OUTDIR)\arestest.exe;1 $(PROG_OUTDIR): $(PROG_DIR) @if not exist $(PROG_OUTDIR) mkdir $(PROG_OUTDIR) $(PROG_OBJDIR): $(PROG_OUTDIR) @if not exist $(PROG_OBJDIR) mkdir $(PROG_OBJDIR) clean: @-RMDIR /S /Q $(PROG_OUTDIR) >NUL 2>&1 $(BASE_DIR): @if not exist $(BASE_DIR) mkdir $(BASE_DIR) $(PROG_DIR): $(BASE_DIR) @if not exist $(PROG_DIR) mkdir $(PROG_DIR) # End of Makefile.msvc