1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-22 22:13:35 +02:00
vcmi/client/CMakeLists.txt
Ivan Savenko 9fbeacb688 Fix possible memory corruption in video player
Fixes two bugs, one was definitely happening, and 2nd one that is causing
undefined behavior and may work only in some std implementations

- VideoPlayer would attempt to access subtitles widget after VideoPlayer
itself was destroyed in onPlaybackFinished call
- std::function was destroyed from a function that is being called by
it. Replaced with 1-method interface to avoid usage of std::function in
this scenario
2024-12-07 15:37:03 +00:00

493 lines
12 KiB
CMake

set(vcmiclientcommon_SRCS
StdInc.cpp
../CCallback.cpp
adventureMap/AdventureMapInterface.cpp
adventureMap/AdventureMapShortcuts.cpp
adventureMap/AdventureMapWidget.cpp
adventureMap/AdventureOptions.cpp
adventureMap/CInGameConsole.cpp
adventureMap/CInfoBar.cpp
adventureMap/CList.cpp
adventureMap/CMinimap.cpp
adventureMap/CResDataBar.cpp
adventureMap/MapAudioPlayer.cpp
adventureMap/TurnTimerWidget.cpp
battle/BattleActionsController.cpp
battle/BattleAnimationClasses.cpp
battle/BattleEffectsController.cpp
battle/BattleFieldController.cpp
battle/BattleInterface.cpp
battle/BattleInterfaceClasses.cpp
battle/BattleObstacleController.cpp
battle/BattleProjectileController.cpp
battle/BattleRenderer.cpp
battle/BattleSiegeController.cpp
battle/BattleStacksController.cpp
battle/BattleWindow.cpp
battle/CreatureAnimation.cpp
battle/BattleOverlayLogVisualizer.cpp
eventsSDL/NotificationHandler.cpp
eventsSDL/InputHandler.cpp
eventsSDL/InputSourceKeyboard.cpp
eventsSDL/InputSourceMouse.cpp
eventsSDL/InputSourceText.cpp
eventsSDL/InputSourceTouch.cpp
eventsSDL/InputSourceGameController.cpp
gui/CGuiHandler.cpp
gui/CIntObject.cpp
gui/CursorHandler.cpp
gui/EventDispatcher.cpp
gui/EventsReceiver.cpp
gui/InterfaceObjectConfigurable.cpp
gui/FramerateManager.cpp
gui/ShortcutHandler.cpp
gui/WindowHandler.cpp
lobby/CBonusSelection.cpp
lobby/CCampaignInfoScreen.cpp
lobby/CLobbyScreen.cpp
lobby/CSavingScreen.cpp
lobby/CScenarioInfoScreen.cpp
lobby/CSelectionBase.cpp
lobby/TurnOptionsTab.cpp
lobby/ExtraOptionsTab.cpp
lobby/OptionsTab.cpp
lobby/OptionsTabBase.cpp
lobby/RandomMapTab.cpp
lobby/SelectionTab.cpp
mainmenu/CCampaignScreen.cpp
mainmenu/CMainMenu.cpp
mainmenu/CPrologEpilogVideo.cpp
mainmenu/CreditsScreen.cpp
mainmenu/CHighScoreScreen.cpp
mainmenu/CStatisticScreen.cpp
mapView/MapRenderer.cpp
mapView/MapRendererContext.cpp
mapView/MapRendererContextState.cpp
mapView/MapView.cpp
mapView/MapViewActions.cpp
mapView/MapViewCache.cpp
mapView/MapViewController.cpp
mapView/MapViewModel.cpp
mapView/mapHandler.cpp
mapView/MapOverlayLogVisualizer.cpp
media/CAudioBase.cpp
media/CMusicHandler.cpp
media/CSoundHandler.cpp
media/CVideoHandler.cpp
render/AssetGenerator.cpp
render/CAnimation.cpp
render/CBitmapHandler.cpp
render/CDefFile.cpp
render/Canvas.cpp
render/ColorFilter.cpp
render/Colors.cpp
render/Graphics.cpp
render/IFont.cpp
render/ImageLocator.cpp
renderSDL/CBitmapFont.cpp
renderSDL/CTrueTypeFont.cpp
renderSDL/CursorHardware.cpp
renderSDL/CursorSoftware.cpp
renderSDL/FontChain.cpp
renderSDL/ImageScaled.cpp
renderSDL/RenderHandler.cpp
renderSDL/SDLImage.cpp
renderSDL/SDLImageLoader.cpp
renderSDL/SDLRWwrapper.cpp
renderSDL/ScreenHandler.cpp
renderSDL/SDL_Extensions.cpp
globalLobby/GlobalLobbyClient.cpp
globalLobby/GlobalLobbyInviteWindow.cpp
globalLobby/GlobalLobbyLoginWindow.cpp
globalLobby/GlobalLobbyRoomWindow.cpp
globalLobby/GlobalLobbyServerSetup.cpp
globalLobby/GlobalLobbyWidget.cpp
globalLobby/GlobalLobbyWindow.cpp
widgets/Buttons.cpp
widgets/CComponent.cpp
widgets/CComponentHolder.cpp
widgets/CExchangeController.cpp
widgets/CGarrisonInt.cpp
widgets/CreatureCostBox.cpp
widgets/ComboBox.cpp
widgets/CTextInput.cpp
widgets/GraphicalPrimitiveCanvas.cpp
widgets/Images.cpp
widgets/MiscWidgets.cpp
widgets/ObjectLists.cpp
widgets/TextControls.cpp
widgets/Scrollable.cpp
widgets/Slider.cpp
widgets/CArtifactsOfHeroBase.cpp
widgets/CArtifactsOfHeroMain.cpp
widgets/CArtifactsOfHeroKingdom.cpp
widgets/CArtifactsOfHeroAltar.cpp
widgets/CArtifactsOfHeroMarket.cpp
widgets/CArtifactsOfHeroBackpack.cpp
widgets/RadialMenu.cpp
widgets/VideoWidget.cpp
widgets/markets/CAltarArtifacts.cpp
widgets/markets/CAltarCreatures.cpp
widgets/markets/CArtifactsBuying.cpp
widgets/markets/CArtifactsSelling.cpp
widgets/markets/CFreelancerGuild.cpp
widgets/markets/CMarketResources.cpp
widgets/markets/CTransferResources.cpp
widgets/markets/CMarketBase.cpp
widgets/markets/TradePanels.cpp
windows/CCastleInterface.cpp
windows/CCreatureWindow.cpp
windows/CExchangeWindow.cpp
windows/CHeroOverview.cpp
windows/CHeroWindow.cpp
windows/CKingdomInterface.cpp
windows/CMapOverview.cpp
windows/CMarketWindow.cpp
windows/CMessage.cpp
windows/CPuzzleWindow.cpp
windows/CQuestLog.cpp
windows/CSpellWindow.cpp
windows/CTutorialWindow.cpp
windows/CWindowObject.cpp
windows/CreaturePurchaseCard.cpp
windows/GUIClasses.cpp
windows/InfoWindows.cpp
windows/QuickRecruitmentWindow.cpp
windows/CHeroBackpackWindow.cpp
windows/CWindowWithArtifacts.cpp
windows/settings/GeneralOptionsTab.cpp
windows/settings/OtherOptionsTab.cpp
windows/settings/SettingsMainWindow.cpp
windows/settings/BattleOptionsTab.cpp
windows/settings/AdventureOptionsTab.cpp
xBRZ/xbrz.cpp
ArtifactsUIController.cpp
CGameInfo.cpp
CPlayerInterface.cpp
PlayerLocalState.cpp
CServerHandler.cpp
Client.cpp
ClientCommandManager.cpp
GameChatHandler.cpp
HeroMovementController.cpp
NetPacksClient.cpp
NetPacksLobbyClient.cpp
ServerRunner.cpp
)
set(vcmiclientcommon_HEADERS
StdInc.h
adventureMap/AdventureMapInterface.h
adventureMap/AdventureMapShortcuts.h
adventureMap/AdventureMapWidget.h
adventureMap/AdventureState.h
adventureMap/AdventureOptions.h
adventureMap/CInGameConsole.h
adventureMap/CInfoBar.h
adventureMap/CList.h
adventureMap/CMinimap.h
adventureMap/CResDataBar.h
adventureMap/MapAudioPlayer.h
adventureMap/TurnTimerWidget.h
battle/BattleActionsController.h
battle/BattleAnimationClasses.h
battle/BattleConstants.h
battle/BattleEffectsController.h
battle/BattleFieldController.h
battle/BattleInterface.h
battle/BattleInterfaceClasses.h
battle/BattleObstacleController.h
battle/BattleProjectileController.h
battle/BattleRenderer.h
battle/BattleSiegeController.h
battle/BattleStacksController.h
battle/BattleWindow.h
battle/CreatureAnimation.h
battle/BattleOverlayLogVisualizer.h
eventsSDL/NotificationHandler.h
eventsSDL/InputHandler.h
eventsSDL/InputSourceKeyboard.h
eventsSDL/InputSourceMouse.h
eventsSDL/InputSourceText.h
eventsSDL/InputSourceTouch.h
eventsSDL/InputSourceGameController.h
gui/CGuiHandler.h
gui/CIntObject.h
gui/CursorHandler.h
gui/EventDispatcher.h
gui/EventsReceiver.h
gui/InterfaceObjectConfigurable.h
gui/FramerateManager.h
gui/MouseButton.h
gui/Shortcut.h
gui/ShortcutHandler.h
gui/TextAlignment.h
gui/WindowHandler.h
lobby/CBonusSelection.h
lobby/CCampaignInfoScreen.h
lobby/CLobbyScreen.h
lobby/CSavingScreen.h
lobby/CScenarioInfoScreen.h
lobby/CSelectionBase.h
lobby/TurnOptionsTab.h
lobby/ExtraOptionsTab.h
lobby/OptionsTab.h
lobby/OptionsTabBase.h
lobby/RandomMapTab.h
lobby/SelectionTab.h
mainmenu/CCampaignScreen.h
mainmenu/CMainMenu.h
mainmenu/CPrologEpilogVideo.h
mainmenu/CreditsScreen.h
mainmenu/CHighScoreScreen.h
mainmenu/CStatisticScreen.h
mapView/IMapRendererContext.h
mapView/IMapRendererObserver.h
mapView/MapRenderer.h
mapView/MapRendererContext.h
mapView/MapRendererContextState.h
mapView/MapView.h
mapView/MapViewActions.h
mapView/MapViewCache.h
mapView/MapViewController.h
mapView/MapViewModel.h
mapView/mapHandler.h
mapView/MapOverlayLogVisualizer.h
media/CAudioBase.h
media/CEmptyVideoPlayer.h
media/CMusicHandler.h
media/CSoundHandler.h
media/CVideoHandler.h
media/IMusicPlayer.h
media/ISoundPlayer.h
media/IVideoPlayer.h
render/AssetGenerator.h
render/CAnimation.h
render/CBitmapHandler.h
render/CDefFile.h
render/Canvas.h
render/ColorFilter.h
render/Colors.h
render/EFont.h
render/Graphics.h
render/ICursor.h
render/IFont.h
render/IImage.h
render/IImageLoader.h
render/ImageLocator.h
render/IRenderHandler.h
render/IScreenHandler.h
renderSDL/CBitmapFont.h
renderSDL/CTrueTypeFont.h
renderSDL/CursorHardware.h
renderSDL/CursorSoftware.h
renderSDL/FontChain.h
renderSDL/ImageScaled.h
renderSDL/RenderHandler.h
renderSDL/SDLImage.h
renderSDL/SDLImageLoader.h
renderSDL/SDLRWwrapper.h
renderSDL/ScreenHandler.h
renderSDL/SDL_Extensions.h
renderSDL/SDL_PixelAccess.h
globalLobby/GlobalLobbyClient.h
globalLobby/GlobalLobbyDefines.h
globalLobby/GlobalLobbyInviteWindow.h
globalLobby/GlobalLobbyLoginWindow.h
globalLobby/GlobalLobbyRoomWindow.h
globalLobby/GlobalLobbyServerSetup.h
globalLobby/GlobalLobbyObserver.h
globalLobby/GlobalLobbyWidget.h
globalLobby/GlobalLobbyWindow.h
widgets/Buttons.h
widgets/CComponent.h
widgets/CComponentHolder.h
widgets/CExchangeController.h
widgets/CGarrisonInt.h
widgets/CreatureCostBox.h
widgets/ComboBox.h
widgets/CTextInput.h
widgets/GraphicalPrimitiveCanvas.h
widgets/Images.h
widgets/MiscWidgets.h
widgets/ObjectLists.h
widgets/TextControls.h
widgets/Scrollable.h
widgets/Slider.h
widgets/CArtifactsOfHeroBase.h
widgets/CArtifactsOfHeroMain.h
widgets/CArtifactsOfHeroKingdom.h
widgets/CArtifactsOfHeroAltar.h
widgets/CArtifactsOfHeroMarket.h
widgets/CArtifactsOfHeroBackpack.h
widgets/IVideoHolder.h
widgets/RadialMenu.h
widgets/VideoWidget.h
widgets/markets/CAltarArtifacts.h
widgets/markets/CAltarCreatures.h
widgets/markets/CArtifactsBuying.h
widgets/markets/CArtifactsSelling.h
widgets/markets/CFreelancerGuild.h
widgets/markets/CMarketResources.h
widgets/markets/CTransferResources.h
widgets/markets/CMarketBase.h
widgets/markets/TradePanels.h
windows/CCastleInterface.h
windows/CCreatureWindow.h
windows/CExchangeWindow.h
windows/CHeroOverview.h
windows/CHeroWindow.h
windows/CKingdomInterface.h
windows/CMessage.h
windows/CMapOverview.h
windows/CMarketWindow.h
windows/CPuzzleWindow.h
windows/CQuestLog.h
windows/CSpellWindow.h
windows/CTutorialWindow.h
windows/CWindowObject.h
windows/CreaturePurchaseCard.h
windows/GUIClasses.h
windows/InfoWindows.h
windows/QuickRecruitmentWindow.h
windows/CHeroBackpackWindow.h
windows/CWindowWithArtifacts.h
windows/settings/GeneralOptionsTab.h
windows/settings/OtherOptionsTab.h
windows/settings/SettingsMainWindow.h
windows/settings/BattleOptionsTab.h
windows/settings/AdventureOptionsTab.h
xBRZ/xbrz.h
xBRZ/xbrz_tools.h
ArtifactsUIController.h
CGameInfo.h
CMT.h
CPlayerInterface.h
PlayerLocalState.h
CServerHandler.h
Client.h
ClientCommandManager.h
ClientNetPackVisitors.h
ConditionalWait.h
HeroMovementController.h
GameChatHandler.h
LobbyClientNetPackVisitors.h
ServerRunner.h
resource.h
)
if(APPLE_IOS)
set(vcmiclientcommon_SRCS ${vcmiclientcommon_SRCS}
ios/utils.mm
)
set(vcmiclientcommon_HEADERS ${vcmiclientcommon_HEADERS}
ios/utils.h
)
endif()
assign_source_group(${vcmiclientcommon_SRCS} ${vcmiclientcommon_HEADERS})
add_library(vcmiclientcommon STATIC ${vcmiclientcommon_SRCS} ${vcmiclientcommon_HEADERS})
if(NOT ENABLE_STATIC_LIBS)
add_dependencies(vcmiclientcommon
BattleAI
EmptyAI
StupidAI
VCAI
)
if(ENABLE_NULLKILLER_AI)
add_dependencies(vcmiclientcommon Nullkiller)
endif()
endif()
if(APPLE_IOS)
if(ENABLE_ERM)
add_dependencies(vcmiclientcommon vcmiERM)
endif()
if(ENABLE_LUA)
add_dependencies(vcmiclientcommon vcmiLua)
endif()
endif()
if(WIN32)
set_target_properties(vcmiclientcommon
PROPERTIES
OUTPUT_NAME "VCMI_vcmiclientcommon"
PROJECT_LABEL "VCMI_vcmiclientcommon"
)
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT vcmiclientcommon)
if(NOT ENABLE_DEBUG_CONSOLE)
target_link_libraries(vcmiclientcommon SDL2::SDL2main)
endif()
target_compile_definitions(vcmiclientcommon PRIVATE WINDOWS_IGNORE_PACKING_MISMATCH)
elseif(APPLE_IOS)
target_link_libraries(vcmiclientcommon PRIVATE
iOS_utils
# FFmpeg
bz2
iconv
z
"-framework AudioToolbox"
"-framework AVFoundation"
"-framework CoreMedia"
"-framework VideoToolbox"
)
endif()
target_link_libraries(vcmiclientcommon PRIVATE vcmiservercommon)
target_link_libraries(vcmiclientcommon PUBLIC
vcmi SDL2::SDL2 SDL2::Image SDL2::Mixer SDL2::TTF
)
if(ffmpeg_LIBRARIES)
target_link_libraries(vcmiclientcommon PRIVATE
${ffmpeg_LIBRARIES}
)
else()
target_compile_definitions(vcmiclientcommon PRIVATE DISABLE_VIDEO)
endif()
target_include_directories(vcmiclientcommon PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
)
if (ffmpeg_INCLUDE_DIRS)
target_include_directories(vcmiclientcommon PRIVATE
${ffmpeg_INCLUDE_DIRS}
)
endif()
vcmi_set_output_dir(vcmiclientcommon "")
enable_pch(vcmiclientcommon)