summaryrefslogblamecommitdiff
path: root/src/CMakeLists.txt
blob: 3ca1f2c33958ed8854a5ea648cabc07bb452e284 (plain) (tree)
1
2
3
4
5
6
7
8

                              
                           
                             


                                       
                                                   







                                                                        


                               








                                                               
 















                                                                                 
                                                          


                                                           
                                
                                          
 


                                               

                                    



                                                                      





                                             

                                                                    





                                                  

                                                                         


                                                     



                                           
                                                                  
       
 

                                                                

                                                       




                                     
                                     

                                                     






                                                        

                          

                               





                                                         
        
                          
                            
                    
                          
                              
                            
                              
                   
                     
                    
                      
                           
                             
                   
                     
                    
                      
                     
                       

                    
                 
                          
                            
                  
                    



                          
                          
                            
                          
                            
               
                 



                                   
                            
                              
                                  
                                    
                                   
                                     
                              
                                
                              

                                 
                                  
                                    
                            
                              
                             
                               

                             
                               
                                    
                                      
                       

                                
                              

                                
                       

                                
                      






                               
                    

                    
                      
                



                             
                              
                                

                                    

                                  
                                   
                                     

                                  
                           
                             
                                  
                                    
                       
                         
                         
                           

                                      
                                    
                                      
                                  
                                
                           
                        
                          

                                

                          
                             
                               
                           
                             
                      
                        
                             
                               
                     
                       
                              
                                
                            
                              
                           
                             
                         
                           
                                
                                  
                     
                       

                         
                         

                                   

                                      
                       
                         
                              
                                
                               
                                 

                           
                       
                         

                                        
                      
                        

                               



                       
                     
                       
                
                  

     




                                                                         





















                                                    
                         
                         
                        

       


                                             

                                                                      

                            
                                                          

                            
                         
                           
                             









                                                                                    


                                                                           
FIND_PACKAGE(LibXml2 REQUIRED)
FIND_PACKAGE(PhysFS REQUIRED)
FIND_PACKAGE(ZLIB REQUIRED)
FIND_PACKAGE(SigC++ REQUIRED)

IF (CMAKE_COMPILER_IS_GNUCXX)
    # Help getting compilation warnings
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
    IF (WIN32)
        # This includes enough debug information to get something useful
        # from Dr. Mingw while keeping binary size down. Almost useless
        # with gdb, though.
        SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -ggdb0 -gstabs2")
    ENDIF()
ENDIF()

IF (POLICY CMP0015)
  CMAKE_POLICY(SET CMP0015 OLD)
ENDIF()

IF (ENABLE_EXTERNAL_ENET)
  INCLUDE_DIRECTORIES(${ENet_INCLUDE_DIR})
  SET(OPTIONAL_LIBRARIES ${OPTIONAL_LIBRARIES} ${ENet_LIBRARY})
ELSE (ENABLE_EXTERNAL_ENET)
  INCLUDE_DIRECTORIES("../libs/enet/include")
  LINK_DIRECTORIES("../libs/enet")
  SET(INTERNAL_LIBRARIES enet)
ENDIF (ENABLE_EXTERNAL_ENET)

# enable rc-handling with mingw
# most likely this part can be kicked out with some later cmake version
IF (MINGW)
    FIND_PATH(MINGW_INCLUDE_DIR windows.h $ENV{INCLUDE})
    IF (MINGW_INCLUDE_DIR)
        MESSAGE(STATUS "Found mingw headers: ${MINGW_INCLUDE_DIR}")
        INCLUDE_DIRECTORIES(${MINGW_INCLUDE_DIR})
    ELSE()
        MESSAGE(FATAL_ERROR "Unable to find mingw headers. Required for windres")
    ENDIF()
    SET(CMAKE_RC_COMPILER_INIT windres)
    ENABLE_LANGUAGE(RC)
    SET(CMAKE_RC_COMPILE_OBJECT
      "<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -O coff -o <OBJECT> <SOURCE>")
