                                  _   _ ____  _     
                              ___| | | |  _ \| |    
                             / __| | | | |_) | |    
                            | (__| |_| |  _ <| |___ 
                             \___|\___/|_| \_\_____|

                                How To Compile

Curl has been compiled and built on numerous different operating systems.

Most systems build curl the same way (unix-style). Continue reading below for
more details if you're one of them.

If you're using Windows (95/98/NT/ME/2000/XP or similar), VMS, RISC OS or OS/2
or cross-compile, you should continue reading from one the paragraphs further
down.

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 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

   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 your SSL library was compiled with rsaref (usually for use in the United
   States), you may also need to set:

     LIBS=-lRSAglue -lrsaref
     (as suggested by Doug Kaufman)

   KNOWN PROBLEMS (these ones should not happen anymore)

     If you happen to have autoconf installed, but a version older than 2.12
     you will get into trouble. Then you can still build curl by issuing these
     commands (note that this requires curl to be built staticly): (from Ralph
     Beckmann)

       ./configure [...]
       cd lib; make; cd ..
       cd src; make; cd ..
       cp src/curl elsewhere/bin/

     As suggested by David West, you can make a faked version of autoconf and
     autoheader:

       ----start of autoconf----
       #!/bin/bash
       #fake autoconf for building curl
       if [ "$1" = "--version" ] then
         echo "Autoconf version 2.13"
       fi
       ----end of autoconf----

     Then make autoheader a symbolic link to the same script and make sure
     they're executable and set to appear in the path *BEFORE* the actual (but
     obsolete) autoconf and autoheader scripts.

   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.

        With VC++, add 'ws2_32.lib' to the link libs when you build curl!
        Borland seems to do that itself magically. Of course you have to make
        sure it links with the libcurl too!

        For VC++ 6, there's an included Makefile.vc6 that should be possible
        to use out-of-the-box.

        Microsoft note: add /Zm200 to the compiler options to increase the
        compiler's memory allocation limit, as the hugehelp.c won't compile
        due to "too long puts string".


   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
      ----------------------------

        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.

        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.

        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.6b

        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.

      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.


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)

   This is the first attempt at porting cURL to VMS.

   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'l 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.

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
        - MIPS IRIX 6.2, 6.5
        - MIPS Linux
        - Pocket PC/Win CE 3.0
        - Power AIX 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 FreeBSD
        - i386 HURD
        - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4
        - i386 NetBSD
        - i386 OS/2
        - i386 OpenBSD
        - i386 SCO unix
        - i386 Solaris 2.7
        - i386 Windows 95, 98, ME, NT, 2000
        - ia64 Linux 2.3.99
        - m68k AmigaOS 3
        - m68k Linux
        - m68k OpenBSD
        - s390 Linux 

OpenSSL
=======

   You'll find OpenSSL information at:

      http://www.openssl.org


MingW32/Cygwin
==============

   You'll find MingW32 and Cygwin information at:

      http://www.mingw.org

OpenLDAP
========

   You'll find OpenLDAP information at:

      http://www.openldap.org

   You need to install it with shared libraries, which is enabled when running
   the ldap configure script with "--enable-shared". With my linux 2.0.36
   kernel I also had to disable using threads (with --without-threads),
   because the configure script couldn't figure out my system.
