Permalink
Browse files

Windows build: alternative makefile

This is a separate makefile for MSVC builds. It is deliberately put in
another dir than src/ and lib/ to allow a different build experience
than the previous - at least during a period. Eventually we should
unify.
  • Loading branch information...
1 parent 28c830e commit 76ac6b94ed360f9edb1c000e600a33df5a6cbc9b @pierrejoye pierrejoye committed with bagder Jan 28, 2011
Showing with 642 additions and 1 deletion.
  1. +4 −1 Makefile.am
  2. +68 −0 winbuild/BUILD.WINDOWS.txt
  3. +138 −0 winbuild/Makefile.vc
  4. +426 −0 winbuild/MakefileBuild.vc
  5. +6 −0 winbuild/gen_resp_file.bat
View
@@ -30,10 +30,13 @@ CMake/CurlTests.c CMake/FindOpenSSL.cmake CMake/FindZLIB.cmake \
CMake/OtherTests.cmake CMake/Platforms/WindowsCache.cmake \
CMake/Utilities.cmake include/curl/curlbuild.h.cmake
+WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \
+winbuild/MakefileBuild.vc winbuild/Makefile.vc
+
EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
curl-style.el sample.emacs RELEASE-NOTES buildconf \
libcurl.pc.in vc6curl.dsw MacOSX-Framework Android.mk $(CMAKE_DIST) \
- Makefile.msvc.names
+ Makefile.msvc.names $(WINBUILD_DIST)
bin_SCRIPTS = curl-config
View
@@ -0,0 +1,68 @@
+Building with Visual C++, prerequises
+=====================================
+ This document describes how to compile, build and install curl and libcurl
+ from sources using the Visual C++ build tool. To build with VC++, you will
+ of course have to first install VC++. The minimum required version of
+ VC is 6 (part of Visual Studio 6). However using a more recent version like
+ 2008 (vc9) is strongly recommended.
+
+ VC++ is also part of the Windows Platform SDK. You do not have to install
+ the full Visual Studio or Visual C++ if all you want is to build curl.
+
+ The Platform SDK can be fetched here, freely:
+
+ http://msdn.microsoft.com/en-us/windows/bb980924
+
+ If you wish to support zlib, openssl, ssh2, you will have to download
+ them separately and copy them to the deps directory as shown below:
+
+ somedirectory\
+ |_curl-src
+ | |_winbuild
+ |
+ |_deps
+ |_ lib
+ |_ include
+ |_ bin
+
+ It is also possible to create the deps directory in some other random
+ places and tell the Makefile its location using the WITH_DEVEL option.
+
+Building with Visual C++
+========================
+
+Open a Visual Studio Command prompt or the SDK CMD shell.
+
+ Using the CMD Shell:
+ choose the right environment via the setenv command (see setenv /?)
+ for the full list of options. setenv /xp /x86 /release for example.
+
+ Using the Visual Studio command prompt Shell:
+ Everything is already pre-configured by calling one of the command
+ prompt.
+
+Once you are in the consonle, go to the winbuild directory in the Curl
+sources:
+ cd curl-src\winbuild
+
+Then you can call nmake /f makefile with the desired options (see below).
+The builds will be in the top src directory, builds\ directory, in
+a directory named using the options given to the nmake call.
+
+nmake /f makefile.vc mode=<static or dll> <options>
+where <options> is one or many of:
+ VC=<6,7,8,9,10> - VC versions
+ WITH_DEVEL=<path> - Paths for the development files (SSL, zlib, etc.)
+ Default to sibbling directory deps: ../deps
+ Libraries can be fetched at http://pecl2.php.net/downloads/php-windows-builds/
+ Uncompress them into the deps folder.
+ WITH_SSL=<dll or static> - Enable OpenSSL support, DLL or static
+ WITH_ZLIB=<dll or static> - Enable ZLib support, DLL or static
+ WITH_SSH2=<dll or static> - Enable LIbSSH2 support, DLL or static
+ USE_SSSPI=<yes or no> - Enable SSPI support, default to yes
+ USE_IPV6=<yes or no> - Enable IPV6, default to yes
+ DEBUG=<yes or no> - Debug builds
+ USE_IDN=<yes or no> - Wheter or not to use IDN Windows APIs. Requires Windows Vista or later.
+ or to install http://www.microsoft.com/downloads/details.aspx?FamilyID=AD6158D7-DDBA-416A-9109-07607425A815
+ GEN_PDB=<yes or no> - Generate Program Database (debug symbols release build)
+
View
@@ -0,0 +1,138 @@
+!IF "$(MODE)"=="static"
+TARGET = $(LIB_NAME_STATIC)
+AS_DLL = false
+CFGSET=true
+!ELSEIF "$(MODE)"=="dll"
+TARGET = $(LIB_NAME_DLL)
+AS_DLL = true
+CFGSET=true
+!ELSE
+!MESSAGE Invalid mode: $(MODE)
+
+#######################
+# Usage
+#
+
+!MESSAGE Usage: nmake /f makefile.vc mode=<static or dll> <options>
+!MESSAGE where <options> is one or many of:
+!MESSAGE VC=<6,7,8,9,10> - VC versions
+!MESSAGE WITH_DEVEL=<path> - Paths for the development files (SSL, zlib, etc.)
+!MESSAGE Default to sibbling directory deps: ../deps
+!MESSAGE Libraries can be fetched at http://pecl2.php.net/downloads/php-windows-builds/
+!MESSAGE Uncompress them into the deps folder.
+!MESSAGE WITH_SSL=<dll or static> - Enable OpenSSL support, DLL or static
+!MESSAGE WITH_ZLIB=<dll or static> - Enable ZLib support, DLL or static
+!MESSAGE WITH_SSH2=<dll or static> - Enable LIbSSH2 support, DLL or static
+!MESSAGE USE_SSSPI=<yes or no> - Enable SSPI support, default to yes
+!MESSAGE USE_IPV6=<yes or no> - Enable IPV6, default to yes
+!MESSAGE DEBUG=<yes or no> - Debug builds
+!MESSAGE USE_IDN=<yes or no> - Wheter or not to use IDN Windows APIs. Requires Windows Vista or later.
+!MESSAGE or to install http://www.microsoft.com/downloads/details.aspx?FamilyID=AD6158D7-DDBA-416A-9109-07607425A815
+!MESSAGE GEN_PDB=<yes or no> - Generate Program Database (debug symbols release build)
+!ERROR please choose a valid mode
+
+!ENDIF
+
+!INCLUDE "../lib/Makefile.inc"
+LIBCURL_OBJS=$(CSOURCES:.c=.obj)
+
+top_srcdir=..
+!INCLUDE "../src/Makefile.inc"
+
+# hugehelp has a special rule
+CURL_OBJS= $(CURL_CFILES:hugehelp.c=)
+
+CURL_OBJS=$(CURL_OBJS:.c=.obj)
+
+# default options
+!IFNDEF USE_SSPI
+USE_SSPI=true
+!ENDIF
+
+!IFNDEF USE_IPV6
+USE_IPV6=true
+!ENDIF
+
+!IFNDEF USE_IDN
+USE_IDN=true
+!ENDIF
+
+CONFIG_NAME_LIB = libcurl
+
+!IF "$(WITH_SSL)"=="dll"
+USE_SSL = true
+SSL=dll
+!ELSEIF "$(WITH_SSL)"=="static"
+USE_SSL = true
+SSL=dll
+!ENDIF
+
+!IF "$(WITH_ZLIB)"=="dll"
+USE_ZLIB = true
+zlib=dll
+!ELSEIF "$(WITH_ZLIB)"=="static"
+USE_ZLIB = true
+ZLIB=static
+!ENDIF
+
+!IF "$(WITH_SSH2)"=="dll"
+USE_SSH2 = true
+SSH2=dll
+!ELSEIF "$(WITH_SSH2)"=="static"
+USE_SSH2 = true
+SSH2=static
+!ENDIF
+
+!IF "$(DEBUG)"=="yes"
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-debug
+!ELSE
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-release
+!ENDIF
+
+!IF "$(AS_DLL)" == "true"
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-dll
+!ELSE
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static
+!ENDIF
+
+!IF "$(USE_SSL)"=="true"
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL)
+!ENDIF
+
+!IF "$(USE_ZLIB)"=="true"
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB)
+!ENDIF
+
+!IF "$(USE_SSH2)"=="true"
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssh2-$(SSH2)
+!ENDIF
+
+!IF "$(USE_IPV6)"=="true"
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ipv6
+!ENDIF
+
+!IF "$(USE_SSPI)"=="true"
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-sspi
+!ENDIF
+
+!MESSAGE configuration name: $(CONFIG_NAME_LIB)
+
+BUILD_DIR=../builds/$(CONFIG_NAME_LIB)
+LIBCURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
+CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
+DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\
+
+$(MODE):
+ @SET LIBCURL_DIROBJ=$(LIBCURL_DIROBJ)
+ @SET MACRO_NAME=LIBCURL_OBJS
+ @SET OUTFILE=LIBCURL_OBJS.inc
+ @gen_resp_file.bat $(LIBCURL_OBJS)
+ @SET LIBCURL_DIROBJ=$(CURL_DIROBJ)
+ @SET MACRO_NAME=CURL_OBJS
+ @SET OUTFILE=CURL_OBJS.inc
+ @gen_resp_file.bat $(CURL_OBJS)
+ @$(MAKE) /NOLOGO /F MakefileBuild.vc
+
+copy_from_lib:
+ echo copying .c...
+ FOR %%i IN ($(CURLX_ONES:/=\)) DO copy %%i ..\src\
Oops, something went wrong.

0 comments on commit 76ac6b9

Please sign in to comment.