curl-1.3.8/0000755000000000000000000000000012050542035010652 5ustar0000000000000000curl-1.3.8/curl.cabal0000644000000000000000000000314212050542035012603 0ustar0000000000000000name: curl version: 1.3.8 synopsis: Haskell binding to libcurl description: libcurl is a client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer resume, http proxy tunneling and more! . This package provides a Haskell binding to libcurl. category: Network license: BSD3 license-file: LICENSE author: Sigbjorn Finne maintainer: Don Stewart build-type: Configure cabal-version: >= 1.6 extra-source-files: configure, configure.ac, curl.buildinfo.in, CHANGES flag new-base Description: Build with new smaller base library Default: False library Exposed-modules: Network.Curl Network.Curl.Code Network.Curl.Info Network.Curl.Opts Network.Curl.Post Network.Curl.Types Network.Curl.Easy Network.Curl.Debug c-sources: curlc.c Extra-libraries: curl Extensions: CPP, ForeignFunctionInterface Ghc-options: -Wall Build-Depends: base if flag(new-base) Build-depends: base >= 3 && < 5, containers else Build-depends: base < 3 build-depends: bytestring >= 0.9 source-repository head type: git location: git://github.com/galoisinc/curl.git curl-1.3.8/configure.ac0000644000000000000000000000066612050542035013150 0ustar0000000000000000AC_INIT([Haskell curl package], [1.1], [dons@galois.com], [curl]) AC_TRY_CPP([#include ],,[no_curl=yes]) # Build the package if we found curl stuff if test "$no_curl" = yes; then AC_MSG_FAILURE([curl libraries not found, so curl package cannot be built]) else CURL_BUILD_PACKAGE=yes BUILD_PACKAGE_BOOL=True fi AC_SUBST([CURL_BUILD_PACKAGE]) AC_SUBST([BUILD_PACKAGE_BOOL]) AC_CONFIG_FILES([curl.buildinfo]) AC_OUTPUT curl-1.3.8/LICENSE0000644000000000000000000000266012050542035011663 0ustar0000000000000000Copyright (c) 2007-2009 Galois Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the author nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. curl-1.3.8/CHANGES0000644000000000000000000000154712050542035011654 0ustar0000000000000000Version 1.3.8 Add Eq instances for some types. Version 1.3.4: released 2009-01-18; changes from 1.3.3 * Overloaded Network.Curl operations over response representation of payloads and headers. Controlled via CurlBuffer and CurlHeader classes. New actions: - curlGetString_, curlGetResponse_, perform_with_response_, do_curl_, curlHead_ * Provided ByteString instances (strict and lazy) * No modification in calling interface to existing exports, so backwards compatible. * Added Show instance for Network.Curl.Opts.CurlOption * curl_version_string, curl_version_number now gives you access to version info of underlying lib you _compiled_ the package with. * Sync'ed wrt libcurl-7.19.2, so bunch of new options added to Network.Curl.Opts. Use version functions to determine if they are supported though. curl-1.3.8/curl.buildinfo.in0000644000000000000000000000025612050542035014124 0ustar0000000000000000-- @configure_input@ -- System-dependent values used by Distribution.Simple.defaultUserHooks -- buildable: @BUILD_PACKAGE_BOOL@ cc-options: @CPPFLAGS@ ld-options: @LDFLAGS@ curl-1.3.8/Setup.hs0000644000000000000000000000012012050542035012277 0ustar0000000000000000module Main where import Distribution.Simple main :: IO () main = defaultMain curl-1.3.8/configure0000755000000000000000000030434312050542035012570 0ustar0000000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for Haskell curl package 1.1. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='Haskell curl package' PACKAGE_TARNAME='curl' PACKAGE_VERSION='1.1' PACKAGE_STRING='Haskell curl package 1.1' PACKAGE_BUGREPORT='dons@galois.com' ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP CURL_BUILD_PACKAGE BUILD_PACKAGE_BOOL LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Haskell curl package 1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Haskell curl package 1.1:";; esac cat <<\_ACEOF Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Haskell curl package configure 1.1 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Haskell curl package $as_me 1.1, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 no_curl=yes fi rm -f conftest.err conftest.$ac_ext # Build the package if we found curl stuff if test "$no_curl" = yes; then { { echo "$as_me:$LINENO: error: curl libraries not found, so curl package cannot be built See \`config.log' for more details." >&5 echo "$as_me: error: curl libraries not found, so curl package cannot be built See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else CURL_BUILD_PACKAGE=yes BUILD_PACKAGE_BOOL=True fi ac_config_files="$ac_config_files curl.buildinfo" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by Haskell curl package $as_me 1.1, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ Haskell curl package config.status 1.1 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "curl.buildinfo" ) CONFIG_FILES="$CONFIG_FILES curl.buildinfo" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CPP@,$CPP,;t t s,@CURL_BUILD_PACKAGE@,$CURL_BUILD_PACKAGE,;t t s,@BUILD_PACKAGE_BOOL@,$BUILD_PACKAGE_BOOL,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi curl-1.3.8/curlc.c0000644000000000000000000000331112050542035012124 0ustar0000000000000000/* * Haskell FFI friendly wrappers to curl_easy_* functions * for setting/getting option values. Could import these into * .hs without too much trouble, but calling out to 'typed' * versions saves the C compiler from issuing warnings. * * (c) 2007-2009, Galois, Inc. * */ #include int curl_easy_getinfo_long(void *curl, long tg, long *pl) { return curl_easy_getinfo(curl, CURLINFO_LONG+tg, pl); } int curl_easy_getinfo_string(void *curl, long tg, char **s) { return curl_easy_getinfo(curl, CURLINFO_STRING+tg, s); } int curl_easy_getinfo_double(void *curl, long tg, double *d) { return curl_easy_getinfo(curl, CURLINFO_DOUBLE+tg, d); } int curl_easy_getinfo_slist(void *curl, long tg, char ***s) { return curl_easy_getinfo(curl, CURLINFO_SLIST+tg, s); } int curl_easy_setopt_long(void *curl, int i, long x) { return curl_easy_setopt(curl,i,x); } int curl_easy_setopt_longlong(void *curl, int i, long long x) { return curl_easy_setopt(curl,i,x); } int curl_easy_setopt_string(void *curl, int i, char *x) { return curl_easy_setopt(curl,i,x); } int curl_easy_setopt_ptr(void *curl, int i, void *x) { return curl_easy_setopt(curl,i,x); } /* * Function curl_version_str() * * Returns the libcurl version number as a "MAJOR.MINOR.PATCH" string. * * Note: a static string, so no free()ing required (or asked for! :-) */ char* curl_version_str() { return LIBCURL_VERSION; } /* * Function curl_version_num() * * Returns the libcurl version number in 3-byte format 0xXXYYZZ, * representing major,minor and patch levels. Encoded in a (host) * 'int' value, making for easy comparisons. * * See curlver.h for complete story. */ int curl_version_num() { return LIBCURL_VERSION_NUM; } curl-1.3.8/Network/0000755000000000000000000000000012050542035012303 5ustar0000000000000000curl-1.3.8/Network/Curl.hs0000644000000000000000000003734412050542035013557 0ustar0000000000000000{-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-} {-# OPTIONS_GHC -fno-warn-unused-do-bind #-} -------------------------------------------------------------------- -- | -- Module : Network.Curl -- Copyright : (c) 2007-2009, Galois Inc -- License : BSD3 -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: portable -- -- A Haskell binding the libcurl library , a -- proven and feature-rich library for interacting with HTTP(S)\/FTP -- servers. -- -- The binding was initially made against version 7.16.2; libcurl does -- appear to be considerate in not introducing breaking changes wrt -- older versions. So, unless you're after the latest features (i.e., -- constructors towards the end the Option type), there's a very good -- chance your code will work against older installations of libcurl. -- -------------------------------------------------------------------- module Network.Curl ( module Network.Curl.Opts , module Network.Curl.Easy , module Network.Curl.Post , module Network.Curl.Info , module Network.Curl.Types , module Network.Curl.Code -- controlled export of this module: -- (ToDo: tighten it up even more) , withCurlDo -- :: IO a -> IO a , setopts -- :: Curl -> [CurlOption] -> IO () , CurlResponse_(..) , CurlResponse -- get resources and assoc. metadata. , curlGet -- :: URLString -> [CurlOption] -> IO () , curlGetString -- :: URLString -> [CurlOption] -> IO (CurlCode, String) , curlGetResponse -- :: URLString -> [CurlOption] -> IO CurlResponse , perform_with_response -- :: Curl -> IO CurlResponse , do_curl -- :: Curl -> URLString -> [CurlOption] -> IO CurlResponse , curlGetString_ -- :: CurlBuffer ty => URLString -> [CurlOption] -> IO (CurlCode, ty) , curlGetResponse_ -- :: URLString -> [CurlOption] -> IO (CurlResponse_ a b) , perform_with_response_ -- :: Curl -> IO (CurlResponse_ a b) , do_curl_ -- :: Curl -> URLString -> [CurlOption] -> IO (CurlResponse_ a b) , curlHead_ -- :: URLString -- -> [CurlOption] -- -> IO (String,ty) -- probing for gold.. , curlHead -- :: URLString -- -> [CurlOption] -- -> IO (String,[(String,String)]) -- posting requests. , curlMultiPost -- :: URLString -> [CurlOption] -> [HttpPost] -> IO () , curlPost -- :: URLString -> [String] -> IO () -- , getResponseCode -- :: Curl -> IO Int -- supporting cast , setDefaultSSLOpts -- :: Curl -> URLString -> IO () , callbackWriter -- :: (String -> IO ()) -> WriteFunction , easyWriter -- :: (String -> IO ()) -> WriteFunction , ignoreOutput -- :: WriteFunction , gatherOutput -- :: IORef [String] -> WriteFunction , gatherOutput_ -- :: (CStringLen -> IO ()) -> WriteFunction , CurlBuffer(..) , CurlHeader(..) , method_GET -- :: [CurlOption] , method_HEAD -- :: [CurlOption] , method_POST -- :: [CurlOption] , parseStatusNHeaders , parseHeader -- ToDo: get rid of (pretty sure I can already...) , concRev ) where import Network.Curl.Opts import Network.Curl.Code import Network.Curl.Types import Network.Curl.Post import Network.Curl.Info import Network.Curl.Easy import Foreign.C.String import Data.IORef import Data.List(isPrefixOf) -- import System.IO import Control.Exception ( finally ) import Data.ByteString ( ByteString, packCStringLen ) import qualified Data.ByteString as BS ( concat ) import qualified Data.ByteString.Lazy as LazyBS ( ByteString, fromChunks ) -- | The @CurlBuffer@ class encodes the representation -- of response buffers, allowing you to provide your -- own app-specific buffer reps to be used..or use -- one of the standard instances (String and ByteStrings.) -- class CurlBuffer bufferTy where newIncoming :: IO (IO bufferTy, CStringLen -> IO ()) -- | The @CurlHeader@ class encodes the representation -- of response headers. Similar to 'CurlBuffer'. -- class CurlHeader headerTy where newIncomingHeader :: IO (IO (String{-status-},headerTy), CStringLen -> IO ()) instance CurlHeader [(String,String)] where newIncomingHeader = do ref <- newIORef [] let readFinalHeader = do hss <- readIORef ref let (st,hs) = parseStatusNHeaders (concRev [] hss) return (st,hs) return (readFinalHeader, \ v -> peekCStringLen v >>= \ x -> modifyIORef ref (x:)) instance CurlBuffer String where newIncoming = do ref <- newIORef [] let readFinal = readIORef ref >>= return . concat . reverse return (readFinal, \ v -> peekCStringLen v >>= \ x -> modifyIORef ref (x:)) instance CurlBuffer ByteString where newIncoming = do ref <- newIORef [] let readFinal = readIORef ref >>= return . BS.concat . reverse return (readFinal, \ v -> packCStringLen v >>= \ x -> modifyIORef ref (x:)) instance CurlBuffer [ByteString] where newIncoming = do ref <- newIORef [] let readFinal = readIORef ref >>= return . reverse return (readFinal, \ v -> packCStringLen v >>= \ x -> modifyIORef ref (x:)) instance CurlBuffer LazyBS.ByteString where newIncoming = do ref <- newIORef [] let readFinal = readIORef ref >>= return . LazyBS.fromChunks . reverse return (readFinal, \ v -> packCStringLen v >>= \ x -> modifyIORef ref (x:)) -- | Should be used once to wrap all uses of libcurl. -- WARNING: the argument should not return before it -- is completely done with curl (e.g., no forking or lazy returns) withCurlDo :: IO a -> IO a withCurlDo m = do curl_global_init 3 -- initialize everything finally m curl_global_cleanup -- | Set a list of options on a Curl handle. setopts :: Curl -> [CurlOption] -> IO () setopts h opts = mapM_ (setopt h) opts method_GET :: [CurlOption] method_GET = [CurlPost False, CurlNoBody False] method_POST :: [CurlOption] method_POST = [CurlPost True, CurlNoBody False] method_HEAD :: [CurlOption] method_HEAD = [CurlPost False, CurlNoBody True] -- | 'curlGet' perform a basic GET, dumping the output on stdout. -- The list of options are set prior performing the GET request. curlGet :: URLString -> [CurlOption] -> IO () curlGet url opts = initialize >>= \ h -> do setopt h (CurlFailOnError True) setopt h (CurlURL url) -- Note: later options may (and should, probably) override these defaults. setDefaultSSLOpts h url mapM_ (setopt h) opts perform h return () setDefaultSSLOpts :: Curl -> URLString -> IO () setDefaultSSLOpts h url | "https:" `isPrefixOf` url = do -- the default options are pretty dire, really -- turning off -- the peer verification checks! mapM_ (setopt h) [ CurlSSLVerifyPeer False , CurlSSLVerifyHost 0 ] | otherwise = return () -- | 'curlGetString' performs the same request as 'curlGet', but -- returns the response body as a Haskell string. curlGetString :: URLString -> [CurlOption] -> IO (CurlCode, String) curlGetString url opts = initialize >>= \ h -> do ref <- newIORef [] -- Note: later options may (and should, probably) override these defaults. setopt h (CurlFailOnError True) setDefaultSSLOpts h url setopt h (CurlURL url) setopt h (CurlWriteFunction (gatherOutput ref)) mapM_ (setopt h) opts rc <- perform h lss <- readIORef ref return (rc, concat $ reverse lss) curlGetString_ :: (CurlBuffer ty) => URLString -> [CurlOption] -> IO (CurlCode, ty) curlGetString_ url opts = initialize >>= \ h -> do (finalBody, gatherBody) <- newIncoming setopt h (CurlFailOnError True) setDefaultSSLOpts h url setopt h (CurlURL url) setopt h (CurlWriteFunction (gatherOutput_ gatherBody)) mapM_ (setopt h) opts rc <- perform h bs <- finalBody return (rc, bs) type CurlResponse = CurlResponse_ [(String,String)] String -- | 'CurlResponse_' is a record type encoding all the information -- embodied in a response to your Curl request. Currently only used -- to gather up the results of doing a GET in 'curlGetResponse'. data CurlResponse_ headerTy bodyTy = CurlResponse { respCurlCode :: CurlCode , respStatus :: Int , respStatusLine :: String , respHeaders :: headerTy , respBody :: bodyTy , respGetInfo :: (Info -> IO InfoValue) } -- | @curlGetResponse url opts@ performs a @GET@, returning all the info -- it can lay its hands on in the response, a value of type 'CurlResponse'. -- The representation of the body is overloaded curlGetResponse_ :: (CurlHeader hdr, CurlBuffer ty) => URLString -> [CurlOption] -> IO (CurlResponse_ hdr ty) curlGetResponse_ url opts = do h <- initialize -- Note: later options may (and should, probably) override these defaults. setopt h (CurlFailOnError True) setDefaultSSLOpts h url setopt h (CurlURL url) mapM_ (setopt h) opts -- note that users cannot over-write the body and header handler -- which makes sense because otherwise we will return a bogus reposnse. perform_with_response_ h {-# DEPRECATED curlGetResponse "Switch to using curlGetResponse_" #-} curlGetResponse :: URLString -> [CurlOption] -> IO CurlResponse curlGetResponse url opts = curlGetResponse_ url opts -- | Perform the actions already specified on the handle. -- Collects useful information about the returned message. -- Note that this function sets the -- 'CurlWriteFunction' and 'CurlHeaderFunction' options. perform_with_response :: (CurlHeader hdrTy, CurlBuffer bufTy) => Curl -> IO (CurlResponse_ hdrTy bufTy) perform_with_response h = perform_with_response_ h {-# DEPRECATED perform_with_response "Consider switching to perform_with_response_" #-} -- | Perform the actions already specified on the handle. -- Collects useful information about the returned message. -- Note that this function sets the -- 'CurlWriteFunction' and 'CurlHeaderFunction' options. -- The returned payload is overloaded over the representation of -- both headers and body via the 'CurlResponse_' type. perform_with_response_ :: (CurlHeader headerTy, CurlBuffer bodyTy) => Curl -> IO (CurlResponse_ headerTy bodyTy) perform_with_response_ h = do (finalHeader, gatherHeader) <- newIncomingHeader (finalBody, gatherBody) <- newIncoming -- Instead of allocating a separate handler for each -- request we could just set this options one and forall -- and just clear the IORefs. setopt h (CurlWriteFunction (gatherOutput_ gatherBody)) setopt h (CurlHeaderFunction (gatherOutput_ gatherHeader)) rc <- perform h rspCode <- getResponseCode h (st,hs) <- finalHeader bs <- finalBody return CurlResponse { respCurlCode = rc , respStatus = rspCode , respStatusLine = st , respHeaders = hs , respBody = bs -- note: we're holding onto the handle here.. -- note: with this interface this is not neccessary. , respGetInfo = getInfo h } -- | Performs a curl request using an exisitng curl handle. -- The provided URL will overwride any 'CurlURL' options that -- are provided in the list of options. See also: 'perform_with_response'. do_curl :: Curl -> URLString -> [CurlOption] -> IO CurlResponse do_curl h url opts = do_curl_ h url opts {-# DEPRECATED do_curl "Consider switching to do_curl_" #-} do_curl_ :: (CurlHeader headerTy, CurlBuffer bodyTy) => Curl -> URLString -> [CurlOption] -> IO (CurlResponse_ headerTy bodyTy) do_curl_ h url opts = do setDefaultSSLOpts h url setopts h opts setopt h (CurlURL url) perform_with_response_ h -- | Get the headers associated with a particular URL. -- Returns the status line and the key-value pairs for the headers. curlHead :: URLString -> [CurlOption] -> IO (String,[(String,String)]) curlHead url opts = initialize >>= \ h -> do ref <- newIORef [] -- setopt h (CurlVerbose True) setopt h (CurlURL url) setopt h (CurlNoBody True) mapM_ (setopt h) opts setopt h (CurlHeaderFunction (gatherOutput ref)) perform h lss <- readIORef ref return (parseStatusNHeaders (concRev [] lss)) -- | Get the headers associated with a particular URL. -- Returns the status line and the key-value pairs for the headers. curlHead_ :: (CurlHeader headers) => URLString -> [CurlOption] -> IO (String, headers) curlHead_ url opts = initialize >>= \ h -> do (finalHeader, gatherHeader) <- newIncomingHeader -- setopt h (CurlVerbose True) setopt h (CurlURL url) setopt h (CurlNoBody True) mapM_ (setopt h) opts setopt h (CurlHeaderFunction (gatherOutput_ gatherHeader)) perform h finalHeader -- utils concRev :: [a] -> [[a]] -> [a] concRev acc [] = acc concRev acc (x:xs) = concRev (x++acc) xs parseStatusNHeaders :: String -> (String, [(String,String)]) parseStatusNHeaders ys = case intoLines [] ys of a:as -> (a,map parseHeader as) [] -> ("",[]) where intoLines acc "" = addLine acc [] intoLines acc ('\r':'\n':xs) = addLine acc (intoLines "" xs) intoLines acc (x:xs) = intoLines (x:acc) xs addLine "" ls = ls addLine l ls = (reverse l) : ls parseHeader :: String -> (String,String) parseHeader xs = case break (':' ==) xs of (as,_:bs) -> (as, bs) (as,_) -> (as,"") -- | 'curlMultiPost' perform a multi-part POST submission. curlMultiPost :: URLString -> [CurlOption] -> [HttpPost] -> IO () curlMultiPost s os ps = initialize >>= \ h -> do setopt h (CurlVerbose True) setopt h (CurlURL s) setopt h (CurlHttpPost ps) mapM_ (setopt h) os perform h return () -- | 'curlPost' performs. a common POST operation, namely that -- of submitting a sequence of name=value pairs. curlPost :: URLString -> [String] -> IO () curlPost s ps = initialize >>= \ h -> do setopt h (CurlVerbose True) setopt h (CurlPostFields ps) setopt h (CurlCookieJar "cookies") setopt h (CurlURL s) perform h return () -- Use 'callbackWriter' instead. {-# DEPRECATED #-} easyWriter :: (String -> IO ()) -> WriteFunction easyWriter = callbackWriter -- | Imports data into the Haskell world and invokes the callback. callbackWriter :: (String -> IO ()) -> WriteFunction callbackWriter f pBuf sz szI _ = do let bytes = sz * szI f =<< peekCStringLen (pBuf,fromIntegral bytes) return bytes -- | Imports data into the Haskell world and invokes the callback. callbackWriter_ :: (CStringLen -> IO ()) -> WriteFunction callbackWriter_ f pBuf sz szI _ = do do let bytes = sz * szI f (pBuf,fromIntegral bytes) return bytes -- | The output of Curl is ignored. This function -- does not marshall data into Haskell. ignoreOutput :: WriteFunction ignoreOutput _ x y _ = return (x*y) -- | Add chunks of data to an IORef as they arrive. gatherOutput :: IORef [String] -> WriteFunction gatherOutput r = callbackWriter (\ v -> modifyIORef r (v:)) -- | Add chunks of data to an IORef as they arrive. gatherOutput_ :: (CStringLen -> IO ()) -> WriteFunction gatherOutput_ f = callbackWriter_ f getResponseCode :: Curl -> IO Int getResponseCode c = do iv <- getInfo c ResponseCode case iv of IString s -> case (reads s) of ((v,_):_) -> return v _ -> fail ("Curl.getResponseCode: not a valid integer string " ++ s) IDouble d -> return (round d) ILong x -> return (fromIntegral x) IList{} -> fail ("Curl.getResponseCode: unexpected response code " ++ show iv) curl-1.3.8/Network/Curl/0000755000000000000000000000000012050542035013210 5ustar0000000000000000curl-1.3.8/Network/Curl/Code.hs0000644000000000000000000000465512050542035014430 0ustar0000000000000000{-# LANGUAGE ForeignFunctionInterface #-} -------------------------------------------------------------------- -- | -- Module : Network.Curl.Code -- Copyright : (c) Galois Inc 2007-2009, 2011 -- License : BSD3 -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: portable -- -- Representing Curl's status codes as a Haskell type. -- -------------------------------------------------------------------- module Network.Curl.Code where import Foreign.C.Types data CurlCode = CurlOK | CurlUnspportedProtocol | CurlFailedInit | CurlUrlMalformat | CurlUrlMalformatUser | CurlCouldntResolveProxy | CurlCouldntResolveHost | CurlCouldntConnect | CurlFtpWeirdServerReply | CurlFtpAccessDenied | CurlFtpUserPasswordIncorrect | CurlFtpWeirdPassReply | CurlFtpWeirdUserReply | CurlFtpWeirdPASVReply | CurlFtpWeird227Format | CurlFtpCantGetHost | CurlFtpCantReconnect | CurlFtpCouldnSetBinary | CurlPartialFile | CurlFtpCouldntRetrFile | CurlFtpWriteError | CurlFtpQuoteError | CurlHttpReturnedError | CurlWriteError | CurlMalformatError | CurlFtpCouldnStorFile | CurlReadError | CurlOutOfMemory | CurlOperationTimeout | CurlFtpCouldntSetAscii | CurlFtpPortFailed | CurlFtpCouldntUseRest | CurlFtpCouldntGetSize | CurlHttpRangeError | CurlHttpPostError | CurlSSLConnectError | CurlBadDownloadResume | CurlFileCouldntReadFile | CurlLDAPCannotBind | CurlLDPAPSearchFailed | CurlLibraryNotFound | CurlFunctionNotFound | CurlAbortedByCallback | CurlBadFunctionArgument | CurlBadCallingOrder | CurlInterfaceFailed | CurlBadPasswordEntered | CurlTooManyRedirects | CurlUnknownTelnetOption | CurlTelnetOptionSyntax | CurlObsolete | CurlSSLPeerCertificate | CurlGotNothing | CurlSSLEngineNotFound | CurlSSLEngineSetFailed | CurlSendError | CurlRecvError | CurlShareInUse | CurlSSLCertProblem | CurlSSLCipher | CurlSSLCACert | CurlBadContentEncoding | CurlLDAPInvalidUrl | CurlFilesizeExceeded | CurlFtpSSLFailed | CurlSendFailRewind | CurlSSLEngineInitFailed | CurlLoginDenied | CurlTFtpNotFound | CurlTFtpPerm | CurlTFtpDiskFull | CurlTFtpIllegal | CurlTFtpUnknownId | CurlTFtpExists | CurlTFtpNoSuchUser | CurlConvFailed | CurlConvReqd | CurlSSLCACertBadFile | CurlRemoveFileNotFound | CurlSSH | CurlSSLShutdownFailed | CurlAgain | CurlSSLCRLBadFile | CurlSSLIssuerError deriving ( Eq, Show, Enum ) toCode :: CInt -> CurlCode toCode x = toEnum (fromIntegral x) curl-1.3.8/Network/Curl/Debug.hs0000644000000000000000000000077512050542035014603 0ustar0000000000000000-------------------------------------------------------------------- -- | -- Module : Network.Curl.Debug -- Copyright : (c) Galois, Inc. 2008-2009 -- License : BSD3 -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: -- -- Debug hooks module Network.Curl.Debug (debug) where import System.IO debugging :: Bool debugging = False debug :: String -> IO () debug msg | debugging = putStrLn ("DEBUG: " ++ msg) >> hFlush stdout | otherwise = return () curl-1.3.8/Network/Curl/Opts.hs0000644000000000000000000010564612050542035014505 0ustar0000000000000000-------------------------------------------------------------------- -- | -- Module : Network.Curl.Opts -- Copyright : (c) Galois Inc 2007-2009 -- License : BSD3 -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: portable -- -- This module contains the various options that specify what happens -- when we use @perform@ on a @Curl@ handle. -------------------------------------------------------------------- module Network.Curl.Opts where import Network.Curl.Types import Network.Curl.Post import Data.List import Foreign.Ptr import Foreign.C.Types import Data.Bits data CurlOption = CurlFileObj (Ptr ()) -- ^ external pointer to pass to as 'WriteFunction's last argument. | CurlURL URLString -- ^ the URL to use for next request; can be the full URL or just the authority\/hostname. | CurlPort Long -- ^ what port to use. | CurlProxy String -- ^ name of proxy | CurlUserPwd String -- ^ the "user:pass" string to use | CurlProxyUserPwd String -- ^ same thing, but for the proxy. | CurlRange String -- ^ byte range to fetch | CurlInFile FilePath -- ^ external pointer to pass to as 'WriteFunction's last argument. | CurlErrorBuffer (Ptr CChar) -- ^ buffer for curl to deposit error messages (must at least CURL_ERROR_SIZE bytes long). Uses standard error if not specified. | CurlWriteFunction WriteFunction -- ^ callback to handle incoming data. | CurlReadFunction ReadFunction -- ^ callback for supplying outgoing\/uploaded data. | CurlTimeout Long{-secs-} -- ^ number of seconds before timing out curl operation\/request. | CurlInFileSize Long{-bytes-} -- ^ expected size of uploaded data. | CurlPostFields [String] -- ^ (Multipart) POST data. | CurlReferer String -- ^ Set the Referer: header to the given string. | CurlFtpPort String -- ^ The string to feed to the FTP PORT command. | CurlUserAgent String -- ^ Set the User-Agent: header to the given string. | CurlLowSpeed Long -- ^ If the bytes per sec drops below the given value, the operation is aborted. | CurlLowSpeedTime Long -- ^ Upper bound for request to complete. | CurlResumeFrom Long -- ^ Byte offset at which the transfer (HTTP or FTP) should start from. | CurlCookie String -- ^ Set the Cookie: header to the given cookie (name=value pairs, semicolon-separated) string. | CurlHttpHeaders [String] -- ^ Embellish the outgoing request with the given list of (formatted) header values. | CurlHttpPost [HttpPost] -- ^ (Multipart) POST data. | CurlSSLCert FilePath -- ^ file holding your private SSL certificates (default format is PEM). | CurlSSLPassword String -- ^ password to the above file. | CurlSSLKeyPassword String -- ^ an alias for the previous. | CurlCRLF Bool -- ^ If true, convert Unix newlines into CRLFs when transferring. | CurlQuote [String] -- ^ Sequence of FTP commands to execute prior to the main request. | CurlWriteHeader (Ptr ()) -- ^ State \/ pointer argument to pass to WriteFunction callback. | CurlCookieFile FilePath -- ^ Path to file holding initial cookie data; also enables cookie handling. | CurlSSLVersion Long -- ^ What protocol to attempt using (0:default;1:TLS;2:SSLv2;3:SSLv3) | CurlTimeCondition TimeCond -- ^ How to interpret a conditional time value. | CurlTimeValue Long -- ^ Number of secs since Jan 1, 1970. Interpretation is determined by CurlTimeCondition. | CurlCustomRequest String -- ^ String holding alternative request command (WebDAV anyone?) {- | CurlStderr String {- XXX: should be FILE* ? -} -- ^ File object to use for outputting debug info to. -} | CurlPostQuote [String] -- ^ List of commands to issue to FTP server after the main request. | CurlWriteInfo String -- ^ Not sure what this one does; something about passing it to the output function. | CurlVerbose Bool -- ^ Control verbosity | CurlHeader Bool -- ^ Display outgoing and incoming headers | CurlNoProgress Bool -- ^ Control progress meter | CurlNoBody Bool -- ^ Use HEAD instead of GET | CurlFailOnError Bool -- ^ If status response is >= 300, return an error (and no other output). | CurlUpload Bool -- ^ Control the main dataflow, i.e., True to perform uploads. | CurlPost Bool -- ^ Issue a POST request. | CurlFtpListOnly Bool -- ^ Switch NLST for FTP directory listings | CurlFtpAppend Bool -- ^ Control if FTP uploads append rather than overwrite files | CurlUseNetRc NetRcOption -- ^ control how or if a user's.netrc will be consulted for user:password | CurlFollowLocation Bool -- ^ Handle auto-redirects by chasing down Location: values in responses. | CurlTransferTextASCII Bool -- ^ Turn on ASCII transfers for FTP transfers; default is binary (i.e. off). | CurlPut Bool -- ^ Use PUT to upload data. | CurlProgressFunction ProgressFunction -- ^ callback for showing progress | CurlProgressData (Ptr ()) -- ^ state argumentto pass to progress callback. | CurlAutoReferer Bool -- ^ Control if the Referer: field is set upon following Location: redirects | CurlProxyPort Long -- ^ (Numeric) proxy port to use. | CurlPostFieldSize Long -- ^ Size of the POSTed data. | CurlHttpProxyTunnel Bool -- ^ tunnel all HTTP operations through the proxy. | CurlInterface String -- ^ Interface name of outgoing network interface ( network interface, IP address, host name.) | CurlKrb4Level String -- ^ Kerberos security level ("clear", "safe", "confidential", "private" are good values, seemingly.) | CurlSSLVerifyPeer Bool -- ^ Enable the authentication of peer certificate. Default is True. | CurlCAInfo FilePath -- ^ If verifying peer's certificate, use certificates in this file to do so. | CurlMaxRedirs Long -- ^ Maximum number of Location: redirects to chase down before giving up. | CurlFiletime Bool -- ^ Try to determine the modification date of remote document; can be queried for. | CurlTelnetOptions [String] -- ^ List of commands to use for initial telnet negotiations. | CurlMaxConnects Long -- ^ Maximum number of cached active connections. | CurlClosePolicy Long -- ^ No effect (obsolete.) | CurlFreshConnect Bool -- ^ Force the opening up a new connection rather than try to reuse active connections. Default is not to. | CurlForbidReuse Bool -- ^ Do not reuse the connection of next transfer when done. | CurlRandomFile FilePath -- ^ Path to file used to seed (Open)SSL PRNG. | CurlEgdSocket FilePath -- ^ Path to domain socket of EG Daemon. | CurlConnectTimeout Long -- ^ max number of seconds to wait for the initial connection to happen. | CurlHeaderFunction WriteFunction -- ^ callback used to handle _incoming_ header data. | CurlHttpGet Bool -- ^ Revert to a GET for the next request. | CurlSSLVerifyHost Long -- ^ Perform Common name checking in peer certificate (1=> existence;2=> matches hostname.) | CurlCookieJar FilePath -- ^ Path to file where additional cookie information will be stored. | CurlSSLCipherList String -- ^ Colon-separated string list of cipher preferences to use for upcoming connection (e.g., "3DES:+RSA") | CurlHttpVersion HttpVersion -- ^ What HTTP version to use, should you want to drop back for some reason. | CurlFtpUseEPSV Bool -- ^ Attempt the use of EPSV before PASV for passive FTP downloads. | CurlSSLCertType String -- ^ The format of your certificates ("PEM", "DER") | CurlSSLKey FilePath -- ^ Filename of private key. | CurlSSLKeyType String -- ^ Format of private key; use "ENG" to load from a crypto engine. | CurlSSLEngine String -- ^ Name of crypto engine to use. | CurlSSLEngineDefault -- ^ Make crypto engine the default for crypto operations. | CurlDNSUseGlobalCache Bool -- ^ Have library uses its MT-unfriendly DNS global cache. | CurlDNSCacheTimeout Long -- ^ Number of seconds to cache results of DNS lookups in memory. | CurlPreQuote [String] -- ^ FTP commands to issue after connection and transfer mode has been set. | CurlDebugFunction DebugFunction -- ^ callback to catch and report transfer operations. | CurlDebugData (Ptr ()) -- ^ state argument to pass to debug callback. | CurlCookieSession Bool -- ^ Signal the start of a cookie session, ignoring previous session cookies. | CurlCAPath FilePath -- ^ Directory holding CA certificates; used when verifying peer certificate. | CurlBufferSize Long -- ^ Turn (down, presumably) the buffers the received data is chunked up into (and reported to the WriteFunction.) A hint, library is free to ignore. | CurlNoSignal Bool -- ^ Turn off use of signals internally. | CurlShare (Ptr ()) -- ^ Share handles are used for sharing data among concurrent Curl objects. | CurlProxyType Long -- ^ What type of proxy to use. | CurlEncoding String -- ^ What to report in the Accept-Encoding: header | CurlPrivate (Ptr ()) -- ^ Data associated with a Curl handle. | CurlHttp200Aliases String -- ^ Alternatives to standard 200 OK response strings; whatever it takes, I suppose. | CurlUnrestrictedAuth Bool -- ^ Pass on user:pass when following redirects. | CurlFtppUseEPRT Bool -- ^ For active FTP downloads, try using EPRT command over LPRT. | CurlHttpAuth [HttpAuth] -- ^ State your authentication preferences. | CurlSSLCtxFunction SSLCtxtFunction -- ^ callback to handle setting up SSL connections; have the power to abort them. | CurlSSLCtxData (Ptr ()) -- ^ state argument to pass into the above callback. | CurlFtpCreateMissingDirs Bool -- ^ Have remote directories be created if not already there | CurlProxyAuth [HttpAuth] -- ^ What preferred authentication schemes to use wrt. proxy. | CurlFtpResponseTimeout Long -- ^ max number of seconds to wait for remote server to ACK commands. | CurlIPResolve Long -- ^ Whether to resolve wrt IPv4 or IPv6. | CurlMaxFileSize Long -- ^ Limit the number of bytes you're willing to download. | CurlInFileSizeLarge LLong -- ^ Wider alternative of option giving upper bound of uploaded content (-1 => unknown.) | CurlResumeFromLarge LLong -- ^ Wider alternative for specifying initial transfer offset. | CurlMaxFileSizeLarge LLong -- ^ Wider alternative for specifying max download size. | CurlNetrcFile FilePath -- ^ Path to user\'s .netrc | CurlFtpSSL Long -- ^ Try enabling the use of SSL for FTP control connections and\/or transfers. | CurlPostFieldSizeLarge LLong -- ^ Size of data to POST; if unspecified (or -1), curl uses strlen(). | CurlTCPNoDelay Bool -- ^ Turn on or off the TCP\/IP NODELAY option. | CurlFtpSSLAuth Long -- ^ Twiddle if TLS or SSL is used. | CurlIOCTLFunction (Ptr ()) -- ^ somewhat obscure callback for handling read stream resets. | CurlIOCTLData (Ptr ()) -- ^ state argument to the above. | CurlFtpAccount String -- ^ The string to use when server asks for account info. | CurlCookieList String -- ^ Cookie string to pass cookie engine; "ALL" scrubs all cookie info; "SESS" scrubs session ones. | CurlIgnoreContentLength Bool -- ^ If Content-Length: values are troublesome (wrong, perhaps?), use this option to ignore using them as guidance. | CurlFtpSkipPASVIP Bool -- ^ Ignore IP address in 227 responses. | CurlFtpFileMethod Long -- ^ How to navigate to a file on the remote server (single, multiple CWDs). | CurlLocalPort Port -- ^ What local port to use for established connection. | CurlLocalPortRange Port -- ^ Number of attempts at finding local ports (using LocalPort as initial base.) | CurlConnectOnly Bool -- ^ If enabled, perform all steps up until actual transfer. -- next three for completeness. | CurlConvFromNetworkFunction (Ptr ()) -- ^ callback for doing character translations from network format. | CurlConvToNetworkFunction (Ptr ()) -- ^ callback for doing character translations to network format. | CurlConvFromUtf8Function (Ptr ()) -- ^ callback for translating UTF8 into host encoding. | CurlMaxSendSpeedLarge LLong -- ^ Specifies throttle value for outgoing data. | CurlMaxRecvSpeedLarge LLong -- ^ Specifies throttle for incoming data. | CurlFtpAlternativeToUser String -- ^ Alternative (to user:pass) for FTP authentication; weird. | CurlSockOptFunction (Ptr ()) -- ^ callback that's injected between socket creation and connection. | CurlSockOptData (Ptr ()) -- ^ state argument to the above. | CurlSSLSessionIdCache Bool -- ^ Enable the SSL session id cache; default is on, so use this to disable. | CurlSSHAuthTypes [SSHAuthType] -- ^ SSH authentication methods to use. | CurlSSHPublicKeyFile FilePath -- ^ Path to file holding user's SSH public key. | CurlSSHPrivateKeyFile FilePath -- ^ Path to file holding user's SSH private key. | CurlFtpSSLCCC Bool -- ^ Send CCC command after FTP connection has been authenticated. | CurlTimeoutMS Long -- ^ Max number of milliseconds that a transfer may take. | CurlConnectTimeoutMS Long -- ^ Max number of milliseconds that a connection attempt may take to complete. | CurlHttpTransferDecoding Bool -- ^ Disable transfer decoding; if disabled, curl will turn off chunking. | CurlHttpContentDecoding Bool -- ^ Disable content decoding, getting the raw bits. -- sync'ed wrt 7.19.2 | CurlNewFilePerms Long | CurlNewDirectoryPerms Long | CurlPostRedirect Bool -- no support for open socket callbacks/function overrides. | CurlSSHHostPublicKeyMD5 String | CurlCopyPostFields Bool | CurlProxyTransferMode Long -- no support for seeking in the input stream. | CurlCRLFile FilePath | CurlIssuerCert FilePath | CurlAddressScope Long | CurlCertInfo Long | CurlUserName String | CurlUserPassword String | CurlProxyUser String | CurlProxyPassword String instance Show CurlOption where show x = showCurlOption x data HttpVersion = HttpVersionNone | HttpVersion10 | HttpVersion11 deriving ( Enum,Show ) data TimeCond = TimeCondNone | TimeCondIfModSince | TimeCondIfUnmodSince | TimeCondLastMode deriving ( Enum, Show ) data NetRcOption = NetRcIgnored | NetRcOptional | NetRcRequired deriving ( Enum, Show ) data HttpAuth = HttpAuthNone | HttpAuthBasic | HttpAuthDigest | HttpAuthGSSNegotiate | HttpAuthNTLM | HttpAuthAny | HttpAuthAnySafe deriving ( Enum, Show ) toHttpAuthMask :: [HttpAuth] -> Long toHttpAuthMask [] = 0 toHttpAuthMask (x:xs) = let vs = toHttpAuthMask xs in case x of HttpAuthNone -> vs HttpAuthBasic -> 0x1 .|. vs HttpAuthDigest -> 0x2 .|. vs HttpAuthGSSNegotiate -> 0x4 .|. vs HttpAuthNTLM -> 0x8 .|. vs HttpAuthAny -> (complement 0) .|. vs HttpAuthAnySafe -> (complement 1) .|. vs data SSHAuthType = SSHAuthAny | SSHAuthNone | SSHAuthPublickey | SSHAuthPassword | SSHAuthHost | SSHAuthKeyboard deriving ( Show ) toSSHAuthMask :: [SSHAuthType] -> Long toSSHAuthMask [] = 0 toSSHAuthMask (x:xs) = let vs = toSSHAuthMask xs in case x of SSHAuthAny -> (complement 0) .|. vs SSHAuthNone -> vs SSHAuthPublickey -> 1 .|. vs SSHAuthPassword -> 2 .|. vs SSHAuthHost -> 4 .|. vs SSHAuthKeyboard -> 8 .|. vs type WriteFunction = Ptr CChar -- pointer to external buffer holding data -> CInt -- width (in bytes) of each item -> CInt -- number of items -> Ptr () -- state argument (file pointer etc.) -> IO CInt -- number of bytes written. type ReadFunction = Ptr CChar -- pointer to external buffer to fill in. -> CInt -- width (in bytes) of each item -> CInt -- number of items -> Ptr () -- state argument (file pointer etc.) -> IO (Maybe CInt) -- how many bytes was copied into buffer; Nothing => abort. type ReadFunctionPrim = Ptr CChar -> CInt -> CInt -> Ptr () -> IO CInt type ProgressFunction = Ptr () -- state argument -> Double -- expected download totals -> Double -- download totals so far -> Double -- expected upload totals -> Double -- upload totals so far -> IO CInt -- not sure; 0 is a good one. type DebugFunction = Curl -- connection handle -> DebugInfo -- type of call -> Ptr CChar -- data buffer -> CInt -- length of buffer -> Ptr () -- state argument -> IO () -- always 0 data DebugInfo = InfoText | InfoHeaderIn | InfoHeaderOut | InfoDataIn | InfoDataOut | InfoSslDataIn | InfoSslDataOut deriving ( Eq, Enum ) type DebugFunctionPrim = CurlH -- connection handle -> CInt -- type of call -> Ptr CChar -- data buffer -> CInt -- length of buffer -> Ptr () -- state argument -> IO CInt -- always 0 type SSLCtxtFunction = CurlH -- connection handle -> Ptr () -- the SSL_CTX handle -> Ptr () -- state argument -> IO CInt curl_readfunc_abort :: CInt curl_readfunc_abort = 0x10000000 baseLong :: Int baseLong = 0 baseObject :: Int baseObject = 10000 baseFunction :: Int baseFunction = 20000 baseOffT :: Int baseOffT = 30000 unmarshallOption :: Unmarshaller a -> CurlOption -> IO a unmarshallOption um c = let l = (baseLong+) o = (baseObject+) f = (baseFunction+) off = (baseOffT+) in case c of CurlFileObj x -> u_ptr um (o 1) x CurlURL x -> u_string um (o 2) x CurlPort x -> u_long um (l 3) x CurlProxy x -> u_string um (o 4) x CurlUserPwd x -> u_string um (o 5) x CurlProxyUserPwd x -> u_string um (o 6) x CurlRange x -> u_string um (o 7) x CurlInFile x -> u_string um (o 9) x CurlErrorBuffer x -> u_cptr um (o 10) x CurlWriteFunction x -> u_writeFun um (f 11) x CurlReadFunction x -> u_readFun um (f 12) x CurlTimeout x -> u_long um (l 13) x CurlInFileSize x -> u_long um (l 14) x CurlPostFields x -> u_string um (o 15) (concat $ intersperse "&" x) CurlReferer x -> u_string um (o 16) x CurlFtpPort x -> u_string um (o 17) x CurlUserAgent x -> u_string um (o 18) x CurlLowSpeed x -> u_long um (l 19) x CurlLowSpeedTime x -> u_long um (l 20) x CurlResumeFrom x -> u_long um (l 21) x CurlCookie x -> u_string um (o 22) x CurlHttpHeaders x -> u_strings um (o 23) x CurlHttpPost x -> u_posts um (o 24) x CurlSSLCert x -> u_string um (o 25) x CurlSSLPassword x -> u_string um (o 26) x CurlSSLKeyPassword x -> u_string um (o 26) x -- yes, duplicate. CurlCRLF x -> u_bool um (l 27) x CurlQuote x -> u_strings um (o 28) x CurlWriteHeader x -> u_ptr um (o 29) x CurlCookieFile x -> u_string um (o 31) x CurlSSLVersion x -> u_long um (l 32) x CurlTimeCondition x -> u_enum um (l 33) x CurlTimeValue x -> u_long um (l 34) x CurlCustomRequest x -> u_string um (o 36) x -- CurlStderr x -> u_string um (o 37) x CurlPostQuote x -> u_strings um (o 39) x CurlWriteInfo x -> u_string um (o 40) x CurlVerbose x -> u_bool um (l 41) x CurlHeader x -> u_bool um (l 42) x CurlNoProgress x -> u_bool um (l 43) x CurlNoBody x -> u_bool um (l 44) x CurlFailOnError x -> u_bool um (l 45) x CurlUpload x -> u_bool um (l 46) x CurlPost x -> u_bool um (l 47) x CurlFtpListOnly x -> u_bool um (l 48) x CurlFtpAppend x -> u_bool um (l 50) x CurlUseNetRc x -> u_enum um (l 51) x CurlFollowLocation x -> u_bool um (l 52) x CurlTransferTextASCII x -> u_bool um (l 53) x CurlPut x -> u_bool um (l 54) x CurlProgressFunction x -> u_progressFun um (f 56) x CurlProgressData x -> u_ptr um (o 57) x CurlAutoReferer x -> u_bool um (l 58) x CurlProxyPort x -> u_long um (l 59) x CurlPostFieldSize x -> u_long um (l 60) x CurlHttpProxyTunnel x -> u_bool um (l 61) x CurlInterface x -> u_string um (o 62) x CurlKrb4Level x -> u_string um (o 63) x CurlSSLVerifyPeer x -> u_bool um (l 64) x CurlCAInfo x -> u_string um (o 65) x CurlMaxRedirs x -> u_long um (l 68) x CurlFiletime x -> u_bool um (l 69) x CurlTelnetOptions x -> u_strings um (o 70) x CurlMaxConnects x -> u_long um (l 71) x CurlClosePolicy x -> u_long um (l 72) x CurlFreshConnect x -> u_bool um (l 74) x CurlForbidReuse x -> u_bool um (l 75) x CurlRandomFile x -> u_string um (o 76) x CurlEgdSocket x -> u_string um (o 77) x CurlConnectTimeout x -> u_long um (l 78) x CurlHeaderFunction x -> u_writeFun um (f 79) x CurlHttpGet x -> u_bool um (l 80) x CurlSSLVerifyHost x -> u_long um (l 81) x CurlCookieJar x -> u_string um (o 82) x CurlSSLCipherList x -> u_string um (o 83) x -- a string (or a l-list of them)? CurlHttpVersion x -> u_enum um (l 84) x CurlFtpUseEPSV x -> u_bool um (l 85) x CurlSSLCertType x -> u_string um (o 86) x CurlSSLKey x -> u_string um (o 87) x CurlSSLKeyType x -> u_string um (o 88) x CurlSSLEngine x -> u_string um (o 89) x CurlSSLEngineDefault -> u_bool um (l 90) True CurlDNSUseGlobalCache x -> u_bool um (l 91) x CurlDNSCacheTimeout x -> u_long um (l 92) x CurlPreQuote x -> u_strings um (o 93) x CurlDebugFunction x -> u_debugFun um (f 94) x CurlDebugData x -> u_ptr um (o 95) x CurlCookieSession x -> u_bool um (l 96) x CurlCAPath x -> u_string um (o 97) x CurlBufferSize x -> u_long um (l 98) x CurlNoSignal x -> u_bool um (l 99) x CurlShare x -> u_ptr um (o 100) x CurlProxyType x -> u_enum um (l 101) x CurlEncoding x -> u_string um (o 102) x CurlPrivate x -> u_ptr um (o 103) x CurlHttp200Aliases x -> u_string um (o 104) x -- correct? CurlUnrestrictedAuth x -> u_bool um (l 105) x CurlFtppUseEPRT x -> u_bool um (l 106) x CurlHttpAuth xs -> u_long um (l 107) (toHttpAuthMask xs) CurlSSLCtxFunction x -> u_sslctxt um (f 108) x CurlSSLCtxData x -> u_ptr um (o 109) x CurlFtpCreateMissingDirs x -> u_bool um (l 110) x CurlProxyAuth x -> u_long um (l 111) (toHttpAuthMask x) CurlFtpResponseTimeout x -> u_long um (l 112) x CurlIPResolve x -> u_long um (l 113) x CurlMaxFileSize x -> u_long um (l 114) x CurlInFileSizeLarge x -> u_llong um (off 115) x CurlResumeFromLarge x -> u_llong um (off 116) x CurlMaxFileSizeLarge x -> u_llong um (off 117) x CurlNetrcFile x -> u_string um (o 118) x CurlFtpSSL x -> u_enum um (l 119) x CurlPostFieldSizeLarge x -> u_llong um (off 120) x CurlTCPNoDelay x -> u_bool um (l 121) x CurlFtpSSLAuth x -> u_enum um (l 129) x CurlIOCTLFunction x -> u_ioctl_fun um (f 130) x CurlIOCTLData x -> u_ptr um (o 131) x CurlFtpAccount x -> u_string um (o 134) x CurlCookieList x -> u_string um (o 135) x CurlIgnoreContentLength x -> u_bool um (l 136) x CurlFtpSkipPASVIP x -> u_bool um (l 137) x CurlFtpFileMethod x -> u_enum um (l 138) x CurlLocalPort x -> u_long um (l 139) x CurlLocalPortRange x -> u_long um (l 140) x CurlConnectOnly x -> u_bool um (l 141) x CurlConvFromNetworkFunction x -> u_convFromNetwork um (f 142) x CurlConvToNetworkFunction x -> u_convToNetwork um (f 143) x CurlConvFromUtf8Function x -> u_convFromUtf8 um (f 144) x CurlMaxSendSpeedLarge x -> u_llong um (off 145) x CurlMaxRecvSpeedLarge x -> u_llong um (off 146) x CurlFtpAlternativeToUser x -> u_string um (o 147) x CurlSockOptFunction x -> u_sockoptFun um (f 148) x CurlSockOptData x -> u_ptr um (o 149) x CurlSSLSessionIdCache x -> u_bool um (l 150) x CurlSSHAuthTypes xs -> u_long um (l 151) (toSSHAuthMask xs) CurlSSHPublicKeyFile x -> u_string um (o 152) x CurlSSHPrivateKeyFile x -> u_string um (o 153) x CurlFtpSSLCCC x -> u_bool um (l 154) x CurlTimeoutMS x -> u_long um (l 155) x CurlConnectTimeoutMS x -> u_long um (l 156) x CurlHttpTransferDecoding x -> u_bool um (l 157) x CurlHttpContentDecoding x -> u_bool um (l 158) x CurlNewFilePerms x -> u_long um (l 159) x CurlNewDirectoryPerms x -> u_long um (l 160) x CurlPostRedirect x -> u_bool um (l 161) x CurlSSHHostPublicKeyMD5 x -> u_string um (l 162) x CurlCopyPostFields x -> u_bool um (l 165) x CurlProxyTransferMode x -> u_long um (l 166) x CurlCRLFile x -> u_string um (l 169) x CurlIssuerCert x -> u_string um (l 170) x CurlAddressScope x -> u_long um (l 171) x CurlCertInfo x -> u_long um (l 172) x CurlUserName x -> u_string um (l 173) x CurlUserPassword x -> u_string um (l 174) x CurlProxyUser x -> u_string um (l 175) x CurlProxyPassword x -> u_string um (l 176) x data Unmarshaller a = Unmarshaller { u_long :: Int -> Long -> IO a , u_llong :: Int -> LLong -> IO a , u_string :: Int -> String -> IO a , u_strings :: Int -> [String] -> IO a , u_ptr :: Int -> Ptr () -> IO a , u_writeFun :: Int -> WriteFunction -> IO a , u_readFun :: Int -> ReadFunction -> IO a , u_progressFun :: Int -> ProgressFunction -> IO a , u_debugFun :: Int -> DebugFunction -> IO a , u_posts :: Int -> [HttpPost] -> IO a , u_sslctxt :: Int -> SSLCtxtFunction -> IO a , u_ioctl_fun :: Int -> Ptr () -> IO a , u_convFromNetwork :: Int -> Ptr () -> IO a , u_convToNetwork :: Int -> Ptr () -> IO a , u_convFromUtf8 :: Int -> Ptr () -> IO a , u_sockoptFun :: Int -> Ptr () -> IO a } verboseUnmarshaller :: Unmarshaller a -> Unmarshaller a verboseUnmarshaller u = let two m f x y = putStrLn m >> f u x y twoS m f x y = putStrLn (m ++ ": " ++ show (x,y)) >> f u x y in u { u_long = twoS "u_long" u_long , u_llong = twoS "u_llong" u_llong , u_string = twoS "u_string" u_string , u_strings = twoS "u_strings" u_strings , u_ptr = twoS "u_ptr" u_ptr , u_writeFun = two "u_writeFun" u_writeFun , u_readFun = two "u_readFun" u_readFun , u_progressFun = two "u_progressFun" u_progressFun , u_debugFun = two "u_debugFun" u_debugFun , u_posts = two "u_posts" u_posts , u_sslctxt = two "u_sslctxt" u_sslctxt , u_ioctl_fun = two "u_ioctl_fun" u_ioctl_fun , u_convFromNetwork = twoS "u_convFromNetwork" u_convFromNetwork , u_convToNetwork = twoS "u_convToNetwork" u_convToNetwork , u_convFromUtf8 = twoS "u_convFromUtf8" u_convFromUtf8 , u_sockoptFun = twoS "u_sockoptFun" u_sockoptFun } u_bool :: Unmarshaller a -> Int -> Bool -> IO a u_bool um x b = u_long um x (if b then 1 else 0) u_enum :: Enum b => Unmarshaller a -> Int -> b -> IO a u_enum um x b = u_long um x (fromIntegral $ fromEnum b) u_cptr :: Unmarshaller a -> Int -> Ptr CChar -> IO a u_cptr um x p = u_ptr um x (castPtr p) showCurlOption :: CurlOption -> String showCurlOption o = case o of CurlFileObj p -> "CurlFileObj " ++ show p CurlURL u -> "CurlURL " ++ show u CurlPort p -> "CurlPort " ++ show p CurlProxy s -> "CurlProxy " ++ show s CurlUserPwd p -> "CurlUserPwd " ++ show p CurlProxyUserPwd p -> "CurlProxyUserPwd " ++ show p CurlRange p -> "CurlRange " ++ show p CurlInFile p -> "CurlInFile " ++ show p CurlErrorBuffer p -> "CurlErrorBuffer " ++ show p CurlWriteFunction{} -> "CurlWriteFunction " CurlReadFunction{} -> "CurlReadFunction " CurlTimeout l -> "CurlTimeout " ++ show l CurlInFileSize l -> "CurlInFileSize " ++ show l CurlPostFields p -> "CurlPostFields " ++ show p CurlReferer p -> "CurlReferer " ++ show p CurlFtpPort p -> "CurlFtpPort " ++ show p CurlUserAgent p -> "CurlUserAgent " ++ show p CurlLowSpeed p -> "CurlLowSpeed " ++ show p CurlLowSpeedTime p -> "CurlLowSpeedTime " ++ show p CurlResumeFrom p -> "CurlResumeFrom " ++ show p CurlCookie p -> "CurlCookie " ++ show p CurlHttpHeaders p -> "CurlHttpHeaders " ++ show p CurlHttpPost p -> "CurlHttpPost " ++ show p CurlSSLCert p -> "CurlSSLCert " ++ show p CurlSSLPassword p -> "CurlSSLPassword " ++ show p CurlSSLKeyPassword p -> "CurlSSLKeyPassword " ++ show p CurlCRLF p -> "CurlCRLF " ++ show p CurlQuote p -> "CurlQuote " ++ show p CurlWriteHeader p -> "CurlWriteHeader " ++ show p CurlCookieFile p -> "CurlCookieFile " ++ show p CurlSSLVersion p -> "CurlSSLVersion " ++ show p CurlTimeCondition p -> "CurlTimeCondition " ++ show p CurlTimeValue p -> "CurlTimeValue " ++ show p CurlCustomRequest p -> "CurlCustomRequest " ++ show p CurlPostQuote p -> "CurlPostQuote " ++ show p CurlWriteInfo p -> "CurlWriteInfo " ++ show p CurlVerbose p -> "CurlVerbose " ++ show p CurlHeader p -> "CurlHeader " ++ show p CurlNoProgress p -> "CurlNoProgress " ++ show p CurlNoBody p -> "CurlNoBody " ++ show p CurlFailOnError p -> "CurlFailOnError " ++ show p CurlUpload p -> "CurlUpload " ++ show p CurlPost p -> "CurlPost " ++ show p CurlFtpListOnly p -> "CurlFtpListOnly " ++ show p CurlFtpAppend p -> "CurlFtpAppend " ++ show p CurlUseNetRc p -> "CurlUseNetRc " ++ show p CurlFollowLocation p -> "CurlFollowLocation " ++ show p CurlTransferTextASCII p -> "CurlTransferTextASCII " ++ show p CurlPut p -> "CurlPut " ++ show p CurlProgressFunction{} -> "CurlProgressFunction " CurlProgressData p -> "CurlProgressData " ++ show p CurlAutoReferer p -> "CurlAutoReferer " ++ show p CurlProxyPort p -> "CurlProxyPort " ++ show p CurlPostFieldSize p -> "CurlPostFieldSize " ++ show p CurlHttpProxyTunnel p -> "CurlHttpProxyTunnel " ++ show p CurlInterface p -> "CurlInterface " ++ show p CurlKrb4Level p -> "CurlKrb4Level " ++ show p CurlSSLVerifyPeer p -> "CurlSSLVerifyPeer " ++ show p CurlCAInfo p -> "CurlCAInfo " ++ show p CurlMaxRedirs p -> "CurlMaxRedirs " ++ show p CurlFiletime p -> "CurlFiletime " ++ show p CurlTelnetOptions p -> "CurlTelnetOptions " ++ show p CurlMaxConnects p -> "CurlMaxConnects " ++ show p CurlClosePolicy p -> "CurlClosePolicy " ++ show p CurlFreshConnect p -> "CurlFreshConnect " ++ show p CurlForbidReuse p -> "CurlForbidReuse " ++ show p CurlRandomFile p -> "CurlRandomFile " ++ show p CurlEgdSocket p -> "CurlEgdSocket " ++ show p CurlConnectTimeout p -> "CurlConnectTimeout " ++ show p CurlHeaderFunction{} -> "CurlHeaderFunction " CurlHttpGet p -> "CurlHttpGet " ++ show p CurlSSLVerifyHost p -> "CurlSSLVerifyHost " ++ show p CurlCookieJar p -> "CurlCookieJar " ++ show p CurlSSLCipherList p -> "CurlSSLCipherList " ++ show p CurlHttpVersion p -> "CurlHttpVersion " ++ show p CurlFtpUseEPSV p -> "CurlFtpUseEPSV " ++ show p CurlSSLCertType p -> "CurlSSLCertType " ++ show p CurlSSLKey p -> "CurlSSLKey " ++ show p CurlSSLKeyType p -> "CurlSSLKeyType " ++ show p CurlSSLEngine p -> "CurlSSLEngine " ++ show p CurlSSLEngineDefault-> "CurlSSLEngineDefault" CurlDNSUseGlobalCache p -> "CurlDNSUseGlobalCache " ++ show p CurlDNSCacheTimeout p -> "CurlDNSCacheTimeout " ++ show p CurlPreQuote p -> "CurlPreQuote " ++ show p CurlDebugFunction{} -> "CurlDebugFunction " CurlDebugData p -> "CurlDebugData " ++ show p CurlCookieSession p -> "CurlCookieSession " ++ show p CurlCAPath p -> "CurlCAPath " ++ show p CurlBufferSize p -> "CurlBufferSize " ++ show p CurlNoSignal p -> "CurlNoSignal " ++ show p CurlShare p -> "CurlShare " ++ show p CurlProxyType p -> "CurlProxyType " ++ show p CurlEncoding p -> "CurlEncoding " ++ show p CurlPrivate p -> "CurlPrivate " ++ show p CurlHttp200Aliases p -> "CurlHttp200Aliases " ++ show p CurlUnrestrictedAuth p -> "CurlUnrestrictedAuth " ++ show p CurlFtppUseEPRT p -> "CurlFtppUseEPRT " ++ show p CurlHttpAuth p -> "CurlHttpAuth " ++ show p CurlSSLCtxFunction{} -> "CurlSSLCtxFunction " CurlSSLCtxData p -> "CurlSSLCtxData " ++ show p CurlFtpCreateMissingDirs p -> "CurlFtpCreateMissingDirs " ++ show p CurlProxyAuth p -> "CurlProxyAuth " ++ show p CurlFtpResponseTimeout p -> "CurlFtpResponseTimeout " ++ show p CurlIPResolve p -> "CurlIPResolve " ++ show p CurlMaxFileSize p -> "CurlMaxFileSize " ++ show p CurlInFileSizeLarge p -> "CurlInFileSizeLarge " ++ show p CurlResumeFromLarge p -> "CurlResumeFromLarge " ++ show p CurlMaxFileSizeLarge p -> "CurlMaxFileSizeLarge " ++ show p CurlNetrcFile p -> "CurlNetrcFile " ++ show p CurlFtpSSL p -> "CurlFtpSSL " ++ show p CurlPostFieldSizeLarge p -> "CurlPostFieldSizeLarge " ++ show p CurlTCPNoDelay p -> "CurlTCPNoDelay " ++ show p CurlFtpSSLAuth p -> "CurlFtpSSLAuth " ++ show p CurlIOCTLFunction p -> "CurlIOCTLFunction " ++ show p CurlIOCTLData p -> "CurlIOCTLData " ++ show p CurlFtpAccount p -> "CurlFtpAccount " ++ show p CurlCookieList p -> "CurlCookieList " ++ show p CurlIgnoreContentLength p -> "CurlIgnoreContentLength " ++ show p CurlFtpSkipPASVIP p -> "CurlFtpSkipPASVIP " ++ show p CurlFtpFileMethod p -> "CurlFtpFileMethod " ++ show p CurlLocalPort p -> "CurlLocalPort " ++ show p CurlLocalPortRange p -> "CurlLocalPortRange " ++ show p CurlConnectOnly p -> "CurlConnectOnly " ++ show p CurlConvFromNetworkFunction p -> "CurlConvFromNetworkFunction " ++ show p CurlConvToNetworkFunction p -> "CurlConvToNetworkFunction " ++ show p CurlConvFromUtf8Function p -> "CurlConvFromUtf8Function " ++ show p CurlMaxSendSpeedLarge p -> "CurlMaxSendSpeedLarge " ++ show p CurlMaxRecvSpeedLarge p -> "CurlMaxRecvSpeedLarge " ++ show p CurlFtpAlternativeToUser p -> "CurlFtpAlternativeToUser " ++ show p CurlSockOptFunction p -> "CurlSockOptFunction " ++ show p CurlSockOptData p -> "CurlSockOptData " ++ show p CurlSSLSessionIdCache p -> "CurlSSLSessionIdCache " ++ show p CurlSSHAuthTypes p -> "CurlSSHAuthTypes " ++ show p CurlSSHPublicKeyFile p -> "CurlSSHPublicKeyFile " ++ show p CurlSSHPrivateKeyFile p -> "CurlSSHPrivateKeyFile " ++ show p CurlFtpSSLCCC p -> "CurlFtpSSLCCC " ++ show p CurlTimeoutMS p -> "CurlTimeoutMS " ++ show p CurlConnectTimeoutMS p -> "CurlConnectTimeoutMS " ++ show p CurlHttpTransferDecoding p -> "CurlHttpTransferDecoding " ++ show p CurlHttpContentDecoding p -> "CurlHttpContentDecoding " ++ show p CurlNewFilePerms l -> "CurlNewFilePerms " ++ show l CurlNewDirectoryPerms p -> "CurlNewDirectoryPerms " ++ show p CurlPostRedirect p -> "CurlPostRedirect " ++ show p CurlSSHHostPublicKeyMD5 p -> "CurlSSHHostPublicKeyMD5 " ++ show p CurlCopyPostFields p -> "CurlCopyPostFields " ++ show p CurlProxyTransferMode p -> "CurlProxyTransferMode " ++ show p CurlCRLFile p -> "CurlCRLFile " ++ show p CurlIssuerCert p -> "CurlIssuerCert " ++ show p CurlAddressScope p -> "CurlAddressScope " ++ show p CurlCertInfo p -> "CurlCertInfo " ++ show p CurlUserName p -> "CurlUserName " ++ show p CurlUserPassword p -> "CurlUserPassword " ++ show p CurlProxyUser p -> "CurlProxyUser " ++ show p CurlProxyPassword p -> "CurlProxyPassword " ++ show p curl-1.3.8/Network/Curl/Info.hs0000644000000000000000000001267412050542035014451 0ustar0000000000000000{-# LANGUAGE ForeignFunctionInterface #-} -------------------------------------------------------------------- -- | -- Module : Network.Curl.Info -- Copyright : (c) 2007-2009, Galois Inc -- License : BSD3 -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: portable -- -- Accessing the properties of a curl handle's current state\/request. -- -------------------------------------------------------------------- module Network.Curl.Info ( Info(..) , InfoValue(..) , getInfo -- :: Curl -> Info -> IO InfoValue ) where import Network.Curl.Types import Network.Curl.Code import Control.Monad import Foreign.Ptr import Foreign.Marshal.Alloc import Foreign.Storable import Foreign.C data Info = EffectiveUrl | ResponseCode | TotalTime | NameLookupTime | ConnectTime | PreTransferTime | SizeUpload | SizeDownload | SpeedDownload | SpeedUpload | HeaderSize | RequestSize | SslVerifyResult | Filetime | ContentLengthDownload | ContentLengthUpload | StartTransferTime | ContentType | RedirectTime | RedirectCount | Private | HttpConnectCode | HttpAuthAvail | ProxyAuthAvail | OSErrno | NumConnects | SslEngines | CookieList | LastSocket | FtpEntryPath deriving (Show,Enum,Bounded) data InfoValue = IString String | ILong Long | IDouble Double | IList [String] instance Show InfoValue where show k = case k of IString s -> s ILong l -> show l IDouble d -> show d IList ss -> show ss {- stringTag :: Long stringTag = 0x100000 -- CURLINFO_STRING longTag :: Long longTag = 0x200000 -- CURLINFO_LONG doubleTag :: Long doubleTag = 0x300000 -- CURLINFO_DOUBLE slistTag :: Long slistTag = 0x400000 -- CURLINFO_SLIST -} {- unused, unexported infoMask :: Long infoMask = 0x0fffff -- CURLINFO_MASK infoTypeMask :: Long infoTypeMask = 0xf00000 -- CURLINFO_TYPEMASK -} getInfo :: Curl -> Info -> IO InfoValue getInfo h i = do case i of EffectiveUrl -> getInfoStr h (show i) 1 ResponseCode -> getInfoLong h (show i) 2 TotalTime -> getInfoDouble h (show i) 3 NameLookupTime -> getInfoDouble h (show i) 4 ConnectTime -> getInfoDouble h (show i) 5 PreTransferTime -> getInfoDouble h (show i) 6 SizeUpload -> getInfoDouble h (show i) 7 SizeDownload -> getInfoDouble h (show i) 8 SpeedDownload -> getInfoDouble h (show i) 9 SpeedUpload -> getInfoDouble h (show i) 10 HeaderSize -> getInfoLong h (show i) 11 RequestSize -> getInfoLong h (show i) 12 SslVerifyResult -> getInfoLong h (show i) 13 Filetime -> getInfoLong h (show i) 14 ContentLengthDownload -> getInfoDouble h (show i) 15 ContentLengthUpload -> getInfoDouble h (show i) 16 StartTransferTime -> getInfoDouble h (show i) 17 ContentType -> getInfoStr h (show i) 18 RedirectTime -> getInfoDouble h (show i) 19 RedirectCount -> getInfoLong h (show i) 20 Private -> getInfoStr h (show i) 21 HttpConnectCode -> getInfoLong h (show i) 22 HttpAuthAvail -> getInfoLong h (show i) 23 ProxyAuthAvail -> getInfoLong h (show i) 24 OSErrno -> getInfoLong h (show i) 25 NumConnects -> getInfoLong h (show i) 26 SslEngines -> getInfoSList h (show i) 27 CookieList -> getInfoSList h (show i) 28 LastSocket -> getInfoLong h (show i) 29 FtpEntryPath -> getInfoStr h (show i) 30 getInfoStr :: Curl -> String -> Long -> IO InfoValue getInfoStr h loc tg = alloca $ \ ps -> do rc <- curlPrim h $ \_ p -> easy_getinfo_str p tg ps case rc of 0 -> do s <- peek ps if s == nullPtr then return (IString "") else liftM IString $ peekCString s _ -> fail ("getInfo{"++loc ++ "}: " ++ show (toCode rc)) getInfoLong :: Curl -> String -> Long -> IO InfoValue getInfoLong h loc tg = alloca $ \ pl -> do rc <- curlPrim h $ \_ p -> easy_getinfo_long p tg pl case rc of 0 -> do l <- peek pl return (ILong l) _ -> fail ("getInfo{"++loc ++ "}: " ++ show (toCode rc)) getInfoDouble :: Curl -> String -> Long -> IO InfoValue getInfoDouble h loc tg = alloca $ \ pd -> do rc <- curlPrim h $ \_ p -> easy_getinfo_double p tg pd case rc of 0 -> do d <- peek pd return (IDouble d) _ -> fail ("getInfo{"++loc ++ "}: " ++ show (toCode rc)) getInfoSList :: Curl -> String -> Long -> IO InfoValue getInfoSList h loc tg = alloca $ \ ps -> do rc <- curlPrim h $ \_ p -> easy_getinfo_slist p tg ps case rc of 0 -> do p <- peek ps ls <- unmarshallList p return (IList ls) _ -> fail ("getInfo{"++loc ++ "}: " ++ show (toCode rc)) where unmarshallList ptr | ptr == nullPtr = return [] | otherwise = do ps <- peekByteOff ptr 0 s <- if ps == nullPtr then return "" else peekCString ps nx <- peekByteOff ptr (sizeOf nullPtr) ls <- unmarshallList nx return (s:ls) -- FFI decls foreign import ccall "curl_easy_getinfo_long" easy_getinfo_long :: CurlH -> Long -> Ptr Long -> IO CInt foreign import ccall "curl_easy_getinfo_string" easy_getinfo_str :: CurlH -> Long -> Ptr CString -> IO CInt foreign import ccall "curl_easy_getinfo_double" easy_getinfo_double :: CurlH -> Long -> Ptr Double -> IO CInt foreign import ccall "curl_easy_getinfo_slist" easy_getinfo_slist :: CurlH -> Long -> Ptr (Ptr (Ptr CChar)) -> IO CInt curl-1.3.8/Network/Curl/Easy.hs0000644000000000000000000001715512050542035014456 0ustar0000000000000000{-# LANGUAGE ForeignFunctionInterface #-} -------------------------------------------------------------------- -- | -- Module : Network.Curl.Easy -- Copyright : (c) Galois Inc 2007-2009 -- License : -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: portable -- -- Haskell binding to the libcurl \"easy\" API. -- The \"easy\" API provides a higher-level, easy-to-get-started calling -- interface to the library's wide range of features for interacting -- with HTTP\/FTP\/etc servers. -- -------------------------------------------------------------------- module Network.Curl.Easy ( initialize -- :: IO Curl , perform -- :: Curl -> IO CurlCode , setopt -- :: Curl -> CurlOption -> IO CurlCode , duphandle -- :: Curl -> IO Curl , reset -- :: Curl -> IO () , curl_global_init -- :: CInt -> IO CurlCode , curl_global_cleanup -- :: IO () , curl_version_number -- :: IO Int , curl_version_string -- :: IO String ) where import Network.Curl.Types import Network.Curl.Opts import Network.Curl.Code import Network.Curl.Post import Network.Curl.Debug import Data.IORef(IORef) import Foreign.Ptr import Foreign.Marshal.Alloc(free) import Foreign.C.Types import Foreign.C.String import Control.Monad import Data.Maybe -- | Initialise a curl instance initialize :: IO Curl initialize = do h <- easy_initialize mkCurl h -- XXX: Is running cleanup here OK? reset :: Curl -> IO () reset hh = curlPrim hh $ \r h -> easy_reset h >> runCleanup r duphandle :: Curl -> IO Curl duphandle hh = curlPrim hh $ \r h -> do h1 <- easy_duphandle h cleanup <- shareCleanup r mkCurlWithCleanup h1 cleanup setopt :: Curl -> CurlOption -> IO CurlCode setopt hh o = curlPrim hh $ \ r h -> unmarshallOption (easy_um r h) o where easy_um :: IORef OptionMap -> CurlH -> Unmarshaller CurlCode easy_um r h = Unmarshaller { u_long -- :: Int -> Long -> IO CurlCode = \ i x -> liftM toCode $ easy_setopt_long h i x , u_llong -- :: Int -> LLong -> IO CurlCode = \ i x -> liftM toCode $ easy_setopt_llong h i x , u_string -- :: Int -> String -> IO CurlCode = \ i x -> do debug $ "ALLOC: " ++ x c_x <- newCString x updateCleanup r i $ debug ("FREE: "++ x) >> free c_x liftM toCode $ easy_setopt_string h i c_x , u_strings -- :: Int -> [String] -> IO CurlCode = \ i x -> do debug ("ALLOC: " ++ show x) -- curl_slist_append will copy its string argument let addOne ip s = withCString s $ curl_slist_append ip ip <- foldM addOne nullPtr x updateCleanup r i $ debug ("FREE: " ++ show x) >> curl_slist_free ip liftM toCode $ easy_setopt_string h i (castPtr ip) , u_ptr -- :: Int -> Ptr () -> IO a = \ i x -> liftM toCode $ easy_setopt_ptr h i x , u_writeFun -- :: Int -> WriteFunction -> IO a = \ i x -> do debug "ALLOC: WRITER" fp <- mkWriter x updateCleanup r i $ debug "FREE: WRITER" >> freeHaskellFunPtr fp liftM toCode $ easy_setopt_wfun h i fp , u_readFun -- :: Int -> ReadFunction -> IO a = \ i x -> do let wrapResult f a b c d = do mb <- f a b c d return (fromMaybe curl_readfunc_abort mb) debug "ALLOC: READER" fp <- mkReader (wrapResult x) updateCleanup r i $ debug "FREE: READER" >> freeHaskellFunPtr fp liftM toCode $ easy_setopt_rfun h i fp , u_progressFun -- :: Int -> ProgressFunction -> IO a = \ i x -> do debug "ALLOC: PROGRESS" fp <- mkProgress x updateCleanup r i $ debug "FREE: PROGRESS" >> freeHaskellFunPtr fp liftM toCode $ easy_setopt_fptr h i fp , u_debugFun -- :: Int -> DebugFunction -> IO a = \ i debFun -> do let wrapFun fun _a b c d e = fun hh (toEnum (fromIntegral b)) c d e >> return 0 debug "ALLOC: DEBUG" fp <- mkDebugFun (wrapFun debFun) updateCleanup r i $ debug "FREE: DEBUG" >> freeHaskellFunPtr fp liftM toCode $ easy_setopt_fptr h i fp , u_posts -- :: Int -> [HttpPost] -> IO a = \ i x -> do debug "ALLOC: POSTS" p <- marshallPosts x updateCleanup r i $ debug "FREE: POSTS" >> curl_formfree p liftM toCode $ easy_setopt_ptr h i p , u_sslctxt -- :: Int -> SSLCtxtFunction -> IO a = \ i x -> do debug "ALLOC: SSL_FUN" p <- mkSslCtxtFun x updateCleanup r i $ debug "FREE: SSL_FUN" >> freeHaskellFunPtr p liftM toCode $ easy_setopt_fptr h i p , u_ioctl_fun -- :: Int -> Ptr () -> IO a = \ i x -> liftM toCode $ easy_setopt_ptr h i x , u_convFromNetwork -- :: Int -> Ptr () -> IO a = \ i x -> liftM toCode $ easy_setopt_ptr h i x , u_convToNetwork -- :: Int -> Ptr () -> IO a = \ i x -> liftM toCode $ easy_setopt_ptr h i x , u_convFromUtf8 -- :: Int -> Ptr () -> IO a = \ i x -> liftM toCode $ easy_setopt_ptr h i x , u_sockoptFun -- :: Int -> Ptr () -> IO a = \ i x -> liftM toCode $ easy_setopt_ptr h i x } perform :: Curl -> IO CurlCode perform hh = liftM toCode $ curlPrim hh $ \_ h -> easy_perform_prim h curl_global_init :: CInt -> IO CurlCode curl_global_init v = liftM toCode $ curl_global_init_prim v curl_version_number :: IO Int curl_version_number = do x <- curl_version_num return (fromIntegral x) curl_version_string :: IO String curl_version_string = do cs <- curl_version_str peekCString cs -- FFI decls foreign import ccall "curl_version_num" curl_version_num :: IO CInt foreign import ccall "curl_version_str" curl_version_str :: IO CString foreign import ccall "curl/easy.h curl_global_init" curl_global_init_prim :: CInt -> IO CInt foreign import ccall "curl/easy.h curl_global_cleanup" curl_global_cleanup :: IO () foreign import ccall "curl/easy.h curl_easy_init" easy_initialize :: IO CurlH foreign import ccall "curl/easy.h curl_easy_perform" easy_perform_prim :: CurlH -> IO CInt foreign import ccall "curl_easy_duphandle" easy_duphandle :: CurlH -> IO CurlH foreign import ccall "curl_easy_reset" easy_reset :: CurlH -> IO () foreign import ccall "curl_easy_setopt_long" easy_setopt_long :: CurlH -> Int -> Long -> IO CInt foreign import ccall "curl_easy_setopt_longlong" easy_setopt_llong :: CurlH -> Int -> LLong -> IO CInt foreign import ccall "curl_easy_setopt_string" easy_setopt_string :: CurlH -> Int -> Ptr CChar -> IO CInt foreign import ccall "curl_easy_setopt_ptr" easy_setopt_ptr :: CurlH -> Int -> Ptr a -> IO CInt foreign import ccall "curl_easy_setopt_ptr" easy_setopt_fptr :: CurlH -> Int -> FunPtr a -> IO CInt foreign import ccall "curl_easy_setopt_ptr" easy_setopt_wfun :: CurlH -> Int -> FunPtr WriteFunction -> IO CInt foreign import ccall "curl_easy_setopt_ptr" easy_setopt_rfun :: CurlH -> Int -> FunPtr ReadFunctionPrim -> IO CInt foreign import ccall "wrapper" mkWriter :: WriteFunction -> IO (FunPtr WriteFunction) foreign import ccall "wrapper" mkReader :: ReadFunctionPrim -> IO (FunPtr ReadFunctionPrim) foreign import ccall "wrapper" mkProgress :: ProgressFunction -> IO (FunPtr ProgressFunction) foreign import ccall "wrapper" mkDebugFun :: DebugFunctionPrim -> IO (FunPtr DebugFunctionPrim) foreign import ccall "wrapper" mkSslCtxtFun :: SSLCtxtFunction -> IO (FunPtr SSLCtxtFunction) curl-1.3.8/Network/Curl/Types.hs0000644000000000000000000001134312050542035014652 0ustar0000000000000000{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls, CPP #-} -------------------------------------------------------------------- -- | -- Module : Network.Curl.Types -- Copyright : (c) Galois Inc 2007-2009 -- License : BSD3 -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: portable -- -- Basic set of types for the Haskell curl binding, including the -- @Curl@ handle type which holds the C library stateful connection -- handle along with a set of cleanup actions tht should be performed -- upon shutting down the curl session. -- -------------------------------------------------------------------- module Network.Curl.Types ( CurlH, URLString, Port, Long, LLong, Slist_ , Curl, curlPrim, mkCurl, mkCurlWithCleanup , OptionMap, shareCleanup, runCleanup, updateCleanup ) where import Network.Curl.Debug import Foreign.Ptr import Foreign.ForeignPtr import Foreign.Concurrent ( addForeignPtrFinalizer ) import Data.Word import Control.Concurrent import Data.Maybe(fromMaybe) import qualified Data.IntMap as M import Data.IORef -- import System.IO data Curl_ type CurlH = Ptr Curl_ type URLString = String type Port = Long type Long = Word32 type LLong = Word64 data Slist_ data Curl = Curl { curlH :: MVar (ForeignPtr Curl_) -- libcurl is not thread-safe. , curlCleanup :: IORef OptionMap -- deallocate Haskell curl data } -- | Execute a "primitve" curl operation. -- NOTE: See warnings about the use of 'withForeginPtr'. curlPrim :: Curl -> (IORef OptionMap -> CurlH -> IO a) -> IO a curlPrim c f = withMVar (curlH c) $ \ h -> withForeignPtr h $ f $ curlCleanup c -- | Allocates a Haskell handle from a C handle. mkCurl :: CurlH -> IO Curl mkCurl h = mkCurlWithCleanup h om_empty -- | Allocates a Haskell handle from a C handle. mkCurlWithCleanup :: CurlH -> OptionMap -> IO Curl mkCurlWithCleanup h clean = do debug "ALLOC: CURL" v2 <- newIORef clean fh <- newForeignPtr_ h v1 <- newMVar fh let new_h = Curl { curlH = v1, curlCleanup = v2 } let fnalizr = do debug "FREE: CURL" easy_cleanup h runCleanup v2 Foreign.Concurrent.addForeignPtrFinalizer fh fnalizr return new_h -- Admin code for cleaning up marshalled data. -- Note that these functions assume that they are running atomically, -- so access to them should be protected by a lock. -------------------------------------------------------------------------------- runCleanup :: IORef OptionMap -> IO () runCleanup r = do m <- readIORef r om_cleanup m writeIORef r om_empty shareCleanup :: IORef OptionMap -> IO OptionMap shareCleanup r = do old <- readIORef r new <- om_dup old writeIORef r new return new updateCleanup :: IORef OptionMap -> Int -> IO () -> IO () updateCleanup r option act = writeIORef r =<< om_set option act =<< readIORef r -- Maps that associate curl options with IO actions to -- perform cleanup for them. -------------------------------------------------------------------------------- type OptionMap = M.IntMap (IO ()) -- | An empty option map. om_empty :: OptionMap om_empty = M.empty -- | Set the IO action for an option, -- executing the previvous action, if there was one. om_set :: Int -> IO () -> OptionMap -> IO OptionMap om_set opt new_act old_map = do fromMaybe (return ()) old_act return new_map where (old_act,new_map) = M.insertLookupWithKey (\_ a _ -> a) opt new_act old_map -- | Execute all IO actions in the map. om_cleanup :: OptionMap -> IO () om_cleanup m = sequence_ (M.elems m) -- | Replace the actions in a map, with actions that -- will only be executed the second time they are invoked. om_dup :: OptionMap -> IO OptionMap om_dup old_map = M.fromList `fmap` mapM dup (M.assocs old_map) where dup (x,old_io) = do new_io <- shareIO old_io return (x,new_io) -- Share a cleanup action. When we share cleanup duty between two handles -- we need to ensure that the first handle to perform the cleanup will do -- nothing (because the other handle still needs the resources). shareIO :: IO () -> IO (IO ()) shareIO act = do v <- newMVar False let new_act = do b <- takeMVar v if b then act else putMVar v True return new_act -------------------------------------------------------------------------------- {- UNUSED: -- FFI for inalizers. -- | Make a finalizer from an IO action. mkIOfin :: IO a -> IO (FinalizerPtr b) mkIOfin m = mfix (\ptr -> ioFinalizer (m >> freeHaskellFunPtr ptr)) foreign import ccall "wrapper" ioFinalizer :: IO () -> IO (FinalizerPtr a) -} foreign import ccall "curl/curl.h curl_easy_cleanup" easy_cleanup :: CurlH -> IO () curl-1.3.8/Network/Curl/Post.hs0000644000000000000000000000721612050542035014477 0ustar0000000000000000{-# LANGUAGE ForeignFunctionInterface #-} -------------------------------------------------------------------- -- | -- Module : Network.Curl.Post -- Copyright : (c) Galois Inc 2007-2009 -- License : BSD3 -- -- Maintainer: Sigbjorn Finne -- Stability : provisional -- Portability: portable -- -- Representing and marshalling formdata (as part of POST uploads\/submissions.) -- If you are only looking to submit a sequence of name=value pairs, -- you are better off using the CurlPostFields constructor; much simpler. -- -------------------------------------------------------------------- module Network.Curl.Post where import Network.Curl.Types import Control.Monad import Foreign.Ptr import Foreign.Storable import Foreign.Marshal.Alloc import Foreign.C.Types import Foreign.C.String type Header = String data HttpPost = HttpPost { postName :: String , contentType :: Maybe String , content :: Content , extraHeaders :: [Header] -- not yet: , extraEntries :: [HttpPost] , showName :: Maybe String } deriving ( Eq, Show ) data Content = ContentFile FilePath | ContentBuffer (Ptr CChar) Long -- byte arrays also? | ContentString String deriving ( Eq, Show ) multiformString :: String -> String -> HttpPost multiformString x y = HttpPost { postName = x , content = ContentString y , contentType = Nothing , extraHeaders = [] , showName = Nothing } -- lower-level marshalling code. sizeof_httppost :: Int sizeof_httppost = 12 * sizeOf (nullPtr :: Ptr CChar) marshallPosts :: [HttpPost] -> IO (Ptr HttpPost) marshallPosts [] = return nullPtr marshallPosts ps = do ms <- mapM marshallPost ps case ms of [] -> return nullPtr (x:xs) -> do linkUp x xs return x where linkUp p [] = pokeByteOff p 0 nullPtr linkUp p (x:xs) = do pokeByteOff p 0 x linkUp x xs marshallPost :: HttpPost -> IO (Ptr HttpPost) marshallPost p = do php <- mallocBytes sizeof_httppost pokeByteOff php 0 nullPtr newCString (postName p) >>= pokeByteOff php (ptrIndex 1) pokeByteOff php (ptrIndex 2) (length (postName p)) case content p of ContentFile f -> do newCString f >>= pokeByteOff php (ptrIndex 3) pokeByteOff php (ptrIndex 4) (length f) pokeByteOff php (ptrIndex 5) nullPtr pokeByteOff php (ptrIndex 6) nullPtr pokeByteOff php (ptrIndex 10) (0x1 :: Long) ContentBuffer ptr len -> do pokeByteOff php (ptrIndex 3) nullPtr pokeByteOff php (ptrIndex 4) nullPtr pokeByteOff php (ptrIndex 5) ptr pokeByteOff php (ptrIndex 6) len pokeByteOff php (ptrIndex 10) (0x10 :: Long) ContentString s -> do newCString s >>= pokeByteOff php (ptrIndex 3) pokeByteOff php (ptrIndex 4) (length s) pokeByteOff php (ptrIndex 5) nullPtr pokeByteOff php (ptrIndex 6) nullPtr pokeByteOff php (ptrIndex 10) (0x4 :: Long) cs1 <- case contentType p of Nothing -> return nullPtr Just s -> newCString s pokeByteOff php (ptrIndex 7) cs1 cs2 <- mapM newCString (extraHeaders p) ip <- foldM curl_slist_append nullPtr cs2 pokeByteOff php (ptrIndex 8) ip pokeByteOff php (ptrIndex 9) nullPtr case showName p of Nothing -> pokeByteOff php (ptrIndex 11) nullPtr Just s -> newCString s >>= pokeByteOff php (ptrIndex 11) return php where ptrIndex n = n * sizeOf nullPtr foreign import ccall "curl_slist_append" curl_slist_append :: Ptr Slist_ -> CString -> IO (Ptr Slist_) foreign import ccall "curl_slist_free_all" curl_slist_free :: Ptr Slist_ -> IO () foreign import ccall "curl_formfree" curl_formfree :: Ptr a -> IO ()