tizen 2.3.1 release
[external/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 NMAKE version deducing MSVC version
76 # -------------------------------------------
77
78 !IFNDEF _NMAKE_VER
79 !  MESSAGE Macro _NMAKE_VER not defined.
80 !  MESSAGE Use MSVC's NMAKE to process this makefile.
81 !  ERROR   See previous message.
82 !ENDIF
83
84 !IF     "$(_NMAKE_VER)" == "6.00.8168.0"
85 CC_VERS_NUM = 60
86 !ELSEIF "$(_NMAKE_VER)" == "6.00.9782.0"
87 CC_VERS_NUM = 60
88 !ELSEIF "$(_NMAKE_VER)" == "7.00.8882"
89 CC_VERS_NUM = 70
90 !ELSEIF "$(_NMAKE_VER)" == "7.00.9466"
91 CC_VERS_NUM = 70
92 !ELSEIF "$(_NMAKE_VER)" == "7.00.9955"
93 CC_VERS_NUM = 70
94 !ELSEIF "$(_NMAKE_VER)" == "7.10.2240.8"
95 CC_VERS_NUM = 71
96 !ELSEIF "$(_NMAKE_VER)" == "7.10.3077"
97 CC_VERS_NUM = 71
98 !ELSEIF "$(_NMAKE_VER)" == "8.00.40607.16"
99 CC_VERS_NUM = 80
100 !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.42"
101 CC_VERS_NUM = 80
102 !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.762"
103 CC_VERS_NUM = 80
104 !ELSEIF "$(_NMAKE_VER)" == "9.00.20706.01"
105 CC_VERS_NUM = 90
106 !ELSEIF "$(_NMAKE_VER)" == "9.00.21022.08"
107 CC_VERS_NUM = 90
108 !ELSEIF "$(_NMAKE_VER)" == "9.00.30729.01"
109 CC_VERS_NUM = 90
110 !ELSEIF "$(_NMAKE_VER)" == "10.00.20506.01"
111 CC_VERS_NUM = 100
112 !ELSEIF "$(_NMAKE_VER)" == "10.00.21003.01"
113 CC_VERS_NUM = 100
114 !ELSEIF "$(_NMAKE_VER)" == "10.00.30128.01"
115 CC_VERS_NUM = 100
116 !ELSEIF "$(_NMAKE_VER)" == "10.00.30319.01"
117 CC_VERS_NUM = 100
118 !ELSEIF "$(_NMAKE_VER)" == "10.00.40219.01"
119 CC_VERS_NUM = 100
120 !ELSEIF "$(_NMAKE_VER)" == "11.00.50522.1"
121 CC_VERS_NUM = 110
122 !ELSEIF "$(_NMAKE_VER)" == "11.00.50727.1"
123 CC_VERS_NUM = 110
124 !ELSEIF "$(_NMAKE_VER)" == "11.00.51106.1"
125 CC_VERS_NUM = 110
126 !ELSEIF "$(_NMAKE_VER)" == "11.00.60315.1"
127 CC_VERS_NUM = 110
128 !ELSE
129 !  MESSAGE Unknown value for _NMAKE_VER macro: "$(_NMAKE_VER)"
130 !  MESSAGE Please, report this condition on the c-ares development
131 !  MESSAGE mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
132 !  ERROR   See previous message.
133 !ENDIF
134
135 CC_VERS_STR = msvc$(CC_VERS_NUM)
136
137 # ----------------------------------------------------
138 # Verify that current subdir is the c-ares source one
139 # ----------------------------------------------------
140
141 !IF ! EXIST(.\ares_init.c)
142 !  MESSAGE Can not process Makefile.msvc from outside of c-ares source subdirectory.
143 !  MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again.
144 !  ERROR   See previous message.
145 !ENDIF
146
147 # ------------------------------------------------------------------
148 # Base subdir is the common root from which other subdirs will hang,
149 # the name depends on MSVC version being used when building c-ares.
150 # ------------------------------------------------------------------
151
152 BASE_DIR = .\$(CC_VERS_STR)
153
154 # ----------------------------------------
155 # Subdir holding sources for all projects
156 # ----------------------------------------
157
158 SRCDIR = .
159
160 # -----------------------------
161 # Default installation subdirs
162 # -----------------------------
163
164 !IFNDEF INSTALL_DIR
165 INSTALL_DIR = .
166 !ENDIF
167
168 !IFNDEF INSTALL_DIR_LIB
169 INSTALL_DIR_LIB = $(INSTALL_DIR)\lib
170 !ENDIF
171
172 !IFNDEF INSTALL_DIR_INC
173 INSTALL_DIR_INC = $(INSTALL_DIR)\include
174 !ENDIF
175
176 # -------------------------
177 # Configuration validation
178 # -------------------------
179
180 VALID_CFGSET = FALSE
181 !IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \
182     "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug"
183 VALID_CFGSET = TRUE
184 !ENDIF
185
186 !IF "$(VALID_CFGSET)" == "FALSE" && "$(CFG)" != ""
187 !  MESSAGE MSVC c-ares makefile
188 !  MESSAGE
189 !  MESSAGE Usage: nmake /f makefile.msvc CFG=<config> <target>
190 !  MESSAGE
191 !  MESSAGE <config> must be one of: [ lib-release | lib-debug | dll-release | dll-debug }
192 !  MESSAGE <target> must be one of: [ ALL | c-ares | acountry | adig | ahost | clean }
193 !  MESSAGE
194 !  MESSAGE If a <target> other than ALL or clean is given, <config> becomes mandatory.
195 !  MESSAGE
196 !  MESSAGE If neither <config> nor <target> are specified this results in
197 !  MESSAGE all targets being built for all <config> c-ares library types.
198 !  MESSAGE
199 !  ERROR Choose a valid configuration.
200 !ENDIF
201
202 # --------------------------------------------------------
203 # Project subdirs independent of configuration being used
204 # --------------------------------------------------------
205
206 CARES_DIR = $(BASE_DIR)\cares
207 PROG1_DIR = $(BASE_DIR)\acountry
208 PROG2_DIR = $(BASE_DIR)\adig
209 PROG3_DIR = $(BASE_DIR)\ahost
210
211 # ---------------------------------------------------
212 # Subdirs which are configuration dependent are only
213 # defined when a valid configuration has been given.
214 # ---------------------------------------------------
215
216 !IF "$(VALID_CFGSET)" == "TRUE"
217 CARES_OUTDIR = $(CARES_DIR)\$(CFG)
218 PROG1_OUTDIR = $(PROG1_DIR)\$(CFG)
219 PROG2_OUTDIR = $(PROG2_DIR)\$(CFG)
220 PROG3_OUTDIR = $(PROG3_DIR)\$(CFG)
221 CARES_OBJDIR = $(CARES_OUTDIR)\obj
222 PROG1_OBJDIR = $(PROG1_OUTDIR)\obj
223 PROG2_OBJDIR = $(PROG2_OUTDIR)\obj
224 PROG3_OBJDIR = $(PROG3_OUTDIR)\obj
225 !ELSE
226 !UNDEF CARES_OUTDIR
227 !UNDEF PROG1_OUTDIR
228 !UNDEF PROG2_OUTDIR
229 !UNDEF PROG3_OUTDIR
230 !UNDEF CARES_OBJDIR
231 !UNDEF PROG1_OBJDIR
232 !UNDEF PROG2_OBJDIR
233 !UNDEF PROG3_OBJDIR
234 !ENDIF
235
236 # -------------------------------------
237 # Settings that depend on tcp/ip stack
238 # -------------------------------------
239
240 !IF "$(USE_WATT32)" == "1"
241 CFLAGS  = /UWIN32 /DWATT32 /I$(WATT_ROOT)\inc
242 EX_LIBS_REL = $(WATT_ROOT)\lib\wattcpvc_imp.lib
243 EX_LIBS_DBG = $(WATT_ROOT)\lib\wattcpvc_imp_d.lib
244 !ELSE
245 CFLAGS  = /DWIN32
246 EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib
247 EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib
248 !ENDIF
249
250 # -----------------------------------------
251 # Switches that depend on compiler version
252 # -----------------------------------------
253
254 !IF $(CC_VERS_NUM) == 60
255 PDB_NONE            = /pdb:none
256 PDBTYPE_CONSOLIDATE = /pdbtype:consolidate
257 !ELSE
258 !UNDEF PDB_NONE
259 !UNDEF PDBTYPE_CONSOLIDATE
260 !ENDIF
261
262 !IF $(CC_VERS_NUM) <= 70
263 RT_ERROR_CHECKING = /GZ
264 !ELSE
265 RT_ERROR_CHECKING = /RTCsu
266 !ENDIF
267
268 # ----------------------------
269 # Assorted commands and flags
270 # ----------------------------
271
272 CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2
273 CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi $(RT_ERROR_CHECKING)
274 CC_CFLAGS  = $(CFLAGS) /I. /W3 /EHsc /FD
275
276 RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG"
277 RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG"
278
279 LINK_CMD_LIB = link.exe /lib /nologo
280 LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no
281 LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console
282
283 LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE)
284 LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE)
285
286 # ---------------------------------
287 # Configuration dependent settings
288 # ---------------------------------
289
290 !IF "$(CFG)" == "lib-release"
291 CARES_TARGET = $(STA_LIB_REL).lib
292 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB
293 CARES_LFLAGS =
294 SPROG_CFLAGS = /DCARES_STATICLIB
295 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib
296 CARES_LINK   = $(LINK_CMD_LIB)
297 SPROG_LINK   = $(LINK_CMD_EXE_REL)
298 CC_CMD       = $(CC_CMD_REL)
299 !ENDIF
300
301 !IF "$(CFG)" == "lib-debug"
302 CARES_TARGET = $(STA_LIB_DBG).lib
303 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD
304 CARES_LFLAGS =
305 SPROG_CFLAGS = /DCARES_STATICLIB
306 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib
307 CARES_LINK   = $(LINK_CMD_LIB)
308 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
309 CC_CMD       = $(CC_CMD_DBG)
310 !ENDIF
311
312 !IF "$(CFG)" == "dll-release"
313 CARES_TARGET = $(DYN_LIB_REL).dll
314 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY
315 CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(CARES_OUTDIR)\$(IMP_LIB_REL).lib $(PDB_NONE)
316 SPROG_CFLAGS =
317 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib
318 CARES_LINK   = $(LINK_CMD_DLL)
319 SPROG_LINK   = $(LINK_CMD_EXE_REL)
320 CC_CMD       = $(CC_CMD_REL)
321 USE_RES_FILE = TRUE
322 RC_CMD       = $(RC_CMD_REL)
323 !ENDIF
324
325 !IF "$(CFG)" == "dll-debug"
326 CARES_TARGET = $(DYN_LIB_DBG).dll
327 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD
328 CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(CARES_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(CARES_OUTDIR)\$(DYN_LIB_DBG).pdb $(PDBTYPE_CONSOLIDATE)
329 SPROG_CFLAGS =
330 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib
331 CARES_LINK   = $(LINK_CMD_DLL)
332 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
333 CC_CMD       = $(CC_CMD_DBG)
334 USE_RES_FILE = TRUE
335 RC_CMD       = $(RC_CMD_DBG)
336 !ENDIF
337
338 # --------------------------------------------
339 # Makefile.inc provides lists of source files
340 # --------------------------------------------
341
342 !INCLUDE .\Makefile.inc
343
344 # ----------------------------
345 # Build lists of object files
346 # ----------------------------
347
348 !IF "$(VALID_CFGSET)" == "TRUE"
349
350 !IF [ECHO CARES_OBJS=^$(CARES_OBJDIR)\$(CSOURCES: = $(CARES_OBJDIR^)\) > .\cares_objs.inc] == 0
351 !INCLUDE .\cares_objs.inc
352 !IF [DEL .\cares_objs.inc]
353 !ENDIF
354 !ELSE
355 !ERROR Problem generating CARES_OBJS list.
356 !ENDIF
357 CARES_OBJS = $(CARES_OBJS:.c=.obj)
358 !IF "$(USE_RES_FILE)" == "TRUE"
359 CARES_OBJS = $(CARES_OBJS) $(CARES_OBJDIR)\cares.res
360 !ENDIF
361
362 !IF [ECHO PROG1_OBJS=^$(PROG1_OBJDIR)\$(SAMPLESOURCES: = $(PROG1_OBJDIR^)\) > .\prog1_objs.inc] == 0
363 !INCLUDE .\prog1_objs.inc
364 !IF [DEL .\prog1_objs.inc]
365 !ENDIF
366 !ELSE
367 !ERROR Problem generating PROG1_OBJS list.
368 !ENDIF
369 PROG1_OBJS = $(PROG1_OBJS:.c=.obj)
370 PROG1_OBJS = $(PROG1_OBJS) $(PROG1_OBJDIR)\acountry.obj
371
372 !IF [ECHO PROG2_OBJS=^$(PROG2_OBJDIR)\$(SAMPLESOURCES: = $(PROG2_OBJDIR^)\) > .\prog2_objs.inc] == 0
373 !INCLUDE .\prog2_objs.inc
374 !IF [DEL .\prog2_objs.inc]
375 !ENDIF
376 !ELSE
377 !ERROR Problem generating PROG2_OBJS list.
378 !ENDIF
379 PROG2_OBJS = $(PROG2_OBJS:.c=.obj)
380 PROG2_OBJS = $(PROG2_OBJS) $(PROG2_OBJDIR)\adig.obj
381
382 !IF [ECHO PROG3_OBJS=^$(PROG3_OBJDIR)\$(SAMPLESOURCES: = $(PROG3_OBJDIR^)\) > .\prog3_objs.inc] == 0
383 !INCLUDE .\prog3_objs.inc
384 !IF [DEL .\prog3_objs.inc]
385 !ENDIF
386 !ELSE
387 !ERROR Problem generating PROG3_OBJS list.
388 !ENDIF
389 PROG3_OBJS = $(PROG3_OBJS:.c=.obj)
390 PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj
391
392 !ENDIF
393
394 # --------------------------------
395 # Only our custom inference rules
396 # --------------------------------
397
398 .SUFFIXES:
399 .SUFFIXES: .c .rc
400
401 {$(SRCDIR)}.rc{$(CARES_OBJDIR)}.res:
402     $(RC_CMD) /Fo $@ $<
403
404 {$(SRCDIR)}.c{$(CARES_OBJDIR)}.obj:
405     $(CC_CMD) $(CC_CFLAGS) $(CARES_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
406
407 {$(SRCDIR)}.c{$(PROG1_OBJDIR)}.obj:
408     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
409
410 {$(SRCDIR)}.c{$(PROG2_OBJDIR)}.obj:
411     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
412
413 {$(SRCDIR)}.c{$(PROG3_OBJDIR)}.obj:
414     $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
415
416 # ------------------------------------------------------------- #
417 # ------------------------------------------------------------- #
418 # Default target when no CFG library type has been specified,   #
419 # results in building target ALL for all c-ares library types.  #
420 # ------------------------------------------------------------- #
421 # ------------------------------------------------------------- #
422
423 !IF "$(VALID_CFGSET)" == "FALSE"
424
425 ALL:
426     $(MAKE) /f .\Makefile.msvc  CFG=lib-release  ALL
427     $(MAKE) /f .\Makefile.msvc  CFG=lib-debug    ALL
428     $(MAKE) /f .\Makefile.msvc  CFG=dll-release  ALL
429     $(MAKE) /f .\Makefile.msvc  CFG=dll-debug    ALL
430
431 clean:
432     @-RMDIR /S /Q $(BASE_DIR) >NUL 2>&1
433
434 install:
435     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=lib-release  install
436     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=lib-debug    install
437     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=dll-release  install
438     @$(MAKE) /nologo /f .\Makefile.msvc  CFG=dll-debug    install
439
440 !ENDIF
441
442 # ---------------------------------------------------------------------
443 # Targets only available when a proper CFG library type has been given
444 # ---------------------------------------------------------------------
445
446 !IF "$(VALID_CFGSET)" == "TRUE"
447
448 ALL: c-ares acountry adig ahost
449     @
450
451 c-ares: $(HHEADERS) $(CSOURCES) $(CARES_OBJDIR) $(CARES_OBJS) $(CARES_OUTDIR)
452     $(CARES_LINK) $(CARES_LFLAGS) /out:$(CARES_OUTDIR)\$(CARES_TARGET) $(CARES_OBJS)
453 !   IF "$(USE_RES_FILE)" == "TRUE"
454     @if exist $(CARES_OUTDIR)\$(CARES_TARGET).manifest mt -nologo -manifest $(CARES_OUTDIR)\$(CARES_TARGET).manifest -outputresource:$(CARES_OUTDIR)\$(CARES_TARGET);2
455 !   ENDIF
456
457 acountry: c-ares acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS) $(PROG1_OBJDIR) $(PROG1_OBJS) $(PROG1_OUTDIR)
458     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG1_OUTDIR)\acountry.exe $(PROG1_OBJS)
459     @if exist $(PROG1_OUTDIR)\acountry.exe.manifest mt -nologo -manifest $(PROG1_OUTDIR)\acountry.exe.manifest -outputresource:$(PROG1_OUTDIR)\acountry.exe;1
460
461 adig: c-ares adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) $(PROG2_OBJDIR) $(PROG2_OBJS) $(PROG2_OUTDIR)
462     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG2_OUTDIR)\adig.exe $(PROG2_OBJS)
463     @if exist $(PROG2_OUTDIR)\adig.exe.manifest mt -nologo -manifest $(PROG2_OUTDIR)\adig.exe.manifest -outputresource:$(PROG2_OUTDIR)\adig.exe;1
464
465 ahost: c-ares ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) $(PROG3_OBJDIR) $(PROG3_OBJS) $(PROG3_OUTDIR)
466     $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG3_OUTDIR)\ahost.exe $(PROG3_OBJS)
467     @if exist $(PROG3_OUTDIR)\ahost.exe.manifest mt -nologo -manifest $(PROG3_OUTDIR)\ahost.exe.manifest -outputresource:$(PROG3_OUTDIR)\ahost.exe;1
468
469 $(CARES_OUTDIR): $(CARES_DIR)
470     @if not exist $(CARES_OUTDIR) mkdir $(CARES_OUTDIR)
471
472 $(PROG1_OUTDIR): $(PROG1_DIR)
473     @if not exist $(PROG1_OUTDIR) mkdir $(PROG1_OUTDIR)
474
475 $(PROG2_OUTDIR): $(PROG2_DIR)
476     @if not exist $(PROG2_OUTDIR) mkdir $(PROG2_OUTDIR)
477
478 $(PROG3_OUTDIR): $(PROG3_DIR)
479     @if not exist $(PROG3_OUTDIR) mkdir $(PROG3_OUTDIR)
480
481 $(CARES_OBJDIR): $(CARES_OUTDIR)
482     @if not exist $(CARES_OBJDIR) mkdir $(CARES_OBJDIR)
483
484 $(PROG1_OBJDIR): $(PROG1_OUTDIR)
485     @if not exist $(PROG1_OBJDIR) mkdir $(PROG1_OBJDIR)
486
487 $(PROG2_OBJDIR): $(PROG2_OUTDIR)
488     @if not exist $(PROG2_OBJDIR) mkdir $(PROG2_OBJDIR)
489
490 $(PROG3_OBJDIR): $(PROG3_OUTDIR)
491     @if not exist $(PROG3_OBJDIR) mkdir $(PROG3_OBJDIR)
492
493 clean:
494     @-RMDIR /S /Q $(CARES_OUTDIR) >NUL 2>&1
495     @-RMDIR /S /Q $(PROG1_OUTDIR) >NUL 2>&1
496     @-RMDIR /S /Q $(PROG2_OUTDIR) >NUL 2>&1
497     @-RMDIR /S /Q $(PROG3_OUTDIR) >NUL 2>&1
498
499 install:
500     @if not exist $(CARES_OUTDIR)\$(CARES_TARGET) \
501         $(MAKE) /f .\Makefile.msvc CFG=$(CFG) c-ares
502     @if not exist "$(INSTALL_DIR)"     mkdir "$(INSTALL_DIR)"
503     @if not exist "$(INSTALL_DIR_LIB)" mkdir "$(INSTALL_DIR_LIB)"
504     @if not exist "$(INSTALL_DIR_INC)" mkdir "$(INSTALL_DIR_INC)"
505     @copy /y $(CARES_OUTDIR)\*.*      "$(INSTALL_DIR_LIB)" >NUL
506     @copy /y $(SRCDIR)\ares.h         "$(INSTALL_DIR_INC)" >NUL
507     @copy /y $(SRCDIR)\ares_build.h   "$(INSTALL_DIR_INC)" >NUL
508     @copy /y $(SRCDIR)\ares_rules.h   "$(INSTALL_DIR_INC)" >NUL
509     @copy /y $(SRCDIR)\ares_version.h "$(INSTALL_DIR_INC)" >NUL
510     @echo Installed c-ares $(CFG)
511
512 !ENDIF
513
514 $(BASE_DIR):
515     @if not exist $(BASE_DIR) mkdir $(BASE_DIR)
516
517 $(CARES_DIR): $(BASE_DIR)
518     @if not exist $(CARES_DIR) mkdir $(CARES_DIR)
519
520 $(PROG1_DIR): $(BASE_DIR)
521     @if not exist $(PROG1_DIR) mkdir $(PROG1_DIR)
522
523 $(PROG2_DIR): $(BASE_DIR)
524     @if not exist $(PROG2_DIR) mkdir $(PROG2_DIR)
525
526 $(PROG3_DIR): $(BASE_DIR)
527     @if not exist $(PROG3_DIR) mkdir $(PROG3_DIR)
528
529 # End of Makefile.msvc