diff --git a/warp/ChangeLog.md b/warp/ChangeLog.md index a0d8182b7..801244b07 100644 --- a/warp/ChangeLog.md +++ b/warp/ChangeLog.md @@ -1,5 +1,10 @@ # ChangeLog for warp +## 3.4.9 + +* New flag `include-warp-version` can be disabled to remove dependency on `Paths_warp`. + [#1044](https://github.com/yesodweb/wai/pull/1044) + ## 3.4.8 * Label the internal hack thread on Windows used to make socket diff --git a/warp/Network/Wai/Handler/Warp.hs b/warp/Network/Wai/Handler/Warp.hs index fd22f89a5..6bd86e94a 100644 --- a/warp/Network/Wai/Handler/Warp.hs +++ b/warp/Network/Wai/Handler/Warp.hs @@ -159,7 +159,6 @@ import Network.Wai.Handler.Warp.HTTP2.Request ( import Network.Wai.Handler.Warp.HTTP2.Types import Network.Wai.Handler.Warp.Imports import Network.Wai.Handler.Warp.Request -import Network.Wai.Handler.Warp.Response (warpVersion) import Network.Wai.Handler.Warp.Run import Network.Wai.Handler.Warp.Settings import Network.Wai.Handler.Warp.Types hiding (getFileInfo) diff --git a/warp/Network/Wai/Handler/Warp/Internal.hs b/warp/Network/Wai/Handler/Warp/Internal.hs index 79be77248..490c782d4 100644 --- a/warp/Network/Wai/Handler/Warp/Internal.hs +++ b/warp/Network/Wai/Handler/Warp/Internal.hs @@ -107,3 +107,4 @@ import Network.Wai.Handler.Warp.SendFile import Network.Wai.Handler.Warp.Settings import Network.Wai.Handler.Warp.Types import Network.Wai.Handler.Warp.Windows + diff --git a/warp/Network/Wai/Handler/Warp/Response.hs b/warp/Network/Wai/Handler/Warp/Response.hs index cd46a383d..83009be35 100644 --- a/warp/Network/Wai/Handler/Warp/Response.hs +++ b/warp/Network/Wai/Handler/Warp/Response.hs @@ -7,6 +7,7 @@ module Network.Wai.Handler.Warp.Response ( sendResponse, sanitizeHeaderValue, -- for testing + -- Provided here for backwards compatibility. warpVersion, hasBody, replaceHeader, @@ -31,13 +32,11 @@ import Data.Streaming.ByteString.Builder ( newByteStringBuilderRecv, reuseBufferStrategy, ) -import Data.Version (showVersion) import Data.Word8 (_cr, _lf, _space, _tab) import qualified Network.HTTP.Types as H import qualified Network.HTTP.Types.Header as H import Network.Wai import Network.Wai.Internal -import qualified Paths_warp import qualified System.TimeManager as T import Network.Wai.Handler.Warp.Buffer (toBuilderBuffer) @@ -479,10 +478,6 @@ addDate getdate rspidxhdr hdrs = case rspidxhdr ! fromEnum ResDate of ---------------------------------------------------------------- --- | The version of Warp. -warpVersion :: String -warpVersion = showVersion Paths_warp.version - {-# INLINE addServer #-} addServer :: HeaderValue -> IndexedHeader -> H.ResponseHeaders -> H.ResponseHeaders diff --git a/warp/Network/Wai/Handler/Warp/Settings.hs b/warp/Network/Wai/Handler/Warp/Settings.hs index 882b77cb5..6a6a5e97a 100644 --- a/warp/Network/Wai/Handler/Warp/Settings.hs +++ b/warp/Network/Wai/Handler/Warp/Settings.hs @@ -15,14 +15,12 @@ import qualified Data.ByteString.Char8 as C8 import Data.Streaming.Network (HostPreference) import qualified Data.Text as T import qualified Data.Text.IO as TIO -import Data.Version (showVersion) import GHC.IO (IO (IO), unsafeUnmask) import GHC.IO.Exception (IOErrorType (..)) import GHC.Prim (fork#) import qualified Network.HTTP.Types as H import Network.Socket (SockAddr, Socket, accept) import Network.Wai -import qualified Paths_warp import System.IO (stderr) import System.IO.Error (ioeGetErrorType) import System.TimeManager @@ -33,6 +31,11 @@ import Network.Wai.Handler.Warp.Types import Network.Wai.Handler.Warp.Windows (windowsThreadBlockHack) #endif +#ifdef INCLUDE_WARP_VERSION +import Data.Version (showVersion) +import qualified Paths_warp +#endif + -- | Various Warp server settings. This is purposely kept as an abstract data -- type so that new settings can be added without breaking backwards -- compatibility. In order to create a 'Settings' value, use 'defaultSettings' @@ -206,7 +209,7 @@ defaultSettings = , settingsAccept = defaultAccept , settingsNoParsePath = False , settingsInstallShutdownHandler = const $ return () - , settingsServerName = C8.pack $ "Warp/" ++ showVersion Paths_warp.version + , settingsServerName = C8.pack $ "Warp/" ++ warpVersion , settingsMaximumBodyFlush = Just 8192 , settingsProxyProtocol = ProxyProtocolNone , settingsSlowlorisSize = 2048 @@ -318,3 +321,12 @@ defaultAccept = #else accept #endif + +-- | The version of Warp. +warpVersion :: String +warpVersion = +#ifdef INCLUDE_WARP_VERSION + showVersion Paths_warp.version +#else + "unknown" +#endif diff --git a/warp/warp.cabal b/warp/warp.cabal index 738380c80..45f69e7cf 100644 --- a/warp/warp.cabal +++ b/warp/warp.cabal @@ -1,6 +1,6 @@ cabal-version: >=1.10 name: warp -version: 3.4.8 +version: 3.4.9 license: MIT license-file: LICENSE maintainer: michael@snoyman.com @@ -34,6 +34,16 @@ flag network-bytestring flag allow-sendfilefd description: Allow use of sendfileFd (not available on GNU/kFreeBSD) +flag include-warp-version + description: + Exposes the version in Network.Wai.Handler.Warp.warpVersion. + This adds a dependency on Paths_warp so application binaries may + reference subpaths of GHC. For nix users this may result in binaries + with a large transitive runtime dependency closure that includes GHC + itself. + default: True + manual: True + flag warp-debug description: print debug output. not suitable for production default: False @@ -78,7 +88,9 @@ library Network.Wai.Handler.Warp.Types Network.Wai.Handler.Warp.Windows Network.Wai.Handler.Warp.WithApplication - Paths_warp + + if flag(include-warp-version) + other-modules: Paths_warp default-language: Haskell2010 ghc-options: -Wall @@ -140,6 +152,9 @@ library if impl(ghc >=8) default-extensions: Strict StrictData + if flag(include-warp-version) + cpp-options: -DINCLUDE_WARP_VERSION + test-suite doctest type: exitcode-stdio-1.0 main-is: doctests.hs @@ -208,7 +223,9 @@ test-suite spec Network.Wai.Handler.Warp.Types Network.Wai.Handler.Warp.Windows Network.Wai.Handler.Warp.WithApplication - Paths_warp + + if flag(include-warp-version) + other-modules: Paths_warp default-language: Haskell2010 ghc-options: -Wall -threaded @@ -285,7 +302,9 @@ benchmark parser Network.Wai.Handler.Warp.RequestHeader Network.Wai.Handler.Warp.Settings Network.Wai.Handler.Warp.Types - Paths_warp + + if flag(include-warp-version) + other-modules: Paths_warp default-language: Haskell2010 build-depends: