docs - update BCC INSTALL section
[platform/upstream/curl.git] / docs / INSTALL
1                                   _   _ ____  _
2                               ___| | | |  _ \| |
3                              / __| | | | |_) | |
4                             | (__| |_| |  _ <| |___
5                              \___|\___/|_| \_\_____|
6
7                                 How To Compile
8
9 Installing Binary Packages
10 ==========================
11
12    Lots of people download binary distributions of curl and libcurl. This
13    document does not describe how to install curl or libcurl using such a
14    binary package. This document describes how to compile, build and install
15    curl and libcurl from source code.
16
17 UNIX
18 ====
19    A normal unix installation is made in three or four steps (after you've
20    unpacked the source archive):
21
22         ./configure
23         make
24         make test (optional)
25         make install
26
27    You probably need to be root when doing the last command.
28
29    If you have checked out the sources from the git repository, read the
30    GIT-INFO on how to proceed.
31
32    Get a full listing of all available configure options by invoking it like:
33
34         ./configure --help
35
36    If you want to install curl in a different file hierarchy than /usr/local,
37    you need to specify that already when running configure:
38
39         ./configure --prefix=/path/to/curl/tree
40
41    If you happen to have write permission in that directory, you can do 'make
42    install' without being root. An example of this would be to make a local
43    install in your own home directory:
44
45         ./configure --prefix=$HOME
46         make
47         make install
48
49    The configure script always tries to find a working SSL library unless
50    explicitly told not to. If you have OpenSSL installed in the default search
51    path for your compiler/linker, you don't need to do anything special. If
52    you have OpenSSL installed in /usr/local/ssl, you can run configure like:
53
54         ./configure --with-ssl
55
56    If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL)
57    and you have pkg-config installed, set the pkg-config path first, like this:
58
59         env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl
60
61    Without pkg-config installed, use this:
62
63         ./configure --with-ssl=/opt/OpenSSL
64
65    If you insist on forcing a build without SSL support, even though you may
66    have OpenSSL installed in your system, you can run configure like this:
67
68         ./configure --without-ssl
69
70    If you have OpenSSL installed, but with the libraries in one place and the
71    header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
72    environment variables prior to running configure.  Something like this
73    should work:
74
75      (with the Bourne shell and its clones):
76
77         CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
78            ./configure
79
80      (with csh, tcsh and their clones):
81
82         env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \
83            ./configure
84
85    If you have shared SSL libs installed in a directory where your run-time
86    linker doesn't find them (which usually causes configure failures), you can
87    provide the -R option to ld on some operating systems to set a hard-coded
88    path to the run-time linker:
89
90         env LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl
91
92    MORE OPTIONS
93    ------------
94
95      To force configure to use the standard cc compiler if both cc and gcc are
96      present, run configure like
97
98        CC=cc ./configure
99          or
100        env CC=cc ./configure
101
102      To force a static library compile, disable the shared library creation
103      by running configure like:
104
105        ./configure --disable-shared
106
107      To tell the configure script to skip searching for thread-safe functions,
108      add an option like:
109
110        ./configure --disable-thread
111
112      To build curl with kerberos4 support enabled, curl requires the krb4 libs
113      and headers installed. You can then use a set of options to tell
114      configure where those are:
115
116           --with-krb4-includes[=DIR]   Specify location of kerberos4 headers
117           --with-krb4-libs[=DIR]       Specify location of kerberos4 libs
118           --with-krb4[=DIR]            where to look for Kerberos4
119
120      In most cases, /usr/athena is the install prefix and then it works with
121
122        ./configure --with-krb4=/usr/athena
123
124      If you're a curl developer and use gcc, you might want to enable more
125      debug options with the --enable-debug option.
126
127      curl can be built to use a whole range of libraries to provide various
128      useful services, and configure will try to auto-detect a decent
129      default. But if you want to alter it, you can select how to deal with
130      each individual library.
131
132      To build with GnuTLS support instead of OpenSSL for SSL/TLS, note that
133      you need to use both --without-ssl and --with-gnutls.
134
135      To build with yassl support instead of OpenSSL or GnuTLS, you must build
136      yassl with its OpenSSL emulation enabled and point to that directory root
137      with configure --with-ssl.
138
139      To build with NSS support instead of OpenSSL for SSL/TLS, note that
140      you need to use both --without-ssl and --with-nss.
141
142      To build with PolarSSL support instead of OpenSSL for SSL/TLS, note that
143      you need to use both --without-ssl and --with-polarssl.
144
145      To build with axTLS support instead of OpenSSL for TLS, note that you
146      need to use both --without-ssl and --with-axtls.
147
148      To get GSSAPI support, build with --with-gssapi and have the MIT or
149      Heimdal Kerberos 5 packages installed.
150
151      To get support for SCP and SFTP, build with --with-libssh2 and have
152      libssh2 0.16 or later installed.
153
154    SPECIAL CASES
155    -------------
156    Some versions of uClibc require configuring with CPPFLAGS=-D_GNU_SOURCE=1
157    to get correct large file support.
158
159    The Open Watcom C compiler on Linux requires configuring with the variables:
160
161        ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \
162            RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra
163
164
165 Win32
166 =====
167
168    Building Windows DLLs and C run-time (CRT) linkage issues
169    ---------------------------------------------------------
170
171    As a general rule, building a DLL with static CRT linkage is highly
172    discouraged, and intermixing CRTs in the same app is something to
173    avoid at any cost.
174
175    Reading and comprehension of Microsoft Knowledge Base articles
176    KB94248 and KB140584 is a must for any Windows developer. Especially
177    important is full understanding if you are not going to follow the
178    advice given above.
179
180    KB94248  - How To Use the C Run-Time
181               http://support.microsoft.com/kb/94248/en-us
182
183    KB140584 - How to link with the correct C Run-Time (CRT) library
184               http://support.microsoft.com/kb/140584/en-us
185
186    KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
187               http://msdn.microsoft.com/en-us/library/ms235460
188
189    If your app is misbehaving in some strange way, or it is suffering
190    from memory corruption, before asking for further help, please try
191    first to rebuild every single library your app uses as well as your
192    app using the debug multithreaded dynamic C runtime.
193
194    MingW32
195    -------
196
197    Make sure that MinGW32's bin dir is in the search path, for example:
198
199      set PATH=c:\mingw32\bin;%PATH%
200
201    then run 'mingw32-make mingw32' in the root dir. There are other
202    make targets available to build libcurl with more features, use:
203    'mingw32-make mingw32-zlib' to build with Zlib support;
204    'mingw32-make mingw32-ssl-zlib' to build with SSL and Zlib enabled;
205    'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2, SSL, Zlib;
206    'mingw32-make mingw32-ssh2-ssl-sspi-zlib' to build with SSH2, SSL, Zlib
207    and SSPI support.
208
209    If you have any problems linking libraries or finding header files, be sure
210    to verify that the provided "Makefile.m32" files use the proper paths, and
211    adjust as necessary. It is also possible to override these paths with
212    environment variables, for example:
213
214      set ZLIB_PATH=c:\zlib-1.2.3
215      set OPENSSL_PATH=c:\openssl-0.9.8k
216      set LIBSSH2_PATH=c:\libssh2-1.1
217
218    ATTENTION: if you want to build with libssh2 support you have to use latest
219    version 0.17 - previous versions will NOT work with 7.17.0 and later!
220    Use 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2 and SSL enabled.
221
222    It is now also possible to build with other LDAP SDKs than MS LDAP;
223    currently it is possible to build with native Win32 OpenLDAP, or with the
224    Novell CLDAP SDK. If you want to use these you need to set these vars:
225
226      set LDAP_SDK=c:\openldap
227      set USE_LDAP_OPENLDAP=1
228
229    or for using the Novell SDK:
230
231      set USE_LDAP_NOVELL=1
232
233    If you want to enable LDAPS support then set LDAPS=1.
234
235    - optional MingW32-built OpenlDAP SDK available from:
236      http://www.gknw.net/mirror/openldap/
237    - optional recent Novell CLDAP SDK available from:
238      http://developer.novell.com/ndk/cldap.htm
239
240
241    Cygwin
242    ------
243
244    Almost identical to the unix installation. Run the configure script in the
245    curl root with 'sh configure'. Make sure you have the sh executable in
246    /bin/ or you'll see the configure fail toward the end.
247
248    Run 'make'
249
250    Dev-Cpp
251    -------
252
253    See the separate INSTALL.devcpp file for details.
254
255    MSVC 6 caveats
256    --------------
257
258    If you use MSVC 6 it is required that you use the February 2003 edition PSDK:
259    http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
260
261    Building any software with MSVC 6 without having PSDK installed is just
262    asking for trouble down the road once you have released it, you might notice
263    the problems in the first corner or ten miles ahead, depending mostly on your
264    choice of static vs dynamic runtime and third party libraries. Anyone using
265    software built in such way will at some point regret having done so.
266
267    When someone uses MSVC 6 without PSDK he is using a compiler back from 1998.
268
269    If the compiler has been updated with the installation of a service pack as
270    those mentioned in http://support.microsoft.com/kb/194022 the compiler can be
271    safely used to read source code, translate and make it object code.
272
273    But, even with the service packs mentioned above installed, the resulting
274    software generated in such an environment will be using outdated system
275    header files and libraries with bugs and security issues which have already
276    been addressed and fixed long time ago.
277
278    In order to make use of the updated system headers and fixed libraries
279    for MSVC 6, it is required that 'Platform SDK', PSDK from now onwards,
280    is installed. The specific PSDK that must be installed for MSVC 6 is the
281    February 2003 edition, which is the latest one supporting the MSVC 6 compiler,
282    this PSDK is also known as 'Windows Server 2003 PSDK' and can be downloaded
283    from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
284
285    So, building curl and libcurl with MSVC 6 without PSDK is absolutely
286    discouraged for the benefit of anyone using software built in such
287    environment. And it will not be supported in any way, as we could just
288    be hunting bugs which have already been fixed way back in 2003.
289
290    When building with MSVC 6 we attempt to detect if PSDK is not being used,
291    and if this is the case the build process will fail hard with an error
292    message stating that the February 2003 PSDK is required. This is done to
293    protect the unsuspecting and avoid PEBKAC issues.
294
295    Additionally it might happen that a die hard MSVC hacker still wants to
296    build curl and libcurl with MSVC 6 without PSDK installed, even knowing
297    that this is a highly discouraged and unsupported build environment. In
298    this case the brave of heart will be able to build in such an environment
299    with the requisite of defining preprocessor symbol ALLOW_MSVC6_WITHOUT_PSDK
300    in lib/config-win32.h and knowing that LDAP and IPv6 support will be missing.
301
302    MSVC from command line
303    ----------------------
304
305    Run the 'vcvars32.bat' file to get a proper environment. The
306    vcvars32.bat file is part of the Microsoft development environment and
307    you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin'
308    provided that you installed Visual C/C++ 6 in the default directory.
309
310    Then run 'nmake vc' in curl's root directory.
311
312    If you want to compile with zlib support, you will need to build
313    zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
314    documentation on how to compile zlib. Define the ZLIB_PATH environment
315    variable to the location of zlib.h and zlib.lib, for example:
316
317      set ZLIB_PATH=c:\zlib-1.2.3
318
319    Then run 'nmake vc-zlib' in curl's root directory.
320
321    If you want to compile with SSL support you need the OpenSSL package.
322    Please read the OpenSSL documentation on how to compile and install
323    the OpenSSL libraries.  The build process of OpenSSL generates the
324    libeay32.dll and ssleay32.dll files in the out32dll subdirectory in
325    the OpenSSL home directory.  OpenSSL static libraries (libeay32.lib,
326    ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory.
327
328    Before running nmake define the OPENSSL_PATH environment variable with
329    the root/base directory of OpenSSL, for example:
330
331      set OPENSSL_PATH=c:\openssl-0.9.8k
332
333    Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root
334    directory.  'nmake vc-ssl' will create a libcurl static and dynamic
335    libraries in the lib subdirectory, as well as a statically linked
336    version of curl.exe in the src subdirectory.  This statically linked
337    version is a standalone executable not requiring any DLL at
338    runtime. This make method requires that you have the static OpenSSL
339    libraries available in OpenSSL's out32 subdirectory.
340    'nmake vc-ssl-dll' creates the libcurl dynamic library and
341    links curl.exe against libcurl and OpenSSL dynamically.
342    This executable requires libcurl.dll and the OpenSSL DLLs
343    at runtime.
344    Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support.
345
346    MSVC 6 IDE
347    ----------
348
349    A minimal VC++ 6.0 reference workspace (vc6curl.dsw) is available with the
350    source distribution archive to allow proper building of the two included
351    projects, the libcurl library and the curl tool.
352
353    1) Open the vc6curl.dsw workspace with MSVC6's IDE.
354    2) Select 'Build' from top menu.
355    3) Select 'Batch Build' from dropdown menu.
356    4) Make sure that the eight project configurations are 'checked'.
357    5) Click on the 'Build' button.
358    6) Once the eight project configurations are built you are done.
359
360    Dynamic and static libcurl libraries are built in debug and release flavours,
361    and can be located each one in its own subdirectory, DLL-Debug, DLL-Release,
362    LIB-Debug and LIB-Release, all of them below the 'lib' subdirectory.
363
364    In the same way four curl executables are created, each using its respective
365    library. The resulting curl executables are located in its own subdirectory,
366    DLL-Debug, DLL-Release, LIB-Debug and LIB-Release, below the 'src' subdir.
367
368    These reference VC++ 6.0 configurations are generated using the dynamic CRT.
369
370    Intentionally, these reference VC++ 6.0 projects and configurations don't use
371    third party libraries, such as OpenSSL or Zlib, to allow proper compilation
372    and configuration for all new users without further requirements.
373
374    If you need something more 'involved' you might adjust them for your own use,
375    or explore the world of makefiles described above 'MSVC from command line'.
376
377    Borland C++ compiler
378    ---------------------
379
380    Ensure that your build environment is properly set up to use the compiler
381    and associated tools. PATH environment variable must include the path to
382    bin subdirectory of your compiler installation, eg: c:\Borland\BCC55\bin
383
384    It is advisable to set environment variable BCCDIR to the base path of
385    the compiler installation.
386
387      set BCCDIR=c:\Borland\BCC55
388
389    In order to build a plain vanilla version of curl and libcurl run the 
390    following command from curl's root directory:
391
392      make borland
393
394    To build curl and libcurl with zlib and OpenSSL support set environment
395    variables ZLIB_PATH and OPENSSL_PATH to the base subdirectories of the
396    already built zlib and OpenSSL libraries and from curl's root directory
397    run command:
398
399      make borland-ssl-zlib
400
401    libcurl library will be built in 'lib' subdirectory while curl tool
402    is built in 'src' subdirectory. In order to use libcurl library it is
403    advisable to modify compiler's configuration file bcc32.cfg located
404    in c:\Borland\BCC55\bin to reflect the location of libraries include
405    paths for example the '-I' line could result in something like:
406
407      -I"c:\Borland\BCC55\include;c:\curl\include;c:\openssl\inc32"
408
409    bcc3.cfg '-L' line could also be modified to reflect the location of
410    of libcurl library resulting for example:
411
412      -L"c:\Borland\BCC55\lib;c:\curl\lib;c:\openssl\out32"
413
414    In order to build sample program 'simple.c' from the docs\examples
415    subdirectory run following command from mentioned subdirectory:
416
417      bcc32 simple.c libcurl.lib cw32mt.lib
418
419    In order to build sample program simplessl.c an SSL enabled libcurl
420    is required, as well as the OpenSSL libeay32.lib and ssleay32.lib
421    libraries.
422
423
424    OTHER MSVC IDEs
425    ---------------
426
427    If you use VC++, Borland or similar compilers. Include all lib source
428    files in a static lib "project" (all .c and .h files that is).
429    (you should name it libcurl or similar)
430
431    Make the sources in the src/ drawer be a "win32 console application"
432    project. Name it curl.
433
434
435    Disabling Specific Protocols in Win32 builds
436    --------------------------------------------
437
438    The configure utility, unfortunately, is not available for the Windows
439    environment, therefore, you cannot use the various disable-protocol
440    options of the configure utility on this platform.
441
442    However, you can use the following defines to disable specific
443    protocols:
444
445    HTTP_ONLY             disables all protocols except HTTP
446    CURL_DISABLE_FTP      disables FTP
447    CURL_DISABLE_LDAP     disables LDAP
448    CURL_DISABLE_TELNET   disables TELNET
449    CURL_DISABLE_DICT     disables DICT
450    CURL_DISABLE_FILE     disables FILE
451    CURL_DISABLE_TFTP     disables TFTP
452    CURL_DISABLE_HTTP     disables HTTP
453
454    If you want to set any of these defines you have the following
455    possibilities:
456
457    - Modify lib/config-win32.h
458    - Modify lib/setup.h
459    - Modify lib/Makefile.vc6
460    - Add defines to Project/Settings/C/C++/General/Preprocessor Definitions
461      in the vc6libcurl.dsw/vc6libcurl.dsp Visual C++ 6 IDE project.
462
463
464    Important static libcurl usage note
465    -----------------------------------
466
467    When building an application that uses the static libcurl library, you must
468    add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will look for
469    dynamic import symbols.
470
471
472 IBM OS/2
473 ========
474    Building under OS/2 is not much different from building under unix.
475    You need:
476
477       - emx 0.9d
478       - GNU make
479       - GNU patch
480       - ksh
481       - GNU bison
482       - GNU file utilities
483       - GNU sed
484       - autoconf 2.13
485
486    If you want to build with OpenSSL or OpenLDAP support, you'll need to
487    download those libraries, too. Dirk Ohme has done some work to port SSL
488    libraries under OS/2, but it looks like he doesn't care about emx.  You'll
489    find his patches on: http://come.to/Dirk_Ohme
490
491    If during the linking you get an error about _errno being an undefined
492    symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__
493    in your definitions.
494
495    If everything seems to work fine but there's no curl.exe, you need to add
496    -Zexe to your linker flags.
497
498    If you're getting huge binaries, probably your makefiles have the -g in
499    CFLAGS.
500
501
502 VMS
503 ===
504    (The VMS section is in whole contributed by the friendly Nico Baggus)
505
506    Curl seems to work with FTP & HTTP other protocols are not tested.  (the
507    perl http/ftp testing server supplied as testing too cannot work on VMS
508    because vms has no concept of fork(). [ I tried to give it a whack, but
509    thats of no use.
510
511    SSL stuff has not been ported.
512
513    Telnet has about the same issues as for Win32. When the changes for Win32
514    are clear maybe they'll work for VMS too. The basic problem is that select
515    ONLY works for sockets.
516
517    Marked instances of fopen/[f]stat that might become a problem, especially
518    for non stream files. In this regard, the files opened for writing will be
519    created stream/lf and will thus be safe. Just keep in mind that non-binary
520    read/wring from/to files will have a records size limit of 32767 bytes
521    imposed.
522
523    Stat to get the size of the files is again only safe for stream files &
524    fixed record files without implied CC.
525
526    -- My guess is that only allowing access to stream files is the quickest
527    way to get around the most issues. Therefore all files need to to be
528    checked to be sure they will be stream/lf before processing them.  This is
529    the easiest way out, I know. The reason for this is that code that needs to
530    report the filesize will become a pain in the ass otherwise.
531
532    Exit status.... Well we needed something done here,
533
534    VMS has a structured exist status:
535    | 3  |       2    |     1       |  0|
536    |1098|765432109876|5432109876543|210|
537    +----+------------+-------------+---+
538    |Ctrl|  Facility  | Error code  |sev|
539    +----+------------+-------------+---+
540
541    With the Ctrl-bits an application can tell if part or the whole message has
542    already been printed from the program, DCL doesn't need to print it again.
543
544    Facility - basically the program ID. A code assigned to the program
545    the name can be fetched from external or internal message libraries
546    Error code - the err codes assigned by the application
547    Sev. - severity: Even = error, off = non error
548       0 = Warning
549       1 = Success
550       2 = Error
551       3 = Information
552       4 = Fatal
553       <5-7> reserved.
554
555    This all presents itself with:
556    %<FACILITY>-<Sev>-<Errorname>, <Error message>
557
558    See also the src/curlmsg.msg file, it has the source for the messages In
559    src/main.c a section is devoted to message status values, the globalvalues
560    create symbols with certain values, referenced from a compiled message
561    file. Have all exit function use a exit status derived from a translation
562    table with the compiled message codes.
563
564    This was all compiled with:
565
566       Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2
567
568    So far for porting notes as of:
569    13-jul-2001
570    N. Baggus
571
572
573 QNX
574 ===
575    (This section was graciously brought to us by David Bentham)
576
577    As QNX is targeted for resource constrained environments, the QNX headers
578    set conservative limits. This includes the FD_SETSIZE macro, set by default
579    to 32. Socket descriptors returned within the CURL library may exceed this,
580    resulting in memory faults/SIGSEGV crashes when passed into select(..)
581    calls using fd_set macros.
582
583    A good all-round solution to this is to override the default when building
584    libcurl, by overriding CFLAGS during configure, example
585    #  configure CFLAGS='-DFD_SETSIZE=64 -g -O2'
586
587
588 RISC OS
589 =======
590    The library can be cross-compiled using gccsdk as follows:
591
592         CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \
593              --host=arm-riscos-aof --without-random --disable-shared
594         make
595
596    where riscos-gcc and riscos-ar are links to the gccsdk tools.
597    You can then link your program with curl/lib/.libs/libcurl.a
598
599
600 AmigaOS
601 =======
602    (This section was graciously brought to us by Diego Casorran)
603
604    To build cURL/libcurl on AmigaOS just type 'make amiga' ...
605
606    What you need is:    (not tested with others versions)
607
608         GeekGadgets / gcc 2.95.3 (http://www.geekgadgets.org/)
609
610         AmiTCP SDK v4.3 (http://www.aminet.net/comm/tcp/AmiTCP-SDK-4.3.lha)
611
612         Native Developer Kit (http://www.amiga.com/3.9/download/NDK3.9.lha)
613
614    As no ixemul.library is required you will be able to build it for
615    WarpOS/PowerPC (not tested by me), as well a MorphOS version should be
616    possible with no problems.
617
618    To enable SSL support, you need a OpenSSL native version (without ixemul),
619    you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/
620
621
622 NetWare
623 =======
624    To compile curl.nlm / libcurl.nlm you need:
625    - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later.
626    - gnu make and awk running on the platform you compile on;
627      native Win32 versions can be downloaded from:
628      http://www.gknw.net/development/prgtools/
629    - recent Novell LibC SDK available from:
630      http://developer.novell.com/ndk/libc.htm
631    - or recent Novell CLib SDK available from:
632      http://developer.novell.com/ndk/clib.htm
633    - optional recent Novell CLDAP SDK available from:
634      http://developer.novell.com/ndk/cldap.htm
635    - optional zlib sources (static or dynamic linking with zlib.imp);
636      sources with NetWare Makefile can be obtained from:
637      http://www.gknw.net/mirror/zlib/
638    - optional OpenSSL sources (version 0.9.8 or later build with BSD sockets);
639      you can find precompiled packages at:
640      http://www.gknw.net/development/ossl/netware/
641      for CLIB-based builds OpenSSL 0.9.8h or later is required  - earlier versions
642      dont support buildunf with CLIB BSD sockets.
643    - optional SSH2 sources (version 0.17 or later);
644
645    Set a search path to your compiler, linker and tools; on Linux make
646    sure that the var OSTYPE contains the string 'linux'; set the var
647    NDKBASE to point to the base of your Novell NDK; and then type
648    'make netware' from the top source directory; other targets available
649    are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares';
650    if you need other combinations you can control the build with the
651    environment variables WITH_SSL, WITH_ZLIB, WITH_ARES, WITH_SSH2, and
652    ENABLE_IPV6; you can set LINK_STATIC=1 to link curl.nlm statically.
653    By default LDAP support is enabled, however currently you will need a patch
654    in order to use the CLDAP NDK with BSD sockets (Novell Bug 300237):
655    http://www.gknw.net/test/curl/cldap_ndk/ldap_ndk.diff
656    I found on some Linux systems (RH9) that OS detection didn't work although
657    a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it
658    with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked...
659    Any help in testing appreciated!
660    Builds automatically created 8 times a day from current git are here:
661    http://www.gknw.net/mirror/curl/autobuilds/
662    the status of these builds can be viewed at the autobuild table:
663    http://curl.haxx.se/auto/
664
665
666 eCos
667 ====
668    curl does not use the eCos build system, so you must first build eCos
669    separately, then link curl to the resulting eCos library.  Here's a sample
670    configure line to do so on an x86 Linux box targeting x86:
671
672    GCCLIB=`gcc -print-libgcc-file-name` && \
673    CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \
674     -I`dirname $GCCLIB`/include" \
675    LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \
676     -L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \
677    ./configure --host=i386 --disable-shared \
678     --without-ssl --without-zlib --disable-manual --disable-ldap
679
680    In most cases, eCos users will be using libcurl from within a custom
681    embedded application.  Using the standard 'curl' executable from
682    within eCos means facing the limitation of the standard eCos C
683    startup code which does not allow passing arguments in main().  To
684    run 'curl' from eCos and have it do something useful, you will need
685    to either modify the eCos startup code to pass in some arguments, or
686    modify the curl application itself to retrieve its arguments from
687    some location set by the bootloader or hard-code them.
688
689    Something like the following patch could be used to hard-code some
690    arguments.  The MTAB_ENTRY line mounts a RAM disk as the root filesystem
691    (without mounting some kind of filesystem, eCos errors out all file
692    operations which curl does not take to well).  The next section synthesizes
693    some command-line arguments for curl to use, in this case to direct curl
694    to read further arguments from a file.  It then creates that file on the
695    RAM disk and places within it a URL to download: a file: URL that
696    just happens to point to the configuration file itself.  The results
697    of running curl in this way is the contents of the configuration file
698    printed to the console.
699
700 --- src/main.c  19 Jul 2006 19:09:56 -0000    1.363
701 +++ src/main.c  24 Jul 2006 21:37:23 -0000
702 @@ -4286,11 +4286,31 @@
703  }
704
705
706 +#ifdef __ECOS
707 +#include <cyg/fileio/fileio.h>
708 +MTAB_ENTRY( testfs_mte1,
709 +                   "/",
710 +                   "ramfs",
711 +                   "",
712 +                   0);
713 +#endif
714
715  int main(int argc, char *argv[])
716  {
717    int res;
718    struct Configurable config;
719 +#ifdef __ECOS
720 +  char *args[] = {"ecos-curl", "-K", "curlconf.txt"};
721 +  FILE *f;
722 +  argc = sizeof(args)/sizeof(args[0]);
723 +  argv = args;
724 +
725 +  f = fopen("curlconf.txt", "w");
726 +  if (f) {
727 +    fprintf(f, "--url file:curlconf.txt");
728 +    fclose(f);
729 +  }
730 +#endif
731    memset(&config, 0, sizeof(struct Configurable));
732
733    config.errors = stderr; /* default errors to stderr */
734
735
736 Minix
737 =====
738    curl can be compiled on Minix 3 using gcc or ACK (starting with
739    ver. 3.1.3).  Ensure that GNU gawk and bash are both installed and
740    available in the PATH.
741
742    ACK
743    ---
744    Increase the heap sizes of the compiler with the command:
745
746      binsizes xxl
747
748    then configure and compile curl with:
749
750      ./configure CC=cc LD=cc AR=/usr/bin/aal GREP=grep \
751       CPPFLAGS='-D_POSIX_SOURCE=1 -I/usr/local/include'
752      make
753      chmem =256000 src/curl
754
755    GCC
756    ---
757    Make sure gcc is in your PATH with the command:
758
759      export PATH=/usr/gnu/bin:$PATH
760
761    then configure and compile curl with:
762
763      ./configure CC=gcc AR=/usr/gnu/bin/gar GREP=grep
764      make
765      chmem =256000 src/curl
766
767
768 Symbian OS
769 ==========
770    The Symbian OS port uses the Symbian build system to compile.  From the
771    packages/Symbian/group/ directory, run:
772
773       bldmake bldfiles
774       abld build
775
776    to compile and install curl and libcurl using SBSv1. If your Symbian
777    SDK doesn't include support for P.I.P.S., you will need to contact
778    your SDK vendor to obtain that first.
779
780
781 VxWorks
782 ========
783    Build for VxWorks is performed using cross compilation.
784    That means you build on Windows machine using VxWorks tools and
785    run the built image on the VxWorks device.
786
787    To build libcurl for VxWorks you need:
788
789       - CYGWIN (free, http://cygwin.com/)
790       - Wind River Workbench (commercial)
791
792    If you have CYGWIN and Workbench installed on you machine
793    follow after next steps:
794
795     1. Open the Command Prompt window and change directory ('cd')
796        to the libcurl 'lib' folder.
797     2. Add CYGWIN 'bin' folder to the PATH environment variable.
798        For example, type 'set PATH=C:/embedded/cygwin/bin;%PATH%'.
799     3. Adjust environment variables defined in 'Environment' section
800        of the Makefile.vxworks file to point to your software folders.
801     4. Build the libcurl by typing 'make -f ./Makefile.vxworks'
802
803    As a result the libcurl.a library should be created in the 'lib' folder.
804    To clean the build results type 'make -f ./Makefile.vxworks clean'.
805
806
807 Android
808 =======
809    See the build notes in the Android.mk file.
810
811
812 CROSS COMPILE
813 =============
814    (This section was graciously brought to us by Jim Duey, with additions by
815    Dan Fandrich)
816
817    Download and unpack the cURL package.
818
819    'cd' to the new directory. (e.g. cd curl-7.12.3)
820
821    Set environment variables to point to the cross-compile toolchain and call
822    configure with any options you need.  Be sure and specify the '--host' and
823    '--build' parameters at configuration time.  The following script is an
824    example of cross-compiling for the IBM 405GP PowerPC processor using the
825    toolchain from MonteVista for Hardhat Linux.
826
827    (begin script)
828
829    #! /bin/sh
830
831    export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
832    export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
833    export AR=ppc_405-ar
834    export AS=ppc_405-as
835    export LD=ppc_405-ld
836    export RANLIB=ppc_405-ranlib
837    export CC=ppc_405-gcc
838    export NM=ppc_405-nm
839
840    ./configure --target=powerpc-hardhat-linux \
841         --host=powerpc-hardhat-linux \
842         --build=i586-pc-linux-gnu \
843         --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \
844         --exec-prefix=/usr/local
845
846    (end script)
847
848    You may also need to provide a parameter like '--with-random=/dev/urandom'
849    to configure as it cannot detect the presence of a random number
850    generating device for a target system.  The '--prefix' parameter
851    specifies where cURL will be installed.  If 'configure' completes
852    successfully, do 'make' and 'make install' as usual.
853
854    In some cases, you may be able to simplify the above commands to as
855    little as:
856
857        ./configure --host=ARCH-OS
858
859
860 REDUCING SIZE
861 =============
862    There are a number of configure options that can be used to reduce the
863    size of libcurl for embedded applications where binary size is an
864    important factor.  First, be sure to set the CFLAGS variable when
865    configuring with any relevant compiler optimization flags to reduce the
866    size of the binary.  For gcc, this would mean at minimum the -Os option,
867    and potentially the -march=X and -mdynamic-no-pic options as well, e.g.
868
869       ./configure CFLAGS='-Os' ...
870
871    Note that newer compilers often produce smaller code than older versions
872    due to improved optimization.
873
874    Be sure to specify as many --disable- and --without- flags on the configure
875    command-line as you can to disable all the libcurl features that you
876    know your application is not going to need.  Besides specifying the
877    --disable-PROTOCOL flags for all the types of URLs your application
878    will not use, here are some other flags that can reduce the size of the
879    library:
880
881      --disable-ares (disables support for the C-ARES DNS library)
882      --disable-cookies (disables support for HTTP cookies)
883      --disable-crypto-auth (disables HTTP cryptographic authentication)
884      --disable-ipv6 (disables support for IPv6)
885      --disable-manual (disables support for the built-in documentation)
886      --disable-proxy (disables support for HTTP and SOCKS proxies)
887      --disable-verbose (eliminates debugging strings and error code strings)
888      --enable-hidden-symbols (eliminates unneeded symbols in the shared library)
889      --without-libidn (disables support for the libidn DNS library)
890      --without-ssl (disables support for SSL/TLS)
891      --without-zlib (disables support for on-the-fly decompression)
892
893    The GNU compiler and linker have a number of options that can reduce the
894    size of the libcurl dynamic libraries on some platforms even further.
895    Specify them by providing appropriate CFLAGS and LDFLAGS variables on the
896    configure command-line:
897      CFLAGS="-ffunction-sections -fdata-sections" \
898      LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
899
900    Be sure also to strip debugging symbols from your binaries after
901    compiling using 'strip' (or the appropriate variant if cross-compiling).
902    If space is really tight, you may be able to remove some unneeded
903    sections of the shared library using the -R option to objcopy (e.g. the
904    .comment section).
905
906    Using these techniques it is possible to create a basic HTTP-only shared
907    libcurl library for i386 Linux platforms that is only 98 KiB in size, and
908    an FTP-only library that is 94 KiB in size (as of libcurl version 7.20.0,
909    using gcc 4.3.3).
910
911    You may find that statically linking libcurl to your application will
912    result in a lower total size than dynamically linking.
913
914    Note that the curl test harness can detect the use of some, but not all, of
915    the --disable statements suggested above. Use will cause tests relying on
916    those features to fail.  The test harness can be manually forced to skip
917    the relevant tests by specifying certain key words on the runtests.pl
918    command line.  Following is a list of appropriate key words:
919
920      --disable-cookies          !cookies
921      --disable-crypto-auth      !HTTP\ Digest\ auth !HTTP\ proxy\ Digest\ auth
922      --disable-manual           !--manual
923      --disable-proxy            !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5
924
925
926 PORTS
927 =====
928    This is a probably incomplete list of known hardware and operating systems
929    that curl has been compiled for. If you know a system curl compiles and
930    runs on, that isn't listed, please let us know!
931
932         - Alpha DEC OSF 4
933         - Alpha Digital UNIX v3.2
934         - Alpha FreeBSD 4.1, 4.5
935         - Alpha Linux 2.2, 2.4
936         - Alpha NetBSD 1.5.2
937         - Alpha OpenBSD 3.0
938         - Alpha OpenVMS V7.1-1H2
939         - Alpha Tru64 v5.0 5.1
940         - AVR32 Linux
941         - ARM Android 1.5, 2.1
942         - ARM INTEGRITY
943         - ARM iPhone OS
944         - Cell Linux
945         - Cell Cell OS
946         - HP-PA HP-UX 9.X 10.X 11.X
947         - HP-PA Linux
948         - HP3000 MPE/iX
949         - MicroBlaze uClinux
950         - MIPS IRIX 6.2, 6.5
951         - MIPS Linux
952         - OS/400
953         - Pocket PC/Win CE 3.0
954         - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2
955         - PowerPC Darwin 1.0
956         - PowerPC INTEGRITY
957         - PowerPC Linux
958         - PowerPC Mac OS 9
959         - PowerPC Mac OS X
960         - SH4 Linux 2.6.X
961         - SH4 OS21
962         - SINIX-Z v5
963         - Sparc Linux
964         - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10
965         - Sparc SunOS 4.1.X
966         - StrongARM (and other ARM) RISC OS 3.1, 4.02
967         - StrongARM/ARM7/ARM9 Linux 2.4, 2.6
968         - StrongARM NetBSD 1.4.1
969         - Symbian OS (P.I.P.S.) 9.x
970         - TPF
971         - Ultrix 4.3a
972         - UNICOS 9.0
973         - i386 BeOS
974         - i386 DOS
975         - i386 eCos 1.3.1
976         - i386 Esix 4.1
977         - i386 FreeBSD
978         - i386 HURD
979         - i386 Haiku OS
980         - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6
981         - i386 MINIX 3.1
982         - i386 NetBSD
983         - i386 Novell NetWare
984         - i386 OS/2
985         - i386 OpenBSD
986         - i386 QNX 6
987         - i386 SCO unix
988         - i386 Solaris 2.7
989         - i386 Windows 95, 98, ME, NT, 2000, XP, 2003
990         - i486 ncr-sysv4.3.03 (NCR MP-RAS)
991         - ia64 Linux 2.3.99
992         - m68k AmigaOS 3
993         - m68k Linux
994         - m68k uClinux
995         - m68k OpenBSD
996         - m88k dg-dgux5.4R3.00
997         - s390 Linux
998         - x86_64 Linux
999         - XScale/PXA250 Linux 2.4
1000         - Nios II uClinux
1001
1002 Useful URLs
1003 ===========
1004
1005 c-ares    http://daniel.haxx.se/projects/c-ares/license.html
1006 GNU GSS   http://www.gnu.org/software/gss/
1007 GnuTLS    http://www.gnu.org/software/gnutls/
1008 Heimdal   http://www.pdc.kth.se/heimdal/
1009 libidn    http://www.gnu.org/software/libidn/
1010 libssh2   http://www.libssh2.org
1011 MingW     http://www.mingw.org
1012 MIT Kerberos http://web.mit.edu/kerberos/www/dist/
1013 NSS       http://www.mozilla.org/projects/security/pki/nss/
1014 OpenLDAP  http://www.openldap.org
1015 OpenSSL   http://www.openssl.org
1016 PolarSSL  http://polarssl.org
1017 yassl     http://www.yassl.com/
1018 Zlib      http://www.gzip.org/zlib/