Warning: there may be occasional oddness due to css and blog edits. **KNOWN ISSUE: possible hidden text**

Thursday, April 30, 2026

Flameshot qt6 update success

Commits on Nov 20, 2025

    Save my place,
    
Commits on Nov 18, 2025

    Update to May 17th upstream commit.
    Update to May 14th upstream commit.
    Update to May 12th upstream commit.
    Update to May 11th upstream commit.
    Update to May 10th upstream commit.
    Update to May 2nd upstream commit.
    Update to May 1st upstream commit.
    Update to April 28th upstream commit.
    Update to April 27th upstream commit.
    Update to April 7th upstream commit.
    Update to March 17th upstream commit.
    Update to March 7th upstream commit.
    Update to March 4th upstream commit.
    Update to Feb 26th upstream commit.

I once wrote in a blog post:


The error told us that it couldn't find the directory for the includes, so perhaps we need to be more explicit or modify the src/CMakeLists.txt file in work/flameshot.  After no progress with plenty of effort, I decided to patch a file and this got the build process going a bit farther forward but still quit with errors.

root@ichigo:/home/tigersharke/flameshot-dev # cat files/patch-src_CMakeLists.txt 
--- src/CMakeLists.txt.orig     2025-11-21 21:00:13 UTC
+++ src/CMakeLists.txt
@@ -226,7 +226,7 @@ target_link_libraries(
         Qt${QT_VERSION_MAJOR}::Svg
         Qt${QT_VERSION_MAJOR}::Network
         Qt${QT_VERSION_MAJOR}::Widgets
-        QtColorWidgets
+        /usr/local/include/QtColorWidgets
 )
 if (UNIX)
 target_link_libraries(

I succeeded to get cmake to finally find the QtColorWidgets but now it seems like it still isn't what is expected because some things are different or missing.

slations/Internationalization_zh_HK.qm && cd /home/tigersharke/flameshot-dev/work/.build/src && /usr/local/bin/cmake -E copy /home/tigersharke/flameshot-dev/work/.build/src/Internationalization_zh_TW.qm /home/tigersharke/flameshot-dev/work/.build/src/translations/Internationalization_zh_TW.qm
ld: error: undefined symbol: color_widgets::ColorWheel::ColorWheel(QWidget*)
>>> referenced by colorpickereditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/colorpickereditor.cpp.o:(ColorPickerEditor::ColorPickerEditor(QWidget*))
>>> referenced by sidepanelwidget.cpp
>>>               src/CMakeFiles/flameshot.dir/widgets/panel/sidepanelwidget.cpp.o:(SidePanelWidget::SidePanelWidget(QPixmap*, QWidget*))
>>> referenced by uicoloreditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/uicoloreditor.cpp.o:(UIcolorEditor::initColorWheel())

ld: error: undefined symbol: color_widgets::ColorWheel::setColor(QColor)
>>> referenced by colorpickereditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/colorpickereditor.cpp.o:(ColorPickerEditor::ColorPickerEditor(QWidget*))
>>> referenced by sidepanelwidget.cpp
>>>               src/CMakeFiles/flameshot.dir/widgets/panel/sidepanelwidget.cpp.o:(SidePanelWidget::SidePanelWidget(QPixmap*, QWidget*))
>>> referenced by sidepanelwidget.cpp
>>>               src/CMakeFiles/flameshot.dir/widgets/panel/sidepanelwidget.cpp.o:(SidePanelWidget::onColorChanged(QColor const&))
>>> referenced 4 more times

ld: error: undefined symbol: color_widgets::ColorWheel::colorSelected(QColor)
>>> referenced by colorpickereditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/colorpickereditor.cpp.o:(ColorPickerEditor::ColorPickerEditor(QWidget*))
>>> referenced by sidepanelwidget.cpp
>>>               src/CMakeFiles/flameshot.dir/widgets/panel/sidepanelwidget.cpp.o:(SidePanelWidget::SidePanelWidget(QPixmap*, QWidget*))
>>> referenced by uicoloreditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/uicoloreditor.cpp.o:(UIcolorEditor::initColorWheel())

ld: error: undefined symbol: color_widgets::ColorWheel::staticMetaObject
>>> referenced by colorpickereditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/colorpickereditor.cpp.o:(ColorPickerEditor::ColorPickerEditor(QWidget*))
>>> referenced by sidepanelwidget.cpp
>>>               src/CMakeFiles/flameshot.dir/widgets/panel/sidepanelwidget.cpp.o:(SidePanelWidget::SidePanelWidget(QPixmap*, QWidget*))
>>> referenced by uicoloreditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/uicoloreditor.cpp.o:(UIcolorEditor::initColorWheel())

ld: error: undefined symbol: color_widgets::ColorWheel::colorChanged(QColor)
>>> referenced by uicoloreditor.cpp
>>>               src/CMakeFiles/flameshot.dir/config/uicoloreditor.cpp.o:(UIcolorEditor::initColorWheel())
c++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make: stopped making "install" in /home/tigersharke/flameshot-dev

I should not have needed to patch the file to convince cmake to find QtColorWidgets but even this was not entirely successful.  Something seems strange with this project.  Does it use Qt5 or Qt6 and does a mish mosh of the two affect how everything fits together?  How do I manipulate all of this to make a nice smooth build?  Since I am making only limited progress and possibly making a few missteps that may be temporary improvements, I'll try another method.

...


Now to the present, quite a while later, though not like I didn't frequently look at the git repos since then somewhat longingly for closure.

This whole process was set aside, put on hold.  I couldn't at the time figure it out.  I am not sure if something in the /usr/ports/Mk files changed, updated, improved in the time between November 2025 and now but surely something did.  I finally succeeded and also realized some new methods to find information.

The error output above was due to my patch file that added an include directory instead of a library, but now it is corrected.

root@ichigo:/home/tigersharke/GitRepos/flameshot-dev # cat files/patch-src_CMakeLists.txt 
--- src/CMakeLists.txt.orig     2025-11-21 21:00:13 UTC
+++ src/CMakeLists.txt
@@ -226,7 +226,7 @@ target_link_libraries(
         Qt${QT_VERSION_MAJOR}::Svg
         Qt${QT_VERSION_MAJOR}::Network
         Qt${QT_VERSION_MAJOR}::Widgets
-        QtColorWidgets
+        /usr/local/lib/libQtColorWidgets-Qt52.so
 )
 if (UNIX)
 target_link_libraries(

When I am searching for dependencies, I can go to /usr/ports and search grep -R QtColorWidgets * to find any file in all of those directories that has that mentioned.  I can look in /usr/ports/devel to see if I can find other dependencies and install them, then use pkg info x11-toolkits/color-widgets-qt5 to see what it installs, and choose the shared library line.

root@ichigo:/home/tigersharke/GitRepos/flameshot-dev # pkg info x11-toolkits/color-widgets-qt5
color-widgets-qt5-2.2.0
Name           : color-widgets-qt5
Version        : 2.2.0
Installed on   : Sun Apr 12 20:03:27 2026 CDT
Origin         : x11-toolkits/color-widgets-qt5
Architecture   : FreeBSD:15:amd64
Prefix         : /usr/local
Categories     : x11-toolkits
Licenses       : LGPL3
Maintainer     : yuri@FreeBSD.org
WWW            : https://gitlab.com/mattia.basaglia/Qt-Color-Widgets
Comment        : Qt (C++) widgets to manage color inputs
Shared Libs required:
        libQt5Core.so.5
        libQt5Gui.so.5
        libQt5Widgets.so.5
        libc++.so.1
        libc.so.7
        libcxxrt.so.1
        libgcc_s.so.1
        libm.so.5
Shared Libs provided:
        libQtColorWidgets-Qt52.so.2
Annotations    :
        FreeBSD_version: 1500507
Flat size      : 585KiB
Description    :
Qt-Color-Widgets is a color dialog that is more user-friendly than the default
QColorDialog and several other color-related widgets.

The provided widgets are:
* ColorWheel, An analog widget used to select a color
* ColorPreview, A simple widget that displays a color
* GradientSlider, A slider that has a gradient background
* HueSlider, A variant of GradientSlider that has a rainbow background
* ColorSelector, A ColorPreview that shows a ColorDialog when clicked
* ColorDialog, A dialog that uses the above widgets to provide a better user
  experience than QColorDialog
* ColorListWidget, A widget to edit a list of colors
* Swatch, A widget to display a color palette
* ColorPaletteWidget, A widget to use and manage a list of palettes
* Color2DSlider, An analog widget used to select 2 color components
* ColorLineEdit, A widget to manipulate a string representing a color
* HarmonyColorWheel, A ColorWheel which allows defining multiple colors,
  separated by hue
* GradientListModel, A QAbstractListModel used to list gradients (useful for
  comboboxes, list views and the like)

Things for qt are somewhat of a mixed bag, some libraries go to expected directories or those that are more obvious, others not so much.

/usr/local/lib/qt5/libQt5Gui.so 
/usr/local/lib/qt6/libQt6DesignerComponents.so 
/usr/local/lib/libkdsingleapplication-qt6.so

If I look in each of those library directories I can find whether there is any other library for libQtColorWidgets.

root@ichigo:/home/tigersharke/GitRepos/flameshot-dev # ls /usr/local/lib/libQtColorWidgets-Qt52.so.2
libQtColorWidgets-Qt52.so.2.2.0* libQtColorWidgets-Qt52.so.2@

What baffled me for a long time after everything sucessfully built, was that I couldn't do make makeplist > pkg-plist to make the pkg-plist file.  I figured it out though and it probably is not very obvious.  I had I had a mistake in my USES line due to my previous repeated iterations to get the change for qt6 from the upstream update to work, build.

USES=	cmake qmake qt:5 qt:6 desktop-file-utils gl

When I removed qmake from that line, the pkg-plist was generated as expected.  I updated my repo for this to keep my successful build but now that I cured the pkg-plist issue, I can make another update for the Makefile and add the pkg-plist file it needs as well.  Definitely this whole belated success and that last nit finally cured are reasons to celebrate

If you're updating an official port or one mainly for yourself that you provide to the public also, or creating a new port based on something in an upstream git repo, it may take time to figure it out.  Maybe you need a break when frustration gets to an unbearable level, but be sure to return sometime later and see if you can see what was wrong that was clouded by emotion.  Maybe upstream will have changed its code enough that now those same problems no longer apply, or perhaps mechanisms for porting in FreeBSD may have been improved.

There are plenty of sources for information, and ways to find it.  grep -R keyword * can help dig through things in /usr/ports/Mk to find the option or a clue how to succeed.  Do the search in /usr/ports to find how someone else may have tackled the same issue, similar ports.  Search within a patch file by using that as the key word, like grep -R patch- * because any patch in a port's leaf directory will be in its files subdirectory given a "patch-" prefix in its name.  And remember, FreeBSD Porter's Handbook and FreeBSD Discord are options for help among many.


UPDATE:
I have discovered that although it built perfectly and created all the files, something is wrong because taking a screenshot fails to save a png that is a real png.  I am looking into things, expecting that somewhere a dependency may be wrong or some other odd issue related to how I convinced flameshot to build.

No comments:

Frequently viewed this week