| _ _ ____ _ |
| ___| | | | _ \| | |
| / __| | | | |_) | | |
| | (__| |_| | _ <| |___ |
| \___|\___/|_| \_\_____| |
| |
| 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 library. This generates the libeay32.dll and ssleay32.dll |
| files. |
| |
| Run the 'vcvars32.bat' file to get the proper environment variables |
| set. Edit the makefile.vc6 in the lib directory and define |
| OPENSSL_PATH. Set the location of the OpenSSL library and run 'nmake |
| vc-ssl' in the root directory. |
| |
| The vcvars32.bat file is part of the Microsoft development |
| environment. |
| |
| 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 one 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 |
| - Alpha Linux 2.2.16 |
| - 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 |
| - Power AIX 4.2, 4.3.1, 4.3.2 |
| - 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. |