summaryrefslogtreecommitdiff
path: root/docs/INSTALL
diff options
context:
space:
mode:
Diffstat (limited to 'docs/INSTALL')
-rw-r--r--docs/INSTALL996
1 files changed, 996 insertions, 0 deletions
diff --git a/docs/INSTALL b/docs/INSTALL
new file mode 100644
index 000000000..9a5844fc2
--- /dev/null
+++ b/docs/INSTALL
@@ -0,0 +1,996 @@
+ _ _ ____ _
+ ___| | | | _ \| |
+ / __| | | | |_) | |
+ | (__| |_| | _ <| |___
+ \___|\___/|_| \_\_____|
+
+ 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 git repository, read the
+ GIT-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)
+ and you have pkg-config installed, set the pkg-config path first, like this:
+
+ env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl
+
+ Without pkg-config installed, use 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:
+
+ env LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
+
+ 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.
+
+ curl can be built to use a whole range of libraries to provide various
+ useful services, and configure will try to auto-detect a decent
+ default. But if you want to alter it, you can select how to deal with
+ each individual library.
+
+ To build with GnuTLS support instead of OpenSSL for SSL/TLS, note that
+ you need to use both --without-ssl and --with-gnutls.
+
+ To build with yassl support instead of OpenSSL or GnuTLS, you must build
+ yassl with its OpenSSL emulation enabled and point to that directory root
+ with configure --with-ssl.
+
+ To build with NSS support instead of OpenSSL for SSL/TLS, note that
+ you need to use both --without-ssl and --with-nss.
+
+ To build with PolarSSL support instead of OpenSSL for SSL/TLS, note that
+ you need to use both --without-ssl and --with-polarssl.
+
+ To get GSSAPI support, build with --with-gssapi and have the MIT or
+ Heimdal Kerberos 5 packages installed.
+
+ To get support for SCP and SFTP, build with --with-libssh2 and have
+ libssh2 0.16 or later installed.
+
+ SPECIAL CASES
+ -------------
+ Some versions of uClibc require configuring with CPPFLAGS=-D_GNU_SOURCE=1
+ to get correct large file support.
+
+ The Open Watcom C compiler on Linux requires configuring with the variables:
+
+ ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \
+ RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra
+
+
+Win32
+=====
+
+ Building Windows DLLs and C run-time (CRT) linkage issues
+ ---------------------------------------------------------
+
+ As a general rule, building a DLL with static CRT linkage is highly
+ discouraged, and intermixing CRTs in the same app is something to
+ avoid at any cost.
+
+ Reading and comprehension of Microsoft Knowledge Base articles
+ KB94248 and KB140584 is a must for any Windows developer. Especially
+ important is full understanding if you are not going to follow the
+ advice given above.
+
+ KB94248 - How To Use the C Run-Time
+ http://support.microsoft.com/kb/94248/en-us
+
+ KB140584 - How to link with the correct C Run-Time (CRT) library
+ http://support.microsoft.com/kb/140584/en-us
+
+ KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
+ http://msdn.microsoft.com/en-us/library/ms235460
+
+ If your app is misbehaving in some strange way, or it is suffering
+ from memory corruption, before asking for further help, please try
+ first to rebuild every single library your app uses as well as your
+ app using the debug multithreaded dynamic C runtime.
+
+ MingW32
+ -------
+
+ Make sure that MinGW32's bin dir is in the search path, for example:
+
+ set PATH=c:\mingw32\bin;%PATH%
+
+ then run 'mingw32-make mingw32' in the root dir. There are other
+ make targets available to build libcurl with more features, use:
+ 'mingw32-make mingw32-zlib' to build with Zlib support;
+ 'mingw32-make mingw32-ssl-zlib' to build with SSL and Zlib enabled;
+ 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2, SSL, Zlib;
+ 'mingw32-make mingw32-ssh2-ssl-sspi-zlib' to build with SSH2, SSL, Zlib
+ and SSPI support.
+
+ 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. It is also possible to override these paths with
+ environment variables, for example:
+
+ set ZLIB_PATH=c:\zlib-1.2.3
+ set OPENSSL_PATH=c:\openssl-0.9.8k
+ set LIBSSH2_PATH=c:\libssh2-1.1
+
+ ATTENTION: if you want to build with libssh2 support you have to use latest
+ version 0.17 - previous versions will NOT work with 7.17.0 and later!
+ Use 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2 and SSL enabled.
+
+ It is now also possible to build with other LDAP SDKs than MS LDAP;
+ currently it is possible to build with native Win32 OpenLDAP, or with the
+ Novell CLDAP SDK. If you want to use these you need to set these vars:
+
+ set LDAP_SDK=c:\openldap
+ set USE_LDAP_OPENLDAP=1
+
+ or for using the Novell SDK:
+
+ set USE_LDAP_NOVELL=1
+
+ If you want to enable LDAPS support then set LDAPS=1.
+
+ - optional MingW32-built OpenlDAP SDK available from:
+ http://www.gknw.net/mirror/openldap/
+ - optional recent Novell CLDAP SDK available from:
+ http://developer.novell.com/ndk/cldap.htm
+
+
+ Cygwin
+ ------
+
+ 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 toward the end.
+
+ Run 'make'
+
+ Dev-Cpp
+ -------
+
+ See the separate INSTALL.devcpp file for details.
+
+ MSVC 6 caveats
+ --------------
+
+ If you use MSVC 6 it is required that you use the February 2003 edition PSDK:
+ http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
+
+ Building any software with MSVC 6 without having PSDK installed is just
+ asking for trouble down the road once you have released it, you might notice
+ the problems in the first corner or ten miles ahead, depending mostly on your
+ choice of static vs dynamic runtime and third party libraries. Anyone using
+ software built in such way will at some point regret having done so.
+
+ When someone uses MSVC 6 without PSDK he is using a compiler back from 1998.
+
+ If the compiler has been updated with the installation of a service pack as
+ those mentioned in http://support.microsoft.com/kb/194022 the compiler can be
+ safely used to read source code, translate and make it object code.
+
+ But, even with the service packs mentioned above installed, the resulting
+ software generated in such an environment will be using outdated system
+ header files and libraries with bugs and security issues which have already
+ been addressed and fixed long time ago.
+
+ In order to make use of the updated system headers and fixed libraries
+ for MSVC 6, it is required that 'Platform SDK', PSDK from now onwards,
+ is installed. The specific PSDK that must be installed for MSVC 6 is the
+ February 2003 edition, which is the latest one supporting the MSVC 6 compiler,
+ this PSDK is also known as 'Windows Server 2003 PSDK' and can be downloaded
+ from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
+
+ So, building curl and libcurl with MSVC 6 without PSDK is absolutely
+ discouraged for the benefit of anyone using software built in such
+ environment. And it will not be supported in any way, as we could just
+ be hunting bugs which have already been fixed way back in 2003.
+
+ When building with MSVC 6 we attempt to detect if PSDK is not being used,
+ and if this is the case the build process will fail hard with an error
+ message stating that the February 2003 PSDK is required. This is done to
+ protect the unsuspecting and avoid PEBKAC issues.
+
+ Additionally it might happen that a die hard MSVC hacker still wants to
+ build curl and libcurl with MSVC 6 without PSDK installed, even knowing
+ that this is a highly discouraged and unsupported build environment. In
+ this case the brave of heart will be able to build in such an environment
+ with the requisite of defining preprocessor symbol ALLOW_MSVC6_WITHOUT_PSDK
+ in lib/config-win32.h and knowing that LDAP and IPv6 support will be missing.
+
+ MSVC from command line
+ ----------------------
+
+ 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.3
+
+ 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.8k
+
+ 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.
+
+ MSVC 6 IDE
+ ----------
+
+ A minimal VC++ 6.0 reference workspace (vc6curl.dsw) is available with the
+ source distribution archive to allow proper building of the two included
+ projects, the libcurl library and the curl tool.
+
+ 1) Open the vc6curl.dsw workspace with MSVC6's IDE.
+ 2) Select 'Build' from top menu.
+ 3) Select 'Batch Build' from dropdown menu.
+ 4) Make sure that the eight project configurations are 'checked'.
+ 5) Click on the 'Build' button.
+ 6) Once the eight project configurations are built you are done.
+
+ Dynamic and static libcurl libraries are built in debug and release flavours,
+ and can be located each one in its own subdirectory, DLL-Debug, DLL-Release,
+ LIB-Debug and LIB-Release, all of them below the 'lib' subdirectory.
+
+ In the same way four curl executables are created, each using its respective
+ library. The resulting curl executables are located in its own subdirectory,
+ DLL-Debug, DLL-Release, LIB-Debug and LIB-Release, below the 'src' subdir.
+
+ These reference VC++ 6.0 configurations are generated using the dynamic CRT.
+
+ Intentionally, these reference VC++ 6.0 projects and configurations don't use
+ third party libraries, such as OpenSSL or Zlib, to allow proper compilation
+ and configuration for all new users without further requirements.
+
+ If you need something more 'involved' you might adjust them for your own use,
+ or explore the world of makefiles described above 'MSVC from command line'.
+
+ Borland C++ compiler
+ ---------------------
+
+ 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
+
+ OTHER MSVC IDEs
+ ---------------
+
+ 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.
+
+
+ Disabling Specific Protocols in Win32 builds
+ --------------------------------------------
+
+ 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_TFTP disables TFTP
+ CURL_DISABLE_HTTP disables HTTP
+
+ If you want to set any of these defines you have the following
+ possibilities:
+
+ - Modify lib/config-win32.h
+ - Modify lib/setup.h
+ - Modify lib/Makefile.vc6
+ - Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
+ in the vc6libcurl.dsw/vc6libcurl.dsp Visual C++ 6 IDE project.
+
+
+ Important static libcurl usage note
+ -----------------------------------
+
+ When building an application that uses the static libcurl library, you must
+ add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
+ dynamic import symbols.
+
+
+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
+ already been printed from the program, DCL doesn't need to print it again.
+
+ Facility - basically the program ID. A code assigned to the program
+ the name can be fetched from external or internal message libraries
+ Error code - the err codes 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 targeted 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'
+
+
+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.net/development/prgtools/
+ - recent Novell LibC SDK available from:
+ http://developer.novell.com/ndk/libc.htm
+ - or recent Novell CLib SDK available from:
+ http://developer.novell.com/ndk/clib.htm
+ - optional recent Novell CLDAP SDK available from:
+ http://developer.novell.com/ndk/cldap.htm
+ - optional zlib sources (static or dynamic linking with zlib.imp);
+ sources with NetWare Makefile can be obtained from:
+ http://www.gknw.net/mirror/zlib/
+ - optional OpenSSL sources (version 0.9.8 or later build with BSD sockets);
+ you can find precompiled packages at:
+ http://www.gknw.net/development/ossl/netware/
+ for CLIB-based builds OpenSSL 0.9.8h or later is required - earlier versions
+ dont support buildunf with CLIB BSD sockets.
+ - optional SSH2 sources (version 0.17 or later);
+
+ Set a search path to your compiler, linker and tools; on Linux make
+ sure that the var OSTYPE contains the string 'linux'; set the var
+ NDKBASE to point to the base of your Novell NDK; and then type
+ 'make netware' from the top source directory; other targets available
+ are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares';
+ if you need other combinations you can control the build with the
+ environment variables WITH_SSL, WITH_ZLIB, WITH_ARES, WITH_SSH2, and
+ ENABLE_IPV6; you can set LINK_STATIC=1 to link curl.nlm statically.
+ By default LDAP support is enabled, however currently you will need a patch
+ in order to use the CLDAP NDK with BSD sockets (Novell Bug 300237):
+ http://www.gknw.net/test/curl/cldap_ndk/ldap_ndk.diff
+ I found on some Linux systems (RH9) that OS detection didn't 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...
+ Any help in testing appreciated!
+ Builds automatically created 8 times a day from current git are here:
+ http://www.gknw.net/mirror/curl/autobuilds/
+ the status of these builds can be viewed at the autobuild table:
+ http://curl.haxx.se/auto/
+
+
+eCos
+====
+ curl does not use the eCos build system, so you must first build eCos
+ separately, then link curl to the resulting eCos library. Here's a sample
+ configure line to do so on an x86 Linux box targeting x86:
+
+ GCCLIB=`gcc -print-libgcc-file-name` && \
+ CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \
+ -I`dirname $GCCLIB`/include" \
+ LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \
+ -L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \
+ ./configure --host=i386 --disable-shared \
+ --without-ssl --without-zlib --disable-manual --disable-ldap
+
+ In most cases, eCos users will be using libcurl from within a custom
+ embedded application. Using the standard 'curl' executable from
+ within eCos means facing the limitation of the standard eCos C
+ startup code which does not allow passing arguments in main(). To
+ run 'curl' from eCos and have it do something useful, you will need
+ to either modify the eCos startup code to pass in some arguments, or
+ modify the curl application itself to retrieve its arguments from
+ some location set by the bootloader or hard-code them.
+
+ Something like the following patch could be used to hard-code some
+ arguments. The MTAB_ENTRY line mounts a RAM disk as the root filesystem
+ (without mounting some kind of filesystem, eCos errors out all file
+ operations which curl does not take to well). The next section synthesizes
+ some command-line arguments for curl to use, in this case to direct curl
+ to read further arguments from a file. It then creates that file on the
+ RAM disk and places within it a URL to download: a file: URL that
+ just happens to point to the configuration file itself. The results
+ of running curl in this way is the contents of the configuration file
+ printed to the console.
+
+--- src/main.c 19 Jul 2006 19:09:56 -0000 1.363
++++ src/main.c 24 Jul 2006 21:37:23 -0000
+@@ -4286,11 +4286,31 @@
+ }
+
+
++#ifdef __ECOS
++#include <cyg/fileio/fileio.h>
++MTAB_ENTRY( testfs_mte1,
++ "/",
++ "ramfs",
++ "",
++ 0);
++#endif
+
+ int main(int argc, char *argv[])
+ {
+ int res;
+ struct Configurable config;
++#ifdef __ECOS
++ char *args[] = {"ecos-curl", "-K", "curlconf.txt"};
++ FILE *f;
++ argc = sizeof(args)/sizeof(args[0]);
++ argv = args;
++
++ f = fopen("curlconf.txt", "w");
++ if (f) {
++ fprintf(f, "--url file:curlconf.txt");
++ fclose(f);
++ }
++#endif
+ memset(&config, 0, sizeof(struct Configurable));
+
+ config.errors = stderr; /* default errors to stderr */
+
+
+Minix
+=====
+ curl can be compiled on Minix 3 using gcc or ACK (starting with
+ ver. 3.1.3). Ensure that GNU gawk and bash are both installed and
+ available in the PATH.
+
+ ACK
+ ---
+ Increase the heap sizes of the compiler with the command:
+
+ binsizes xxl
+
+ then configure and compile curl with:
+
+ ./configure CC=cc LD=cc AR=/usr/bin/aal GREP=grep \
+ CPPFLAGS='-D_POSIX_SOURCE=1 -I/usr/local/include'
+ make
+ chmem =256000 src/curl
+
+ GCC
+ ---
+ Make sure gcc is in your PATH with the command:
+
+ export PATH=/usr/gnu/bin:$PATH
+
+ then configure and compile curl with:
+
+ ./configure CC=gcc AR=/usr/gnu/bin/gar GREP=grep
+ make
+ chmem =256000 src/curl
+
+
+Symbian OS
+==========
+ The Symbian OS port uses the Symbian build system to compile. From the
+ packages/Symbian/group/ directory, run:
+
+ bldmake bldfiles
+ abld build
+
+ to compile and install curl and libcurl using SBSv1. If your Symbian
+ SDK doesn't include support for P.I.P.S., you will need to contact
+ your SDK vendor to obtain that first.
+
+
+VxWorks
+========
+ Build for VxWorks is performed using cross compilation.
+ That means you build on Windows machine using VxWorks tools and
+ run the built image on the VxWorks device.
+
+ To build libcurl for VxWorks you need:
+
+ - CYGWIN (free, http://cygwin.com/)
+ - Wind River Workbench (commercial)
+
+ If you have CYGWIN and Workbench installed on you machine
+ follow after next steps:
+
+ 1. Open the Command Prompt window and change directory ('cd')
+ to the libcurl 'lib' folder.
+ 2. Add CYGWIN 'bin' folder to the PATH environment variable.
+ For example, type 'set PATH=C:/embedded/cygwin/bin;%PATH%'.
+ 3. Adjust environment variables defined in 'Environment' section
+ of the Makefile.vxworks file to point to your software folders.
+ 4. Build the libcurl by typing 'make -f ./Makefile.vxworks'
+
+ As a result the libcurl.a library should be created in the 'lib' folder.
+ To clean the build results type 'make -f ./Makefile.vxworks clean'.
+
+
+Android
+=======
+ See the build notes in the Android.mk file.
+
+
+CROSS COMPILE
+=============
+ (This section was graciously brought to us by Jim Duey, with additions by
+ Dan Fandrich)
+
+ Download and unpack the cURL package.
+
+ 'cd' to the new directory. (e.g. cd curl-7.12.3)
+
+ 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)
+
+ You may also need to provide a parameter like '--with-random=/dev/urandom'
+ to configure as it cannot detect the presence of a random number
+ generating device for a target system. The '--prefix' parameter
+ specifies where cURL will be installed. If 'configure' completes
+ successfully, do 'make' and 'make install' as usual.
+
+ In some cases, you may be able to simplify the above commands to as
+ little as:
+
+ ./configure --host=ARCH-OS
+
+
+REDUCING SIZE
+=============
+ There are a number of configure options that can be used to reduce the
+ size of libcurl for embedded applications where binary size is an
+ important factor. First, be sure to set the CFLAGS variable when
+ configuring with any relevant compiler optimization flags to reduce the
+ size of the binary. For gcc, this would mean at minimum the -Os option,
+ and potentially the -march=X and -mdynamic-no-pic options as well, e.g.
+
+ ./configure CFLAGS='-Os' ...
+
+ Note that newer compilers often produce smaller code than older versions
+ due to improved optimization.
+
+ Be sure to specify as many --disable- and --without- flags on the configure
+ command-line as you can to disable all the libcurl features that you
+ know your application is not going to need. Besides specifying the
+ --disable-PROTOCOL flags for all the types of URLs your application
+ will not use, here are some other flags that can reduce the size of the
+ library:
+
+ --disable-ares (disables support for the C-ARES DNS library)
+ --disable-cookies (disables support for HTTP cookies)
+ --disable-crypto-auth (disables HTTP cryptographic authentication)
+ --disable-ipv6 (disables support for IPv6)
+ --disable-manual (disables support for the built-in documentation)
+ --disable-proxy (disables support for HTTP and SOCKS proxies)
+ --disable-verbose (eliminates debugging strings and error code strings)
+ --enable-hidden-symbols (eliminates unneeded symbols in the shared library)
+ --without-libidn (disables support for the libidn DNS library)
+ --without-ssl (disables support for SSL/TLS)
+ --without-zlib (disables support for on-the-fly decompression)
+
+ The GNU compiler and linker have a number of options that can reduce the
+ size of the libcurl dynamic libraries on some platforms even further.
+ Specify them by providing appropriate CFLAGS and LDFLAGS variables on the
+ configure command-line:
+ CFLAGS="-ffunction-sections -fdata-sections" \
+ LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
+
+ Be sure also to strip debugging symbols from your binaries after
+ compiling using 'strip' (or the appropriate variant if cross-compiling).
+ If space is really tight, you may be able to remove some unneeded
+ sections of the shared library using the -R option to objcopy (e.g. the
+ .comment section).
+
+ Using these techniques it is possible to create a basic HTTP-only shared
+ libcurl library for i386 Linux platforms that is only 98 KiB in size, and
+ an FTP-only library that is 94 KiB in size (as of libcurl version 7.20.0,
+ using gcc 4.3.3).
+
+ You may find that statically linking libcurl to your application will
+ result in a lower total size than dynamically linking.
+
+ Note that the curl test harness can detect the use of some, but not all, of
+ the --disable statements suggested above. Use will cause tests relying on
+ those features to fail. The test harness can be manually forced to skip
+ the relevant tests by specifying certain key words on the runtests.pl
+ command line. Following is a list of appropriate key words:
+
+ --disable-cookies !cookies
+ --disable-crypto-auth !HTTP\ Digest\ auth !HTTP\ proxy\ Digest\ auth
+ --disable-manual !--manual
+ --disable-proxy !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5
+
+
+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
+ - AVR32 Linux
+ - ARM Android 1.5, 2.1
+ - ARM INTEGRITY
+ - ARM iPhone OS
+ - Cell Linux
+ - Cell Cell OS
+ - HP-PA HP-UX 9.X 10.X 11.X
+ - HP-PA Linux
+ - HP3000 MPE/iX
+ - MicroBlaze uClinux
+ - MIPS IRIX 6.2, 6.5
+ - MIPS Linux
+ - OS/400
+ - Pocket PC/Win CE 3.0
+ - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
+ - PowerPC Darwin 1.0
+ - PowerPC INTEGRITY
+ - PowerPC Linux
+ - PowerPC Mac OS 9
+ - PowerPC Mac OS X
+ - SH4 Linux 2.6.X
+ - SH4 OS21
+ - SINIX-Z v5
+ - Sparc Linux
+ - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
+ - Sparc SunOS 4.1.X
+ - StrongARM (and other ARM) RISC OS 3.1, 4.02
+ - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
+ - StrongARM NetBSD 1.4.1
+ - Symbian OS (P.I.P.S.) 9.x
+ - TPF
+ - Ultrix 4.3a
+ - UNICOS 9.0
+ - i386 BeOS
+ - i386 DOS
+ - i386 eCos 1.3.1
+ - i386 Esix 4.1
+ - i386 FreeBSD
+ - i386 HURD
+ - i386 Haiku OS
+ - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
+ - i386 MINIX 3.1
+ - i386 NetBSD
+ - i386 Novell NetWare
+ - i386 OS/2
+ - i386 OpenBSD
+ - i386 QNX 6
+ - i386 SCO unix
+ - i386 Solaris 2.7
+ - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
+ - i486 ncr-sysv4.3.03 (NCR MP-RAS)
+ - ia64 Linux 2.3.99
+ - m68k AmigaOS 3
+ - m68k Linux
+ - m68k uClinux
+ - m68k OpenBSD
+ - m88k dg-dgux5.4R3.00
+ - s390 Linux
+ - x86_64 Linux
+ - XScale/PXA250 Linux 2.4
+ - Nios II uClinux
+
+Useful URLs
+===========
+
+c-ares http://daniel.haxx.se/projects/c-ares/license.html
+GNU GSS http://www.gnu.org/software/gss/
+GnuTLS http://www.gnu.org/software/gnutls/
+Heimdal http://www.pdc.kth.se/heimdal/
+libidn http://www.gnu.org/software/libidn/
+libssh2 http://www.libssh2.org
+MingW http://www.mingw.org
+MIT Kerberos http://web.mit.edu/kerberos/www/dist/
+NSS http://www.mozilla.org/projects/security/pki/nss/
+OpenLDAP http://www.openldap.org
+OpenSSL http://www.openssl.org
+PolarSSL http://polarssl.org
+yassl http://www.yassl.com/
+Zlib http://www.gzip.org/zlib/