Description: Use packaged imgui instead of downloading and compiling it
Author: Simon Schmeisser <s.schmeisser@gmx.net>
Last-Update: 2020-10-27
--- a/Components/Overlay/CMakeLists.txt
+++ b/Components/Overlay/CMakeLists.txt
@@ -19,21 +19,8 @@
 file(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
 
 if(OGRE_BUILD_COMPONENT_OVERLAY_IMGUI)
-  set(IMGUI_DIR "${PROJECT_BINARY_DIR}/imgui-1.79" CACHE PATH "")
-  if(NOT EXISTS ${IMGUI_DIR})
-    message(STATUS "Downloading imgui")
-    file(DOWNLOAD
-        https://github.com/ocornut/imgui/archive/v1.79.tar.gz
-        ${PROJECT_BINARY_DIR}/imgui.tar.gz)
-    execute_process(COMMAND ${CMAKE_COMMAND}
-        -E tar xf imgui.tar.gz WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
-  endif()
-  list(APPEND SOURCE_FILES
-    ${IMGUI_DIR}/imgui.cpp
-    ${IMGUI_DIR}/imgui_draw.cpp
-    ${IMGUI_DIR}/imgui_widgets.cpp
-    ${IMGUI_DIR}/imgui_demo.cpp
-    ${IMGUI_DIR}/misc/freetype/imgui_freetype.cpp)
+    pkg_check_modules(IMGUI REQUIRED IMPORTED_TARGET GLOBAL imgui)
+    pkg_check_modules(STB REQUIRED IMPORTED_TARGET GLOBAL stb)
 else()
     list(REMOVE_ITEM SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/OgreImGuiOverlay.cpp")
 endif()
@@ -52,23 +39,7 @@
     PUBLIC "$<BUILD_INTERFACE:${IMGUI_DIR}>"
     PRIVATE "$<BUILD_INTERFACE:${IMGUI_DIR}/misc/freetype>")
 
-  if(UNIX)
-    set_source_files_properties(${IMGUI_DIR}/misc/freetype/imgui_freetype.cpp PROPERTIES
-      COMPILE_FLAGS "-Wno-missing-declarations")
-
-    set_source_files_properties(${IMGUI_DIR}/imgui_widgets.cpp PROPERTIES
-      COMPILE_FLAGS "-Wno-cast-qual")
-    set_source_files_properties(${IMGUI_DIR}/imgui_draw.cpp PROPERTIES
-      COMPILE_FLAGS "-Wno-cast-qual")
-    set_source_files_properties(${IMGUI_DIR}/imgui.cpp PROPERTIES
-      COMPILE_FLAGS "-Wno-cast-qual")
-  endif()
-
-  configure_file(${OGRE_TEMPLATES_DIR}/imconfig.h ${IMGUI_DIR}/imconfig.h COPYONLY)
-
-  list(APPEND HEADER_FILES
-    ${IMGUI_DIR}/imgui.h
-    ${IMGUI_DIR}/imconfig.h)
+  target_link_libraries(OgreOverlay PRIVATE PkgConfig::IMGUI PkgConfig::STB)
 endif()
 
 generate_export_header(OgreOverlay 
@@ -84,4 +55,4 @@
 )
 install(FILES "${PROJECT_SOURCE_DIR}/Media/packs/profiler.zip"
   DESTINATION "${OGRE_MEDIA_PATH}/packs/"
-)
\ No newline at end of file
+)
--- a/Components/Python/CMakeLists.txt
+++ b/Components/Python/CMakeLists.txt
@@ -18,8 +18,14 @@
 endif()
 
 if(OGRE_BUILD_COMPONENT_OVERLAY_IMGUI)
-    include_directories("${IMGUI_DIR}")
-    list(APPEND CMAKE_SWIG_FLAGS -DHAVE_IMGUI -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS)
+    include_directories("${IMGUI_INCLUDE_DIRS}" ${STB_INCLUDE_DIRS})
+    # needs to match flags used in imgui, should be exported by pkgconfig
+    #list(APPEND CMAKE_SWIG_FLAGS -DHAVE_IMGUI -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS)
+    list(APPEND CMAKE_SWIG_FLAGS -DHAVE_IMGUI -DIMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
+        -DIMGUI_STB_RECT_PACK_FILENAME="<stb/stb_rect_pack.h>"
+        -DIMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
+        -DIMGUI_STB_TRUETYPE_FILENAME="<stb/stb_truetype.h>"
+    )
 endif()
 
 macro(ogre_python_module target)
@@ -55,7 +61,7 @@
 if(OGRE_BUILD_COMPONENT_OVERLAY)
     set_source_files_properties(../Overlay/include/OgreOverlay.i PROPERTIES CPLUSPLUS ON)
     swig_add_module(Overlay python ../Overlay/include/OgreOverlay.i)
-    swig_link_libraries(Overlay OgreOverlay ${PYTHON_LIBRARIES})
+    swig_link_libraries(Overlay OgreOverlay ${PYTHON_LIBRARIES}  PkgConfig::IMGUI PkgConfig::STB)
     ogre_python_module(Overlay)
 endif()
 
--- a/Components/Bites/CMakeLists.txt
+++ b/Components/Bites/CMakeLists.txt
@@ -132,7 +132,7 @@
 # setup target
 add_library(OgreBites ${OGRE_COMP_LIB_TYPE} ${HEADER_FILES} ${SOURCES})
 set_target_properties(OgreBites PROPERTIES VERSION ${OGRE_SOVERSION} SOVERSION ${OGRE_SOVERSION})
-target_link_libraries(OgreBites PUBLIC OgreMain OgreOverlay PRIVATE ${DEPENDENCIES})
+target_link_libraries(OgreBites PUBLIC OgreMain OgreOverlay PRIVATE ${DEPENDENCIES} PkgConfig::IMGUI PkgConfig::STB)
 if (OGRE_BUILD_COMPONENT_RTSHADERSYSTEM)
   target_link_libraries(OgreBites PUBLIC OgreRTShaderSystem)
 endif ()
