mosra / magnum-integration

Integration libraries for the Magnum C++11 graphics engine
https://magnum.graphics/
Other
99 stars 44 forks source link

Remove ImGui dependency on ApplicationServices once 1.72b is widely used enough #48

Closed AboudFayad closed 2 years ago

AboudFayad commented 5 years ago

I am trying to build the magnum integration with imgui on mac, but the build always fails with the following error:

Undefined symbols for architecture x86_64:
  "_CFArrayGetCount", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "_CFDataCreate", referenced from:
      SetClipboardTextFn_DefaultImpl(void*, char const*) in imgui.cpp.o
  "_CFDataGetBytes", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "_CFDataGetLength", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "_CFRelease", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
      SetClipboardTextFn_DefaultImpl(void*, char const*) in imgui.cpp.o
  "_PasteboardClear", referenced from:
      SetClipboardTextFn_DefaultImpl(void*, char const*) in imgui.cpp.o
  "_PasteboardCopyItemFlavorData", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "_PasteboardCopyItemFlavors", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "_PasteboardCreate", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
      SetClipboardTextFn_DefaultImpl(void*, char const*) in imgui.cpp.o
  "_PasteboardGetItemCount", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "_PasteboardGetItemIdentifier", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "_PasteboardPutItemFlavor", referenced from:
      SetClipboardTextFn_DefaultImpl(void*, char const*) in imgui.cpp.o
  "_PasteboardSynchronize", referenced from:
      GetClipboardTextFn_DefaultImpl(void*) in imgui.cpp.o
  "___CFConstantStringClassReference", referenced from:
      CFString in imgui.cpp.o
      CFString in imgui.cpp.o
  "_kCFAllocatorDefault", referenced from:
      SetClipboardTextFn_DefaultImpl(void*, char const*) in imgui.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/Magnum/ImGuiIntegration/libMagnumImGuiIntegration.2.2.dylib] Error 1
make[1]: *** [src/Magnum/ImGuiIntegration/CMakeFiles/MagnumImGuiIntegration.dir/all] Error 2
make: *** [all] Error 2

which are windows specific functions, I tried building it on windows the same way I did on mac and it worked. So I believe it is a mac specific issue.

Anyway to overcome this issue?

mosra commented 5 years ago

Hi, sorry about this. The integration code was not yet upgraded to work with latest ImGui versions and this seems to be caused by new macOS clipboard support in 1.71 (https://github.com/ocornut/imgui/pull/2546). Until I fix this and link the missing framework, can you build with an older version of ImGui? The code was tested extensively with 1.69, 1.70 could work too.

AboudFayad commented 5 years ago

Thanks a lot, 1.69 works just fine.

melix99 commented 5 years ago

If there is a need to use the latest version of imgui you can add the Carbon library to your CMakeLists and that should fix the error:

if(APPLE)
    find_library(CARBON_LIBRARY Carbon)
endif()

# Add ${CARBON_LIBRARY} to your target_link_libraries()

EDIT: Or even better: just add "-framework ApplicationServices" to target_link_libraries()

mosra commented 5 years ago

Should be fixed with b157344afcbff29d20b36a80a999c28329e7bf8c -- to make it work, please update the FindImGui.cmake copy in your projects.

ocornut commented 5 years ago

Note as as-per https://github.com/ocornut/imgui/commit/29d9394a41939e8d033814704d5e9bcca516bf37 and https://github.com/ocornut/imgui/pull/2546#issuecomment-513613672 I have reverted this change. It is possible to explicitely enabled the default cocoa handler by using IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS, as a facility for custom engine writers on the Mac.

ocornut commented 5 years ago

....That wasn't explicit in the message above, but it means you may revert linking to ApplicationServices... Magnum probably has its own clipboard handler anyway.

mosra commented 5 years ago

@ocornut thanks a lot for taking the time to comment! :green_heart:

I'll keep it around for now so people using 1.71 don't run into the same issue again, will remove it a few releases later.

mosra commented 2 years ago

I decided to just link to ApplicationServices always, as it's no additonal hurdle on our side and it's nicer to users. Internal TODO removed in 4e99409a8da6df09c64ab114101515603fcb392a.