1#*************************************************************************** 2# _ _ ____ _ 3# Project ___| | | | _ \| | 4# / __| | | | |_) | | 5# | (__| |_| | _ <| |___ 6# \___|\___/|_| \_\_____| 7# 8# Copyright (C) 1999 - 2010, 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 46CFGSET=FALSE 47WINBUILD_DIR=`cd` 48ZIP = zip.exe 49 50!IF "$(VC)"=="6" 51CC_NODEBUG = cl.exe /O2 /DNDEBUG 52CC_DEBUG = cl.exe /Od /Gm /Zi /D_DEBUG /GZ 53CFLAGS = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL 54!ELSE 55CC_NODEBUG = cl.exe /O2 /DNDEBUG 56CC_DEBUG = cl.exe /Od /D_DEBUG /RTC1 /Z7 /LDd /W3 57CFLAGS = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL 58!ENDIF 59 60LFLAGS = /nologo /machine:$(MACHINE) 61LNKDLL = link.exe /DLL 62LNKLIB = link.exe /lib 63 64CFLAGS_PDB = /Zi 65LFLAGS_PDB = /incremental:no /opt:ref,icf 66 67CFLAGS_LIBCURL_STATIC = /DCURL_STATICLIB 68 69LIB_NAME_STATIC = libcurl_a.lib 70LIB_NAME_STATIC_DEBUG = libcurl_a_debug.lib 71LIB_NAME_DLL = libcurl.dll 72LIB_NAME_IMP = libcurl.lib 73LIB_NAME_DLL_DEBUG = libcurl_debug.dll 74LIB_NAME_IMP_DEBUG = libcurl_debug.lib 75 76# CURL Command section 77PROGRAM_NAME = curl.exe 78CURL_CFLAGS = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c 79CURL_LFLAGS = /nologo /out:$(DIRDIST)\bin\$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE) 80CURL_RESFLAGS = /i../include 81 82############################################################# 83## Nothing more to do below this line! 84LIBCURL_SRC_DIR = ..\lib 85CURL_SRC_DIR = ..\src 86 87!IFNDEF WITH_DEVEL 88WITH_DEVEL = ../../deps 89!ENDIF 90DEVEL_INCLUDE = $(WITH_DEVEL)/include 91DEVEL_LIB = $(WITH_DEVEL)/lib 92DEVEL_BIN = $(WITH_DEVEL)/bin 93 94CFLAGS = $(CFLAGS) /I"$(DEVEL_INCLUDE)" 95LFLAGS = $(LFLAGS) "/LIBPATH:$(DEVEL_LIB)" 96 97!IF "$(WITH_SSL)"=="dll" 98SSL_LIBS = libeay32.lib ssleay32.lib 99USE_SSL = true 100SSL=dll 101!ELSEIF "$(WITH_SSL)"=="static" 102SSL_LIBS = libeay32.lib ssleay32.lib 103USE_SSL = true 104SSL=dll 105!ENDIF 106 107!IFDEF USE_SSL 108SSL_CFLAGS = /DUSE_SSLEAY /I"$(DEVEL_INCLUDE)/openssl" 109!ENDIF 110 111!IF "$(WITH_ZLIB)"=="dll" 112ZLIB_LIBS = zlib.lib 113ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ 114USE_ZLIB = true 115zlib=dll 116!ELSEIF "$(WITH_ZLIB)"=="static" 117ZLIB_LIBS = zlib_a.lib 118ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ 119USE_ZLIB = true 120ZLIB=static 121!ENDIF 122 123!IFDEF USE_ZLIB 124ZLIB_CFLAGS = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ 125!ENDIF 126 127!IF "$(WITH_SSH2)"=="dll" 128SSH2_LIBS = libssh2.lib 129USE_SSH2 = true 130SSH2=dll 131!ELSEIF "$(WITH_SSH2)"=="static" 132SSH2_LIBS = libssh2_a_debug.lib 133USE_SSH2 = true 134SSH2=static 135!ENDIF 136 137!IFDEF USE_SSH2 138SSH2_CFLAGS = /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /DUSE_LIBSSH2 139SSH2_CFLAGS = $(SSH2_CFLAGS) /I$(WITH_DEVEL)/include/libssh2 140!ENDIF 141 142!IFNDEF USE_SSPI 143USE_SSPI=yes 144!ENDIF 145 146!IF "$(USE_SSPI)"=="yes" 147CFLAGS_SSPI = /DUSE_WINDOWS_SSPI 148USE_SSPI=true 149!ENDIF 150 151!IFNDEF USE_IPV6 152USE_IPV6=yes 153!ENDIF 154 155!IFNDEF USE_IDN 156USE_IDN =true 157!ELSEIF "$(USE_IDN)"=="yes" 158USE_IDN =true 159!ENDIF 160 161!IF "$(USE_IDN)"=="true" 162CFLAGS = $(CFLAGS) /DUSE_WIN32_IDN 163LFLAGS = $(LFLAGS) Normaliz.lib 164!ENDIF 165 166!IF "$(USE_IPV6)"=="yes" 167CFLAGS = $(CFLAGS) /DUSE_IPV6 168USE_IPV6=true 169!ENDIF 170 171!IF "$(GEN_PDB)"=="yes" 172GEN_PDB=true 173!ENDIF 174 175!IFNDEF MACHINE 176MACHINE = X86 177!ENDIF 178 179!IFDEF EMBEND_MANIFEST 180MANIFESTTOOL = mt -manifest $(DIRDIST)\$(PROGRAM_NAME).manifest -outputresource:$(DIRDIST)\$(PROGRAM_NAME);1 181!ENDIF 182 183# Runtime library configuration 184!IF "$(RTLIBCFG)" == "static" 185RTLIB = /MT 186RTLIB_DEBUG = /MTd 187!ELSE 188RTLIB = /MD 189RTLIB_DEBUG = /MDd 190!ENDIF 191 192!IF "$(MODE)"=="static" 193TARGET = $(LIB_NAME_STATIC) 194CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) 195AS_DLL = false 196CFGSET=true 197!ELSEIF "$(MODE)"=="dll" 198TARGET = $(LIB_NAME_DLL) 199CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) 200AS_DLL = true 201CFGSET=true 202!ENDIF 203 204WIN_LIBS = ws2_32.lib wldap32.lib 205!IF "$(CFGSET)" == "FALSE" 206!ERROR please choose a valid mode 207!ENDIF 208 209CONFIG_NAME_LIB = libcurl 210 211# CURL_XX macros are for the curl.exe command 212 213!IF "$(DEBUG)"=="yes" 214RC_FLAGS = /dDEBUGBUILD=1 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc 215CC = $(CC_DEBUG) $(RTLIB_DEBUG) 216 217CURL_CC = $(CC) 218CURL_RC_FLAGS = /i../include /dDEBUGBUILD=1 /Fo $@ $(CURL_SRC_DIR)\curl.rc 219CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-debug 220!ELSE 221RC_FLAGS = /dDEBUGBUILD=0 /Fo $@ $(LIBCURL_SRC_DIR)\libcurl.rc 222CC = $(CC_NODEBUG) $(RTLIB) 223 224CURL_CC = $(CC) 225CURL_RC_FLAGS = /i../include /dDEBUGBUILD=0 /Fo $@ $(CURL_SRC_DIR)\curl.rc 226CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-release 227!ENDIF 228 229CURL_CC = $(CURL_CC) $(CURL_CFLAGS) 230 231!IF "$(AS_DLL)" == "true" 232 233LNK = $(LNKDLL) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET) 234!IF "$(DEBUG)"=="yes" 235TARGET = $(LIB_NAME_DLL_DEBUG) 236LNK = $(LNK) /DEBUG /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) 237CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP_DEBUG) 238!ELSE 239TARGET = $(LIB_NAME_DLL) 240LNK = $(LNK) /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) 241CURL_LIBS = /IMPLIB:$(LIB_DIROBJ)\$(LIB_NAME_IMP) 242!ENDIF 243RESOURCE = $(LIB_DIROBJ)\libcurl.res 244CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-dll 245 246# AS_DLL 247!ELSE 248 249!IF "$(DEBUG)"=="yes" 250TARGET = $(LIB_NAME_STATIC_DEBUG) 251!ELSE 252TARGET = $(LIB_NAME_STATIC) 253!ENDIF 254LNK = $(LNKLIB) $(WIN_LIBS) /out:$(LIB_DIROBJ)\$(TARGET) 255CC = $(CC) $(CFLAGS_LIBCURL_STATIC) 256CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static 257 258# AS_DLL 259!ENDIF 260 261!IF "$(USE_SSL)"=="true" 262CFLAGS = $(CFLAGS) $(SSL_CFLAGS) 263LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(SSL_LIBS) 264CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL) 265!ENDIF 266 267!IF "$(USE_ZLIB)"=="true" 268CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS) 269LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS) $(ZLIB_LIBS) 270CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB) 271!ENDIF 272 273!IF "$(USE_SSH2)"=="true" 274CFLAGS = $(CFLAGS) $(SSH2_CFLAGS) 275LFLAGS = $(LFLAGS) $(SSH2_LFLAGS) $(SSH2_LIBS) 276CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh2-$(SSH2) 277!ENDIF 278 279!IF "$(USE_IPV6)"=="true" 280CFLAGS = $(CFLAGS) $(CFLAGS_IPV6) 281CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ipv6 282!ENDIF 283 284!IF "$(USE_SSPI)"=="true" 285CFLAGS = $(CFLAGS) $(CFLAGS_SSPI) 286CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-sspi 287!ENDIF 288 289!IF "$(GEN_PDB)"=="true" 290CFLAGS = $(CFLAGS) $(CFLAGS_PDB) 291LFLAGS = $(LFLAGS) $(LFLAGS_PDB) 292!ENDIF 293 294LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib 295CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl 296DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\ 297 298# 299# curl.exe 300# 301CURL_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" 314clean: 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 329LIB_OBJS= $(LIBCURL_OBJS) 330EXE_OBJS= $(CURL_OBJS) 331 332all : $(TARGET) $(PROGRAM_NAME) 333 334package: $(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" 391CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC_DEBUG) 392!ELSE 393CURL_LIBCURL_LIBNAME=$(LIB_NAME_STATIC) 394!ENDIF 395!ELSEIF "$(MODE)"=="dll" 396!IF "$(DEBUG)"=="yes" 397CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP_DEBUG) 398!ELSE 399CURL_LIBCURL_LIBNAME=$(LIB_NAME_IMP) 400!ENDIF 401!ENDIF 402 403CURL_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. 427