muldjord / skyscraper

Powerful and versatile game scraper written in c++
GNU General Public License v3.0
487 stars 128 forks source link

Unable to compile Skyscraper on openSUSE Tumbleweed #328

Open klandrith opened 2 years ago

klandrith commented 2 years ago

Describe the bug Unable to build on openSUSE Tumbleweed. Compiler errors out.

To Reproduce Compile on current openSUSE Tumbleweed (KDE Desktop). Qt5 dev packages are installed, including libqt5core5 packages.

Special circumstances

Terminal output

g++ -c -pipe -std=c++11 -O2 -Wall -W -D_REENTRANT -DVERSION=\"3.7.1\" -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtNetwork -I/usr/include/QtGui -I/usr/include/QtXml -I/usr/include -I. -I. -o main.o src/main.cpp src/main.cpp:47:10: fatal error: QCommandLineParser: No such file or directory 47 | #include <QCommandLineParser> | ^~~~~~~~~~~~~~~~~~~~ compilation terminated. make: *** [Makefile:623: main.o] Error 1

Technical information

Additional context

muldjord commented 2 years ago

Hi, Skyscraper is complaining about missing QCommandLineParser. I don't use OpenSUSE so I'm not of much help with this. Basically you are missing pieces of Qt5 in your system and you need to figure out how to install those. Then Skyscraper will compile as expected.

klandrith commented 2 years ago

Yah, I know that's what it's complaining about. Just has me confused as libqt5core5 is opensuses's version of qt core, which from what I found contains that library. I'll have to do some checking.

On Thu, Jan 20, 2022, 1:30 AM Lars Muldjord @.***> wrote:

Hi, Skyscraper is complaining about missing QCommandLineParser. I don't use OpenSUSE so I'm not of much help with this. Basically you are missing pieces of Qt5 in your system and you need to figure out how to install those. Then Skyscraper will compile as expected.

— Reply to this email directly, view it on GitHub https://github.com/muldjord/skyscraper/issues/328#issuecomment-1017278566, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMAMW46O4KVSRMFSGB5MYITUW7I2LANCNFSM5MLUAMPQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you authored the thread.Message ID: @.***>

klandrith commented 2 years ago

So here is a list of all of the qt packages that I have installed. Is there a particular package that is needed by Skyscraper that is missing?

kyle  openSUSEDesktop  ~  pkg-config --list-all | grep --ignore-case qt

