From 9f01515e787e6de453b7bf553147bfdd4014fa09 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Tue, 6 Jun 2023 19:32:58 -0500 Subject: [PATCH] library containment: after execution of found cmakelists.txt files, searh the engine/lib and apname/data directories recursively for a *torque_postbuild.cmake file, including the contents, to ensure any values used, such as TORQUE_LINK_LIBRARIES remain in parent scope --- Engine/lib/Torque_postBuild.cmake | 43 +++++++++++++ Engine/lib/libogg/CMakeLists.txt | 2 - Engine/lib/libogg/Torque_postBuild.cmake | 1 + Engine/lib/libtheora/CMakeLists.txt | 2 +- Engine/lib/libtheora/Torque_postBuild.cmake | 1 + Engine/lib/libvorbis/CMakeLists.txt | 2 +- Engine/lib/libvorbis/Torque_postBuild.cmake | 1 + .../nativeFileDialogs/Torque_postBuild.cmake | 1 + Engine/source/CMakeLists.txt | 63 ++++++------------- 9 files changed, 69 insertions(+), 47 deletions(-) create mode 100644 Engine/lib/Torque_postBuild.cmake create mode 100644 Engine/lib/libogg/Torque_postBuild.cmake create mode 100644 Engine/lib/libtheora/Torque_postBuild.cmake create mode 100644 Engine/lib/libvorbis/Torque_postBuild.cmake create mode 100644 Engine/lib/nativeFileDialogs/Torque_postBuild.cmake diff --git a/Engine/lib/Torque_postBuild.cmake b/Engine/lib/Torque_postBuild.cmake new file mode 100644 index 000000000..d5863dd61 --- /dev/null +++ b/Engine/lib/Torque_postBuild.cmake @@ -0,0 +1,43 @@ +################# Set Engine Linkages ################### + +# When on Windows, we need to link against winsock and windows codecs +if (WIN32) + set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} WS2_32.LIB windowscodecs.lib) + if (TORQUE_D3D11) + set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} dxguid.lib) + endif (TORQUE_D3D11) +endif (WIN32) + +# Only link Apple frameworks when on an Apple platform +if (APPLE) + addFramework("Cocoa") + addFramework("AppKit") + addFramework("CoreData") + addFramework("Foundation") + #These are needed by sdl2 static lib + addFramework("ForceFeedback") + addFramework("IOKit") + #grrr damn you sdl! + addFramework("Carbon") + set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} iconv) + if(NOT TORQUE_DEDICATED) + addFramework("OpenGL") + addFramework("CoreVideo") + if(TORQUE_SFX_OPENAL) + addFramework("OpenAL") + addFramework("CoreAudio") + addFramework("AudioUnit") + addFramework("AudioToolbox") + endif(TORQUE_SFX_OPENAL) + endif() +endif (APPLE) + +set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} nativeFileDialogs) + +# Linux requires X11 & freetype +if (UNIX AND NOT APPLE) + set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "X11" "Xft" "dl" "pthread") + find_package(Freetype REQUIRED) + set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS}) + set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} ${FREETYPE_LIBRARIES}) +endif (UNIX AND NOT APPLE) \ No newline at end of file diff --git a/Engine/lib/libogg/CMakeLists.txt b/Engine/lib/libogg/CMakeLists.txt index e7907025a..19e375da2 100644 --- a/Engine/lib/libogg/CMakeLists.txt +++ b/Engine/lib/libogg/CMakeLists.txt @@ -6,6 +6,4 @@ add_library(libogg ${LIBOGG_FILES}) set_target_properties(libogg PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(libogg PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") - set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${CMAKE_CURRENT_SOURCE_DIR}/include") - #set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libogg) #endif() \ No newline at end of file diff --git a/Engine/lib/libogg/Torque_postBuild.cmake b/Engine/lib/libogg/Torque_postBuild.cmake new file mode 100644 index 000000000..428206379 --- /dev/null +++ b/Engine/lib/libogg/Torque_postBuild.cmake @@ -0,0 +1 @@ +set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libogg) \ No newline at end of file diff --git a/Engine/lib/libtheora/CMakeLists.txt b/Engine/lib/libtheora/CMakeLists.txt index 8bb8c1fd5..65934fa3e 100644 --- a/Engine/lib/libtheora/CMakeLists.txt +++ b/Engine/lib/libtheora/CMakeLists.txt @@ -19,5 +19,5 @@ target_link_libraries(libtheora PUBLIC libogg) target_compile_definitions(libtheora PUBLIC ${LIBTHEORA_COMPILE_DEFINES}) set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${CMAKE_CURRENT_SOURCE_DIR}/include/theora") - #set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libtheora) + #set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libtheora PARENT_SCOPE) #endif() \ No newline at end of file diff --git a/Engine/lib/libtheora/Torque_postBuild.cmake b/Engine/lib/libtheora/Torque_postBuild.cmake new file mode 100644 index 000000000..d5a1ed607 --- /dev/null +++ b/Engine/lib/libtheora/Torque_postBuild.cmake @@ -0,0 +1 @@ +set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libtheora) \ No newline at end of file diff --git a/Engine/lib/libvorbis/CMakeLists.txt b/Engine/lib/libvorbis/CMakeLists.txt index 0e263520e..881699923 100644 --- a/Engine/lib/libvorbis/CMakeLists.txt +++ b/Engine/lib/libvorbis/CMakeLists.txt @@ -13,5 +13,5 @@ endif (UNIX) set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${CMAKE_CURRENT_SOURCE_DIR}/include/vorbis") - #set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libvorbis) + #set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libvorbis PARENT_SCOPE) #endif() \ No newline at end of file diff --git a/Engine/lib/libvorbis/Torque_postBuild.cmake b/Engine/lib/libvorbis/Torque_postBuild.cmake new file mode 100644 index 000000000..00d73a9c2 --- /dev/null +++ b/Engine/lib/libvorbis/Torque_postBuild.cmake @@ -0,0 +1 @@ +set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libvorbis) \ No newline at end of file diff --git a/Engine/lib/nativeFileDialogs/Torque_postBuild.cmake b/Engine/lib/nativeFileDialogs/Torque_postBuild.cmake new file mode 100644 index 000000000..9f2ad60b3 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/Torque_postBuild.cmake @@ -0,0 +1 @@ +set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} nativeFileDialogs) \ No newline at end of file diff --git a/Engine/source/CMakeLists.txt b/Engine/source/CMakeLists.txt index 50ea9d224..89b42e791 100644 --- a/Engine/source/CMakeLists.txt +++ b/Engine/source/CMakeLists.txt @@ -28,46 +28,14 @@ endif (APPLE) # When on Windows, we need to link against winsock and windows codecs if (WIN32) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} WS2_32.LIB windowscodecs.lib) - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_WIN_SOURCES}) - - if (TORQUE_D3D11) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} dxguid.lib) - endif (TORQUE_D3D11) + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_WIN_SOURCES}) endif (WIN32) -# Only link Apple frameworks when on an Apple platform -if (APPLE) - addFramework("Cocoa") - addFramework("AppKit") - addFramework("CoreData") - addFramework("Foundation") - #These are needed by sdl2 static lib - addFramework("ForceFeedback") - addFramework("IOKit") - #grrr damn you sdl! - addFramework("Carbon") - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} iconv) - if(NOT TORQUE_DEDICATED) - addFramework("OpenGL") - addFramework("CoreVideo") - if(TORQUE_SFX_OPENAL) - addFramework("OpenAL") - addFramework("CoreAudio") - addFramework("AudioUnit") - addFramework("AudioToolbox") - endif(TORQUE_SFX_OPENAL) - endif() -endif (APPLE) - # Linux requires X11 & freetype if (UNIX AND NOT APPLE) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} "X11" "Xft" "dl" "pthread") - set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_X11_SOURCES}) - + set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_X11_SOURCES}) find_package(Freetype REQUIRED) set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS}) - set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} ${FREETYPE_LIBRARIES}) endif (UNIX AND NOT APPLE) ################# Collect Source Files ################### @@ -84,8 +52,6 @@ torqueAddSourceDirectories("platform" "platform/threads" "platform/async" torqueAddSourceDirectories("platform/nativeDialogs") -set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} nativeFileDialogs) - # Handle T3D torqueAddSourceDirectories("T3D/fps" "T3D/fx" "T3D/vehicles" "T3D/physics" "T3D/decal" "T3D/sfx" "T3D/gameBase" "T3D/turret" @@ -107,9 +73,6 @@ if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED) torqueAddSourceDirectories("sfx/openal/mac") endif() endif() -set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libogg) -set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libvorbis) -set(TORQUE_LINK_LIBRARIES ${TORQUE_LINK_LIBRARIES} libtheora) # Handle GFX torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" "gfx/util" "gfx/video" "gfx/sim" ) @@ -268,11 +231,11 @@ foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS}) foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS}) include(${TORQUE_MODULE_SCRIPT}) - # Add this script's collected files to our Engine group - source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) + # Add this script's collected files to our Engine group + source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) - set(TORQUE_SOURCE_FILES "") + set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES}) + set(TORQUE_SOURCE_FILES "") endforeach() # Next find sub projects, these can introduce new source files @@ -294,6 +257,20 @@ endforeach() set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY}) +################# Library Post-build Handling ################### +set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data") +if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "") + list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}") +endif() + +foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS}) + # First find simple cmake scripts, mostly used for in-engine libraries + file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake") + #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}") + foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS}) + include(${TORQUE_LIBRARY_SCRIPT}) + endforeach() +endforeach() ################# Dynamic File Configuration ################### # Prepare Windows RC file