Difference between revisions of "Curl on Windows"

From D Wiki
Jump to: navigation, search
m
(Building libcurl static library for DMD32 Windows)
Line 1: Line 1:
==Building libcurl on Windows==
+
==Building libcurl static library for DMD32 Windows==
 +
Please note that these instructions will compile libcurl static library '''without SSL support'''.
 +
 
 +
===Required tools===
 +
* MinGW-make (http://www.mingw.org)
 +
* Digital Mars Compiler (http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm857c.zip)
 +
 
 +
===Building curl_static_dmc.lib===
 +
# Create directory C:\BUILD
 +
# Download http://curl.haxx.se/download/curl-7.37.0.zip and extract it into C:\BUILD
 +
# cd C:\BUILD\curl-7.37.0
 +
 
 +
Open include\curl\curlbuild.h in your favorite editor and add the following to line 188:
 +
<syntaxhighlight lang=c>
 +
#elif defined(__DMC__)
 +
#  define CURL_SIZEOF_LONG          4
 +
#  define CURL_TYPEOF_CURL_OFF_T    long long
 +
#  define CURL_FORMAT_CURL_OFF_T    "lld"
 +
#  define CURL_FORMAT_CURL_OFF_TU    "llu"
 +
#  define CURL_FORMAT_OFF_T          "%lld"
 +
#  define CURL_SIZEOF_CURL_OFF_T    8
 +
#  define CURL_SUFFIX_CURL_OFF_T    LL
 +
#  define CURL_SUFFIX_CURL_OFF_TU    ULL
 +
#  define CURL_TYPEOF_CURL_SOCKLEN_T int
 +
#  define CURL_SIZEOF_CURL_SOCKLEN_T 4
 +
</syntaxhighlight>
 +
 
 +
Open include\curl\curlrules.h and add '''|| defined(__DMC__)''' to line 207:
 +
<syntaxhighlight lang=c>
 +
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
 +
  defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
 +
  defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
 +
  defined(__ILEC400__) || defined(__DMC__)
 +
</syntaxhighlight>
 +
 
 +
Open lib\config-win32.h and add '''&& !defined(__DMC__)''' to line 566
 +
<syntaxhighlight lang=c>
 +
#if !defined(__SALFORDC__) && !defined(__BORLANDC__) && !defined(__DMC__)
 +
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
 +
#endif
 +
</syntaxhighlight>
 +
 
 +
Open lib\curl_setup.h and add the following to line 504
 +
<syntaxhighlight lang=c>
 +
#if defined(__DMC__)
 +
#  undef USE_THREADS_POSIX
 +
#  undef USE_THREADS_WIN32
 +
#endif
 +
</syntaxhighlight>
 +
 
 +
Save the following as C:\BUILD\curl-7.37.0\lib\Makefile.dmc
 +
<syntaxhighlight lang=make>
 +
###########################################################################
 +
#
 +
## Makefile for building curl_static_dmc.lib with DMC - Digital Mars Compiler
 +
## http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm857c.zip
 +
##
 +
## Please run me with mingw32-make!
 +
##
 +
## Usage:
 +
## 1) Set environment vars: path\to\mingw32\bin;path\to\dm\bin
 +
## Example:
 +
## SET PATH=C:\Dev\MinGW\bin;C:\dm\bin
 +
##
 +
## 2) Build
 +
## mingw32-make -f Makefile.dmc
 +
##
 +
#
 +
###########################################################################
 +
 
 +
BIN=curl_static_dmc.lib
 +
 
 +
## REQUIRED
 +
CFLAGS=-I. -I../include -DBUILDING_LIBCURL -D_WIN32_WINNT=0x0400 -DCURL_DISABLE_LDAP
 +
 
 +
## OPTIONAL. Please add # to the start of line if you want the feature
 +
CFLAGS+=-DCURL_DISABLE_POP3
 +
CFLAGS+=-DCURL_DISABLE_DICT
 +
CFLAGS+=-DCURL_DISABLE_FILE
 +
CFLAGS+=-DCURL_DISABLE_GOPHER
 +
CFLAGS+=-DCURL_DISABLE_IMAP
 +
CFLAGS+=-DCURL_DISABLE_RTSP
 +
CFLAGS+=-DCURL_DISABLE_TELNET
 +
CFLAGS+=-DCURL_DISABLE_TFTP
 +
 
 +
include Makefile.inc
 +
SOURCES=$(LIB_CFILES) $(LIB_VTLS_CFILES)
 +
OBJS=$(patsubst %.c,%.obj,$(SOURCES))
 +
 
 +
all: $(BIN)
 +
 
 +
$(BIN): $(OBJS)
 +
lib -p32 -c $(BIN) $(OBJS)
 +
 +
%.obj: %.c
 +
dmc $(CFLAGS) -c $< -o$@
 +
 
 +
clean:
 +
del $(BIN) $(OBJS)
 +
</syntaxhighlight>
 +
 
 +
* cd C:\BUILD\curl-7.37.0\lib\
 +
* set PATH=C:\Dev\MinGW\bin;C:\dm\bin
 +
* mingw32-make -f Makefile.dmc
 +
 
 +
==Building libcurl.dll on Windows==
  
 
===Required tools===
 
===Required tools===
Line 18: Line 123:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Building libcurl 32 bit===
+
===Building libcurl.dll 32 bit with SSL support===
 
# Create directory C:\BUILD
 
# Create directory C:\BUILD
 
# Download curl-7.36.0.zip from http://curl.haxx.se/download.html and extract it into C:\BUILD
 
# Download curl-7.36.0.zip from http://curl.haxx.se/download.html and extract it into C:\BUILD
Line 57: Line 162:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Building libcurl 64 bit===
+
===Building libcurl.dll 64 bit with SSL support===
 
# Create directory C:\BUILD
 
# Create directory C:\BUILD
 
# Download curl-7.36.0.zip from http://curl.haxx.se/download.html and extract it into C:\BUILD
 
# Download curl-7.36.0.zip from http://curl.haxx.se/download.html and extract it into C:\BUILD

Revision as of 01:33, 14 July 2014

Building libcurl static library for DMD32 Windows

Please note that these instructions will compile libcurl static library without SSL support.

Required tools

Building curl_static_dmc.lib

  1. Create directory C:\BUILD
  2. Download http://curl.haxx.se/download/curl-7.37.0.zip and extract it into C:\BUILD
  3. cd C:\BUILD\curl-7.37.0

Open include\curl\curlbuild.h in your favorite editor and add the following to line 188:

#elif defined(__DMC__)
#  define CURL_SIZEOF_LONG           4
#  define CURL_TYPEOF_CURL_OFF_T     long long
#  define CURL_FORMAT_CURL_OFF_T     "lld"
#  define CURL_FORMAT_CURL_OFF_TU    "llu"
#  define CURL_FORMAT_OFF_T          "%lld"
#  define CURL_SIZEOF_CURL_OFF_T     8
#  define CURL_SUFFIX_CURL_OFF_T     LL
#  define CURL_SUFFIX_CURL_OFF_TU    ULL
#  define CURL_TYPEOF_CURL_SOCKLEN_T int
#  define CURL_SIZEOF_CURL_SOCKLEN_T 4

Open include\curl\curlrules.h and add || defined(__DMC__) to line 207:

#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
  defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
  defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
  defined(__ILEC400__) || defined(__DMC__)

Open lib\config-win32.h and add && !defined(__DMC__) to line 566

#if !defined(__SALFORDC__) && !defined(__BORLANDC__) && !defined(__DMC__)
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
#endif

Open lib\curl_setup.h and add the following to line 504

#if defined(__DMC__)
#  undef USE_THREADS_POSIX
#  undef USE_THREADS_WIN32
#endif

Save the following as C:\BUILD\curl-7.37.0\lib\Makefile.dmc

###########################################################################
#
## Makefile for building curl_static_dmc.lib with DMC - Digital Mars Compiler
## http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm857c.zip
##
## Please run me with mingw32-make!
##
## Usage:
## 1) Set environment vars: path\to\mingw32\bin;path\to\dm\bin
## Example:
## SET PATH=C:\Dev\MinGW\bin;C:\dm\bin
##
## 2) Build
## mingw32-make -f Makefile.dmc
##
#
###########################################################################

BIN=curl_static_dmc.lib

## REQUIRED
CFLAGS=-I. -I../include -DBUILDING_LIBCURL -D_WIN32_WINNT=0x0400 -DCURL_DISABLE_LDAP

## OPTIONAL. Please add # to the start of line if you want the feature
CFLAGS+=-DCURL_DISABLE_POP3
CFLAGS+=-DCURL_DISABLE_DICT
CFLAGS+=-DCURL_DISABLE_FILE
CFLAGS+=-DCURL_DISABLE_GOPHER
CFLAGS+=-DCURL_DISABLE_IMAP
CFLAGS+=-DCURL_DISABLE_RTSP
CFLAGS+=-DCURL_DISABLE_TELNET
CFLAGS+=-DCURL_DISABLE_TFTP

include Makefile.inc
SOURCES=$(LIB_CFILES) $(LIB_VTLS_CFILES)
OBJS=$(patsubst %.c,%.obj,$(SOURCES))

all: $(BIN)

$(BIN): $(OBJS)
	lib -p32 -c $(BIN) $(OBJS)
	
%.obj: %.c
	dmc $(CFLAGS) -c $< -o$@

clean: 
	del $(BIN) $(OBJS)
  • cd C:\BUILD\curl-7.37.0\lib\
  • set PATH=C:\Dev\MinGW\bin;C:\dm\bin
  • mingw32-make -f Makefile.dmc

Building libcurl.dll on Windows

Required tools

import std.net.curl;
import std.stdio;

void main()
{
	writeln(get("https://google.com/"));
}

Building libcurl.dll 32 bit with SSL support

  1. Create directory C:\BUILD
  2. Download curl-7.36.0.zip from http://curl.haxx.se/download.html and extract it into C:\BUILD
  3. Download zlib-1.2.8.tar.gz from http://zlib.net/ and extract it into C:\BUILD
  4. Save the following batch file as C:\BUILD\build-curl32.bat
  5. Run build-curl32 from Windows command prompt
@echo off

:: 1) Path to MinGW\bin
:: 2) Path to Digital Mars's implib.exe
SET PATH=C:\Dev\MinGW\bin;C:\Dev\dm\bin;
SET ZLIB_PATH=C:\BUILD\zlib-1.2.8
SET INSTALL_DIR=C:\D\dmd2\windows
:: ---------------------------------------------------------------