Qt5Core Qt5 Core - Qt Core module Qt5DBus Qt5 DBus - Qt DBus module Qt5Concurrent Qt5 Concurrent - Qt Concurrent module Qt5Network Qt5 Network - Qt Network module Qt5Sql Qt5 Sql - Qt Sql module Qt5Test Qt5 Test - Qt Unit Testing Library Qt5Xml Qt5 Xml - Qt Xml module Qt5Gui Qt5 Gui - Qt Gui module Qt5Widgets Qt5 Widgets - Qt Widgets module Qt5Qml Qt5 Qml - Qt Qml module Qt5QmlModels Qt5 QmlModels - Qt QmlModels module Qt5QmlWorkerScript Qt5 QmlWorkerScript - Qt QmlWorkerScript module Qt5Quick Qt5 Quick - Qt Quick module Qt5QuickTest Qt5 QuickTest - Qt QuickTest module Qt5QuickWidgets Qt5 QuickWidgets - Qt QuickWidgets module Qt5PrintSupport Qt5 PrintSupport - Qt PrintSupport module Qt5OpenGL Qt5 OpenGL - Qt OpenGL module Qt5WebChannel Qt5 WebChannel - Qt WebChannel module Qt5Location Qt5 Location - Qt Location module Qt5Positioning Qt5 Positioning - Qt Positioning module Qt5PositioningQuick Qt5 PositioningQuick - Qt PositioningQuick module Qt5WebEngine Qt5 WebEngine - Qt WebEngine module Qt5WebEngineCore Qt5 WebEngineCore - Qt WebEngineCore module Qt5WebEngineWidgets Qt5 WebEngineWidgets - Qt WebEngineWidgets module libKF5Attica libKF5Attica - Qt library to access Open Collaboration Services KF5BluezQt KF5BluezQt - Qt wrapper for BlueZ 5 DBus API kscreen2 kscreen2 - Qt Based library to manage screens with backends (xrandr, whatevercomesnext) Qt5NetworkAuth Qt5 NetworkAuth - Qt NetworkAuth module Qt5Script Qt5 Script - Qt Script module Qt5ScriptTools Qt5 ScriptTools - Qt ScriptTools module Qt5Sensors Qt5 Sensors - Qt Sensors module Qt5SerialPort Qt5 SerialPort - Qt SerialPort module Qt5TextToSpeech Qt5 TextToSpeech - Qt TextToSpeech module Qt5Svg Qt5 Svg - Qt Svg module Qt5VirtualKeyboard Qt5 VirtualKeyboard - Qt VirtualKeyboard module Qt5WebSockets Qt5 WebSockets - Qt WebSockets module Qt5WebView Qt5 WebView - Qt WebView module Qt5X11Extras Qt5 X11Extras - Qt X11Extras module Qt5XmlPatterns Qt5 XmlPatterns - Qt XmlPatterns module phonon4qt5 phonon4qt5 - Phonon library needed to build applications Qt53DCore Qt5 3DCore - Qt 3DCore module Qt5Gamepad Qt5 Gamepad - Qt Gamepad module Qt5SerialBus Qt5 SerialBus - Qt SerialBus module Qt5Multimedia Qt5 Multimedia - Qt Multimedia module Qt5MultimediaWidgets Qt5 MultimediaWidgets - Qt MultimediaWidgets module Qt5RemoteObjects Qt5 RemoteObjects - Qt RemoteObjects module Qt5RepParser Qt5 RepParser - Qt RepParser module Qt5Scxml Qt5 Scxml - Qt Scxml module Qt53DQuick Qt5 3DQuick - Qt 3DQuick module Qt53DLogic Qt5 3DLogic - Qt 3DLogic module Qt53DInput Qt5 3DInput - Qt 3DInput module Qt5Bluetooth Qt5 Bluetooth - Qt Bluetooth module Qt5Nfc Qt5 Nfc - Qt Nfc module polkit-qt5-1 polkit-qt5-1 - Convenience library for using polkit with a Qt-styled API polkit-qt5-agent-1 polkit-qt5-agent-1 - Convenience library for using polkit Agent with a Qt-styled API polkit-qt5-core-1 polkit-qt5-core-1 - Convenience library for using polkit with a Qt-styled API, non-GUI classes polkit-qt5-gui-1 polkit-qt5-gui-1 - Convenience library for using polkit with a Qt-styled API, GUI classes Qt53DQuickInput Qt5 3DQuickInput - Qt 3DQuickInput module Qt53DRender Qt5 3DRender - Qt 3DRender module Qt53DQuickScene2D Qt5 3DQuickScene2D - Qt 3DQuickScene2D module Qt53DQuickRender Qt5 3DQuickRender - Qt 3DQuickRender module Qt53DExtras Qt5 3DExtras - Qt 3DExtras module Qt53DAnimation Qt5 3DAnimation - Qt 3DAnimation module Qt53DQuickExtras Qt5 3DQuickExtras - Qt 3DQuickExtras module Qt53DQuickAnimation Qt5 3DQuickAnimation - Qt 3DQuickAnimation module Qt5Designer Qt5 Designer - Qt Designer module Qt5Help Qt5 Help - Qt Help module Qt5UiPlugin Qt5 UiPlugin - Qt UiPlugin module Qt5UiTools Qt5 UiTools - Qt UiTools module Qt3Support Qt3support - Qt3support Library QtCLucene Qtclucene - Qtclucene Library QtCore Qtcore - Qtcore Library QtDBus Qtdbus - Qt DBus module QtDeclarative Qtdeclarative - Qtdeclarative Library QtDesigner Qtdesigner - Qtdesigner Library QtDesignerComponents Qtdesignercomponents - Qtdesignercomponents Library QtGui Qtgui - Qtgui Library QtHelp Qthelp - Qthelp Library QtMultimedia Qtmultimedia - Qtmultimedia Library QtNetwork Qtnetwork - Qtnetwork Library QtOpenGL Qtopengl - Qtopengl Library QtScript Qtscript - Qtscript Library QtScriptTools Qtscripttools - Qtscripttools Library QtSql Qtsql - Qtsql Library QtSvg Qtsvg - Qtsvg Library QtTest Qttest - Qt Unit Testing Library QtUiTools Qtuitools - Qtuitools Library QtXml Qtxml - Qtxml Library QtXmlPatterns Qtxmlpatterns - Qtxmlpatterns Library Qt5WaylandClient Qt5 WaylandClient - Qt WaylandClient module Qt5WaylandCompositor Qt5 WaylandCompositor - Qt WaylandCompositor module

