Curl is a tool for transferring files with URL syntax, supporting 
  FTP, FTPS, HTTP, HTTPS, TELNET, DICT, FILE and LDAP.
  Curl supports HTTPS certificates, HTTP POST, HTTP PUT, 
  FTP uploading, kerberos, HTTP form based upload, proxies, 
  cookies, user+password authentication, file transfer resume,
  http proxy tunneling and a busload of other useful tricks.

See /usr/doc/curl-$(VERSION)/FEATURES for more info.


Dependencies:
  - Cygwin
  - OpenSSL 0.9.6b-2+ (*)

  (*) cURL can be built without SSL support, see below for details


Canonical Homepage and Downloads:
  http://curl.haxx.se/
  http://curl.haxx.se/download.html


Cygwin specific source files (a .README template and a Makefile
  for building binary tarballs) are maintained in the upstream
  CVS at: <srctop>/packages/Win32/cygwin/


Build Instructions (to recompile from the cygwin source tarball):
  ---STANDARD (with SSL) RELEASE---
  Download the source (either the official release or the cygwin version),
  unpack it (done for you if using setup.exe), then:

  $ ./configure --prefix=/usr --mandir=/usr/share/man  # (*)
  $ make
  $ make test    # optional
  $ make install # (**)

  (*) The Cygwin project now (as of sometime in 2003) prefers man pages
      within /usr/share/man, as opposed to the default /usr/man.

  (**) LibTool 1.4.2 had a bug related to cygwin's use of ".exe" extensions,
      such that "make install" blew up at curl.exe. See this URL for details:
         http://mail.gnu.org/pipermail/libtool/2001-September/005549.html
      The copy of ltmain.sh that is distributed with cURL includes this patch.

  As of curl 7.9.1, the official source compiles (under Cygwin) and tests 
    100% cleanly OOTB (Out Of The Box)

  ---NO SSL RELEASE---
  Same as standard, except for the configure step, which changes to:

  $ ./configure --prefix=/usr --mandir=/usr/share/man --without-ssl

  NOTE: the standard release is what is available via Cygwin's setup.exe;
    the no-ssl release is only available from the curl website


Packaging Instructions:
  ---BINARY---
  Compile cleanly as described above, then:

  $ make cygwinbin CYGBUILD=n

  where n is the cygwin release number (e.g. the "1" in curl-7.9-1),
  and "CYGBUILD=n" is optional (n defaults to 1 if not specified)
  
  Assuming everything worked, you'll find your binary tarballs in
   $(buildtop)/packages/Win32/cygwin/

  ---SOURCE---
  1. download & unpack the pristine source
  2. rename the source dir to add the "-$(REL)" suffix, e.g.:
     $ mv curl-7.9 curl-7.9-1
  3. unpack the pristine source once more, so you'll end up
     with 2 directories: "curl-7.9" and "curl-7.9-1" in this example
  3. add a CYGWIN-PATCHES directory, and add this readme to it
     $ cd curl-7.9-1; mkdir CYGWIN-PATCHES
     $ cp packages/Win32/cygwin/README CYGWIN-PATCHES/curl-7.9-1.README
  4. if applicable, document any changes in the README file
  5. create a patch which, when applied 
     (using `patch -p1 < curl-7.9-$(REL).patch`) 
     will remove any changes you've made to the pristine source:
     $ cd ..
     $ diff -Nrup curl-7.9-1 curl-7.9 > curl-7.9-1.patch
     and then move it into the CYGWIN-PATCHES directory
     $ mv curl-7.9-1.patch curl-7.9-1/CYGWIN-PATCHES
  6. pack the new source dir into a tar.bz2 file:
     $ tar cfj curl-7.9-1-src.tar.bz2 curl-7.9-1

  ---SETUP.HINT---
  @ curl
  sdesc: "a client that groks URLs"
  ldesc: "Curl is a tool for transferring files with URL syntax,
  supporting FTP, FTPS, HTTP, HTTPS, TELNET, DICT, FILE 
  and LDAP. Curl supports HTTPS certificates, HTTP POST, HTTP PUT, 
  FTP uploading, kerberos, HTTP form based upload, proxies, 
  cookies, user+password authentication, file transfer resume,
  http proxy tunneling and a busload of other useful tricks."
  category: Web Libs
  requires: cygwin openssl

  @ curl-devel
  sdesc: "(lib)cURL headers, static libraries, developer docs and samples"
  ldesc: "curl-devel is the developer-oriented (non-run-time) parts
  of the cURL package. It includes header files, static libraries,
  example source code snippets, and the libcurl man pages."
  category: Web Libs Devel
  requires: cygwin openssl curl


Cygwin port maintained by:
  Kevin Roth <kproth @ users . sourceforge . net>
  Questions about cURL should be directed to curl-users@cool.haxx.se.
  Questions about this cygwin package go to cygwin@cygwin.com.