:: Delete object files from previous build
del /S zlib-1.2.8\*.o curl-7.36.0\*.o curl-7.36.0\*.res

cd zlib-1.2.8
mingw32-make -fwin32/Makefile.gcc
cd ..

cd curl-7.36.0
mingw32-make -C lib -f Makefile.m32 CFG=mingw32-winssl-zlib LDFLAGS=-static
strip -s lib\libcurl.dll

mkdir %INSTALL_DIR%\bin %INSTALL_DIR%\lib
copy lib\libcurl.dll %INSTALL_DIR%\bin
implib /system %INSTALL_DIR%\lib\curl.lib lib\libcurl.dll
cd ..

:: Build sample
SET PATH=%INSTALL_DIR%\bin
dmd app.d -ofapp32.exe
app32

Building libcurl.dll 64 bit with SSL support

  1. Create directory C:\BUILD
  2. Download curl-7.36.0.zip from http://curl.haxx.se/download.html and extract it into C:\BUILD
  3. Download zlib-1.2.8.tar.gz from http://zlib.net/ and extract it into C:\BUILD
  4. Save the following batch file as C:\BUILD\build-curl64.bat
  5. Run build-curl64 from Windows command prompt
@echo off

:: 1) Path to MinGW-w64\bin
:: 2) Path to Microsoft LIB.exe
:: 3) Path to pexports.exe (http://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/)
SET PATH=C:\Dev\MinGW64\bin;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64;C:\Dev\MinGW\bin
SET ZLIB_PATH=C:\BUILD\zlib-1.2.8
SET INSTALL_DIR=C:\D\dmd2\windows
:: ---------------------------------------------------------------

:: Delete object files from previous build
del /S zlib-1.2.8\*.o curl-7.36.0\*.o curl-7.36.0\*.res

cd zlib-1.2.8
mingw32-make -fwin32/Makefile.gcc
cd ..

cd curl-7.36.0
mingw32-make -C lib -f Makefile.m32 CFG=mingw32-winssl-zlib LDFLAGS=-static
strip -s lib\libcurl.dll

mkdir %INSTALL_DIR%\bin64 %INSTALL_DIR%\lib64
copy lib\libcurl.dll %INSTALL_DIR%\bin64
pexports lib\libcurl.dll > curl.def
lib /MACHINE:X64 /DEF:curl.def /OUT:%INSTALL_DIR%\lib64\curl.lib
cd ..

:: Build sample
SET PATH=%INSTALL_DIR%\bin64;%INSTALL_DIR%\bin
dmd -m64 app.d -ofapp64.exe
app64