FIND_PACKAGE(SDL REQUIRED)
FIND_PACKAGE(SDL_image REQUIRED)
FIND_PACKAGE(SDL_mixer REQUIRED)
FIND_PACKAGE(SDL_net REQUIRED)
FIND_PACKAGE(SDL_ttf REQUIRED)
FIND_PACKAGE(SDL_gfx REQUIRED)
FIND_PACKAGE(CURL REQUIRED)
FIND_PACKAGE(LibXml2 REQUIRED)
FIND_PACKAGE(PhysFS REQUIRED)
FIND_PACKAGE(PNG REQUIRED)
FIND_PACKAGE(Gettext REQUIRED)

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

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

IF (ENABLE_NLS)
    SET(FLAGS "${FLAGS} -DENABLE_NLS=1")
ENDIF()

IF (ENABLE_MANASERV)
    SET(FLAGS "${FLAGS} -DMANASERV_SUPPORT=1")
ENDIF()

IF (ENABLE_EATHENA)
    SET(FLAGS "${FLAGS} -DEATHENA_SUPPORT=1")
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)
    FIND_PACKAGE(LibIntl REQUIRED)
ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR BEOS)
    FIND_PACKAGE(LibIntl REQUIRED)
ELSEIF (CMAKE_SYSTEM_NAME STREQUAL SunOS)
    # explicit linking to libintl is required on Solaris
    SET(EXTRA_LIBRARIES intl)
ENDIF()

SET(FLAGS "${FLAGS} -DUSE_MUMBLE")

IF (WITH_OPENGL)
    FIND_PACKAGE(OpenGL REQUIRED)
    INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
    SET(FLAGS "${FLAGS} -DUSE_OPENGL")
ENDIF (WITH_OPENGL)

IF (USE_X11)
    FIND_PACKAGE(X11 REQUIRED)
    INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR})
    SET(FLAGS "${FLAGS} -DUSE_X11")
ENDIF (USE_X11)

INCLUDE_DIRECTORIES(
    "guichan/include"
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${SDL_INCLUDE_DIR}
    ${SDLIMAGE_INCLUDE_DIR}
    ${SDLMIXER_INCLUDE_DIR}
    ${SDLNET_INCLUDE_DIR}
    ${SDLTTF_INCLUDE_DIR}
    ${SDLGFX_INCLUDE_DIR}
    ${PNG_INCLUDE_DIR}
    ${PHYSFS_INCLUDE_DIR}
    ${CURL_INCLUDE_DIR}
    ${LIBXML2_INCLUDE_DIR}
    )

# 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()

# Fix some stuff that gets not hidden by mainline modules
MARK_AS_ADVANCED(PHYSFS_INCLUDE_DIR)
MARK_AS_ADVANCED(PHYSFS_LIBRARY)
MARK_AS_ADVANCED(SDLIMAGE_INCLUDE_DIR)
MARK_AS_ADVANCED(SDLIMAGE_LIBRARY)
MARK_AS_ADVANCED(SDLMAIN_LIBRARY)
MARK_AS_ADVANCED(SDLMIXER_INCLUDE_DIR)
MARK_AS_ADVANCED(SDLMIXER_LIBRARY)
MARK_AS_ADVANCED(SDLNET_INCLUDE_DIR)
MARK_AS_ADVANCED(SDLNET_LIBRARY)
MARK_AS_ADVANCED(SDL_INCLUDE_DIR)
MARK_AS_ADVANCED(SDL_LIBRARY)

SET(SRCS
    gui/widgets/avatarlistbox.cpp
    gui/widgets/avatarlistbox.h
    gui/widgets/battletab.cpp
    gui/widgets/battletab.h
    gui/widgets/browserbox.cpp
    gui/widgets/browserbox.h
    gui/widgets/button.cpp
    gui/widgets/button.h
    gui/widgets/chattab.cpp
    gui/widgets/chattab.h
    gui/widgets/checkbox.cpp
    gui/widgets/checkbox.h
    gui/widgets/container.cpp
    gui/widgets/container.h
    gui/widgets/desktop.cpp
    gui/widgets/desktop.h
    gui/widgets/dropdown.cpp
    gui/widgets/dropdown.h
    gui/widgets/emoteshortcutcontainer.cpp
    gui/widgets/emoteshortcutcontainer.h
    gui/widgets/extendedlistbox.cpp
    gui/widgets/extendedlistbox.h
    gui/widgets/extendedlistmodel.h
    gui/widgets/extendednamesmodel.cpp
    gui/widgets/extendednamesmodel.h
    gui/widgets/flowcontainer.cpp
    gui/widgets/flowcontainer.h
    gui/widgets/guildchattab.cpp
    gui/widgets/guildchattab.h
    gui/widgets/horizontcontainer.cpp
    gui/widgets/horizontcontainer.h
    gui/widgets/icon.cpp
    gui/widgets/icon.h
    gui/widgets/inttextfield.cpp
    gui/widgets/inttextfield.h
    gui/widgets/itemcontainer.cpp
    gui/widgets/itemcontainer.h
    gui/widgets/itemlinkhandler.cpp
    gui/widgets/itemlinkhandler.h
    gui/widgets/dropshortcutcontainer.cpp
    gui/widgets/dropshortcutcontainer.h
    gui/widgets/itemshortcutcontainer.cpp
    gui/widgets/itemshortcutcontainer.h
    gui/widgets/spellshortcutcontainer.cpp
    gui/widgets/spellshortcutcontainer.h
    gui/widgets/label.cpp
    gui/widgets/label.h
    gui/widgets/layout.cpp
    gui/widgets/layout.h
    gui/widgets/layouthelper.cpp
    gui/widgets/layouthelper.h
    gui/widgets/linkhandler.h
    gui/widgets/listbox.cpp
    gui/widgets/listbox.h
    gui/widgets/mouseevent.h
    gui/widgets/namesmodel.cpp
    gui/widgets/namesmodel.h
    gui/widgets/passwordfield.cpp
    gui/widgets/passwordfield.h
    gui/widgets/playerbox.cpp
    gui/widgets/playerbox.h
    gui/widgets/popup.cpp
    gui/widgets/popup.h
    gui/widgets/popuplist.cpp
    gui/widgets/popuplist.h
    gui/widgets/progressbar.cpp
    gui/widgets/progressbar.h
    gui/widgets/progressindicator.cpp
    gui/widgets/progressindicator.h
    gui/widgets/radiobutton.cpp
    gui/widgets/radiobutton.h
    gui/widgets/radiogroup.cpp
    gui/widgets/radiogroup.h
    gui/widgets/scrollarea.cpp
    gui/widgets/scrollarea.h
    gui/widgets/setupitem.cpp
    gui/widgets/setupitem.h
    gui/widgets/setuptab.cpp
    gui/widgets/setuptab.h
    gui/widgets/setuptabscroll.cpp
    gui/widgets/setuptabscroll.h
    gui/widgets/setuptouchitem.cpp
    gui/widgets/setuptouchitem.h
    gui/widgets/shopitems.cpp
    gui/widgets/shopitems.h
    gui/widgets/shoplistbox.cpp
    gui/widgets/shoplistbox.h
    gui/widgets/shortcutcontainer.cpp
    gui/widgets/shortcutcontainer.h
    gui/widgets/slider.cpp
    gui/widgets/slider.h
    gui/widgets/sliderlist.cpp
    gui/widgets/sliderlist.h
    gui/widgets/tab.cpp
    gui/widgets/tab.h
    gui/widgets/tabbedarea.cpp
    gui/widgets/tabbedarea.h
    gui/widgets/guitable.cpp
    gui/widgets/guitable.h
    gui/widgets/tablemodel.cpp
    gui/widgets/tablemodel.h
    gui/widgets/tabstrip.cpp
    gui/widgets/tabstrip.h
    gui/widgets/textbox.cpp
    gui/widgets/textbox.h
    gui/widgets/textfield.cpp
    gui/widgets/textfield.h
    gui/widgets/textpreview.cpp
    gui/widgets/textpreview.h
    gui/widgets/tradetab.cpp
    gui/widgets/tradetab.h
    gui/widgets/vertcontainer.cpp
    gui/widgets/vertcontainer.h
    gui/widgets/whispertab.cpp
    gui/widgets/whispertab.h
    gui/widgets/widget2.h
    gui/widgets/widgetgroup.cpp
    gui/widgets/widgetgroup.h
    gui/widgets/window.cpp
    gui/widgets/window.h
    gui/widgets/windowcontainer.cpp
    gui/widgets/windowcontainer.h
    gui/beingpopup.cpp
    gui/beingpopup.h
    gui/buydialog.cpp
    gui/buydialog.h
    gui/buyselldialog.cpp
    gui/buyselldialog.h
    gui/changeemaildialog.cpp
    gui/changeemaildialog.h
    gui/changepassworddialog.cpp
    gui/changepassworddialog.h
    gui/charselectdialog.cpp
    gui/charselectdialog.h
    gui/charcreatedialog.cpp
    gui/charcreatedialog.h
    gui/chatwindow.cpp
    gui/chatwindow.h
    gui/confirmdialog.cpp
    gui/confirmdialog.h
    gui/connectiondialog.cpp
    gui/connectiondialog.h
    gui/debugwindow.cpp
    gui/debugwindow.h
    gui/didyouknowwindow.cpp
    gui/didyouknowwindow.h
    gui/editserverdialog.cpp
    gui/editserverdialog.h
    gui/equipmentwindow.cpp
    gui/equipmentwindow.h
    gui/focushandler.cpp
    gui/focushandler.h
    gui/gui.cpp
    gui/gui.h
    gui/helpwindow.cpp
    gui/helpwindow.h
    gui/inventorywindow.cpp
    gui/inventorywindow.h
    gui/itempopup.cpp
    gui/itempopup.h
    gui/spellpopup.cpp
    gui/spellpopup.h
    gui/statuspopup.cpp
    gui/statuspopup.h
    gui/killstats.cpp
    gui/killstats.h
    gui/itemamountwindow.cpp
    gui/itemamountwindow.h
    gui/logindialog.cpp
    gui/logindialog.h
    gui/minimap.cpp
    gui/minimap.h
    gui/ministatuswindow.cpp
    gui/ministatuswindow.h
    gui/npcdialog.cpp
    gui/npcdialog.h
    gui/npcpostdialog.cpp
    gui/npcpostdialog.h
    gui/okdialog.cpp
    gui/okdialog.h
    gui/editdialog.cpp
    gui/editdialog.h
    gui/outfitwindow.cpp
    gui/outfitwindow.h
    gui/botcheckerwindow.cpp
    gui/botcheckerwindow.h
    gui/textcommandeditor.cpp
    gui/textcommandeditor.h
    gui/palette.cpp
    gui/palette.h
    gui/popupmenu.cpp
    gui/popupmenu.h
    gui/questswindow.cpp
    gui/questswindow.h
    gui/quitdialog.cpp
    gui/quitdialog.h
    gui/registerdialog.cpp
    gui/registerdialog.h
    gui/sdlinput.cpp
    gui/sdlinput.h
    gui/selldialog.cpp
    gui/selldialog.h
    gui/serverdialog.cpp
    gui/serverdialog.h
    gui/setup.cpp
    gui/setup.h
    gui/setup_audio.cpp
    gui/setup_audio.h
    gui/setup_colors.cpp
    gui/setup_colors.h
    gui/setup_joystick.cpp
    gui/setup_joystick.h
    gui/setup_other.cpp
    gui/setup_other.h
    gui/setup_theme.cpp
    gui/setup_theme.h
    gui/setup_touch.cpp
    gui/setup_touch.h
    gui/setup_chat.cpp
    gui/setup_chat.h
    gui/setup_input.cpp
    gui/setup_input.h
    gui/setup_perfomance.cpp
    gui/setup_perfomance.h
    gui/setup_relations.cpp
    gui/setup_relations.h
    gui/setup_players.cpp
    gui/setup_players.h
    gui/setup_video.cpp
    gui/setup_video.h
    gui/setup_visual.cpp
    gui/setup_visual.h
    gui/setupactiondata.h
    gui/sdlfont.cpp
    gui/sdlfont.h
    gui/shopwindow.cpp
    gui/shopwindow.h
    gui/shortcutwindow.cpp
    gui/shortcutwindow.h
    gui/skilldialog.cpp
    gui/skilldialog.h
    gui/socialwindow.cpp
    gui/socialwindow.h
    gui/speechbubble.cpp
    gui/speechbubble.h
    gui/statuswindow.cpp
    gui/statuswindow.h
    gui/textdialog.cpp
    gui/textdialog.h
    gui/textpopup.cpp
    gui/textpopup.h
    gui/theme.cpp
    gui/theme.h
    gui/tradewindow.cpp
    gui/tradewindow.h
    gui/unregisterdialog.cpp
    gui/unregisterdialog.h
    gui/updaterwindow.cpp
    gui/updaterwindow.h
    gui/userpalette.cpp
    gui/userpalette.h
    gui/viewport.cpp
    gui/viewport.h
    gui/whoisonline.cpp
    gui/whoisonline.h
    gui/windowmenu.cpp
    gui/windowmenu.h
    gui/worldselectdialog.cpp
    gui/worldselectdialog.h
    net/adminhandler.h
    net/charhandler.cpp
    net/charhandler.h
    net/chathandler.h
    net/download.cpp
    net/download.h
    net/gamehandler.h
    net/generalhandler.h
    net/guildhandler.h
    net/inventoryhandler.h
    net/logindata.h
    net/loginhandler.h
    net/messagehandler.h
    net/messagein.cpp
    net/messagein.h
    net/messageout.cpp
    net/messageout.h
    net/npchandler.h
    net/net.cpp
    net/net.h
    net/partyhandler.h
    net/playerhandler.h
    net/serverinfo.h
    net/specialhandler.h
    net/tradehandler.h
    net/worldinfo.h
    net/packetcounters.cpp
    net/packetcounters.h
    resources/action.cpp
    resources/action.h
    resources/ambientlayer.cpp
    resources/ambientlayer.h
    resources/animation.cpp
    resources/animation.h
    resources/atlasmanager.cpp
    resources/atlasmanager.h
    resources/beinginfo.cpp
    resources/beinginfo.h
    resources/chardb.cpp
    resources/chardb.h
    resources/colordb.cpp
    resources/colordb.h
    resources/cursor.cpp
    resources/cursor.h
    resources/dye.cpp
    resources/dye.h
    resources/emotedb.cpp
    resources/emotedb.h
    resources/fboinfo.h
    resources/image.cpp
    resources/image.h
    resources/imagehelper.cpp
    resources/imagehelper.h
    resources/imageset.h
    resources/imageset.cpp
    resources/imagewriter.cpp
    resources/imagewriter.h
    resources/itemdb.cpp
    resources/itemdb.h
    resources/iteminfo.h
    resources/iteminfo.cpp
    resources/mapdb.cpp
    resources/mapdb.h
    resources/mapreader.cpp
    resources/mapreader.h
    resources/monsterdb.cpp
    resources/monsterdb.h
    resources/npcdb.cpp
    resources/npcdb.h
    resources/openglimagehelper.cpp
    resources/openglimagehelper.h
    resources/resource.cpp
    resources/resource.h
    resources/resourcemanager.cpp
    resources/resourcemanager.h
    resources/sdlimagehelper.cpp
    resources/sdlimagehelper.h
    resources/sdlmusic.cpp
    resources/sdlmusic.h
    resources/soundeffect.h
    resources/soundeffect.cpp
    resources/spritedef.h
    resources/spritedef.cpp
    resources/subimage.cpp
    resources/subimage.h
    resources/wallpaper.cpp
    resources/wallpaper.h
    utils/translation/podict.cpp
    utils/translation/podict.h
    utils/translation/poparser.cpp
    utils/translation/poparser.h
    utils/translation/translationmanager.cpp
    utils/translation/translationmanager.h
    utils/base64.cpp
    utils/base64.h
    utils/checkutils.cpp
    utils/checkutils.h
    utils/copynpaste.cpp
    utils/copynpaste.h
    utils/dtor.h
    utils/gettext.h
    utils/langs.cpp
    utils/langs.h
    utils/mathutils.h
    utils/paths.cpp
    utils/paths.h
    utils/perfomance.cpp
    utils/perfomance.h
    utils/physfsrwops.cpp
    utils/physfsrwops.h
    utils/process.cpp
    utils/process.h
    utils/stringutils.cpp
    utils/stringutils.h
    utils/stringvector.h
    utils/mutex.h
    utils/mkdir.cpp
    utils/mkdir.h
    utils/xml.cpp
    utils/xml.h
    test/testlauncher.cpp
    test/testlauncher.h
    test/testmain.cpp
    test/testmain.h
    actionmanager.cpp
    actionmanager.h
    actor.cpp
    actor.h
    actorsprite.cpp
    actorsprite.h
    actorspritelistener.h
    actorspritemanager.cpp
    actorspritemanager.h
    animatedsprite.cpp
    animatedsprite.h
    animationdelayload.cpp
    animationdelayload.h
    animationparticle.cpp
    animationparticle.h
    auctionmanager.cpp
    auctionmanager.h
    avatar.cpp
    avatar.h
    being.cpp
    being.h
    spellmanager.cpp
    spellmanager.h
    chatlogger.cpp
    chatlogger.h
    client.cpp
    client.h
    commandhandler.cpp
    commandhandler.h
    commands.cpp
    commands.h
    compoundsprite.cpp
    compoundsprite.h
    configlistener.h
    configuration.cpp
    configuration.h
    debug.h
    defaults.cpp
    defaults.h
    depricatedevent.cpp
    depricatedevent.h
    effectmanager.cpp
    effectmanager.h
    emoteshortcut.cpp
    emoteshortcut.h
    equipment.h
    flooritem.cpp
    flooritem.h
    game.cpp
    game.h
    graphics.cpp
    graphics.h
    graphicsmanager.cpp
    graphicsmanager.h
    graphicsvertexes.cpp
    graphicsvertexes.h
    guild.cpp
    guild.h
    guildmanager.cpp
    guildmanager.h
    imageparticle.cpp
    imageparticle.h
    imagesprite.cpp
    imagesprite.h
    inventory.cpp
    inventory.h
    item.cpp
    item.h
    itemshortcut.cpp
    itemshortcut.h
    dropshortcut.cpp
    dropshortcut.h
    spellshortcut.cpp
    spellshortcut.h
    textcommand.cpp
    textcommand.h
    inputmanager.cpp
    inputmanager.h
    inputevent.cpp
    inputevent.h
    joystick.cpp
    joystick.h
    keyboardconfig.cpp
    keyboardconfig.h
    keyboarddata.h
    keydata.h
    keyevent.cpp
    keyevent.h
    keyinput.cpp
    keyinput.h
    listener.cpp
    listener.h
    localconsts.h
    localplayer.cpp
    localplayer.h
    logger.cpp
    logger.h
    main.cpp
    main.h
    map.cpp
    map.h
    maplayer.cpp
    maplayer.h
    mgl.cpp
    mgl.h
    mobileopenglgraphics.cpp
    mobileopenglgraphics.h
    mouseinput.cpp
    mouseinput.h
    normalopenglgraphics.cpp
    normalopenglgraphics.h
    particle.cpp
    particle.h
    particlecontainer.cpp
    particlecontainer.h
    particleemitter.cpp
    particleemitter.h
    particleemitterprop.h
    party.cpp
    party.h
    playerinfo.cpp
    playerinfo.h
    playerrelations.cpp
    playerrelations.h
    position.cpp
    position.h
    properties.h
    rotationalparticle.cpp
    rotationalparticle.h
    safeopenglgraphics.cpp
    safeopenglgraphics.h
    shopitem.cpp
    shopitem.h
    simpleanimation.cpp
    simpleanimation.h
    soundmanager.cpp
    soundmanager.h
    sprite.h
    statuseffect.cpp
    statuseffect.h
    text.cpp
    text.h
    textmanager.cpp
    textmanager.h
    textparticle.cpp
    textparticle.h
    tileset.h
    touchactions.cpp
    touchactions.h
    touchmanager.cpp
    touchmanager.h
    units.cpp
    units.h
    variabledata.h
    vector.cpp
    vector.h
    mumblemanager.cpp
    mumblemanager.h
    )

SET(SRCS_GUICHAN
    guichan/include/guichan/actionevent.hpp
    guichan/include/guichan/actionlistener.hpp
    guichan/include/guichan/basiccontainer.hpp
    guichan/include/guichan/cliprectangle.hpp
    guichan/include/guichan/color.hpp
    guichan/include/guichan/deathlistener.hpp
    guichan/include/guichan/event.hpp
    guichan/include/guichan/exception.hpp
    guichan/include/guichan/focushandler.hpp
    guichan/include/guichan/focuslistener.hpp
    guichan/include/guichan/font.hpp
    guichan/include/guichan/graphics.hpp
    guichan/include/guichan/gui.hpp
    guichan/include/guichan/image.hpp
    guichan/include/guichan/input.hpp
    guichan/include/guichan/inputevent.hpp
    guichan/include/guichan/key.hpp
    guichan/include/guichan/keyevent.hpp
    guichan/include/guichan/keyinput.hpp
    guichan/include/guichan/keylistener.hpp
    guichan/include/guichan/listmodel.hpp
    guichan/include/guichan/mouseevent.hpp
    guichan/include/guichan/mouseinput.hpp
    guichan/include/guichan/mouselistener.hpp
    guichan/include/guichan/platform.hpp
    guichan/include/guichan/rectangle.hpp
    guichan/include/guichan/selectionevent.hpp
    guichan/include/guichan/selectionlistener.hpp
    guichan/include/guichan/sdl/sdlgraphics.hpp
    guichan/include/guichan/sdl/sdlpixel.hpp
    guichan/include/guichan/widget.hpp
    guichan/include/guichan/widgetlistener.hpp
    guichan/include/guichan/widgets/button.hpp
    guichan/include/guichan/widgets/checkbox.hpp
    guichan/include/guichan/widgets/container.hpp
    guichan/include/guichan/widgets/label.hpp
    guichan/include/guichan/widgets/listbox.hpp
    guichan/include/guichan/widgets/radiobutton.hpp
    guichan/include/guichan/widgets/scrollarea.hpp
    guichan/include/guichan/widgets/slider.hpp
    guichan/include/guichan/widgets/textbox.hpp
    guichan/include/guichan/widgets/textfield.hpp
    guichan/include/guichan/widgets/window.hpp
    guichan/actionevent.cpp
    guichan/basiccontainer.cpp
    guichan/cliprectangle.cpp
    guichan/color.cpp
    guichan/event.cpp
    guichan/exception.cpp
    guichan/focushandler.cpp
    guichan/font.cpp
    guichan/graphics.cpp
    guichan/gui.cpp
    guichan/image.cpp
    guichan/inputevent.cpp
    guichan/key.cpp
    guichan/keyevent.cpp
    guichan/keyinput.cpp
    guichan/mouseevent.cpp
    guichan/mouseinput.cpp
    guichan/rectangle.cpp
    guichan/selectionevent.cpp
    guichan/widget.cpp
    guichan/sdl/sdlgraphics.cpp
    guichan/widgets/button.cpp
    guichan/widgets/checkbox.cpp
    guichan/widgets/container.cpp
    guichan/widgets/label.cpp
    guichan/widgets/listbox.cpp
    guichan/widgets/radiobutton.cpp
    guichan/widgets/scrollarea.cpp
    guichan/widgets/slider.cpp
    guichan/widgets/textbox.cpp
    guichan/widgets/textfield.cpp
    guichan/widgets/window.cpp
    )

