silverqx / TinyORM

Modern C++ ORM library
https://www.tinyorm.org
MIT License
210 stars 22 forks source link

Extra ';' in several QT Macros prevent build #7

Closed cjcox17 closed 1 year ago

cjcox17 commented 1 year ago

I've been trying to get the project to build; I have a server setup with all of the appropriate dependencies but it fails to build. I've been able to get it to build with TOM off since it's a much smaller build, and only two files throw errors.

/usr/src/TinyORM/src/orm/databaseconnection.cpp:494:30
/usr/src/TinyORM/src/orm/utils/string.cpp:80:40

Here are the versions of everything that I'm using, followed by the errors:

FAILED: CMakeFiles/TinyOrm.dir/src/orm/databaseconnection.cpp.o
/usr/bin/c++ -DPROJECT_TINYORM -DQT_CORE_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_CAST_TO_ASCII -DQT_NO_KEYWORDS -DQT_SQL_LIB -DQT_STRICT_ITERATORS -DQT_USE_QSTRINGBUILDER -DTINYORM_BUILDING_SHARED -DTINYORM_DEBUG -DTINYORM_DEBUG_SQL -DTINYORM_DISABLE_TOM -DTINYORM_EXTERN_CONSTANTS -DTINYORM_MYSQL_PING -DTINYORM_USING_PCH -DTinyOrm_EXPORTS -I/usr/src/TinyORM/TinyORM-builds-cmake/build-debug/TinyOrm_autogen/include -I/usr/src/TinyORM/include -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql -isystem /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/vcpkg_installed/x64-linux/include -isystem /usr/include/mysql -g -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -Wall -Wextra -Weffc++ -Werror -Wfatal-errors -Wcast-qual -Wcast-align -Woverloaded-virtual -Wold-style-cast -Wshadow -Wundef -Wfloat-equal -Wformat-security -Wdouble-promotion -Wconversion -Wzero-as-null-pointer-constant -Wuninitialized -pedantic -pedantic-errors -pipe -Wstrict-null-sentinel -std=c++2a -Winvalid-pch -include /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/CMakeFiles/TinyOrm.dir/cmake_pch.hxx -MD -MT CMakeFiles/TinyOrm.dir/src/orm/databaseconnection.cpp.o -MF CMakeFiles/TinyOrm.dir/src/orm/databaseconnection.cpp.o.d -o CMakeFiles/TinyOrm.dir/src/orm/databaseconnection.cpp.o -c /usr/src/TinyORM/src/orm/databaseconnection.cpp
/usr/src/TinyORM/src/orm/databaseconnection.cpp:494:30: error: extra ';' [-Wpedantic]
  494 |                           }));
      |                              ^
compilation terminated due to -Wfatal-errors.
FAILED: CMakeFiles/TinyOrm.dir/src/orm/utils/string.cpp.o
/usr/bin/c++ -DPROJECT_TINYORM -DQT_CORE_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_CAST_TO_ASCII -DQT_NO_KEYWORDS -DQT_SQL_LIB -DQT_STRICT_ITERATORS -DQT_USE_QSTRINGBUILDER -DTINYORM_BUILDING_SHARED -DTINYORM_DEBUG -DTINYORM_DEBUG_SQL -DTINYORM_DISABLE_TOM -DTINYORM_EXTERN_CONSTANTS -DTINYORM_MYSQL_PING -DTINYORM_USING_PCH -DTinyOrm_EXPORTS -I/usr/src/TinyORM/TinyORM-builds-cmake/build-debug/TinyOrm_autogen/include -I/usr/src/TinyORM/include -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -isystem /usr/include/x86_64-linux-gnu/qt5/QtSql -isystem /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/vcpkg_installed/x64-linux/include -isystem /usr/include/mysql -g -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -Wall -Wextra -Weffc++ -Werror -Wfatal-errors -Wcast-qual -Wcast-align -Woverloaded-virtual -Wold-style-cast -Wshadow -Wundef -Wfloat-equal -Wformat-security -Wdouble-promotion -Wconversion -Wzero-as-null-pointer-constant -Wuninitialized -pedantic -pedantic-errors -pipe -Wstrict-null-sentinel -std=c++2a -Winvalid-pch -include /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/CMakeFiles/TinyOrm.dir/cmake_pch.hxx -MD -MT CMakeFiles/TinyOrm.dir/src/orm/utils/string.cpp.o -MF CMakeFiles/TinyOrm.dir/src/orm/utils/string.cpp.o.d -o CMakeFiles/TinyOrm.dir/src/orm/utils/string.cpp.o -c /usr/src/TinyORM/src/orm/utils/string.cpp
/usr/src/TinyORM/src/orm/utils/string.cpp:80:40: error: extra ';' [-Wpedantic]
   80 | Q_GLOBAL_STATIC(SnakeCache, snakeCache);

Here are the build commands:

cd /usr/src/
git clone https://github.com/silverqx/TinyORM.git
mkdir -p TinyORM/TinyORM-builds-cmake/build-debug
cd TinyORM/TinyORM-builds-cmake/build-debug
cmake \
    -S "/usr/src/TinyORM" \
    -B "/usr/src/TinyORM/TinyORM-builds-cmake/build-debug" \
    -G 'Ninja' \
    -D CMAKE_BUILD_TYPE:STRING='Debug' \
    -D CMAKE_TOOLCHAIN_FILE:FILEPATH="/usr/src/vcpkg/scripts/buildsystems/vcpkg.cmake" \
    -D CMAKE_INSTALL_PREFIX:PATH="/usr/src/TinyORM/tmp" \
    -D VERBOSE_CONFIGURE:BOOL=ON \
    -D BUILD_TESTS:BOOL=OFF \
    -D MYSQL_PING:BOOL=ON \
    -D TOM:BOOL=OFF \
    -D TOM_EXAMPLE:BOOL=OFF \
    -D MATCH_EQUAL_EXPORTED_BUILDTREE:BOOL=ON \
    -D Qt5_DIR=/usr/src/qt5/qt-build/qtbase/lib/cmake/Qt5/
cmake --build . --target all

I'll update on the issues I'm having building it with TOM set to ON. That's just a trickier fix since some non-ASCII characters in one of the files are preventing me from navigating the file in vim, so I'll need to download it to my local machine and use an IDE.

I can clone the repo and fix the thrown errors temporarily, but that's not a sane fix. Any thoughts?

Let me know if I missed something or you need anything else!

cjcox17 commented 1 year ago

With TOM on, there are additional files with the same issue:

src/orm/utils/string.cpp:124
src/orm/utils/string.cpp:126
tom/src/tom/commands/integratecommand.cpp:153
tom/src/tom/commands/integratecommand.cpp:157
tom/src/tom/commands/integratecommand.cpp:287
tom/src/tom/commands/integratecommand.cpp:291
tom/src/tom/commands/integratecommand.cpp:362
tom/src/tom/commands/integratecommand.cpp:379

However, I've run into another issue that is compiler-level. I'll try a newer version of GCC.

[2/19] Building CXX object CMakeFiles/TinyOrm.dir/tom/src/tom/terminal.cpp.o
FAILED: CMakeFiles/TinyOrm.dir/tom/src/tom/terminal.cpp.o
/usr/bin/c++ -DPROJECT_TINYORM -DQT_CORE_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_CAST_TO_ASCII -DQT_NO_KEYWORDS -DQT_SQL_LIB -DQT_STRICT_ITERATORS -DQT_USE_QSTRINGBUILDER -DTINYORM_BUILDING_SHARED -DTINYORM_DEBUG -DTINYORM_DEBUG_SQL -DTINYORM_EXTERN_CONSTANTS -DTINYORM_MYSQL_PING -DTINYORM_USING_PCH -DTINYTOM_DEBUG -DTinyOrm_EXPORTS -I/usr/src/TinyORM/TinyORM-builds-cmake/build-debug/TinyOrm_autogen/include -I/usr/src/TinyORM/include -I/usr/src/TinyORM/tom/include -isystem /usr/src/qt5/qt-build/qtbase/include -isystem /usr/src/qt5/qt-build/qtbase/include/QtCore -isystem /usr/src/qt5/qt-build/qtbase/../../qtbase/mkspecs/linux-g++ -isystem /usr/src/qt5/qt-build/qtbase/include/QtSql -isystem /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/vcpkg_installed/x64-linux/include -isystem /usr/include/mysql -g -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -Wall -Wextra -Weffc++ -Werror -Wfatal-errors -Wcast-qual -Wcast-align -Woverloaded-virtual -Wold-style-cast -Wshadow -Wundef -Wfloat-equal -Wformat-security -Wdouble-promotion -Wconversion -Wzero-as-null-pointer-constant -Wuninitialized -pedantic -pedantic-errors -pipe -Wstrict-null-sentinel -std=c++2a -Winvalid-pch -include /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/CMakeFiles/TinyOrm.dir/cmake_pch.hxx -MD -MT CMakeFiles/TinyOrm.dir/tom/src/tom/terminal.cpp.o -MF CMakeFiles/TinyOrm.dir/tom/src/tom/terminal.cpp.o.d -o CMakeFiles/TinyOrm.dir/tom/src/tom/terminal.cpp.o -c /usr/src/TinyORM/tom/src/tom/terminal.cpp
/usr/src/TinyORM/tom/src/tom/terminal.cpp: In static member function 'static bool Tom::Terminal::isatty(FILE*)':
/usr/src/TinyORM/tom/src/tom/terminal.cpp:43:14: error: '::isatty' has not been declared
   43 |     return ::isatty(::fileno(stream)) != 0;
      |              ^~~~~~