ENDIF()

SET(FLAGS "${FLAGS} -DPACKAGE_VERSION=\\\"${VERSION}\\\"")
SET(FLAGS "${FLAGS} -DPKG_DATADIR=\\\"${PKG_DATADIR}/\\\"")
SET(FLAGS "${FLAGS} -DLOCALEDIR=\\\"${LOCALEDIR}/\\\"")

SET(FLAGS "${FLAGS} -std=c++0x")
SET(FLAGS "${FLAGS} -Woverloaded-virtual")

# Prevent clashes with icu namespace
SET(FLAGS "${FLAGS} -DU_USING_ICU_NAMESPACE=0")

# If the Sqlite option is enabled...
IF (WITH_SQLITE)
    FIND_PACKAGE(Sqlite3 REQUIRED)
    INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR})
    SET(FLAGS "${FLAGS} -DSQLITE_SUPPORT")
    SET(OPTIONAL_LIBRARIES ${OPTIONAL_LIBRARIES} ${SQLITE3_LIBRARIES})
ENDIF(WITH_SQLITE)

# If the MySQL option is enabled...
IF (WITH_MYSQL)
    FIND_PACKAGE(MySQL REQUIRED)
    INCLUDE_DIRECTORIES(${MYSQL_INCLUDE_DIR})
    SET(FLAGS "${FLAGS} -DMYSQL_SUPPORT")
    SET(OPTIONAL_LIBRARIES ${OPTIONAL_LIBRARIES} ${MYSQL_LIBRARIES})
ENDIF()

# If the postgreSQL option is enabled...
IF (WITH_POSTGRESQL)
    FIND_PACKAGE(PostgreSQL REQUIRED)
    INCLUDE_DIRECTORIES(${POSTGRESQL_INCLUDE_DIR})
    SET(FLAGS "${FLAGS} -DPOSTGRESQL_SUPPORT")
    SET(OPTIONAL_LIBRARIES ${OPTIONAL_LIBRARIES} ${POSTGRESQL_LIBRARIES})
ENDIF()

# If the Lua scripting language support is enabled...
IF (ENABLE_LUA)
    FIND_PACKAGE(Lua51 REQUIRED)
    INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR})
    SET(FLAGS "${FLAGS} -DBUILD_LUA")
    SET(OPTIONAL_LIBRARIES ${OPTIONAL_LIBRARIES} ${LUA_LIBRARIES})
ENDIF()

IF (CMAKE_BUILD_TYPE)
    STRING(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER)
    IF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug OR
       CMAKE_BUILD_TYPE_TOLOWER MATCHES relwithdebinfo)
        SET(FLAGS "${FLAGS} -DDEBUG")
    ENDIF()
ENDIF()

IF (WIN32)
    SET(EXTRA_LIBRARIES ws2_32 winmm)
    # GDI APIs Rectangle clashes with tmwserv classes
    SET(FLAGS "${FLAGS} -DNOGDI")
ELSEIF (CMAKE_SYSTEM_NAME STREQUAL SunOS)
    # explicit linking to libintl is required on Solaris
    SET(EXTRA_LIBRARIES intl)
ENDIF()

INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${PHYSFS_INCLUDE_DIR}
    ${LIBXML2_INCLUDE_DIR}
    ${SIGC++_INCLUDE_DIR}
    ${SIGC++Config_INCLUDE_DIR}
    )

# Fix some stuff that gets not hidden by mainline modules
MARK_AS_ADVANCED(PHYSFS_INCLUDE_DIR)
MARK_AS_ADVANCED(PHYSFS_LIBRARY)