SET(SRCS_EVOL
    net/ea/gui/guildtab.cpp
    net/ea/gui/guildtab.h
    net/ea/gui/partytab.cpp
    net/ea/gui/partytab.h
    net/ea/adminhandler.cpp
    net/ea/adminhandler.h
    net/ea/beinghandler.cpp
    net/ea/beinghandler.h
    net/ea/buysellhandler.cpp
    net/ea/buysellhandler.h
    net/ea/charserverhandler.cpp
    net/ea/charserverhandler.h
    net/ea/chathandler.cpp
    net/ea/chathandler.h
    net/ea/eaprotocol.h
    net/ea/gamehandler.cpp
    net/ea/gamehandler.h
    net/ea/guildhandler.cpp
    net/ea/guildhandler.h
    net/ea/inventoryhandler.cpp
    net/ea/inventoryhandler.h
    net/ea/itemhandler.cpp
    net/ea/itemhandler.h
    net/ea/loginhandler.cpp
    net/ea/loginhandler.h
    net/ea/network.cpp
    net/ea/network.h
    net/ea/npchandler.cpp
    net/ea/npchandler.h
    net/ea/partyhandler.cpp
    net/ea/partyhandler.h
    net/ea/playerhandler.cpp
    net/ea/playerhandler.h
    net/ea/specialhandler.cpp
    net/ea/specialhandler.h
    net/ea/token.h
    net/ea/tradehandler.cpp
    net/ea/tradehandler.h
    )

