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:
  https://curl.haxx.se/
  https://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:
         https://lists.gnu.org/archive/html/libtool/2001-09/msg00101.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.
