HsOpenSSL 0.11.2.2 → 0.11.2.3
raw patch · 4 files changed
+135/−10 lines, 4 filesbuild-type:Customsetup-changedPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ OpenSSL.Session: data SSLContext_
+ OpenSSL.Session: data SSL_
+ OpenSSL.Session: withContext :: SSLContext -> (Ptr SSLContext_ -> IO a) -> IO a
+ OpenSSL.Session: withSSL :: SSL -> (Ptr SSL_ -> IO a) -> IO a
Files
- ChangeLog +16/−0
- HsOpenSSL.cabal +23/−9
- OpenSSL/Session.hsc +8/−0
- Setup.hs +88/−1
ChangeLog view
@@ -1,3 +1,19 @@+2016-10-06 Vladimir Shabanov <vshabanoff@gmail.com>++ * HsOpenSSL.cabal (Version): Bump version to 0.11.2.3++ * HsOpenSSL.cabal, Setup.hs:+ Automatic detection of Homebrew or MacPorts OpenSSL on macOS+ with helpful (I hope ;) error messages (phonohawk#41).+ Previous approach caused ld warning 'directory not found',+ wasn't informative when OpenSSL is not installed and could+ potentially prevent linking with OpenSSL from another source.++ * HsOpenSSL.cabal: Bump Cabal-Version to 1.12 (bundled with GHC 7.2.2).++ * OpenSSL/Session.hsc: Exposed OpenSSL.Session internal types,+ by Eric Mertens @glguy (#10).+ 2016-10-05 Vladimir Shabanov <vshabanoff@gmail.com> * HsOpenSSL.cabal (Version): Bump version to 0.11.2.2
HsOpenSSL.cabal view
@@ -12,7 +12,7 @@ <http://hackage.haskell.org/package/tls>, which is a pure Haskell implementation of SSL. .-Version: 0.11.2.2+Version: 0.11.2.3 License: PublicDomain License-File: COPYING Author: Adam Langley, Mikhail Vorozhtsov, PHO, Taru Karttunen@@ -21,10 +21,10 @@ Homepage: https://github.com/vshabanov/HsOpenSSL Bug-Reports: https://github.com/vshabanov/HsOpenSSL/issues Category: Cryptography-Cabal-Version: >= 1.10+Cabal-Version: >= 1.12 Tested-With: GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2, GHC==7.2.2-Build-Type: Simple+Build-Type: Custom Extra-Source-Files: AUTHORS ChangeLog@@ -45,10 +45,22 @@ Flag fast-bignum Description:- Enable fast moving of bignums between OpenSSL and GMP (GHC Only).+ Enable fast moving of bignums between OpenSSL and GMP (GHC only). Default: True +Flag homebrew-openssl+ Description:+ Use Homebrew version of OpenSSL (macOS only).+ Default:+ False++Flag macports-openssl+ Description:+ Use MacPorts version of OpenSSL (macOS only).+ Default:+ False+ Library Build-Depends: base >= 4.4 && < 5,@@ -66,11 +78,13 @@ else Build-Depends: ghc-prim, integer - if os(darwin)- Include-Dirs: /usr/local/opt/openssl/include /opt/local/include- Extra-Lib-Dirs: /usr/local/opt/openssl/lib /opt/local/lib- -- /usr/local for Homebrew- -- /opt/local for MacPorts+ if os(darwin) && flag(homebrew-openssl)+ Include-Dirs: /usr/local/opt/openssl/include+ Extra-Lib-Dirs: /usr/local/opt/openssl/lib++ if os(darwin) && flag(macports-openssl)+ Include-Dirs: /opt/local/include+ Extra-Lib-Dirs: /opt/local/lib if os(mingw32) Extra-Libraries: eay32 ssl32
OpenSSL/Session.hsc view
@@ -67,6 +67,13 @@ , SomeSSLException , ConnectionAbruptlyTerminated , ProtocolError(..)++ -- * Direct access to OpenSSL objects+ , SSLContext_+ , withContext+ , SSL_+ , withSSL+ ) where #include "openssl/ssl.h"@@ -376,6 +383,7 @@ fdConnection :: SSLContext -> Fd -> IO SSL fdConnection context fd = connection' context fd Nothing +-- | Run continuation with exclusive access to the underlying SSL object. withSSL :: SSL -> (Ptr SSL_ -> IO a) -> IO a withSSL = withMVar . sslMVar
Setup.hs view
@@ -1,4 +1,91 @@ #!/usr/bin/env runghc +{-# LANGUAGE TupleSections #-}+ import Distribution.Simple-main = defaultMain+import Distribution.Simple.Setup (ConfigFlags(..), toFlag)+import Distribution.Simple.LocalBuildInfo (localPkgDescr)+import Distribution.PackageDescription (FlagName(..))+import Distribution.Verbosity (silent)+import System.Info (os)+import qualified Control.Exception as E (tryJust, throw)+import System.IO.Error (isUserError)+import Control.Monad (forM)+import Data.List++-- On macOS we're checking whether OpenSSL library is avaiable+-- and if not, we're trying to find Homebrew or MacPorts OpenSSL installations.+--+-- Method is dumb -- set homebrew-openssl or macports-openssl flag and try+-- to configure and check C libs.+--+-- If no or multiple libraries are found we display error message+-- with instructions.++main+ | os == "darwin" =+ defaultMainWithHooks simpleUserHooks { confHook = conf }+ | otherwise =+ defaultMain++flags = ["homebrew-openssl", "macports-openssl"]++conf descr cfg = do+ c <- tryConfig descr cfg+ case c of+ Right lbi -> return lbi -- library was found+ Left e+ | configConfigurationsFlags cfg+ `intersect` [(FlagName f, True) | f <- flags] /= [] ->+ E.throw e+ -- flag was set but library still wasn't found+ | otherwise -> do+ r <- forM flags $ \ f ->+ fmap (f,) $ tryConfig descr $+ setFlag f cfg { configVerbosity = toFlag silent }+ -- TODO: configure is a long operation+ -- while checkForeignDeps is fast.+ -- Perhaps there is a way to configure once+ -- and only apply flags to result and check.+ -- However, additional `configure`s happen only on macOS+ -- and only when library wasn't found.+ case [(f,r) | (f, Right r) <- r] of+ [(_,lbi)] ->+ return lbi -- library was found+ [] ->+ fail notFound+ fs ->+ fail $ multipleFound fs++multipleFound fs =+ "Multiple OpenSSL libraries were found,\n\+ \use " ++ intercalate " or " ["'-f " ++ f ++ "'" | (f,_) <- fs] ++ "\n\+ \to specify location of installed OpenSSL library."++notFound =+ "Can't find OpenSSL library,\n\+ \install it via 'brew install openssl' or 'port install openssl'\n\+ \or use --extra-include-dirs= and --extra-lib-dirs=\n\+ \to specify location of installed OpenSSL library."++setFlag f c = c { configConfigurationsFlags = go (configConfigurationsFlags c) }+ where go [] = []+ go (x@(FlagName n, _):xs)+ | n == f = (FlagName f, True) : xs+ | otherwise = x : go xs++tryConfig descr flags =+ E.tryJust ue $ checkedConfigure descr flags+ where ue e | isUserError e = Just e+ | otherwise = Nothing++checkedConfigure descr flags = do+ lbi <- confHook simpleUserHooks descr flags+ -- confHook simpleUserHooks == Distribution.Simple.Configure.configure++ -- Testing whether C lib and header dependencies are working+ postConf simpleUserHooks [] flags (localPkgDescr lbi) lbi+ -- postConf simpleUserHooks ~==+ -- Distribution.Simple.Configure.checkForeignDeps++ return lbi