SET(SRCS_TMWA
    net/tmwa/gui/guildtab.cpp
    net/tmwa/gui/guildtab.h
    net/tmwa/gui/partytab.cpp
    net/tmwa/gui/partytab.h
    net/tmwa/adminhandler.cpp
    net/tmwa/adminhandler.h
    net/tmwa/beinghandler.cpp
    net/tmwa/beinghandler.h
    net/tmwa/buysellhandler.cpp
    net/tmwa/buysellhandler.h
    net/tmwa/charserverhandler.cpp
    net/tmwa/charserverhandler.h
    net/tmwa/chathandler.cpp
    net/tmwa/chathandler.h
    net/tmwa/gamehandler.cpp
    net/tmwa/gamehandler.h
    net/tmwa/generalhandler.cpp
    net/tmwa/generalhandler.h
    net/tmwa/guildhandler.cpp
    net/tmwa/guildhandler.h
    net/tmwa/inventoryhandler.cpp
    net/tmwa/inventoryhandler.h
    net/tmwa/itemhandler.cpp
    net/tmwa/itemhandler.h
    net/tmwa/loginhandler.cpp
    net/tmwa/loginhandler.h
    net/tmwa/messagehandler.cpp
    net/tmwa/messagehandler.h
    net/tmwa/messagein.cpp
    net/tmwa/messagein.h
    net/tmwa/messageout.cpp
    net/tmwa/messageout.h
    net/tmwa/network.cpp
    net/tmwa/network.h
    net/tmwa/npchandler.cpp
    net/tmwa/npchandler.h
    net/tmwa/partyhandler.cpp
    net/tmwa/partyhandler.h
    net/tmwa/playerhandler.cpp
    net/tmwa/playerhandler.h
    net/tmwa/protocol.h
    net/tmwa/questhandler.cpp
    net/tmwa/questhandler.h
    net/tmwa/specialhandler.cpp
    net/tmwa/specialhandler.h
    net/tmwa/tradehandler.cpp
    net/tmwa/tradehandler.h
    )

