From 2a1b6c0dbf234161a860a2b5a916cf5ef9795b18 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Wed, 29 Sep 2021 13:35:42 +0200 Subject: gnu: hedgewars: Fix build. * gnu/packages/patches/hedgewars-network-bsd.patch: Import upstream patch. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/games.scm (hedgewars): Use it. --- gnu/local.mk | 1 + gnu/packages/games.scm | 1 + gnu/packages/patches/hedgewars-network-bsd.patch | 150 +++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 gnu/packages/patches/hedgewars-network-bsd.patch diff --git a/gnu/local.mk b/gnu/local.mk index 1d46738cfc..84afac33d9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1252,6 +1252,7 @@ dist_patch_DATA = \ %D%/packages/patches/hdf-eos5-remove-gctp.patch \ %D%/packages/patches/hdf-eos5-fix-szip.patch \ %D%/packages/patches/hdf-eos5-fortrantests.patch \ + %D%/packages/patches/hedgewars-network-bsd.patch \ %D%/packages/patches/http-parser-CVE-2020-8287.patch \ %D%/packages/patches/hubbub-sort-entities.patch \ %D%/packages/patches/hurd-cross.patch \ diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 4d84dd2bcb..5549441854 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -9343,6 +9343,7 @@ play with up to four players simultaneously. It has network support.") (method url-fetch) (uri (string-append "https://www.hedgewars.org/download/releases/" "hedgewars-src-" version ".tar.bz2")) + (patches (search-patches "hedgewars-network-bsd.patch")) (sha256 (base32 "0nqm9w02m0xkndlsj6ys3wr0ik8zc14zgilq7k6fwjrf3zk385i1")))) diff --git a/gnu/packages/patches/hedgewars-network-bsd.patch b/gnu/packages/patches/hedgewars-network-bsd.patch new file mode 100644 index 0000000000..311ce8bf09 --- /dev/null +++ b/gnu/packages/patches/hedgewars-network-bsd.patch @@ -0,0 +1,150 @@ +From f813f3d5b63bb5be1b5e0b44930e77656c547aad Mon Sep 17 00:00:00 2001 +From: Jens Petersen +Date: Wed, 8 Jul 2020 17:02:45 +0300 +Subject: [PATCH] update server network + +--- + gameServer/Actions.hs | 2 +- + gameServer/CMakeLists.txt | 3 ++- + gameServer/ClientIO.hs | 4 ++-- + gameServer/CoreTypes.hs | 2 +- + gameServer/OfficialServer/checker.hs | 5 ++--- + gameServer/Utils.hs | 6 +----- + gameServer/hedgewars-server.cabal | 3 ++- + gameServer/hedgewars-server.hs | 5 +++-- + 8 files changed, 14 insertions(+), 16 deletions(-) + +diff --git a/gameServer/Actions.hs b/gameServer/Actions.hs +index 125d6ea832..c42d17b9a9 100644 +--- a/gameServer/Actions.hs ++++ b/gameServer/Actions.hs +@@ -709,7 +709,7 @@ processAction RestartServer = do + args <- gets (runArgs . serverInfo) + io $ do + noticeM "Core" "Closing listening socket" +- sClose sock ++ close sock + noticeM "Core" "Spawning new server" + _ <- createProcess (proc "./hedgewars-server" args) + return () +diff --git a/gameServer/CMakeLists.txt b/gameServer/CMakeLists.txt +index 5f2c882563..e71650c70c 100644 +--- a/gameServer/CMakeLists.txt ++++ b/gameServer/CMakeLists.txt +@@ -9,7 +9,8 @@ check_haskell_package_exists(base "Control.Exception" mask 1) + check_haskell_package_exists(containers "Data.Map" size 1) + check_haskell_package_exists(vector "Data.Vector" length 1) + check_haskell_package_exists(bytestring "Data.ByteString" pack 1) +-check_haskell_package_exists(network "Network.BSD" getHostName 0) ++check_haskell_package_exists(network "Network.Socket" defaultHints 0) ++check_haskell_package_exists(network-bsd "Network.BSD" getHostName 0) + check_haskell_package_exists(time "Data.Time" getCurrentTime 0) + check_haskell_package_exists(mtl "Control.Monad.State" fix 1) + check_haskell_package_exists(sandi "Codec.Binary.Base64" encode 1) +diff --git a/gameServer/ClientIO.hs b/gameServer/ClientIO.hs +index 46dd40ed9f..0c97bde932 100644 +--- a/gameServer/ClientIO.hs ++++ b/gameServer/ClientIO.hs +@@ -23,7 +23,7 @@ import qualified Control.Exception as Exception + import Control.Monad.State + import Control.Concurrent.Chan + import Control.Concurrent +-import Network ++import Network.Socket hiding (recv) + import Network.Socket.ByteString + import qualified Data.ByteString.Char8 as B + ---------------- +@@ -90,7 +90,7 @@ clientSendLoop s tId chan ci = do + sendAll s $ B.unlines answer `B.snoc` '\n' + + if isQuit answer then +- sClose s ++ close s + else + clientSendLoop s tId chan ci + +diff --git a/gameServer/CoreTypes.hs b/gameServer/CoreTypes.hs +index f547df483a..72f35807e3 100644 +--- a/gameServer/CoreTypes.hs ++++ b/gameServer/CoreTypes.hs +@@ -23,7 +23,7 @@ import Control.Concurrent + import Data.Word + import qualified Data.Map as Map + import Data.Time +-import Network ++import Network.Socket + import Data.Function + import Data.ByteString.Char8 as B + import Data.Unique +diff --git a/gameServer/OfficialServer/checker.hs b/gameServer/OfficialServer/checker.hs +index 37df3208b9..b4ecb8fc57 100644 +--- a/gameServer/OfficialServer/checker.hs ++++ b/gameServer/OfficialServer/checker.hs +@@ -28,8 +28,7 @@ import System.Directory + import Control.Monad.State + import Control.Concurrent.Chan + import Control.Concurrent +-import Network +-import Network.BSD ++import Network.BSD hiding (recv) + import Network.Socket hiding (recv, sClose) + import Network.Socket.ByteString + import qualified Data.ByteString.Char8 as B +@@ -207,7 +206,7 @@ main = withSocketsDo . forever $ do + + Exception.bracket + setupConnection +- (\s -> noticeM "Core" "Shutting down" >> sClose s) ++ (\s -> noticeM "Core" "Shutting down" >> close s) + (session login password (d ++ "/.hedgewars") exeFullname dataPrefix) + where + setupConnection = do +diff --git a/gameServer/Utils.hs b/gameServer/Utils.hs +index 3d81b7f7c6..9fd80c01ba 100644 +--- a/gameServer/Utils.hs ++++ b/gameServer/Utils.hs +@@ -41,11 +41,7 @@ import CoreTypes + + + sockAddr2String :: SockAddr -> IO B.ByteString +-sockAddr2String (SockAddrInet _ hostAddr) = liftM B.pack $ inet_ntoa hostAddr +-sockAddr2String (SockAddrInet6 _ _ (a, b, c, d) _) = +- return $ B.pack $ (foldr1 (.) +- $ List.intersperse (':':) +- $ concatMap (\n -> (\(a0, a1) -> [showHex a0, showHex a1]) $ divMod n 65536) [a, b, c, d]) [] ++sockAddr2String = liftM (B.pack . fromJust . fst) . getNameInfo [] True False + + maybeRead :: Read a => String -> Maybe a + maybeRead s = case reads s of +diff --git a/gameServer/hedgewars-server.cabal b/gameServer/hedgewars-server.cabal +index 3c7f2418c9..9f764fd997 100644 +--- a/gameServer/hedgewars-server.cabal ++++ b/gameServer/hedgewars-server.cabal +@@ -57,7 +57,8 @@ Executable checker + containers, + vector, + bytestring, +- network >= 2.3 && < 3.0, ++ network >= 2.3, ++ network-bsd, + mtl >= 2, + sandi, + hslogger, +diff --git a/gameServer/hedgewars-server.hs b/gameServer/hedgewars-server.hs +index e47ae2891d..7e6ab8fa38 100644 +--- a/gameServer/hedgewars-server.hs ++++ b/gameServer/hedgewars-server.hs +@@ -50,10 +50,11 @@ server si = do + proto <- getProtocolNumber "tcp" + E.bracket + (socket AF_INET Stream proto) +- sClose ++ close + (\sock -> do + setSocketOption sock ReuseAddr 1 +- bindSocket sock (SockAddrInet (listenPort si) iNADDR_ANY) ++ iNADDR_ANY <- addrAddress . head <$> getAddrInfo Nothing (Just "0") (Just (show (listenPort si))) ++ bind sock iNADDR_ANY + listen sock maxListenQueue + startServer si{serverSocket = Just sock} + ) -- cgit v1.2.3