cegui / cegui

Crazy Eddie's GUI library is a versatile, fast, adjustable, multi-platform, C++ library for creating graphical user interfaces for games and rendering applications
http://cegui.org.uk
MIT License
425 stars 71 forks source link

Failed to build on MSYS2 MINGW64 #1291

Open ghost opened 11 months ago

ghost commented 11 months ago

I'm trying to build the master branch. The build almost failed immediately:

$ ninja
[1/253] Building CXX object cegui/src/CMakeFiles/CEGUIBase-9999.dir/Animation_xmlHandler.cpp.obj
[2/253] Building CXX object cegui/src/CMakeFiles/CEGUIBase-9999.dir/AnimationInstance.cpp.obj
FAILED: cegui/src/CMakeFiles/CEGUIBase-9999.dir/AnimationInstance.cpp.obj
C:\msys64\mingw64\bin\c++.exe -DCEGUIBASE_EXPORTS -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -IC:/msys64/home/Administrator/cegui/build/cegui/include -IC:/msys64/home/Administrator/cegui/cegui/include -isystem C:/msys64/mingw64/include/freetype2 -isystem C:/msys64/mingw64/include/harfbuzz -Wno-attributes  -fsigned-char -Wall -Wextra -Wundef -O3 -DNDEBUG -std=c++14 -MD -MT cegui/src/CMakeFiles/CEGUIBase-9999.dir/AnimationInstance.cpp.obj -MF cegui\src\CMakeFiles\CEGUIBase-9999.dir\AnimationInstance.cpp.obj.d -o cegui/src/CMakeFiles/CEGUIBase-9999.dir/AnimationInstance.cpp.obj -c C:/msys64/home/Administrator/cegui/cegui/src/AnimationInstance.cpp
In file included from C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/Window.h:33,
                 from C:/msys64/home/Administrator/cegui/cegui/src/AnimationInstance.cpp:32:
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:47:130: error: 'is_enum_v' is not a member of 'std'; did you mean 'is_enum'?
   47 | template<typename T, bool needShift = false, typename mask_t = std::underlying_type_t<T>, class = typename std::enable_if_t<std::is_enum_v<T>>>
      |                                                                                                                                  ^~~~~~~~~
      |                                                                                                                                  is_enum
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:47:130: error: 'is_enum_v' is not a member of 'std'; did you mean 'is_enum'?
   47 | template<typename T, bool needShift = false, typename mask_t = std::underlying_type_t<T>, class = typename std::enable_if_t<std::is_enum_v<T>>>
      |                                                                                                                                  ^~~~~~~~~
      |                                                                                                                                  is_enum
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:47:140: error: template argument 1 is invalid
   47 | template<typename T, bool needShift = false, typename mask_t = std::underlying_type_t<T>, class = typename std::enable_if_t<std::is_enum_v<T>>>
      |                                                                                                                                            ^
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:47:141: error: expected identifier before '>' token
   47 | template<typename T, bool needShift = false, typename mask_t = std::underlying_type_t<T>, class = typename std::enable_if_t<std::is_enum_v<T>>>
      |                                                                                                                                             ^~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:47:143: error: expected unqualified-id before '>' token
   47 | template<typename T, bool needShift = false, typename mask_t = std::underlying_type_t<T>, class = typename std::enable_if_t<std::is_enum_v<T>>>
      |                                                                                                                                               ^
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:279:22: error: 'Flags' does not name a type
  279 | using MouseButtons = Flags<MouseButton, true>;
      |                      ^~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:47: error: expected template-name before '<' token
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                                               ^
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:47: error: expected '{' before '<' token
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:47: error: expected unqualified-id before '<' token
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:372:18: error: field 'd_map' has incomplete type 'CEGUI::ModifierKeys'
  372 |     ModifierKeys d_map = 0; // ModifierKey bits that need to be checked
      |                  ^~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:373:18: error: field 'd_set' has incomplete type 'CEGUI::ModifierKeys'
  373 |     ModifierKeys d_set = 0; // Whether the corresponding key should be pressed or not
      |                  ^~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:342:29: error: 'keys' has incomplete type
  342 |     bool match(ModifierKeys keys) const
      |                ~~~~~~~~~~~~~^~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h: In member function 'bool CEGUI::ModifierKeyRule::match(CEGUI::ModifierKeys) const':
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:345:32: error: variable 'CEGUI::ModifierKeys violations' has initializer but incomplete type
  345 |         ModifierKeys violations((keys.getMask() ^ d_set.getMask()) & d_map.getMask());
      |                                ^
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:350:44: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  350 |             if (d_set.hasAll(ModifierKeys::Shift()) && !violations.hasAll(ModifierKeys::Shift()))
      |                                            ^~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:350:89: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  350 |             if (d_set.hasAll(ModifierKeys::Shift()) && !violations.hasAll(ModifierKeys::Shift()))
      |                                                                                         ^~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:351:45: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  351 |                 violations -= ModifierKeys::Shift();
      |                                             ^~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:352:44: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  352 |             if (d_set.hasAll(ModifierKeys::Ctrl()) && !violations.hasAll(ModifierKeys::Ctrl()))
      |                                            ^~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:352:88: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  352 |             if (d_set.hasAll(ModifierKeys::Ctrl()) && !violations.hasAll(ModifierKeys::Ctrl()))
      |                                                                                        ^~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:353:45: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  353 |                 violations -= ModifierKeys::Ctrl();
      |                                             ^~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:354:44: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  354 |             if (d_set.hasAll(ModifierKeys::Alt()) && !violations.hasAll(ModifierKeys::Alt()))
      |                                            ^~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:354:87: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  354 |             if (d_set.hasAll(ModifierKeys::Alt()) && !violations.hasAll(ModifierKeys::Alt()))
      |                                                                                       ^~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:355:45: error: incomplete type 'CEGUI::ModifierKeys' used in nested name specifier
  355 |                 violations -= ModifierKeys::Alt();
      |                                             ^~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h: At global scope:
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:426:67: error: 'MouseButtons' has not been declared
  426 |     CursorInputEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons = {}, ModifierKeys modifiers = {});
      |                                                                   ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:435:5: error: 'MouseButtons' does not name a type; did you mean 'MouseButton'?
  435 |     MouseButtons d_buttons;
      |     ^~~~~~~~~~~~
      |     MouseButton
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:437:18: error: field 'd_modifiers' has incomplete type 'CEGUI::ModifierKeys'
  437 |     ModifierKeys d_modifiers;
      |                  ^~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:426:120: error: invalid use of incomplete type 'struct CEGUI::ModifierKeys'
  426 |     CursorInputEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons = {}, ModifierKeys modifiers = {});
      |                                                                                                                        ^
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:452:66: error: 'MouseButtons' has not been declared
  452 |     CursorMoveEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons, ModifierKeys modifiers, const glm::vec2& moveDelta)
      |                                                                  ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:452:101: error: 'modifiers' has incomplete type
  452 |     CursorMoveEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons, ModifierKeys modifiers, const glm::vec2& moveDelta)
      |                                                                                        ~~~~~~~~~~~~~^~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:468:67: error: 'MouseButtons' has not been declared
  468 |     MouseButtonEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons, ModifierKeys modifiers, MouseButton button, int clickEventOrder = 0)
      |                                                                   ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:468:102: error: 'modifiers' has incomplete type
  468 |     MouseButtonEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons, ModifierKeys modifiers, MouseButton button, int clickEventOrder = 0)
      |                                                                                         ~~~~~~~~~~~~~^~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:486:62: error: 'MouseButtons' has not been declared
  486 |     ScrollEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons, ModifierKeys modifiers, float delta)
      |                                                              ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:486:97: error: 'modifiers' has incomplete type
  486 |     ScrollEventArgs(Window* wnd, const glm::vec2& globalPos, MouseButtons buttons, ModifierKeys modifiers, float delta)
      |                                                                                    ~~~~~~~~~~~~~^~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:518:18: error: field 'd_modifiers' has incomplete type 'CEGUI::ModifierKeys'
  518 |     ModifierKeys d_modifiers;
      |                  ^~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:513:72: error: invalid use of incomplete type 'struct CEGUI::ModifierKeys'
  513 |     KeyEventArgs(Window* wnd, Key::Scan key, ModifierKeys modifiers = {}) : WindowEventArgs(wnd), d_key(key), d_modifiers(modifiers) {}
      |                                                                        ^
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:513:59: error: 'modifiers' has incomplete type
  513 |     KeyEventArgs(Window* wnd, Key::Scan key, ModifierKeys modifiers = {}) : WindowEventArgs(wnd), d_key(key), d_modifiers(modifiers) {}
      |                                              ~~~~~~~~~~~~~^~~~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:294:20: note: forward declaration of 'struct CEGUI::ModifierKeys'
  294 | struct CEGUIEXPORT ModifierKeys : public Flags<ModifierKey>
      |                    ^~~~~~~~~~~~
