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