SET(SRCS_EATHENA
    net/eathena/gui/guildtab.cpp
    net/eathena/gui/guildtab.h
    net/eathena/gui/partytab.cpp
    net/eathena/gui/partytab.h
    net/eathena/adminhandler.cpp
    net/eathena/adminhandler.h
    net/eathena/beinghandler.cpp
    net/eathena/beinghandler.h
    net/eathena/buysellhandler.cpp
    net/eathena/buysellhandler.h
    net/eathena/charserverhandler.cpp
    net/eathena/charserverhandler.h
    net/eathena/chathandler.cpp
    net/eathena/chathandler.h
    net/eathena/gamehandler.cpp
    net/eathena/gamehandler.h
    net/eathena/generalhandler.cpp
    net/eathena/generalhandler.h
    net/eathena/guildhandler.cpp
    net/eathena/guildhandler.h
    net/eathena/inventoryhandler.cpp
    net/eathena/inventoryhandler.h
    net/eathena/itemhandler.cpp
    net/eathena/itemhandler.h
    net/eathena/loginhandler.cpp
    net/eathena/loginhandler.h
    net/eathena/messagehandler.cpp
    net/eathena/messagehandler.h
    net/eathena/messagein.cpp
    net/eathena/messagein.h
    net/eathena/messageout.cpp
    net/eathena/messageout.h
    net/eathena/network.cpp
    net/eathena/network.h
    net/eathena/npchandler.cpp
    net/eathena/npchandler.h
    net/eathena/partyhandler.cpp
    net/eathena/partyhandler.h
    net/eathena/playerhandler.cpp
    net/eathena/playerhandler.h
    net/eathena/protocol.h
    net/eathena/specialhandler.cpp
    net/eathena/specialhandler.h
    net/eathena/tradehandler.cpp
    net/eathena/tradehandler.h
    )