compilation terminated due to -Wfatal-errors.
[16/19] Building CXX object CMakeFiles/TinyOrm.dir/tom/src/tom/commands/make/support/modelcreator.cpp.o
FAILED: CMakeFiles/TinyOrm.dir/tom/src/tom/commands/make/support/modelcreator.cpp.o
/usr/bin/c++ -DPROJECT_TINYORM -DQT_CORE_LIB -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_CAST_TO_ASCII -DQT_NO_KEYWORDS -DQT_SQL_LIB -DQT_STRICT_ITERATORS -DQT_USE_QSTRINGBUILDER -DTINYORM_BUILDING_SHARED -DTINYORM_DEBUG -DTINYORM_DEBUG_SQL -DTINYORM_EXTERN_CONSTANTS -DTINYORM_MYSQL_PING -DTINYORM_USING_PCH -DTINYTOM_DEBUG -DTinyOrm_EXPORTS -I/usr/src/TinyORM/TinyORM-builds-cmake/build-debug/TinyOrm_autogen/include -I/usr/src/TinyORM/include -I/usr/src/TinyORM/tom/include -isystem /usr/src/qt5/qt-build/qtbase/include -isystem /usr/src/qt5/qt-build/qtbase/include/QtCore -isystem /usr/src/qt5/qt-build/qtbase/../../qtbase/mkspecs/linux-g++ -isystem /usr/src/qt5/qt-build/qtbase/include/QtSql -isystem /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/vcpkg_installed/x64-linux/include -isystem /usr/include/mysql -g -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -Wall -Wextra -Weffc++ -Werror -Wfatal-errors -Wcast-qual -Wcast-align -Woverloaded-virtual -Wold-style-cast -Wshadow -Wundef -Wfloat-equal -Wformat-security -Wdouble-promotion -Wconversion -Wzero-as-null-pointer-constant -Wuninitialized -pedantic -pedantic-errors -pipe -Wstrict-null-sentinel -std=c++2a -Winvalid-pch -include /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/CMakeFiles/TinyOrm.dir/cmake_pch.hxx -MD -MT CMakeFiles/TinyOrm.dir/tom/src/tom/commands/make/support/modelcreator.cpp.o -MF CMakeFiles/TinyOrm.dir/tom/src/tom/commands/make/support/modelcreator.cpp.o.d -o CMakeFiles/TinyOrm.dir/tom/src/tom/commands/make/support/modelcreator.cpp.o -c /usr/src/TinyORM/tom/src/tom/commands/make/support/modelcreator.cpp
In file included from /usr/src/qt5/qt-build/qtbase/include/QtCore/qstringliteral.h:1,
                 from /usr/src/qt5/qtbase/src/corelib/text/qstring.h:53,
                 from /usr/src/qt5/qt-build/qtbase/include/QtCore/qstring.h:1,
                 from /usr/src/qt5/qtbase/src/corelib/time/qdatetime.h:44,
                 from /usr/src/qt5/qt-build/qtbase/include/QtCore/qdatetime.h:1,
                 from /usr/src/qt5/qt-build/qtbase/include/QtCore/QDateTime:1,
                 from /usr/src/TinyORM/include/pch.h:7,
                 from /usr/src/TinyORM/TinyORM-builds-cmake/build-debug/CMakeFiles/TinyOrm.dir/cmake_pch.hxx:5,
                 from <command-line>:
/usr/src/TinyORM/tom/src/tom/commands/make/support/modelcreator.cpp: In instantiation of 'Tom::Commands::Make::Support::ModelCreator::prepareInitializerListValues(const QStringList&)::<lambda(const auto:55&, const QString&)> [with auto:55 = QStringList]':
/usr/src/TinyORM/tom/src/tom/commands/make/support/modelcreator.cpp:724:84:   required from here
/usr/src/TinyORM/tom/src/tom/commands/make/support/modelcreator.cpp:711:20: internal compiler error: in tsubst_copy, at cp/pt.c:16448
  711 |             return QStringLiteral("%2\"%1\"").arg(value, prefix);
      |                    ^~~~~~~~~~~~~~
0x7fd13008dd09 __libc_start_main
    ../csu/libc-start.c:308
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.
[17/19] Building CXX object CMakeFiles/TinyOrm.dir/tom/src/tom/migrator.cpp.o
ninja: build stopped: subcommand failed.
cjcox17 commented 1 year ago

I've downloaded and compiled gcc (GCC) 12.2.0 from source, and all of the build issues disappeared. I think it would be a good idea to update the documentation with notes stating that GCC 10.2.1 won't compile (for now) and that 12.2 does successfully compile. Maybe test versions between 10.2.1 and 12.2 to determine if any other versions of GCC fail to build TinyORM.

silverqx commented 1 year ago

Hi, I'm installing Debian and trying to figure out why it's happening or if I can reproduce it. Debian packages are the most outdated of all distros and the most stable.

So the problem is not an outdated compiler, but double ;; and missing #include on Linux, other Linux distros or newer compilers work without this include, but gcc 10.2.1 doesn't.

Thx, for reporting it, I will post patches for it.

silverqx commented 1 year ago

It's fixed in #0f2b6d8 and #205bc2d, there was also a few other problems with GCC 10.2.