Workaround bug (each time losing room master status, even when joining mutliple rooms, new instance of NetAmmoSchemeModel created, receiving schemeConfig and modifying its 43rd member, thus the last model which accepts this signal has the string cut down several times, workaround creates copy of qstringlist to avoid modifying shared message instance. Proper fix would delete unneeded instances of NetAmmoSchemeModel, but who cares)
include(${CMAKE_MODULE_PATH}/utils.cmake)
find_package_or_disable(GHC NOSERVER)
include(${CMAKE_MODULE_PATH}/CheckHaskellModuleExists.cmake)
check_haskell_module_exists("Control.Exception" mask 1 base)
check_haskell_module_exists("Data.Map" size 1 containers)
check_haskell_module_exists("Data.Vector" length 1 vector)
check_haskell_module_exists("Data.ByteString" pack 1 bytestring)
check_haskell_module_exists("Text.Show.ByteString" putDigit 1 bytestring-show)
check_haskell_module_exists("Network.BSD" getHostName 0 network)
check_haskell_module_exists("Data.Time" getCurrentTime 0 time)
check_haskell_module_exists("Control.Monad.State" fix 1 mtl)
check_haskell_module_exists("Codec.Binary.Base64" encode 1 dataenc)
check_haskell_module_exists("System.Log.Logger" warningM 1 hslogger)
check_haskell_module_exists("System.Process" createProcess 3 process)
check_haskell_module_exists("Data.ByteString.Lazy.UTF8" decode 1 utf8-string)
check_haskell_module_exists("Data.Digest.Pure.SHA" sha1 1 SHA)
check_haskell_module_exists("System.Entropy" openHandle 0 entropy)
check_haskell_module_exists("Codec.Compression.Zlib" decompress 1 zlib)
check_haskell_module_exists("System.Random" getStdGen 0 random)
# this one needs type signatures to work
# check_haskell_module_exists("Control.DeepSeq" deepseq 2 deepseq)
set(hwserver_sources
OfficialServer/DBInteraction.hs
Actions.hs
ClientIO.hs
ConfigFile.hs
Consts.hs
CoreTypes.hs
EngineInteraction.hs
FloodDetection.hs
HWProtoCore.hs
HWProtoInRoomState.hs
HWProtoLobbyState.hs
HWProtoNEState.hs
HandlerUtils.hs
JoinsMonitor.hs
NetRoutines.hs
Opts.hs
RoomsAndClients.hs
ServerCore.hs
ServerState.hs
Store.hs
Utils.hs
Votes.hs
hedgewars-server.hs
)
set(hwserv_main ${CMAKE_CURRENT_SOURCE_DIR}/hedgewars-server.hs)
set(ghc_flags
--make ${hwserv_main}
-i${CMAKE_CURRENT_SOURCE_DIR}
-o ${EXECUTABLE_OUTPUT_PATH}/hedgewars-server${CMAKE_EXECUTABLE_SUFFIX}
-odir ${CMAKE_CURRENT_BINARY_DIR}
-hidir ${CMAKE_CURRENT_BINARY_DIR}
${haskell_flags})
add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hedgewars-server${CMAKE_EXECUTABLE_SUFFIX}"
COMMAND "${GHC_EXECUTABLE}"
ARGS ${ghc_flags}
MAIN_DEPENDENCY ${hwserv_main}
DEPENDS ${hwserver_sources}
)
add_custom_target(hedgewars-server ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hedgewars-server${CMAKE_EXECUTABLE_SUFFIX}")
install(PROGRAMS "${EXECUTABLE_OUTPUT_PATH}/hedgewars-server${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION ${target_binary_install_dir})