Long time no post – whatever, I guess. I’ll just post about something I just ran into and might need to do again in the future. Maybe this will even be useful to someone else.
Builds fail with some strange type errors
Environment: Both Qt5 and Qt6 are installed via Homebrew, the Qt5 directory
is in the $PATH
environment variable.
Problem: some components fail to build with something like this in the logs:
[4/77] Building CXX object src/i18n/CMakeFiles/KF5I18n.dir/common_helpers.cpp.o
FAILED: src/i18n/CMakeFiles/KF5I18n.dir/common_helpers.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ [some flags omitted] -I/opt/homebrew/include -iframework /opt/homebrew/opt/qt@5/lib -isystem /opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers -isystem /opt/homebrew/opt/qt@5/./mkspecs/macx-clang-arm64 [more flags omitted] -o src/i18n/CMakeFiles/KF5I18n.dir/common_helpers.cpp.o -c /Users/foxy/kde/src/frameworks/ki18n/src/i18n/common_helpers.cpp
In file included from /Users/foxy/kde/src/frameworks/ki18n/src/i18n/common_helpers.cpp:7:
In file included from /Users/foxy/kde/src/frameworks/ki18n/src/i18n/common_helpers_p.h:10:
In file included from /opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/QString:1:
/opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/qstring.h:78:7: error: definition of type 'QStringList' conflicts with type alias of the same name
class QStringList;
^
/opt/homebrew/include/QtCore/qcontainerfwd.h:28:7: note: 'QStringList' declared here
using QStringList = QList<QString>;
^
In file included from /Users/foxy/kde/src/frameworks/ki18n/src/i18n/common_helpers.cpp:7:
In file included from /Users/foxy/kde/src/frameworks/ki18n/src/i18n/common_helpers_p.h:10:
In file included from /opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/QString:1:
/opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/qstring.h:81:29: error: redefinition of 'QVector' as different kind of symbol
template <typename T> class QVector;
^
/opt/homebrew/include/QtCore/qcontainerfwd.h:27:22: note: previous definition is here
template<typename T> using QVector = QList<T>;
^
In file included from /Users/foxy/kde/src/frameworks/ki18n/src/i18n/common_helpers.cpp:7:
In file included from /Users/foxy/kde/src/frameworks/ki18n/src/i18n/common_helpers_p.h:10:
In file included from /opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/QString:1:
/opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/qstring.h:261:13: error: unknown type name 'QStringData'
typedef QStringData Data;
^
/opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/qstring.h:967:37: error: unknown type name 'QStringDataPtr'
Q_DECL_CONSTEXPR inline QString(QStringDataPtr dd) : d(dd.ptr) {}
^
/opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/qstring.h:273:72: error: 'QString::Data' (aka 'int') is not a class, namespace, or enumeration
inline QString(QString && other) noexcept : d(other.d) { other.d = Data::sharedNull(); }
^
/opt/homebrew/opt/qt@5/lib/QtCore.framework/Headers/qstring.h:277:39: error: member reference base type 'QString::Data' (aka 'int') is not a structure or union
inline int size() const { return d->size; }
~^ ~~~~
Solution: Run brew unlink qt@6
. This needs to be done every time after
brew upgrade
updates qt@6.
This removes all the symlinks Homebrew creates for Qt6 inside e.g.
/opt/homebrew/include
. I only noticed this after having a closer look at the
paths the compiler spit out at me – some Qt6 libraries already got included
which made the Qt5 one upset.
No icons in the apps
Problem: There are no icons in the apps.
Solution: Build breeze-icons
and create a special symlink for each app
you want to run:
# build breeze-icons
kdesrc-build breeze-icons
# create an app-specific symlink of the compiled breeze-icons resource
# to ~/Library/Application\ Support/<app>
#
# e.g. for Konsole:
ln -s ~/kde/usr/share/icons/breeze/breeze-icons.rcc ~/Library/Application\ Support/konsole/icontheme.rcc
This method has a downside though, when switching to dark mode the icons do not change to their light/dark variants. Since I use the light mode everywhere this doesn’t bother me too much, so I haven’t looked into how to improve that (yet).