C:/msys64/home/Administrator/cegui/cegui/include/CEGUI/InputEvent.h:610:5: error: 'MouseButtons' does not name a type; did you mean 'MouseButton'?
  610 |     MouseButtons buttons;
      |     ^~~~~~~~~~~~
      |     MouseButton
[3/253] Building CXX object cegui/src/CMakeFiles/CEGUIBase-9999.dir/BitmapImage.cpp.obj
[4/253] Building CXX object cegui/src/CMakeFiles/CEGUIBase-9999.dir/Affector.cpp.obj
[5/253] Building CXX object cegui/src/CMakeFiles/CEGUIBase-9999.dir/Animation.cpp.obj
[6/253] Building CXX object cegui/src/CMakeFiles/CEGUIBase-9999.dir/BoundSlot.cpp.obj
[7/253] Building CXX object cegui/src/CMakeFiles/CEGUIBase-9999.dir/AnimationManager.cpp.obj
ninja: build stopped: subcommand failed.
ghost commented 11 months ago

I tried to build the v0 branch, it seems OGRE is required (unlike the master branch where only GLM and PCRE are required). There are full of warnings but I could go a bit further than master branch. It failed at Direct3D9 renderer. As I know we can't use Direct3D on MSYS2 MINGW, only OpenGL and Vulkan are available.

I then tried to build the v0-8 branch, it's the same as v0 branch, full of warnings and also failed at Direct3D9 renderer.

How could I disable the Direct3D renderer?

niello commented 9 months ago

I added one possibly missing include to master branch and also fixed C++17 usage, please check