diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2007-8 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.
diff --git a/Network/Curl.hs b/Network/Curl.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl.hs
@@ -0,0 +1,284 @@
+--------------------------------------------------------------------
+-- |
+-- Module    : Curl
+-- Copyright : (c) Galois Inc 2007-8
+-- License   : BSD3
+--
+-- Author: Sigbjorn Finne, Iavor S. Diatchki, Eric Mertens
+-- Maintainer: emertens@galois.com
+-- Stability : provisional
+-- Portability: portable
+--
+-- A Haskell binding the libcurl library (http:\/\/curl.haxx.se\/), 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(..)
+
+          -- get resources and assoc. metadata.
+       , curlGet             -- :: URLString -> [CurlOption] -> IO ()
+       , curlGetString       -- :: URLString -> [CurlOption] -> IO (CurlCode, String)
+       , curlGetResponse     -- :: URLString -> [CurlOption] -> IO CurlResponse
+
+          -- 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
+
+       , method_GET          -- :: [CurlOption]
+       , method_HEAD         -- :: [CurlOption]
+       , method_POST         -- :: [CurlOption]
+
+       ) 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
+
+{- pass along the action you want to perform during its lifetime.
+{-# OBSOLETE #-}
+withCurl :: (Curl -> IO a) -> IO a
+withCurl act = act =<< initialize
+-}
+
+-- | 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
+                   a <- m
+                   curl_global_cleanup
+                   return a
+
+-- | 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)
+
+-- | '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
+ = CurlResponse
+     { respCurlCode   :: CurlCode
+     , respStatus     :: Int
+     , respStatusLine :: String
+     , respHeaders    :: [(String,String)]
+     , respBody       :: String
+     , respGetInfo    :: (Info -> IO InfoValue)
+     }
+
+
+-- | 'curlGetResponse' performs a GET, returning all the info
+-- it can lay its hands on in the response, a value of type 'CurlResponse'.
+curlGetResponse :: URLString
+                -> [CurlOption]
+                -> IO CurlResponse
+curlGetResponse url opts = do
+  h <- initialize
+  body_ref <- newIORef []
+  hdr_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 body_ref))
+  setopt  h (CurlHeaderFunction (gatherOutput hdr_ref))
+  mapM_ (setopt h) opts
+  rc       <- perform h
+  bss      <- readIORef body_ref
+  hss      <- readIORef hdr_ref
+  rspCode  <- getResponseCode h
+  let (st,hs) = parseStatusNHeaders (concRev [] hss)
+  return CurlResponse
+    { respCurlCode   = rc
+    , respStatus     = rspCode
+    , respStatusLine = st
+    , respHeaders    = hs
+    , respBody       = concRev [] bss
+    , respGetInfo    = getInfo h  -- note: we're holding onto the handle here..
+    }
+
+-- | 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))
+
+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 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.
+{-# OBSOLETE #-}
+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
+
+-- | 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 $ \xs -> do xss <- readIORef r
+                                            writeIORef r (xs:xss)
+
+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)
+
diff --git a/Network/Curl/Code.hs b/Network/Curl/Code.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl/Code.hs
@@ -0,0 +1,106 @@
+{-# OPTIONS -fffi -fvia-C -#include "curl/curl.h" #-}
+--------------------------------------------------------------------
+-- |
+-- Module    : Curl.Code
+-- Copyright : (c) Galois Inc 2007
+-- License   : BSD3
+--
+-- Author: Sigbjorn Finne, Iavor S. Diatchki, Eric Mertens
+-- Maintainer: sof@galois.com
+-- 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
+   deriving ( Eq, Show, Enum )
+
+toCode :: CInt -> CurlCode
+toCode x = toEnum (fromIntegral x)
diff --git a/Network/Curl/Debug.hs b/Network/Curl/Debug.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl/Debug.hs
@@ -0,0 +1,24 @@
+--------------------------------------------------------------------
+-- |
+-- Module    : Network.Curl.Debug
+-- Copyright : (c) Galois, Inc. 2008
+-- License   : BSD3
+--
+-- Maintainer: Don Stewart <dons@galois.com>
+-- 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 ()
+
diff --git a/Network/Curl/Easy.hs b/Network/Curl/Easy.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl/Easy.hs
@@ -0,0 +1,208 @@
+{-# OPTIONS -fffi -fvia-C -#include "curl/curl.h" #-}
+--------------------------------------------------------------------
+-- |
+-- Module    : Curl.Easy
+-- Copyright : (c) Galois Inc 2007
+-- License   :
+--
+-- Author: Sigbjorn Finne, Iavor S. Diatchki, Eric Mertens
+-- Maintainer: emertens@galois.com
+-- Stability : provisional
+-- Portability: portable
+--
+-- Haskell binding to the libcurl (http:\/\/curl.haxx.se\/) \"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 ()
+        ) 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
+
+-- FFI decls
+
+
+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" easy_setopt_long :: CurlH -> Int -> Long -> IO CInt
+
+foreign import ccall
+  "curl_easy_setopt" easy_setopt_llong :: CurlH -> Int -> LLong -> IO CInt
+
+foreign import ccall
+  "curl_easy_setopt" easy_setopt_string :: CurlH -> Int -> Ptr CChar -> IO CInt
+
+foreign import ccall
+  "curl_easy_setopt" easy_setopt_ptr :: CurlH -> Int -> Ptr a -> IO CInt
+
+foreign import ccall
+  "curl_easy_setopt" easy_setopt_fptr :: CurlH -> Int -> FunPtr a -> IO CInt
+
+foreign import ccall
+  "curl_easy_setopt" easy_setopt_wfun :: CurlH -> Int -> FunPtr WriteFunction -> IO CInt
+
+foreign import ccall
+  "curl_easy_setopt" 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)
+
+
diff --git a/Network/Curl/Info.hs b/Network/Curl/Info.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl/Info.hs
@@ -0,0 +1,196 @@
+{-# OPTIONS -fffi -fvia-C -#include "curl/curl.h" #-}
+--------------------------------------------------------------------
+-- |
+-- Module    : Network.Curl.Info
+-- Copyright : (c) Galois Inc 2007
+-- License   : BSD3
+--
+-- Author: Sigbjorn Finne
+-- Maintainer: emertens@galois.com
+-- 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 (stringTag + 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 (longTag + 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 (doubleTag + 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 (slistTag + 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" easy_getinfo_long :: CurlH -> Long -> Ptr Long -> IO CInt
+
+foreign import ccall
+  "curl_easy_getinfo" easy_getinfo_str  :: CurlH -> Long -> Ptr CString -> IO CInt
+
+foreign import ccall
+  "curl_easy_getinfo" easy_getinfo_double :: CurlH -> Long -> Ptr Double -> IO CInt
+
+foreign import ccall
+  "curl_easy_getinfo" easy_getinfo_slist :: CurlH -> Long -> Ptr (Ptr (Ptr CChar)) -> IO CInt
diff --git a/Network/Curl/Opts.hs b/Network/Curl/Opts.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl/Opts.hs
@@ -0,0 +1,514 @@
+--------------------------------------------------------------------
+-- |
+-- Module    : Network.Curl.Opts
+-- Copyright : (c) Galois Inc 2007
+-- License   :
+--
+-- Author: Sigjorn Finne, Iavor S. Diatchki
+-- Maintainer: emertens@galois.com
+-- 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.
+
+data HttpVersion
+ = HttpVersionNone
+ | HttpVersion10
+ | HttpVersion11
+   deriving ( Enum )
+
+data TimeCond
+ = TimeCondNone
+ | TimeCondIfModSince
+ | TimeCondIfUnmodSince
+ | TimeCondLastMode
+   deriving ( Enum )
+ 
+data NetRcOption
+ = NetRcIgnored
+ | NetRcOptional
+ | NetRcRequired
+   deriving ( Enum )
+
+data HttpAuth
+ = HttpAuthNone
+ | HttpAuthBasic
+ | HttpAuthDigest
+ | HttpAuthGSSNegotiate
+ | HttpAuthNTLM
+ | HttpAuthAny
+ | HttpAuthAnySafe
+
+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
+
+
+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
+
+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)
diff --git a/Network/Curl/Post.hs b/Network/Curl/Post.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl/Post.hs
@@ -0,0 +1,125 @@
+{-# OPTIONS -fffi -fvia-C -#include "curl/curl.h" #-}
+--------------------------------------------------------------------
+-- |
+-- Module    : Network.Curl.Post
+-- Copyright : (c) Galois Inc 2007
+-- License   : BSD3
+--
+-- Author: Sigbjorn Finne
+-- Maintainer: emertens@galois.com
+-- 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
+     }
+
+data Content
+ = ContentFile   FilePath
+ | ContentBuffer (Ptr CChar) Long -- byte arrays also?
+ | ContentString String
+
+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 ()
+  
+
diff --git a/Network/Curl/Types.hs b/Network/Curl/Types.hs
new file mode 100644
--- /dev/null
+++ b/Network/Curl/Types.hs
@@ -0,0 +1,154 @@
+{-# OPTIONS -fffi -fglasgow-exts #-}
+--------------------------------------------------------------------
+-- |
+-- Module    : Network.Curl.Types
+-- Copyright : (c) Galois Inc 2007
+-- License   : BSD3
+--
+-- Author: Sigbjorn Finne, Iavor S. Diatchki, Eric Mertens
+-- Maintainer: emertens@galois.com
+-- 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 Data.Word
+import Control.Concurrent
+import Control.Monad.Fix(mfix)
+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"
+  fh  <- newForeignPtr_ h 
+  v1  <- newMVar fh
+  v2  <- newIORef clean
+  let new_h = Curl { curlH = v1, curlCleanup = v2 }
+  
+  fin <- mkIOfin $ do debug "FREE: CURL"
+                      easy_cleanup h
+                      runCleanup v2
+  addForeignPtrFinalizer fin fh
+
+  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
+--------------------------------------------------------------------------------
+
+
+-- 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 
+  "curl/curl.h curl_easy_cleanup" easy_cleanup :: CurlH -> IO ()
+
+foreign import ccall "wrapper"
+  ioFinalizer :: IO () -> IO (FinalizerPtr a)
+
+
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,6 @@
+module Main where
+
+import Distribution.Simple
+
+main :: IO ()
+main = defaultMainWithHooks defaultUserHooks
diff --git a/configure b/configure
new file mode 100644
--- /dev/null
+++ b/configure
@@ -0,0 +1,3390 @@
+#! /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 <dons@galois.com>.
+#
+# 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<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  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 <dons@galois.com>.
+_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 </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&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 <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* 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 <stdlib.h>
+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 <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#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 <ac_nonexistent.h>
+_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 <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#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 <ac_nonexistent.h>
+_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 <curl/curl.h>
+_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 <bug-autoconf@gnu.org>."
+_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
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,16 @@
+AC_INIT([Haskell curl package], [1.1], [dons@galois.com], [curl])
+
+AC_TRY_CPP([#include <curl/curl.h>],,[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
diff --git a/curl.buildinfo.in b/curl.buildinfo.in
new file mode 100644
--- /dev/null
+++ b/curl.buildinfo.in
@@ -0,0 +1,6 @@
+-- @configure_input@
+-- System-dependent values used by Distribution.Simple.defaultUserHooks
+--
+buildable:  @BUILD_PACKAGE_BOOL@
+cc-options: @CPPFLAGS@
+ld-options: @LDFLAGS@
diff --git a/curl.cabal b/curl.cabal
new file mode 100644
--- /dev/null
+++ b/curl.cabal
@@ -0,0 +1,45 @@
+name:               curl
+version:            1.3
+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:         emertens@galois.com
+build-depends:      base
+build-type:         Configure
+cabal-version:      >= 1.2
+extra-source-files: configure, configure.ac, curl.buildinfo.in
+
+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
+
+  Extra-libraries: curl
+  Extensions:      CPP, ForeignFunctionInterface
+  Ghc-options:     -Wall -fvia-C -O2
+
+  Build-Depends: base
+  if flag(new-base)
+    Build-depends: base >= 3, containers, haskell98
+  else
+    Build-depends: base < 3