SET(SRCS
    common/configuration.h
    common/configuration.cpp
    common/defines.h
    common/inventorydata.h
    common/manaserv_protocol.h
    common/resourcemanager.h
    common/resourcemanager.cpp
    net/bandwidth.h
    net/bandwidth.cpp
    net/connection.h
    net/connection.cpp
    net/connectionhandler.h
    net/connectionhandler.cpp
    net/messagein.h
    net/messagein.cpp
    net/messageout.h
    net/messageout.cpp
    net/netcomputer.h
    net/netcomputer.cpp
    utils/logger.h
    utils/logger.cpp
    utils/point.h
    utils/processorutils.h
    utils/processorutils.cpp
    utils/string.h
    utils/string.cpp
    utils/stringfilter.h
    utils/stringfilter.cpp
    utils/timer.h
    utils/timer.cpp
    utils/tokencollector.h
    utils/tokencollector.cpp
    utils/tokendispenser.h
    utils/tokendispenser.cpp
    utils/xml.h
    utils/xml.cpp
    )

SET(SRCS_MANASERVACCOUNT
    account-server/main-account.cpp
    account-server/account.h
    account-server/account.cpp
    account-server/accountclient.h
    account-server/accountclient.cpp
    account-server/accounthandler.h
    account-server/accounthandler.cpp
    account-server/character.h
    account-server/character.cpp
    account-server/flooritem.h
    account-server/mapmanager.h
    account-server/mapmanager.cpp
    account-server/serverhandler.h
    account-server/serverhandler.cpp
    account-server/storage.h
    account-server/storage.cpp
    chat-server/chathandler.h
    chat-server/chathandler.cpp
    chat-server/chatclient.h
    chat-server/chatchannel.h
    chat-server/chatchannel.cpp
    chat-server/chatchannelmanager.h
    chat-server/chatchannelmanager.cpp
    chat-server/guild.h
    chat-server/guild.cpp
    chat-server/guildhandler.cpp
    chat-server/guildmanager.h
    chat-server/guildmanager.cpp
    chat-server/party.cpp
    chat-server/party.h
    chat-server/partyhandler.cpp
    chat-server/post.cpp
    chat-server/post.h
    dal/dalexcept.h
    dal/dataprovider.h
    dal/dataprovider.cpp
    dal/dataproviderfactory.h
    dal/dataproviderfactory.cpp
    dal/recordset.h
    dal/recordset.cpp
    utils/functors.h
    utils/sha256.h
    utils/sha256.cpp
    utils/throwerror.h
    utils/time.h
    )

SET(SRCS_MANASERVGAME
    game-server/main-game.cpp
    common/permissionmanager.h
    common/permissionmanager.cpp
    game-server/abilitycomponent.cpp
    game-server/abilitycomponent.h
    game-server/abilitymanager.cpp
    game-server/abilitymanager.h
    game-server/accountconnection.h
    game-server/accountconnection.cpp
    game-server/actorcomponent.h
    game-server/actorcomponent.cpp
    game-server/attribute.h
    game-server/attribute.cpp
    game-server/attributemanager.h
    game-server/attributemanager.cpp
    game-server/being.h
    game-server/being.cpp
    game-server/buysell.h
    game-server/buysell.cpp
    game-server/charactercomponent.h
    game-server/charactercomponent.cpp
    game-server/collisiondetection.h
    game-server/collisiondetection.cpp
    game-server/commandhandler.cpp
    game-server/commandhandler.h
    game-server/component.h
    game-server/effect.h
    game-server/effect.cpp
    game-server/emotemanager.h
    game-server/emotemanager.cpp
    game-server/entity.h
    game-server/entity.cpp
    game-server/gamehandler.h
    game-server/gamehandler.cpp
    game-server/inventory.h
    game-server/inventory.cpp
    game-server/item.h
    game-server/item.cpp
    game-server/itemmanager.h
    game-server/itemmanager.cpp
    game-server/map.h
    game-server/map.cpp
    game-server/mapcomposite.h
    game-server/mapcomposite.cpp
    game-server/mapmanager.h
    game-server/mapmanager.cpp
    game-server/mapreader.h
    game-server/mapreader.cpp
    game-server/monster.h
    game-server/monster.cpp
    game-server/monstermanager.h
    game-server/monstermanager.cpp
    game-server/npc.h
    game-server/npc.cpp
    game-server/postman.h
    game-server/quest.h
    game-server/quest.cpp
    game-server/settingsmanager.h
    game-server/settingsmanager.cpp
    game-server/spawnareacomponent.h
    game-server/spawnareacomponent.cpp
    game-server/state.h
    game-server/state.cpp
    game-server/statuseffect.h
    game-server/statuseffect.cpp
    game-server/statusmanager.h
    game-server/statusmanager.cpp
    game-server/timeout.h
    game-server/timeout.cpp
    game-server/trade.h
    game-server/trade.cpp
    game-server/triggerareacomponent.h
    game-server/triggerareacomponent.cpp
    scripting/script.h
    scripting/script.cpp
    scripting/scriptmanager.h
    scripting/scriptmanager.cpp
    utils/base64.h
    utils/base64.cpp
    utils/mathutils.h
    utils/mathutils.cpp
    utils/speedconv.h
    utils/speedconv.cpp
    utils/zlib.h
    utils/zlib.cpp
    )

