mirror of
https://github.com/curl/curl.git
synced 2024-11-27 05:50:21 +08:00
578 lines
21 KiB
Plaintext
578 lines
21 KiB
Plaintext
_ _ ____ _
|
|
___| | | | _ \| |
|
|
/ __| | | | |_) | |
|
|
| (__| |_| | _ <| |___
|
|
\___|\___/|_| \_\_____|
|
|
|
|
How To Compile
|
|
|
|
Installing Binary Packages
|
|
==========================
|
|
|
|
Lots of people download binary distributions of curl and libcurl. This
|
|
document does not describe how to install curl or libcurl using such a
|
|
binary package. This document describes how to compile, build and install
|
|
curl and libcurl from source code.
|
|
|
|
UNIX
|
|
====
|
|
|
|
A normal unix installation is made in three or four steps (after you've
|
|
unpacked the source archive):
|
|
|
|
./configure
|
|
make
|
|
make test (optional)
|
|
make install
|
|
|
|
You probably need to be root when doing the last command.
|
|
|
|
If you have checked out the sources from the CVS repository, read the
|
|
CVS-INFO on how to proceed.
|
|
|
|
Get a full listing of all available configure options by invoking it like:
|
|
|
|
./configure --help
|
|
|
|
If you want to install curl in a different file hierarchy than /usr/local,
|
|
you need to specify that already when running configure:
|
|
|
|
./configure --prefix=/path/to/curl/tree
|
|
|
|
If you happen to have write permission in that directory, you can do 'make
|
|
install' without being root. An example of this would be to make a local
|
|
install in your own home directory:
|
|
|
|
./configure --prefix=$HOME
|
|
make
|
|
make install
|
|
|
|
The configure script always tries to find a working SSL library unless
|
|
explicitly told not to. If you have OpenSSL installed in the default search
|
|
path for your compiler/linker, you don't need to do anything special. If
|
|
you have OpenSSL installed in /usr/local/ssl, you can run configure like:
|
|
|
|
./configure --with-ssl
|
|
|
|
If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL,)
|
|
you can run configure like this:
|
|
|
|
./configure --with-ssl=/opt/OpenSSL
|
|
|
|
If you insist on forcing a build without SSL support, even though you may
|
|
have OpenSSL installed in your system, you can run configure like this:
|
|
|
|
./configure --without-ssl
|
|
|
|
If you have OpenSSL installed, but with the libraries in one place and the
|
|
header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
|
|
environment variables prior to running configure. Something like this
|
|
should work:
|
|
|
|
(with the Bourne shell and its clones):
|
|
|
|
CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
|
./configure
|
|
|
|
(with csh, tcsh and their clones):
|
|
|
|
env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
|
|
./configure
|
|
|
|
If you have shared SSL libs installed in a directory where your run-time
|
|
linker doesn't find them (which usually causes configure failures), you can
|
|
provide the -R option to ld on some operating systems to set a hard-coded
|
|
path to the run-time linker:
|
|
|
|
LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
|
|
|
|
Another option to the previous trick, is to set LD_LIBRARY_PATH or edit the
|
|
/etc/ld.so.conf file.
|
|
|
|
If your SSL library was compiled with rsaref (this was common in the past
|
|
when used in the United States), you may also need to set:
|
|
|
|
LIBS=-lRSAglue -lrsaref
|
|
(as suggested by Doug Kaufman)
|
|
|
|
MORE OPTIONS
|
|
|
|
To force configure to use the standard cc compiler if both cc and gcc are
|
|
present, run configure like
|
|
|
|
CC=cc ./configure
|
|
or
|
|
env Cc=cc ./configure
|
|
|
|
To force a static library compile, disable the shared library creation
|
|
by running configure like:
|
|
|
|
./configure --disable-shared
|
|
|
|
To tell the configure script to skip searching for thread-safe functions,
|
|
add an option like:
|
|
|
|
./configure --disable-thread
|
|
|
|
To build curl with kerberos4 support enabled, curl requires the krb4 libs
|
|
and headers installed. You can then use a set of options to tell
|
|
configure where those are:
|
|
|
|
--with-krb4-includes[=DIR] Specify location of kerberos4 headers
|
|
--with-krb4-libs[=DIR] Specify location of kerberos4 libs
|
|
--with-krb4[=DIR] where to look for Kerberos4
|
|
|
|
In most cases, /usr/athena is the install prefix and then it works with
|
|
|
|
./configure --with-krb4=/usr/athena
|
|
|
|
If you're a curl developer and use gcc, you might want to enable more
|
|
debug options with the --enable-debug option.
|
|
|
|
Win32
|
|
=====
|
|
|
|
Without SSL:
|
|
|
|
MingW32 (GCC-2.95) style
|
|
------------------------
|
|
Run the 'mingw32.bat' file to get the proper environment variables
|
|
set, then run 'make mingw32' in the root dir.
|
|
|
|
If you have any problems linking libraries or finding header files, be
|
|
sure to verify that the provided "Makefile.m32" files use the proper
|
|
paths, and adjust as necessary.
|
|
|
|
Cygwin style
|
|
------------
|
|
Almost identical to the unix installation. Run the configure script in
|
|
the curl root with 'sh configure'. Make sure you have the sh
|
|
executable in /bin/ or you'll see the configure fail towards the end.
|
|
|
|
Run 'make'
|
|
|
|
Microsoft command line style
|
|
----------------------------
|
|
Run the 'vcvars32.bat' file to get the proper environment variables
|
|
set, then run 'nmake vc' in the root dir.
|
|
|
|
The vcvars32.bat file is part of the Microsoft development
|
|
environment.
|
|
|
|
IDE-style
|
|
-------------------------
|
|
If you use VC++, Borland or similar compilers. Include all lib source
|
|
files in a static lib "project" (all .c and .h files that is).
|
|
(you should name it libcurl or similar)
|
|
|
|
Make the sources in the src/ drawer be a "win32 console application"
|
|
project. Name it curl.
|
|
|
|
For VC++ 6, there's an included Makefile.vc6 that should be possible
|
|
to use out-of-the-box.
|
|
|
|
|
|
With SSL:
|
|
|
|
MingW32 (GCC-2.95) style
|
|
------------------------
|
|
Run the 'mingw32.bat' file to get the proper environment variables
|
|
set, then run 'make mingw32-ssl' in the root dir.
|
|
|
|
If you have any problems linking libraries or finding header files, be
|
|
sure to look at the provided "Makefile.m32" files for the proper
|
|
paths, and adjust as necessary.
|
|
|
|
Cygwin style
|
|
------------
|
|
Haven't done, nor got any reports on how to do. It should although be
|
|
identical to the unix setup for the same purpose. See above.
|
|
|
|
Microsoft command line style
|
|
----------------------------
|
|
|
|
Run the 'vcvars32.bat' file to get a proper environment. The
|
|
vcvars32.bat file is part of the Microsoft development environment and
|
|
you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
|
|
provided that you installed Visual C/C++ 6 in the default directory.
|
|
|
|
Then run 'nmake vc' in curl's root directory.
|
|
|
|
If you want to compile with zlib support, you will need to build
|
|
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
|
|
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
|
variable to the location of zlib.h and zlib.lib, for example:
|
|
|
|
set ZLIB_PATH=c:\zlib-1.2.1
|
|
|
|
Then run 'nmake vc-zlib' in curl's root directory.
|
|
|
|
If you want to compile with SSL support you need the OpenSSL package.
|
|
Please read the OpenSSL documentation on how to compile and install
|
|
the OpenSSL libraries. The build process of OpenSSL generates the
|
|
libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
|
|
the OpenSSL home directory. OpenSSL static libraries (libeay32.lib,
|
|
ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
|
|
|
|
Before running nmake define the OPENSSL_PATH environment variable with
|
|
the root/base directory of OpenSSL, for example:
|
|
|
|
set OPENSSL_PATH=c:\openssl-0.9.7d
|
|
|
|
Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
|
|
directory. 'nmake vc-ssl' will create a libcurl static and dynamic
|
|
libraries in the lib subdirectory, as well as a statically linked
|
|
version of curl.exe in the src subdirectory. This statically linked
|
|
version is a standalone executable not requiring any DLL at
|
|
runtime. This make method requires that you have the static OpenSSL
|
|
libraries available in OpenSSL's out32 subdirectory.
|
|
'nmake vc-ssl-dll' creates the libcurl dynamic library and
|
|
links curl.exe against libcurl and OpenSSL dynamically.
|
|
This executable requires libcurl.dll and the OpenSSL DLLs
|
|
at runtime.
|
|
Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
|
|
|
|
Microsoft / Borland style
|
|
-------------------------
|
|
If you have OpenSSL, and want curl to take advantage of it, edit your
|
|
project properties to use the SSL include path, link with the SSL libs
|
|
and define the USE_SSLEAY symbol.
|
|
|
|
Using Borland C++ compiler version 5.5.1 (available as free download
|
|
from Borland's site)
|
|
---------------------------------------------------------------------
|
|
|
|
compile openssl
|
|
|
|
Make sure you include the paths to curl/include and openssl/inc32 in
|
|
your bcc32.cnf file
|
|
|
|
|
|
eg : -I"c:\Bcc55\include;c:\path_curl\include;c:\path_openssl\inc32"
|
|
|
|
Check to make sure that all of the sources listed in lib/Makefile.b32
|
|
are present in the /path_to_curl/lib directory. (Check the src
|
|
directory for missing ones.)
|
|
|
|
Make sure the environment variable "BCCDIR" is set to the install
|
|
location for the compiler eg : c:\Borland\BCC55
|
|
|
|
command line:
|
|
make -f /path_to_curl/lib/Makefile-ssl.b32
|
|
|
|
compile simplessl.c with appropriate links
|
|
|
|
c:\curl\docs\examples\> bcc32 -L c:\path_to_curl\lib\libcurl.lib
|
|
-L c:\borland\bcc55\lib\psdk\ws2_32.lib
|
|
-L c:\openssl\out32\libeay32.lib
|
|
-L c:\openssl\out32\ssleay32.lib
|
|
simplessl.c
|
|
|
|
Disabling Specific Protocols:
|
|
|
|
The configure utility, unfortunately, is not available for the Windows
|
|
environment, therefore, you cannot use the various disable-protocol
|
|
options of the configure utility on this platform.
|
|
|
|
However, you can use the following defines to disable specific
|
|
protocols:
|
|
|
|
HTTP_ONLY disables all protocols except HTTP
|
|
CURL_DISABLE_FTP disables FTP
|
|
CURL_DISABLE_LDAP disables LDAP
|
|
CURL_DISABLE_TELNET disables TELNET
|
|
CURL_DISABLE_DICT disables DICT
|
|
CURL_DISABLE_FILE disables FILE
|
|
CURL_DISABLE_GOPHER disables GOPHER
|
|
|
|
If you want to set any of these defines you have the following
|
|
possibilities:
|
|
|
|
- Modify lib/setup.h
|
|
- Modify lib/Makefile.vc6
|
|
- Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
|
|
in the curllib.dsw/curllib.dsp Visual C++ 6 IDE project.
|
|
|
|
IBM OS/2
|
|
========
|
|
|
|
Building under OS/2 is not much different from building under unix.
|
|
You need:
|
|
|
|
- emx 0.9d
|
|
- GNU make
|
|
- GNU patch
|
|
- ksh
|
|
- GNU bison
|
|
- GNU file utilities
|
|
- GNU sed
|
|
- autoconf 2.13
|
|
|
|
If you want to build with OpenSSL or OpenLDAP support, you'll need to
|
|
download those libraries, too. Dirk Ohme has done some work to port SSL
|
|
libraries under OS/2, but it looks like he doesn't care about emx. You'll
|
|
find his patches on: http://come.to/Dirk_Ohme
|
|
|
|
If during the linking you get an error about _errno being an undefined
|
|
symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
|
|
in your definitions.
|
|
|
|
If everything seems to work fine but there's no curl.exe, you need to add
|
|
-Zexe to your linker flags.
|
|
|
|
If you're getting huge binaries, probably your makefiles have the -g in
|
|
CFLAGS.
|
|
|
|
VMS
|
|
===
|
|
(The VMS section is in whole contributed by the friendly Nico Baggus)
|
|
|
|
Curl seems to work with FTP & HTTP other protocols are not tested. (the
|
|
perl http/ftp testing server supplied as testing too cannot work on VMS
|
|
because vms has no concept of fork(). [ I tried to give it a whack, but
|
|
thats of no use.
|
|
|
|
SSL stuff has not been ported.
|
|
|
|
Telnet has about the same issues as for Win32. When the changes for Win32
|
|
are clear maybe they'll work for VMS too. The basic problem is that select
|
|
ONLY works for sockets.
|
|
|
|
Marked instances of fopen/[f]stat that might become a problem, especially
|
|
for non stream files. In this regard, the files opened for writing will be
|
|
created stream/lf and will thus be safe. Just keep in mind that non-binary
|
|
read/wring from/to files will have a records size limit of 32767 bytes
|
|
imposed.
|
|
|
|
Stat to get the size of the files is again only safe for stream files &
|
|
fixed record files without implied CC.
|
|
|
|
-- My guess is that only allowing access to stream files is the quickest
|
|
way to get around the most issues. Therefore all files need to to be
|
|
checked to be sure they will be stream/lf before processing them. This is
|
|
the easiest way out, I know. The reason for this is that code that needs to
|
|
report the filesize will become a pain in the ass otherwise.
|
|
|
|
Exit status.... Well we needed something done here,
|
|
|
|
VMS has a structured exist status:
|
|
| 3 | 2 | 1 | 0|
|
|
|1098|765432109876|5432109876543|210|
|
|
+----+------------+-------------+---+
|
|
|Ctrl| Facility | Error code |sev|
|
|
+----+------------+-------------+---+
|
|
|
|
With the Ctrl-bits an application can tell if part or the whole message has
|
|
allready been printed from the program, DCL doesn't need to print it again.
|
|
|
|
Facility - basicaly the program ID. A code assigned to the program
|
|
the name can be fetched from external or internal message libraries
|
|
Errorcode - the errodes assigned by the application
|
|
Sev. - severity: Even = error, off = non error
|
|
0 = Warning
|
|
1 = Success
|
|
2 = Error
|
|
3 = Information
|
|
4 = Fatal
|
|
<5-7> reserved.
|
|
|
|
This all presents itself with:
|
|
%<FACILITY>-<SeV>-<Errorname>, <Error message>
|
|
|
|
See also the src/curlmsg.msg file, it has the source for the messages In
|
|
src/main.c a section is devoted to message status values, the globalvalues
|
|
create symbols with certain values, referenced from a compiled message
|
|
file. Have all exit function use a exit status derived from a translation
|
|
table with the compiled message codes.
|
|
|
|
This was all compiled with:
|
|
|
|
Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
|
|
|
|
So far for porting notes as of:
|
|
13-jul-2001
|
|
N. Baggus
|
|
|
|
QNX
|
|
===
|
|
(This section was graciously brought to us by David Bentham)
|
|
|
|
As QNX is targetted for resource constrained environments, the QNX headers
|
|
set conservative limits. This includes the FD_SETSIZE macro, set by default
|
|
to 32. Socket descriptors returned within the CURL library may exceed this,
|
|
resulting in memory faults/SIGSEGV crashes when passed into select(..)
|
|
calls using fd_set macros.
|
|
|
|
A good all-round solution to this is to override the default when building
|
|
libcurl, by overriding CFLAGS during configure, example
|
|
# configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
|
|
|
|
CROSS COMPILE
|
|
=============
|
|
|
|
(This section was graciously brought to us by Jim Duey, 23-oct-2001)
|
|
|
|
Download and unpack the cURL package. Version should be 7.9.1 or later.
|
|
|
|
'cd' to the new directory. (ie. curl-7.9.1-pre4)
|
|
|
|
Set environment variables to point to the cross-compile toolchain and call
|
|
configure with any options you need. Be sure and specify the '--host' and
|
|
'--build' parameters at configuration time. The following script is an
|
|
example of cross-compiling for the IBM 405GP PowerPC processor using the
|
|
toolchain from MonteVista for Hardhat Linux.
|
|
|
|
(begin script)
|
|
|
|
#! /bin/sh
|
|
|
|
export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
|
|
export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
|
|
export AR=ppc_405-ar
|
|
export AS=ppc_405-as
|
|
export LD=ppc_405-ld
|
|
export RANLIB=ppc_405-ranlib
|
|
export CC=ppc_405-gcc
|
|
export NM=ppc_405-nm
|
|
|
|
configure --target=powerpc-hardhat-linux \
|
|
--host=powerpc-hardhat-linux \
|
|
--build=i586-pc-linux-gnu \
|
|
--prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
|
|
--exec-prefix=/usr/local
|
|
|
|
(end script)
|
|
|
|
The '--prefix' parameter specifies where cURL will be installed. If
|
|
'configure' completes successfully, do 'make' and 'make install' as usual.
|
|
|
|
RISC OS
|
|
=======
|
|
The library can be cross-compiled using gccsdk as follows:
|
|
|
|
CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
|
|
--host=arm-riscos-aof --without-random --disable-shared
|
|
make
|
|
|
|
where riscos-gcc and riscos-ar are links to the gccsdk tools.
|
|
You can then link your program with curl/lib/.libs/libcurl.a
|
|
|
|
|
|
AmigaOS
|
|
=======
|
|
(This section was graciously brought to us by Diego Casorran)
|
|
|
|
To build cURL/libcurl on AmigaOS just type 'make amiga' ...
|
|
|
|
What you need is: (not tested with others versions)
|
|
|
|
GeekGadgets / gcc 2.95.3 (http://www.geekgadgets.org/)
|
|
|
|
AmiTCP SDK v4.3 (http://www.aminet.net/comm/tcp/AmiTCP-SDK-4.3.lha)
|
|
|
|
Native Developer Kit (http://www.amiga.com/3.9/download/NDK3.9.lha)
|
|
|
|
As no ixemul.library is required you will be able to build it for
|
|
WarpOS/PowerPC (not tested by me), as well a MorphOS version should be
|
|
possible with no problems.
|
|
|
|
To enable SSL support, you need a OpenSSL native version (without ixemul),
|
|
you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
|
|
|
|
|
|
NetWare
|
|
=======
|
|
|
|
To compile curl.nlm / libcurl.nlm you need:
|
|
- either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
|
|
- gnu make and awk running on the platform you compile on;
|
|
native Win32 versions can be downloaded from:
|
|
http://www.gknw.com/development/prgtools/
|
|
- recent Novell LibC SDK availabable from:
|
|
http://developer.novell.com/ndk/libc.htm
|
|
- optional zlib sources (at the moment only dynamic linking with zlib.imp);
|
|
sources with NetWare Makefile can be optained from:
|
|
http://www.gknw.com/mirror/zlib/
|
|
|
|
Set a search path to your compiler, linker and tools; if you want to have
|
|
zlib support then set the environment var ZLIB_PATH pointing to your zlib
|
|
sources, on Linux make sure the var OSTYPE contains the string 'linux';
|
|
and finally type 'make netware' from the top source directory...
|
|
I found on some Linux systems (RH9) that OS detection didnt work although
|
|
a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
|
|
with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...;
|
|
other options are currently not supported, although partly prepared.
|
|
The Ares lib builds arlready fine, and both test tools work fine at least
|
|
when build with CodeWarrior...; dont know yet why they fail when build with
|
|
gcc though; if you want to compile with Ares support then set an env var
|
|
WITH_ARES=1; I've not tested yet including libcares into curl.
|
|
Any help in testing appreciated!
|
|
Buils automatically created 4 times a day from current CVS are here:
|
|
http://www.gknw.com/mirror/curl/autobuilds/
|
|
the status of these buids can be viewed at the autobuild table:
|
|
http://curl.haxx.se/auto/
|
|
|
|
|
|
PORTS
|
|
=====
|
|
This is a probably incomplete list of known hardware and operating systems
|
|
that curl has been compiled for. If you know a system curl compiles and
|
|
runs on, that isn't listed, please let us know!
|
|
|
|
- Alpha DEC OSF 4
|
|
- Alpha Digital UNIX v3.2
|
|
- Alpha FreeBSD 4.1, 4.5
|
|
- Alpha Linux 2.2, 2.4
|
|
- Alpha NetBSD 1.5.2
|
|
- Alpha OpenBSD 3.0
|
|
- Alpha OpenVMS V7.1-1H2
|
|
- Alpha Tru64 v5.0 5.1
|
|
- HP-PA HP-UX 9.X 10.X 11.X
|
|
- HP-PA Linux
|
|
- HP3000 MPE/iX
|
|
- MIPS IRIX 6.2, 6.5
|
|
- MIPS Linux
|
|
- Pocket PC/Win CE 3.0
|
|
- Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1
|
|
- PowerPC Darwin 1.0
|
|
- PowerPC Linux
|
|
- PowerPC Mac OS 9
|
|
- PowerPC Mac OS X
|
|
- SINIX-Z v5
|
|
- Sparc Linux
|
|
- Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
|
|
- Sparc SunOS 4.1.X
|
|
- StrongARM (and other ARM) RISC OS 3.1, 4.02
|
|
- StrongARM Linux 2.4
|
|
- StrongARM NetBSD 1.4.1
|
|
- Ultrix 4.3a
|
|
- i386 BeOS
|
|
- i386 DOS
|
|
- i386 FreeBSD
|
|
- i386 HURD
|
|
- i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
|
|
- i386 NetBSD
|
|
- i386 Novell NetWare
|
|
- i386 OS/2
|
|
- i386 OpenBSD
|
|
- i386 SCO unix
|
|
- i386 Solaris 2.7
|
|
- i386 Windows 95, 98, ME, NT, 2000
|
|
- i386 QNX 6
|
|
- i486 ncr-sysv4.3.03 (NCR MP-RAS)
|
|
- ia64 Linux 2.3.99
|
|
- m68k AmigaOS 3
|
|
- m68k Linux
|
|
- m68k OpenBSD
|
|
- m88k dg-dgux5.4R3.00
|
|
- s390 Linux
|
|
- XScale/PXA250 Linux 2.4
|
|
|
|
Useful URLs
|
|
===========
|
|
|
|
OpenSSL http://www.openssl.org
|
|
MingW http://www.mingw.org
|
|
OpenLDAP http://www.openldap.org
|
|
Zlib http://www.gzip.org/zlib/
|