Revert "sspi: Added version information"
[platform/upstream/curl.git] / winbuild / MakefileBuild.vc
1 #***************************************************************************
2 #                                  _   _ ____  _
3 #  Project                     ___| | | |  _ \| |
4 #                             / __| | | | |_) | |
5 #                            | (__| |_| |  _ <| |___
6 #                             \___|\___/|_| \_\_____|
7 #
8 # Copyright (C) 1999 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
9 #
10 # This software is licensed as described in the file COPYING, which
11 # you should have received as part of this distribution. The terms
12 # are also available at http://curl.haxx.se/docs/copyright.html.
13 #
14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 # copies of the Software, and permit persons to whom the Software is
16 # furnished to do so, under the terms of the COPYING file.
17 #
18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 # KIND, either express or implied.
20 #
21 #***************************************************************************
22
23 ###########################################################################
24 #
25 # Makefile for building libcurl with MSVC 6, 7, 8, 9 and 10
26 #
27 # Usage: see usage message below
28 #        Should be invoked from winbuild directory
29 #        Edit the paths and desired library name
30 #        SSL path is only required if you intend compiling
31 #        with SSL.
32 #
33 # This make file leaves the result either a .lib or .dll file
34 # in the \lib directory. It should be called from the \lib
35 # directory.
36 #
37 # An option would have been to allow the source directory to
38 # be specified, but I saw no requirement.
39 #
40 # Another option would have been to leave the .lib and .dll
41 # files in the "cfg" directory, but then the make file
42 # in \src would need to be changed.
43 #
44 ##############################################################
45
46 CFGSET=FALSE
47 WINBUILD_DIR=`cd`
48 ZIP        = zip.exe
49
50 !IF "$(VC)"=="6"
51 CC_NODEBUG  = cl.exe /O2 /DNDEBUG
52 CC_DEBUG    = cl.exe /Od /Gm /Zi /D_DEBUG /GZ
53 CFLAGS     = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL
54 !ELSE
55 CC_NODEBUG  = cl.exe /O2 /DNDEBUG
56 CC_DEBUG    = cl.exe /Od /D_DEBUG /RTC1 /Z7 /LDd /W3
57 CFLAGS      = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL
58 !ENDIF
59
60 LFLAGS     = /nologo /machine:$(MACHINE)
61 LNKDLL     = link.exe /DLL
62 LNKLIB     = link.exe /lib
63
64 CFLAGS_PDB = /Zi
65 LFLAGS_PDB = /incremental:no /opt:ref,icf
66
67 CFLAGS_LIBCURL_STATIC  = /DCURL_STATICLIB
68
69 LIB_NAME_STATIC        = libcurl_a.lib
70 LIB_NAME_STATIC_DEBUG  = libcurl_a_debug.lib
71 LIB_NAME_DLL           = libcurl.dll
72 LIB_NAME_IMP           = libcurl.lib
73 LIB_NAME_DLL_DEBUG     = libcurl_debug.dll
74 LIB_NAME_IMP_DEBUG     = libcurl_debug.lib
75
76 # CURL Command section
77 PROGRAM_NAME = curl.exe
78 CURL_CFLAGS   =  /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c
79 CURL_LFLAGS   = /nologo /out:$(DIRDIST)\bin\$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)
80 CURL_RESFLAGS = /i../include
81
82 #############################################################
83 ## Nothing more to do below this line!
84 LIBCURL_SRC_DIR = ..\lib
85 CURL_SRC_DIR = ..\src
86
87 !IFNDEF WITH_DEVEL
88 WITH_DEVEL          = ../../deps
89 !ENDIF
90 DEVEL_INCLUDE  = $(WITH_DEVEL)/include
91 DEVEL_LIB      = $(WITH_DEVEL)/lib
92 DEVEL_BIN      = $(WITH_DEVEL)/bin
93
94 CFLAGS         = $(CFLAGS) /I"$(DEVEL_INCLUDE)"
95 LFLAGS         = $(LFLAGS) "/LIBPATH:$(DEVEL_LIB)"
96
97 !IF "$(WITH_SSL)"=="dll"
98 SSL_LIBS     = libeay32.lib ssleay32.lib
99 USE_SSL      = true
100 SSL=dll
101 !ELSEIF "$(WITH_SSL)"=="static"
102 SSL_LIBS     = libeay32.lib ssleay32.lib gdi32.lib user32.lib advapi32.lib
103 USE_SSL      = true
104 SSL=static
105 !ENDIF
106
107 !IFDEF USE_SSL
108 SSL_CFLAGS   = /DUSE_SSLEAY /I"$(DEVEL_INCLUDE)/openssl"
109 !ENDIF
110
111 !IF "$(WITH_ZLIB)"=="dll"
112 ZLIB_LIBS   = zlib.lib
113 ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ
114 USE_ZLIB     = true
115 zlib=dll
116 !ELSEIF "$(WITH_ZLIB)"=="static"
117 ZLIB_LIBS   = zlib_a.lib
118 ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ
119 USE_ZLIB    = true
120 ZLIB=static
121 !ENDIF
122
123 !IFDEF USE_ZLIB
124 ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ
125 !ENDIF
126
127 !IF "$(WITH_SSH2)"=="dll"
128 SSH2_LIBS   = libssh2.lib
129 USE_SSH2    = true
130 SSH2=dll
131 !ELSEIF "$(WITH_SSH2)"=="static"
132 SSH2_LIBS   = libssh2_a_debug.lib
133 USE_SSH2    = true
134 SSH2=static
135 !ENDIF
136
137 !IFDEF USE_SSH2
138 SSH2_CFLAGS   = /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /DUSE_LIBSSH2
139 SSH2_CFLAGS   = $(SSH2_CFLAGS) /I$(WITH_DEVEL)/include/libssh2
140 !ENDIF
141
142 !IFNDEF USE_SSPI
143 USE_SSPI=yes
144 !ENDIF
145
146 !IF "$(USE_SSPI)"=="yes"
147 CFLAGS_SSPI = /DUSE_WINDOWS_SSPI
148 USE_SSPI=true
149 !ENDIF
150
151 !IFNDEF USE_IPV6
152 USE_IPV6=true
153 !ENDIF
154
155 !IFNDEF ENABLE_IDN
156 USE_IDN   =true
157 !ELSEIF "$(USE_IDN)"=="yes"
158 USE_IDN   =true
159 !ENDIF
160
161 !IF "$(USE_IDN)"=="true"
162 CFLAGS    = $(CFLAGS) /DUSE_WIN32_IDN
163 LFLAGS    = $(LFLAGS) Normaliz.lib
164 !ENDIF
165
166 !IF "$(USE_IPV6)"=="yes"
167 CFLAGS = $(CFLAGS) /DUSE_IPV6
168 USE_IPV6=true
169 !ENDIF
170
171 !IF "$(GEN_PDB)"=="yes"
172 GEN_PDB=true
173 !ENDIF
174
175 !IFNDEF MACHINE
176 MACHINE = X86
177 !ENDIF
178
179 !IFDEF EMBEND_MANIFEST
180 MANIFESTTOOL = mt -manifest $(DIRDIST)\$(PROGRAM_NAME).manifest -outputresource:$(DIRDIST)\$(PROGRAM_NAME);1
181 !ENDIF
182
183 # Runtime library configuration
184 !IF "$(RTLIBCFG)" == "static"
185 RTLIB  = /MT
186 RTLIB_DEBUG = /MTd
187 !ELSE
188 RTLIB   = /MD
189 RTLIB_DEBUG  = /MDd
190 !ENDIF
191
192 !IF "$(MODE)"=="static"
193 TARGET = $(LIB_NAME_STATIC)
194 CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC)
195 AS_DLL = false
196 CFGSET=true
197 !ELSEIF "$(MODE)"=="dll"
198 TARGET = $(LIB_NAME_DLL)
199 CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP)
200 AS_DLL = true
201 CFGSET=true
202 !ENDIF
203
204 WIN_LIBS    = ws2_32.lib wldap32.lib
205 !IF "$(CFGSET)" == "FALSE"
206 !ERROR please choose a valid mode
207 !ENDIF
208
209 CONFIG_NAME_LIB = libcurl
210
211 # CURL_XX macros are for the curl.exe command
212
213 !IF "$(DEBUG)"=="yes"
214 RC_FLAGS = /dDEBUGBUILD=1 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc
215 CC              = $(CC_DEBUG) $(RTLIB_DEBUG)
216
217 CURL_CC         = $(CC)
218 CURL_RC_FLAGS = /i../include /dDEBUGBUILD=1 /Fo $@ $(CURL_SRC_DIR)\curl.rc
219 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-debug
220 !ELSE
221 RC_FLAGS = /dDEBUGBUILD=0 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc
222 CC              = $(CC_NODEBUG) $(RTLIB)
223
224 CURL_CC         = $(CC)
225 CURL_RC_FLAGS = /i../include /dDEBUGBUILD=0 /Fo $@ $(CURL_SRC_DIR)\curl.rc
226 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-release
227 !ENDIF
228
229 CURL_CC = $(CURL_CC) $(CURL_CFLAGS)
230
231 !IF "$(AS_DLL)" == "true"
232
233 LNK      = $(LNKDLL) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET)
234 !IF "$(DEBUG)"=="yes"
235 TARGET    = $(LIB_NAME_DLL_DEBUG)
236 LNK       = $(LNK) /DEBUG /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG)
237 CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG)
238 !ELSE
239 TARGET    = $(LIB_NAME_DLL)
240 LNK       = $(LNK)  /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP)
241 CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP)
242 !ENDIF
243 RESOURCE = $(LIB_DIROBJ)\libcurl.res
244 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-dll
245
246 # AS_DLL
247 !ELSE
248
249 !IF "$(DEBUG)"=="yes"
250 TARGET   = $(LIB_NAME_STATIC_DEBUG)
251 !ELSE
252 TARGET   = $(LIB_NAME_STATIC)
253 !ENDIF
254 LNK      = $(LNKLIB) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET)
255 CC       = $(CC) $(CFLAGS_LIBCURL_STATIC)
256 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static
257
258 # AS_DLL
259 !ENDIF
260
261 !IF "$(USE_SSL)"=="true"
262 CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
263 LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(SSL_LIBS)
264 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL)
265 !ENDIF
266
267 !IF "$(USE_ZLIB)"=="true"
268 CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)
269 LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS) $(ZLIB_LIBS)
270 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB)
271 !ENDIF
272
273 !IF "$(USE_SSH2)"=="true"
274 CFLAGS = $(CFLAGS) $(SSH2_CFLAGS)
275 LFLAGS = $(LFLAGS) $(SSH2_LFLAGS) $(SSH2_LIBS)
276 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh2-$(SSH2)
277 !ENDIF
278
279 !IF "$(USE_IPV6)"=="true"
280 CFLAGS = $(CFLAGS) $(CFLAGS_IPV6)
281 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ipv6
282 !ENDIF
283
284 !IF "$(USE_SSPI)"=="true"
285 CFLAGS = $(CFLAGS) $(CFLAGS_SSPI)
286 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-sspi
287 !ENDIF
288
289 !IF "$(GEN_PDB)"=="true"
290 CFLAGS = $(CFLAGS) $(CFLAGS_PDB)
291 LFLAGS = $(LFLAGS) $(LFLAGS_PDB)
292 !ENDIF
293
294 LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
295 CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
296 DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\
297
298 #
299 # curl.exe
300 #
301 CURL_LINK = link.exe /incremental:no /libpath:"$(DIRDIST)\lib"
302
303 #!IF "$(CFG)" == "release-ssh2-ssl-dll-zlib"
304 #TARGET   = $(LIB_NAME_STATIC)
305 #LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBS)  $(SSH2LIBS) $(SSL_LFLAGS) $(ZLIB_LFLAGS) $(LFLAGSSSH) /out:$(LIB_DIROBJ)\$(TARGET)
306 #CC       = $(CCNODBG) $(RTLIB) $(SSL_CFLAGS) $(ZLIB_CFLAGS) $(CFLAGSLIB)  $(SSH2_CFLAGS)
307 #CFGSET   = TRUE
308 #!ENDIF
309
310 #######################
311 # Only the clean target can be used if a config was not provided.
312 #
313 !IF "$(CFGSET)" == "FALSE"
314 clean:
315         @-erase /s *.dll 2> NUL
316         @-erase /s *.exp 2> NUL
317         @-erase /s *.idb 2> NUL
318         @-erase /s *.lib 2> NUL
319         @-erase /s *.obj 2> NUL
320         @-erase /s *.pch 2> NUL
321         @-erase /s *.pdb 2> NUL
322         @-erase /s *.res 2> NUL
323 !ELSE
324 # A mode was provided, so the library can be built.
325 #
326 !include CURL_OBJS.inc
327 !include LIBCURL_OBJS.inc
328
329 LIB_OBJS= $(LIBCURL_OBJS)
330 EXE_OBJS= $(CURL_OBJS)
331
332 all : $(TARGET) $(PROGRAM_NAME)
333
334 package: $(TARGET)
335         @cd $(DIRDIST)
336         @-$(ZIP) -9 -q -r ..\$(CONFIG_NAME_LIB).zip .>nul 2<&1
337         @cd $(MAKEDIR)
338
339 $(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DISTDIR)
340         @echo Using SSL: $(USE_SSL)
341         @echo Using SSH2: $(USE_SSH2)
342         @echo Using ZLIB: $(USE_ZLIB)
343         @echo Using SSPI: $(USE_SSPI)
344         @echo Using SSPI: $(LFLAGS)
345         @echo Gen PDB:    $(GEN_PDB)
346         @echo Debug:      $(DEBUG)
347         $(LNK) $(LFLAGS) $(LIB_OBJS)
348         @echo Copying libs...
349         @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL)       $(DIRDIST)\bin\ /y >nul 2<&1
350         @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC)    $(DIRDIST)\lib\ /y >nul 2<&1
351         @if exist $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_DLL_DEBUG) $(DIRDIST)\bin\ /y >nul 2<&1
352         @if exist $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_STATIC_DEBUG) $(DIRDIST)\lib\ /y >nul 2<&1
353         @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP)       $(DIRDIST)\lib\ /y >nul 2<&1
354         @if exist $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) copy $(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) $(DIRDIST)\lib >nul 2<&1
355         @-copy $(LIB_DIROBJ)\*.exp                 $(DIRDIST)\lib /y >nul 2<&1
356         @-copy $(LIB_DIROBJ)\*.pdb                 $(DIRDIST)\lib /y >nul 2<&1
357         @-copy ..\include\curl\*.h   $(DIRDIST)\include\curl\ /y  >nul 2<&1
358
359 $(LIB_OBJS): $(LIB_DIROBJ) $(DIRDIST)
360
361 $(DIRDIST):
362         @if not exist "$(DIRDIST)\bin" mkdir $(DIRDIST)\bin
363         @if not exist "$(DIRDIST)\include" mkdir $(DIRDIST)\include
364         @if not exist "$(DIRDIST)\include\curl" mkdir $(DIRDIST)\include\curl
365         @if not exist "$(DIRDIST)\lib" mkdir $(DIRDIST)\lib
366
367 $(LIB_DIROBJ):
368         @if not exist "$(LIB_DIROBJ)" mkdir $(LIB_DIROBJ)
369
370 $(CURL_DIROBJ):
371         @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)
372 # we need a lib dir for the portability functions from libcurl
373 # we use the .c directly here
374         @if not exist "$(CURL_DIROBJ)" mkdir $(CURL_DIROBJ)\lib
375
376 .SUFFIXES: .c .obj .res
377
378 {$(LIBCURL_SRC_DIR)\}.c{$(LIB_DIROBJ)\}.obj:
379         $(CC) $(CFLAGS) /Fo"$@"  $<
380
381 $(LIB_DIROBJ)\libcurl.res: $(LIBCURL_SRC_DIR)\libcurl.rc
382         rc $(RC_FLAGS)
383
384 #
385 # curl.exe
386 #
387
388
389 !IF "$(MODE)"=="static"
390 !IF "$(DEBUG)"=="yes"
391 CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC_DEBUG)
392 !ELSE
393 CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC)
394 !ENDIF
395 !ELSEIF "$(MODE)"=="dll"
396 !IF "$(DEBUG)"=="yes"
397 CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP_DEBUG)
398 !ELSE
399 CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP)
400 !ENDIF
401 !ENDIF
402
403 CURL_FROM_LIBCURL=$(CURL_DIROBJ)\hugehelp.obj \
404  $(CURL_DIROBJ)\nonblock.obj \
405  $(CURL_DIROBJ)\rawstr.obj \
406  $(CURL_DIROBJ)\strtoofft.obj
407  
408 $(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
409         $(CURL_LINK) $(CURL_LFLAGS) $(CURL_LIBCURL_LIBNAME) $(WIN_LIBS) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
410         $(MANIFESTTOOL)
411
412 {$(CURL_SRC_DIR)\}.c{$(CURL_DIROBJ)\}.obj:
413         $(CC) $(CURL_CFLAGS) /Fo"$@"  $<
414
415 $(CURL_DIROBJ)\hugehelp.obj: $(CURL_SRC_DIR)\hugehelp.c
416         $(CURL_CC) $(CURL_CFLAGS) /Zm200 /Fo"$@" $(CURL_SRC_DIR)\hugehelp.c
417 $(CURL_DIROBJ)\nonblock.obj: ../lib/nonblock.c
418         $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/nonblock.c
419 $(CURL_DIROBJ)\rawstr.obj: ../lib/rawstr.c
420         $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/rawstr.c
421 $(CURL_DIROBJ)\strtoofft.obj: ../lib/strtoofft.c
422         $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/strtoofft.c
423 $(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc
424         rc $(CURL_RC_FLAGS)
425
426 !ENDIF  # End of case where a config was provided.