Thanks.

muldjord commented 2 years ago

QCommandLineParser is part of the Qt5 core library. It needs at least Qt 5.2 to be available (that's where QCommandLineParser was introduced). If you have that I don't know why it won't find it on OpenSUSE. Sorry.

klandrith commented 2 years ago

Ok, so I found the problem, but still need a little help. Apparently, QCommandLineParser, and QCommandLineOptions are not stored in /usr/include//QtCore/ like your files assume, but is stored in /usr/include/qt5/QtCore. I tried manually changing that in the auto-generated Makefile, but then I get the following errors.

kyle  openSUSEDesktop  ../skyscraper-3.7.1  make

g++ -c -pipe -std=c++11 -O2 -Wall -W -D_REENTRANT -DVERSION=\"\" -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/qt5/QtCore -I/usr/include/QtNetwork -I/usr/include/QtGui -I/usr/include/QtXml -I/usr/include -I. -I. -o main.o src/main.cpp In file included from /usr/include/qt5/QtCore/QtGlobal:1, from src/main.cpp:26: /usr/include/qt5/QtCore/qglobal.h:67:10: fatal error: QtCore/qtcore-config.h: No such file or directory 67 | #include <QtCore/qtcore-config.h> | ^~~~~~~~ compilation terminated. make: *** [Makefile:620: main.o] Error 1

I think that I'm going to spin up a virtual machine and build an AppImage on an Ubuntu VM of your latest release just to side step all this file path nonsense.

muldjord commented 2 years ago

It's really odd that an OpenSUSE Qt5 installation doesn't have the files in the location qmake generates the makefile for. There's nothing in my files that tells the system to look for the files a specific place. That's all done by qmake.

An AppImage should work.

klandrith commented 2 years ago

Well, I have qmake installed via a community package as I couldn't find it in the distro repos, which seems odd. That may be the problem there. I'm new to openSUSE, so I'll have to look into that matter. In the meantime I'll try my hand at building an AppImage. If I do, I'll shoot you a link to it on a GitHub repo for linking if you'd like. If I get it working without an AppImage, I'll also post the openSUSE install instructions here for reference.

Thanks again for all your help and an awesome piece of software.

On Thu, Jan 20, 2022, 3:28 PM Lars Muldjord @.***> wrote:

It's really odd that an OpenSUSE Qt5 installation doesn't have the files in the location qmake generates the makefile for. There's nothing in my files that tells the system to look for the files a specific place. That's all done by qmake.

An AppImage should work.

— Reply to this email directly, view it on GitHub https://github.com/muldjord/skyscraper/issues/328#issuecomment-1018017728, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMAMW47GP77DYXYVBKLP3WLUXCLBLANCNFSM5MLUAMPQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you authored the thread.Message ID: @.***>

klandrith commented 2 years ago

It's really odd that an OpenSUSE Qt5 installation doesn't have the files in the location qmake generates the makefile for. There's nothing in my files that tells the system to look for the files a specific place. That's all done by qmake.

An AppImage should work.

OK, so I got everything to compile and install. Here's the low down...

I had thought that I had qmake installed via a community package, which I had originally, but I uninstalled that and installed it via the openSUSE repos via the package libqt4-devel, which is the package that cnf qmake returns. However, this defaults qmake to the qt4 version. To get qmake that is made for qt5, one needs to install libqt5-qtbase-common-devel, which can be installed via sudo zypper install -t pattern devel_qt5, along with the rest of the needed development files via sudo zypper install -t pattern devel_basis.

Then, in order to to get Skyscraper to compile with the proper qt version, one can either change the QTDIR environmental variable, or do as I did and simply edit the update_skyscraper.sh script and replace the qmake command with /usr/bin/qmake-qt5 and voila it compiles just fine.

So, to summarize...to install Skyscraper on openSUSE:

sudo zypper install libqt4-devel sudo zypper install -t pattern devel_basis sudo zypper install -t pattern devel_qt5

Change qmake command in update_skyscraper.sh script to /usr/bin/qmake-qt5 or update QTDIR environmental variable to point to qt5.

Hope this helps someone in the future.

muldjord commented 2 years ago

Thank you for the information. It's good to have it here for others to see.