SET(SRCS_MANASERV
    gui/specialswindow.cpp
    gui/specialswindow.h
    utils/sha256.cpp
    utils/sha256.h
    net/manaserv/attributes.cpp
    net/manaserv/attributes.h
    net/manaserv/adminhandler.cpp
    net/manaserv/adminhandler.h
    net/manaserv/beinghandler.cpp
    net/manaserv/beinghandler.h
    net/manaserv/buysellhandler.cpp
    net/manaserv/buysellhandler.h
    net/manaserv/charhandler.cpp
    net/manaserv/charhandler.h
    net/manaserv/chathandler.cpp
    net/manaserv/chathandler.h
    net/manaserv/connection.cpp
    net/manaserv/connection.h
    net/manaserv/defines.h
    net/manaserv/effecthandler.cpp
    net/manaserv/effecthandler.h
    net/manaserv/gamehandler.cpp
    net/manaserv/gamehandler.h
    net/manaserv/generalhandler.cpp
    net/manaserv/generalhandler.h
    net/manaserv/guildhandler.cpp
    net/manaserv/guildhandler.h
    net/manaserv/internal.cpp
    net/manaserv/internal.h
    net/manaserv/inventoryhandler.cpp
    net/manaserv/inventoryhandler.h
    net/manaserv/itemhandler.h
    net/manaserv/itemhandler.cpp
    net/manaserv/loginhandler.cpp
    net/manaserv/loginhandler.h
    net/manaserv/messagehandler.cpp
    net/manaserv/messagehandler.h
    net/manaserv/messagein.cpp
    net/manaserv/messagein.h
    net/manaserv/messageout.cpp
    net/manaserv/messageout.h
    net/manaserv/network.cpp
    net/manaserv/network.h
    net/manaserv/npchandler.cpp
    net/manaserv/npchandler.h
    net/manaserv/partyhandler.cpp
    net/manaserv/partyhandler.h
    net/manaserv/playerhandler.cpp
    net/manaserv/playerhandler.h
    net/manaserv/protocol.h
    net/manaserv/specialhandler.cpp
    net/manaserv/specialhandler.h
    net/manaserv/tradehandler.cpp
    net/manaserv/tradehandler.h
    resources/specialdb.cpp
    resources/specialdb.h
    )

