Imported Upstream version 1.18.1
[platform/upstream/c-ares.git] / Makefile.msvc
1
2 # Copyright (C) 2009-2013 by Daniel Stenberg
3 #
4 # Permission to use, copy, modify, and distribute this
5 # software and its documentation for any purpose and without
6 # fee is hereby granted, provided that the above copyright
7 # notice appear in all copies and that both that copyright
8 # notice and this permission notice appear in supporting
9 # documentation, and that the name of M.I.T. not be used in
10 # advertising or publicity pertaining to distribution of the
11 # software without specific, written prior permission.
12 # M.I.T. makes no representations about the suitability of
13 # this software for any purpose.  It is provided "as is"
14 # without express or implied warranty.
15
16 # ------------------------------------------------------------------------------
17 #
18 # Makefile for building c-ares libraries and sample programs with MSVC.
19 #
20 # Usage: nmake /f makefile.msvc CFG=<config> <target>
21 #
22 # <config> must be one of: [ lib-release | lib-debug | dll-release | dll-debug }
23 # <target> must be one of: [ ALL | c-ares | acountry | adig | ahost | clean }
24 #
25 # If a <target> other than ALL or clean is given, <config> becomes mandatory.
26 #
27 # If neither <config> nor <target> are specified this results in
28 # all targets being built for all <config> c-ares library types.
29 #
30 # This makefile must be processed from the subdir where it is located.
31 #
32 # All results are generated below a subdirectory named msvcXXX.
33 #
34 # ------------------------------------------------------------------------------
35
36 NAME = cares
37
38 # ------------------------------------------------
39 # c-ares static and dynamic libraries common base
40 # file names for release and debug configurations
41 # ------------------------------------------------
42
43 STA_LIB_REL = lib$(NAME)
44 DYN_LIB_REL = $(NAME)
45 STA_LIB_DBG = $(STA_LIB_REL)d
46 DYN_LIB_DBG = $(DYN_LIB_REL)d
47
48 # -------------------------------------------
49 # Base names for c-ares DLL import libraries
50 # -------------------------------------------
51
52 IMP_LIB_REL = $(DYN_LIB_REL)
53 IMP_LIB_DBG = $(DYN_LIB_DBG)
54
55 # --------------------------
56 # Runtime library selection
57 # --------------------------
58
59 RTLIB  = /MD
60 RTLIBD = /MDd
61
62 !IF "$(RTLIBCFG)" == "static"
63 RTLIB  = /MT
64 RTLIBD = /MTd
65 !ENDIF
66
67 # --------------------------------------------------------
68 # Define USE_WATT32 to 1 to use the Watt-32 tcp/ip stack,
69 # otherwise Winsock tcp/ip stack will be used as default.
70 # --------------------------------------------------------
71
72 USE_WATT32 = 0
73
74 # --------------------------------------------------------
75 # Detect compiler version.
76 # --------------------------------------------------------
77 !INCLUDE .\msvc_ver.inc
78
79 # ----------------------------------------------------
80 # Verify that current subdir is the c-ares source one
81 # ----------------------------------------------------
82
83 !IF ! EXIST(.\src\lib\ares_init.c)
84 !  MESSAGE Can not process Makefile.msvc from outside of c-ares source subdirectory.
85 !  MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again.
86 !  ERROR   See previous message.
87 !ENDIF
88
89 # ------------------------------------------------------------------
90 # Base subdir is the common root from which other subdirs will hang.
91 # ------------------------------------------------------------------
92
93 BASE_DIR = .\msvc
94
95 # ----------------------------------------
96 # Subdir holding sources for all projects
97 # ----------------------------------------
98
99 SRCDIR = .
100
101 # -----------------------------
102 # Default installation subdirs
103 # -----------------------------
104
105 !IFNDEF INSTALL_DIR
106 INSTALL_DIR = .
107 !ENDIF
108
109 !IFNDEF INSTALL_DIR_LIB
110 INSTALL_DIR_LIB = $(INSTALL_DIR)\lib
111 !ENDIF
112
113 !IFNDEF INSTALL_DIR_INC
114 INSTALL_DIR_INC = $(INSTALL_DIR)\include
115 !ENDIF
116
117 # -------------------------
118 # Configuration validation
119 # -------------------------
120
121 VALID_CFGSET = FALSE
122 !IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \
123     "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug"
124 VALID_CFGSET = TRUE
125 !ENDIF
126
127 !IF "$(VALID_CFGSET)" == "FALSE" && "$(CFG)" != ""
128 !  MESSAGE MSVC c-ares makefile
129 !  MESSAGE
130 !  MESSAGE Usage: nmake /f makefile.msvc CFG=<config> <target>
131 !  MESSAGE
132 !  MESSAGE <config> must be one of: [ lib-release | lib-debug | dll-release | dll-debug }
133 !  MESSAGE <target> must be one of: [ ALL | c-ares | acountry | adig | ahost | clean }
134 !  MESSAGE
135 !  MESSAGE If a <target> other than ALL or clean is given, <config> becomes mandatory.
136 !  MESSAGE
137 !  MESSAGE If neither <config> nor <target> are specified this results in
138 !  MESSAGE all targets being built for all <config> c-ares library types.
139 !  MESSAGE
140 !  ERROR Choose a valid configuration.
141 !ENDIF
142
143 # --------------------------------------------------------
144 # Project subdirs independent of configuration being used
145 # --------------------------------------------------------
146
147 CARES_DIR = $(BASE_DIR)\cares
148 PROG1_DIR = $(BASE_DIR)\acountry
149 PROG2_DIR = $(BASE_DIR)\adig
150 PROG3_DIR = $(BASE_DIR)\ahost
151
152 # ---------------------------------------------------
153 # Subdirs which are configuration dependent are only
154 # defined when a valid configuration has been given.
155 # ---------------------------------------------------
156
157 !IF "$(VALID_CFGSET)" == "TRUE"
158 CARES_OUTDIR = $(CARES_DIR)\$(CFG)
159 PROG1_OUTDIR = $(PROG1_DIR)\$(CFG)
160 PROG2_OUTDIR = $(PROG2_DIR)\$(CFG)
161 PROG3_OUTDIR = $(PROG3_DIR)\$(CFG)
162 CARES_OBJDIR = $(CARES_OUTDIR)\obj
163 PROG1_OBJDIR = $(PROG1_OUTDIR)\obj
164 PROG2_OBJDIR = $(PROG2_OUTDIR)\obj
165 PROG3_OBJDIR = $(PROG3_OUTDIR)\obj
166 !ELSE
167 !UNDEF CARES_OUTDIR
168 !UNDEF PROG1_OUTDIR
169 !UNDEF PROG2_OUTDIR
170 !UNDEF PROG3_OUTDIR
171 !UNDEF CARES_OBJDIR
172 !UNDEF PROG1_OBJDIR
173 !UNDEF PROG2_OBJDIR
174 !UNDEF PROG3_OBJDIR
175 !ENDIF
176
177 # -------------------------------------
178 # Settings that depend on tcp/ip stack
179 # -------------------------------------
180
181 !IF "$(USE_WATT32)" == "1"
182 CFLAGS  = /UWIN32 /DWATT32 /I$(WATT_ROOT)\inc
183 EX_LIBS_REL = $(WATT_ROOT)\lib\wattcpvc_imp.lib
184 EX_LIBS_DBG = $(WATT_ROOT)\lib\wattcpvc_imp_d.lib
185 !ELSE
186 CFLAGS  = /DWIN32 /D_WIN32_WINNT=0x0600
187 EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
188 EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
189 !ENDIF
190
191 # -------------------------------------------------
192 # Switches that depend on ancient compiler versions
193 # -------------------------------------------------
194
195 !IF $(CC_VERS_NUM) == 60
196 PDB_NONE            = /pdb:none
197 PDBTYPE_CONSOLIDATE = /pdbtype:consolidate
198 !ELSE
199 !UNDEF PDB_NONE
200 !UNDEF PDBTYPE_CONSOLIDATE
201 !ENDIF
202
203 !IF $(CC_VERS_NUM) <= 70
204 RT_ERROR_CHECKING = /GZ
205 !ELSE
206 RT_ERROR_CHECKING = /RTCsu
207 !ENDIF
208
209 # ----------------------------
210 # Assorted commands and flags
211 # ----------------------------
212
213 CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2
214 CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi $(RT_ERROR_CHECKING)
215 CC_CFLAGS  = $(CFLAGS) /I.\src\lib /I.\include /W3 /EHsc /FD
216
217 RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG"
218 RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG"
219
220 LINK_CMD_LIB = link.exe /lib /nologo
221 LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no
222 LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console
223
224 LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE)
225 LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE)
226
227 # ---------------------------------
228 # Configuration dependent settings
229 # ---------------------------------
230
231 !IF "$(CFG)" == "lib-release"
232 CARES_TARGET = $(STA_LIB_REL).lib
233 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB
234 CARES_LFLAGS =
235 SPROG_CFLAGS = /DCARES_STATICLIB
236 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib
237 CARES_LINK   = $(LINK_CMD_LIB)
238 SPROG_LINK   = $(LINK_CMD_EXE_REL)
239 CC_CMD       = $(CC_CMD_REL)
240 !ENDIF
241
242 !IF "$(CFG)" == "lib-debug"
243 CARES_TARGET = $(STA_LIB_DBG).lib
244 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD
245 CARES_LFLAGS =
246 SPROG_CFLAGS = /DCARES_STATICLIB
247 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib
248 CARES_LINK   = $(LINK_CMD_LIB)
249 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
250 CC_CMD       = $(CC_CMD_DBG)
251 !ENDIF
252
253 !IF "$(CFG)" == "dll-release"
254 CARES_TARGET = $(DYN_LIB_REL).dll
255 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY
256 CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(CARES_OUTDIR)\$(IMP_LIB_REL).lib $(PDB_NONE)
257 SPROG_CFLAGS =
258 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib
259 CARES_LINK   = $(LINK_CMD_DLL)
260 SPROG_LINK   = $(LINK_CMD_EXE_REL)
261 CC_CMD       = $(CC_CMD_REL)
262 USE_RES_FILE = TRUE
263 RC_CMD       = $(RC_CMD_REL)
264 !ENDIF
265
266 !IF "$(CFG)" == "dll-debug"
267 CARES_TARGET = $(DYN_LIB_DBG).dll
268 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD
269 CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(CARES_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(CARES_OUTDIR)\$(DYN_LIB_DBG).pdb $(PDBTYPE_CONSOLIDATE)
270 SPROG_CFLAGS =
271 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib
272 CARES_LINK   = $(LINK_CMD_DLL)
273 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
274 CC_CMD       = $(CC_CMD_DBG)
275 USE_RES_FILE = TRUE
276 RC_CMD       = $(RC_CMD_DBG)
277 !ENDIF
278
279 # --------------------------------------------
280 # Makefile.inc provides lists of source files
281 # --------------------------------------------
282
283 !INCLUDE .\src\lib\Makefile.inc
284 !INCLUDE .\src\tools\Makefile.inc
285
286 # ----------------------------
287 # Build lists of object files
288 # ----------------------------
289
290 !IF "$(VALID_CFGSET)" == "TRUE"
291
292 !IF [ECHO CARES_OBJS=^$(CARES_OBJDIR)\$(CSOURCES: = $(CARES_OBJDIR^)\) > .\cares_objs.inc] == 0
293 !INCLUDE .\cares_objs.inc
294 !IF [DEL .\cares_objs.inc]
295 !ENDIF
296 !ELSE
297 !ERROR Problem generating CARES_OBJS list.
298 !ENDIF
299 CARES_OBJS = $(CARES_OBJS:.c=.obj)
300 !IF "$(USE_RES_FILE)" == "TRUE"
301 CARES_OBJS = $(CARES_OBJS) $(CARES_OBJDIR)\cares.res
302 !ENDIF
303
304 !IF [ECHO PROG1_OBJS=^$(PROG1_OBJDIR)\$(SAMPLESOURCES: = $(PROG1_OBJDIR^)\) > .\prog1_objs.inc] == 0
305 !INCLUDE .\prog1_objs.inc
306 !IF [DEL .\prog1_objs.inc]
307 !ENDIF
308 !ELSE
309 !ERROR Problem generating PROG1_OBJS list.
310 !ENDIF
311 PROG1_OBJS = $(PROG1_OBJS:.c=.obj)
312 PROG1_OBJS = $(PROG1_OBJS:/=\)
313 PROG1_OBJS = $(PROG1_OBJS) $(PROG1_OBJDIR)\acountry.obj
314
315 !IF [ECHO PROG2_OBJS=^$(PROG2_OBJDIR)\$(SAMPLESOURCES: = $(PROG2_OBJDIR^)\) > .\prog2_objs.inc] == 0
316 !INCLUDE .\prog2_objs.inc
317 !IF [DEL .\prog2_objs.inc]
318 !ENDIF
319 !ELSE
320 !ERROR Problem generating PROG2_OBJS list.
321 !ENDIF
322 PROG2_OBJS = $(PROG2_OBJS:.c=.obj)
323 PROG2_OBJS = $(PROG2_OBJS:/=\)
324 PROG2_OBJS = $(PROG2_OBJS) $(PROG2_OBJDIR)\adig.obj
325
326 !IF [ECHO PROG3_OBJS=^$(PROG3_OBJDIR)\$(SAMPLESOURCES: = $(PROG3_OBJDIR^)\) > .\prog3_objs.inc] == 0
327 !INCLUDE .\prog3_objs.inc
328 !IF [DEL .\prog3_objs.inc]
329 !ENDIF
330 !ELSE
331 !ERROR Problem generating PROG3_OBJS list.
332 !ENDIF
333 PROG3_OBJS = $(PROG3_OBJS:.c=.obj)
334 PROG3_OBJS = $(PROG3_OBJS:/=\)
335 PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj
336
337 !ENDIF
338
339
340 # --------------------------------
341 # Only our custom inference rules
342 # --------------------------------
343
344 .SUFFIXES:
345 .SUFFIXES: .c .rc
346
347 {$(SRCDIR)\src\lib}.rc{$(CARES_OBJDIR)}.res:
348     $(RC_CMD) /Fo $@ $<
349
350 {$(SRCDIR)\src\lib}.c{$(CARES_OBJDIR)}.obj:
351     $(CC_CMD) $(CC_CFLAGS) $(CARES_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
352
353 {$(SRCDIR)\src\tools}.c{$(PROG1_OBJDIR)}.obj:
354     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
355
356 {$(SRCDIR)\src\tools}.c{$(PROG2_OBJDIR)}.obj:
357     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
358
359 {$(SRCDIR)\src\tools}.c{$(PROG3_OBJDIR)}.obj:
360     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
361
362 # Hack Alert! we reference ../lib/ files in the Makefile.inc for tools as they
363 # share some files with the library itself.  We need to hack around that here.
364
365 {$(SRCDIR)\src\lib}.c{$(PROG1_OBJDIR)\..\lib}.obj:
366     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG1_OBJDIR)\$(@F) /Fd$(PROG1_OBJDIR)\ /c $<
367
368 {$(SRCDIR)\src\lib}.c{$(PROG2_OBJDIR)\..\lib}.obj:
369     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG2_OBJDIR)\$(@F) /Fd$(PROG2_OBJDIR)\ /c $<
370
371 {$(SRCDIR)\src\lib}.c{$(PROG3_OBJDIR)\..\lib}.obj:
372     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG3_OBJDIR)\$(@F) /Fd$(PROG3_OBJDIR)\ /c $<
373
374 # ------------------------------------------------------------- #
375 # ------------------------------------------------------------- #
376 # Default target when no CFG library type has been specified,   #
377 # results in building target ALL for all c-ares library types.  #
378 # ------------------------------------------------------------- #
379 # ------------------------------------------------------------- #
380
381 !IF "$(VALID_CFGSET)" == "FALSE"
382
383 ALL:
384     $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=lib-release  ALL
385     $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=lib-debug    ALL
386     $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=dll-release  ALL
387     $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=dll-debug    ALL
388
389 clean:
390     @-RMDIR /S /Q $(BASE_DIR) >NUL 2>&1
391
392 install:
393     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=lib-release  install
394     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=lib-debug    install
395     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=dll-release  install
396     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=dll-debug    install
397
398 !ENDIF
399
400 # ---------------------------------------------------------------------
401 # Targets only available when a proper CFG library type has been given
402 # ---------------------------------------------------------------------
403
404 !IF "$(VALID_CFGSET)" == "TRUE"
405
406 ALL: c-ares acountry adig ahost
407     @
408
409 # $(HHEADERS) $(CSOURCES)
410 c-ares: $(CARES_OBJDIR) $(CARES_OBJS) $(CARES_OUTDIR)
411     $(CARES_LINK) $(CARES_LFLAGS) /out:$(CARES_OUTDIR)\$(CARES_TARGET) $(CARES_OBJS)
412 !   IF "$(USE_RES_FILE)" == "TRUE"
413     @if exist $(CARES_OUTDIR)\$(CARES_TARGET).manifest mt -nologo -manifest $(CARES_OUTDIR)\$(CARES_TARGET).manifest -outputresource:$(CARES_OUTDIR)\$(CARES_TARGET);2
414 !   ENDIF
415
416 # acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
417 acountry: c-ares $(PROG1_OBJDIR) $(PROG1_OBJS) $(PROG1_OUTDIR)
418     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG1_OUTDIR)\acountry.exe $(PROG1_OBJS:..\lib=)
419     @if exist $(PROG1_OUTDIR)\acountry.exe.manifest mt -nologo -manifest $(PROG1_OUTDIR)\acountry.exe.manifest -outputresource:$(PROG1_OUTDIR)\acountry.exe;1
420
421 # adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
422 adig: c-ares  $(PROG2_OBJDIR) $(PROG2_OBJS) $(PROG2_OUTDIR)
423     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG2_OUTDIR)\adig.exe $(PROG2_OBJS:..\lib=)
424     @if exist $(PROG2_OUTDIR)\adig.exe.manifest mt -nologo -manifest $(PROG2_OUTDIR)\adig.exe.manifest -outputresource:$(PROG2_OUTDIR)\adig.exe;1
425
426 # ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
427 ahost: c-ares $(PROG3_OBJDIR) $(PROG3_OBJS) $(PROG3_OUTDIR)
428     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG3_OUTDIR)\ahost.exe $(PROG3_OBJS:..\lib=)
429     @if exist $(PROG3_OUTDIR)\ahost.exe.manifest mt -nologo -manifest $(PROG3_OUTDIR)\ahost.exe.manifest -outputresource:$(PROG3_OUTDIR)\ahost.exe;1
430
431 $(CARES_OUTDIR): $(CARES_DIR)
432     @if not exist $(CARES_OUTDIR) mkdir $(CARES_OUTDIR)
433
434 $(PROG1_OUTDIR): $(PROG1_DIR)
435     @if not exist $(PROG1_OUTDIR) mkdir $(PROG1_OUTDIR)
436
437 $(PROG2_OUTDIR): $(PROG2_DIR)
438     @if not exist $(PROG2_OUTDIR) mkdir $(PROG2_OUTDIR)
439
440 $(PROG3_OUTDIR): $(PROG3_DIR)
441     @if not exist $(PROG3_OUTDIR) mkdir $(PROG3_OUTDIR)
442
443 $(CARES_OBJDIR): $(CARES_OUTDIR)
444     @if not exist $(CARES_OBJDIR) mkdir $(CARES_OBJDIR)
445
446 $(PROG1_OBJDIR): $(PROG1_OUTDIR)
447     @if not exist $(PROG1_OBJDIR) mkdir $(PROG1_OBJDIR)
448
449 $(PROG2_OBJDIR): $(PROG2_OUTDIR)
450     @if not exist $(PROG2_OBJDIR) mkdir $(PROG2_OBJDIR)
451
452 $(PROG3_OBJDIR): $(PROG3_OUTDIR)
453     @if not exist $(PROG3_OBJDIR) mkdir $(PROG3_OBJDIR)
454
455 clean:
456     @-RMDIR /S /Q $(CARES_OUTDIR) >NUL 2>&1
457     @-RMDIR /S /Q $(PROG1_OUTDIR) >NUL 2>&1
458     @-RMDIR /S /Q $(PROG2_OUTDIR) >NUL 2>&1
459     @-RMDIR /S /Q $(PROG3_OUTDIR) >NUL 2>&1
460
461 install:
462     @if not exist $(CARES_OUTDIR)\$(CARES_TARGET) \
463         $(MAKE) /f .\Makefile.msvc CFG=$(CFG) c-ares
464     @if not exist "$(INSTALL_DIR)"     mkdir "$(INSTALL_DIR)"
465     @if not exist "$(INSTALL_DIR_LIB)" mkdir "$(INSTALL_DIR_LIB)"
466     @if not exist "$(INSTALL_DIR_INC)" mkdir "$(INSTALL_DIR_INC)"
467     @copy /y $(CARES_OUTDIR)\*.*              "$(INSTALL_DIR_LIB)" >NUL
468     @copy /y $(SRCDIR)\include\ares.h         "$(INSTALL_DIR_INC)" >NUL
469     @copy /y $(SRCDIR)\include\ares_build.h   "$(INSTALL_DIR_INC)" >NUL
470     @copy /y $(SRCDIR)\include\ares_rules.h   "$(INSTALL_DIR_INC)" >NUL
471     @copy /y $(SRCDIR)\include\ares_version.h "$(INSTALL_DIR_INC)" >NUL
472     @echo Installed c-ares $(CFG)
473
474 !ENDIF
475
476 $(BASE_DIR):
477     @if not exist $(BASE_DIR) mkdir $(BASE_DIR)
478
479 $(CARES_DIR): $(BASE_DIR)
480     @if not exist $(CARES_DIR) mkdir $(CARES_DIR)
481
482 $(PROG1_DIR): $(BASE_DIR)
483     @if not exist $(PROG1_DIR) mkdir $(PROG1_DIR)
484
485 $(PROG2_DIR): $(BASE_DIR)
486     @if not exist $(PROG2_DIR) mkdir $(PROG2_DIR)
487
488 $(PROG3_DIR): $(BASE_DIR)
489     @if not exist $(PROG3_DIR) mkdir $(PROG3_DIR)
490
491 # End of Makefile.msvc