IF (WIN32)
    SET(SRCS_MANASERVACCOUNT ${SRCS_MANASERVACCOUNT} manaserv-account.rc)
    SET(SRCS_MANASERVGAME ${SRCS_MANASERVGAME} manaserv-game.rc)
ENDIF ()

IF (WITH_MYSQL)
    SET(SRCS_MANASERVACCOUNT ${SRCS_MANASERVACCOUNT}
    dal/mysqldataprovider.h
    dal/mysqldataprovider.cpp)
ENDIF()

IF (WITH_POSTGRESQL)
    SET(SRCS_MANASERVACCOUNT ${SRCS_MANASERVACCOUNT}
    dal/pqdataprovider.h
    dal/pqdataprovider.cpp)
ENDIF()

IF (WITH_SQLITE)
    SET(SRCS_MANASERVACCOUNT ${SRCS_MANASERVACCOUNT}
    dal/sqlitedataprovider.h
    dal/sqlitedataprovider.cpp)
ENDIF()

IF (ENABLE_LUA)
    SET(SRCS_MANASERVGAME ${SRCS_MANASERVGAME}
    scripting/lua.cpp
    scripting/luascript.cpp
    scripting/luascript.h
    scripting/luautil.cpp
    scripting/luautil.h)
ENDIF()


SET (PROGRAMS manaserv-account manaserv-game)

ADD_EXECUTABLE(manaserv-game WIN32 ${SRCS} ${SRCS_MANASERVGAME})
ADD_EXECUTABLE(manaserv-account WIN32 ${SRCS} ${SRCS_MANASERVACCOUNT})

FOREACH(program ${PROGRAMS})
    TARGET_LINK_LIBRARIES(${program} ${INTERNAL_LIBRARIES}
        ${PHYSFS_LIBRARY}
        ${LIBXML2_LIBRARIES}
        ${ZLIB_LIBRARIES}
        ${SIGC++_LIBRARIES}
        ${OPTIONAL_LIBRARIES}
        ${EXTRA_LIBRARIES})
    INSTALL(TARGETS ${program} RUNTIME DESTINATION ${PKG_BINDIR})
ENDFOREACH(program)

IF (CMAKE_SYSTEM_NAME STREQUAL SunOS)
    # we expect the SMCgtxt package to be present on Solaris;
    # the Solaris gettext is not API-compatible to GNU gettext
    SET_TARGET_PROPERTIES(manaserv-account PROPERTIES LINK_FLAGS "-L/usr/local/lib")
    SET_TARGET_PROPERTIES(manaserv-game PROPERTIES LINK_FLAGS "-L/usr/local/lib")
ENDIF()

SET_TARGET_PROPERTIES(manaserv-account PROPERTIES COMPILE_FLAGS "${FLAGS}")
SET_TARGET_PROPERTIES(manaserv-game PROPERTIES COMPILE_FLAGS "${FLAGS}")