IF (WIN32)
    SET(SRCS
        ${SRCS}
        utils/specialfolder.cpp
        utils/specialfolder.h
        manaplus.rc
    )
ENDIF ()

SET (PROGRAMS manaplus)

IF (ENABLE_MANASERV)
    IF (ENABLE_EATHENA)
        ADD_EXECUTABLE(manaplus WIN32 ${SRCS_GUICHAN} ${SRCS} ${SRCS_MANASERV} ${SRCS_EATHENA} ${SRCS_TMWA} ${SRCS_EVOL})
    ELSE(ENABLE_EATHENA)
        ADD_EXECUTABLE(manaplus WIN32 ${SRCS_GUICHAN} ${SRCS} ${SRCS_MANASERV} ${SRCS_TMWA} ${SRCS_EVOL})
    ENDIF(ENABLE_EATHENA)
ELSE(ENABLE_MANASERV)
    IF (ENABLE_EATHENA)
        ADD_EXECUTABLE(manaplus WIN32 ${SRCS_GUICHAN} ${SRCS} ${SRCS_EATHENA} ${SRCS_TMWA} ${SRCS_EVOL})
    ELSE(ENABLE_EATHENA)
        ADD_EXECUTABLE(manaplus WIN32 ${SRCS_GUICHAN} ${SRCS} ${SRCS_TMWA} ${SRCS_EVOL})
    ENDIF(ENABLE_EATHENA)
ENDIF(ENABLE_MANASERV)

TARGET_LINK_LIBRARIES(manaplus
    ${SDLGFX_LIBRARIES}
    ${SDL_LIBRARY}
    ${SDLIMAGE_LIBRARY}
    ${SDLMIXER_LIBRARY}
    ${SDLNET_LIBRARY}
    ${SDLTTF_LIBRARY}
    ${PNG_LIBRARIES}
    ${PHYSFS_LIBRARY}
    ${CURL_LIBRARIES}
    ${LIBXML2_LIBRARIES}
    ${OPENGL_LIBRARIES}
    ${LIBINTL_LIBRARIES}
    ${EXTRA_LIBRARIES})
INSTALL(TARGETS manaplus RUNTIME DESTINATION ${PKG_BINDIR})

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(manaplus PROPERTIES LINK_FLAGS "-L/usr/local/lib")
ENDIF()

SET_TARGET_PROPERTIES(manaplus PROPERTIES COMPILE_FLAGS "${FLAGS}")