From a60b1ae470f3976127ce66ebd0f0e0623f05d0fa Mon Sep 17 00:00:00 2001 From: JkktBkkt Date: Wed, 29 Jul 2026 16:54:46 +0300 Subject: [PATCH 1/5] New package: libprojectM-4.1.7. --- common/shlibs | 2 ++ srcpkgs/libprojectM-devel | 1 + srcpkgs/libprojectM/template | 29 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 120000 srcpkgs/libprojectM-devel create mode 100644 srcpkgs/libprojectM/template diff --git a/common/shlibs b/common/shlibs index 343ee78db4baab..f32e788d4c8dcc 100644 --- a/common/shlibs +++ b/common/shlibs @@ -718,6 +718,8 @@ libpulse-simple.so.0 libpulseaudio-15.0_1 libpulsecommon-16.1.so libpulseaudio-16.0_1 libpulsecore-16.1.so libpulseaudio-16.0_1 libprojectM.so.3 projectM-3.1.7_2 +libprojectM-4.so.4 libprojectM-4.1.7_1 +libprojectM-4-playlist.so.4 libprojectM-4.1.7_1 liborc-0.4.so.0 orc-0.4.11_1 liborc-test-0.4.so.0 orc-0.4.11_1 libtotem-plparser.so.18 totem-pl-parser-3.26.1_1 diff --git a/srcpkgs/libprojectM-devel b/srcpkgs/libprojectM-devel new file mode 120000 index 00000000000000..b77852dffac2dc --- /dev/null +++ b/srcpkgs/libprojectM-devel @@ -0,0 +1 @@ +libprojectM \ No newline at end of file diff --git a/srcpkgs/libprojectM/template b/srcpkgs/libprojectM/template new file mode 100644 index 00000000000000..e7c7ce18ca9395 --- /dev/null +++ b/srcpkgs/libprojectM/template @@ -0,0 +1,29 @@ +# Template file for 'libprojectM' +pkgname=libprojectM +version=4.1.7 +revision=1 +build_style=cmake +configure_args="-DENABLE_SYSTEM_GLM=ON" +hostmakedepends="pkg-config" +makedepends="pipewire-devel glm MesaLib-devel" +checkdepends="gtest-devel" +short_desc="Music visualization library (v4)" +maintainer="JkktBkkt " +license="LGPL-2.1-or-later" +homepage="https://github.com/projectM-visualizer/projectm" +distfiles="${homepage}/releases/download/v${version}/libprojectM-${version}.tar.gz" +checksum=16e4610b4d58981f7a2351faa58d507d3f40163a7b26ba81e19aec928c66641f + +if [ -n "$XBPS_CHECK_PKGS" ]; then + configure_args+=" -DBUILD_TESTING=ON" +fi + +libprojectM-devel_package() { + depends="${sourcepkg}>=${version}_${revision}" + short_desc+=" - development files" + pkg_install() { + vmove usr/include + vmove usr/lib/cmake + vmove "usr/lib/*.so" + } +} From ccf9a3bb4957ecc84732a531f2c6e23dbef8cd69 Mon Sep 17 00:00:00 2001 From: JkktBkkt Date: Tue, 11 Aug 2026 16:21:02 +0300 Subject: [PATCH 2/5] projectM: rebuild to fix presets path --- srcpkgs/projectM/template | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/srcpkgs/projectM/template b/srcpkgs/projectM/template index 698e8860a07370..810684615afab4 100644 --- a/srcpkgs/projectM/template +++ b/srcpkgs/projectM/template @@ -1,10 +1,10 @@ # Template file for 'projectM' pkgname=projectM version=3.1.12 -revision=2 +revision=3 build_style=gnu-configure build_helper=qmake -configure_args="--datadir=/usr/libexec --enable-qt --enable-pulseaudio +configure_args="--enable-qt --enable-pulseaudio --enable-jack --enable-sdl" hostmakedepends="pkg-config qt5-host-tools automake libtool which qt5-qmake qt5-tools-devel" @@ -18,17 +18,13 @@ homepage="https://github.com/projectM-visualizer/projectm" distfiles="${homepage}/releases/download/v${version}/projectM-${version}.tar.gz" checksum=b6b99dde5c8f0822ae362606a0429628ee478f4ec943a156723841b742954707 +ignore_elf_dirs="/usr/share/projectM/presets" + if [ "$XBPS_TARGET_LIBC" = "musl" ]; then makedepends+=" musl-fts-devel" LDFLAGS="-lfts" fi -post_install() { - # fix location of desktop files - vmkdir usr/share - mv $DESTDIR/usr/libexec/{applications,icons} $DESTDIR/usr/share -} - projectM-devel_package() { depends="${sourcepkg}>=${version}_${revision}" short_desc+=" - development files" From 63193029dc8c964b8f4510d9b99bc0bb73f1735c Mon Sep 17 00:00:00 2001 From: JkktBkkt Date: Wed, 29 Jul 2026 16:57:04 +0300 Subject: [PATCH 3/5] clementine: update to 1.4.1-82, switch to libprojectM (v4). --- .../clementine/patches/cmake-version.patch | 193 ------------------ srcpkgs/clementine/template | 10 +- 2 files changed, 6 insertions(+), 197 deletions(-) delete mode 100644 srcpkgs/clementine/patches/cmake-version.patch diff --git a/srcpkgs/clementine/patches/cmake-version.patch b/srcpkgs/clementine/patches/cmake-version.patch deleted file mode 100644 index bfb428895d6021..00000000000000 --- a/srcpkgs/clementine/patches/cmake-version.patch +++ /dev/null @@ -1,193 +0,0 @@ -From ec4eba532d6e4c3385180963ad0ae186e248d478 Mon Sep 17 00:00:00 2001 -From: Shen Long -Date: Mon, 7 Jul 2025 17:25:24 +0200 -Subject: [PATCH] Bump CMake minimum versions to >3.30 - -It helps working with CMake >4.0 and also is working on CMake 3.31.7. ---- - 3rdparty/libmygpo-qt5/CMakeLists.txt | 2 +- - 3rdparty/libprojectm/CMakeLists.txt | 10 +--------- - .../libprojectm/MilkdropPresetFactory/CMakeLists.txt | 2 +- - 3rdparty/libprojectm/Renderer/CMakeLists.txt | 2 +- - 3rdparty/qsqlite/CMakeLists.txt | 2 +- - 3rdparty/qtiocompressor/CMakeLists.txt | 2 +- - 3rdparty/qtsingleapplication/CMakeLists.txt | 2 +- - 3rdparty/qxt/CMakeLists.txt | 2 +- - 3rdparty/taglib/CMakeLists.txt | 2 +- - 3rdparty/utf8-cpp/CMakeLists.txt | 2 +- - CMakeLists.txt | 4 +--- - cmake/ParseArguments.cmake | 2 +- - cmake/Translations.cmake | 2 +- - gst/moodbar/CMakeLists.txt | 2 +- - tests/CMakeLists.txt | 2 +- - 15 files changed, 15 insertions(+), 25 deletions(-) - -diff --git a/3rdparty/libmygpo-qt5/CMakeLists.txt b/3rdparty/libmygpo-qt5/CMakeLists.txt -index a789728706..995cc77a85 100644 ---- a/3rdparty/libmygpo-qt5/CMakeLists.txt -+++ b/3rdparty/libmygpo-qt5/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required( VERSION 3.0.0 FATAL_ERROR ) -+cmake_minimum_required( VERSION 3.10.0 FATAL_ERROR ) - - set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII" ) -diff --git a/3rdparty/libprojectm/CMakeLists.txt b/3rdparty/libprojectm/CMakeLists.txt -index a70f8a2b2e..275329c78d 100644 ---- a/3rdparty/libprojectm/CMakeLists.txt -+++ b/3rdparty/libprojectm/CMakeLists.txt -@@ -1,17 +1,9 @@ - PROJECT(projectM) --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The projectM core library.") - - include(CheckCXXCompilerFlag) - --cmake_policy(SET CMP0005 OLD) -- --# This policy was only added in cmake 2.8.4 --if (CMAKE_VERSION VERSION_GREATER "2.8.3") -- cmake_policy(SET CMP0017 OLD) --endif (CMAKE_VERSION VERSION_GREATER "2.8.3") -- -- - set(USE_DEVIL OFF) - set(USE_FBO ON) - set(USE_FTGL OFF) -diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/CMakeLists.txt b/3rdparty/libprojectm/MilkdropPresetFactory/CMakeLists.txt -index 824d51faed..59f135aeee 100644 ---- a/3rdparty/libprojectm/MilkdropPresetFactory/CMakeLists.txt -+++ b/3rdparty/libprojectm/MilkdropPresetFactory/CMakeLists.txt -@@ -1,5 +1,5 @@ - PROJECT(MilkdropPresetFactory) --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - if(COMMAND cmake_policy) - cmake_policy(SET CMP0003 NEW) -diff --git a/3rdparty/libprojectm/Renderer/CMakeLists.txt b/3rdparty/libprojectm/Renderer/CMakeLists.txt -index 40bfe2c20d..b5f7ea0967 100644 ---- a/3rdparty/libprojectm/Renderer/CMakeLists.txt -+++ b/3rdparty/libprojectm/Renderer/CMakeLists.txt -@@ -1,5 +1,5 @@ - PROJECT(Renderer) --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - if(COMMAND cmake_policy) - cmake_policy(SET CMP0003 NEW) -diff --git a/3rdparty/qsqlite/CMakeLists.txt b/3rdparty/qsqlite/CMakeLists.txt -index 0f1fba525c..f790710a59 100644 ---- a/3rdparty/qsqlite/CMakeLists.txt -+++ b/3rdparty/qsqlite/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - add_definitions(-DQT_STATICPLUGIN) - -diff --git a/3rdparty/qtiocompressor/CMakeLists.txt b/3rdparty/qtiocompressor/CMakeLists.txt -index 98d6445f85..2b434da7e7 100644 ---- a/3rdparty/qtiocompressor/CMakeLists.txt -+++ b/3rdparty/qtiocompressor/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - set(IOCOMPRESSOR-SOURCES - qtiocompressor.cpp -diff --git a/3rdparty/qtsingleapplication/CMakeLists.txt b/3rdparty/qtsingleapplication/CMakeLists.txt -index c405256f9a..c9ee4afe6c 100644 ---- a/3rdparty/qtsingleapplication/CMakeLists.txt -+++ b/3rdparty/qtsingleapplication/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - set(SINGLEAPP-SOURCES - qtlocalpeer.cpp -diff --git a/3rdparty/qxt/CMakeLists.txt b/3rdparty/qxt/CMakeLists.txt -index b3348c4b86..7d60902379 100644 ---- a/3rdparty/qxt/CMakeLists.txt -+++ b/3rdparty/qxt/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - set(CMAKE_CXX_STANDARD 11) - - set(QXT-SOURCES -diff --git a/3rdparty/taglib/CMakeLists.txt b/3rdparty/taglib/CMakeLists.txt -index 39ffb95340..1d74b6135c 100644 ---- a/3rdparty/taglib/CMakeLists.txt -+++ b/3rdparty/taglib/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-delete-non-virtual-dtor") - -diff --git a/3rdparty/utf8-cpp/CMakeLists.txt b/3rdparty/utf8-cpp/CMakeLists.txt -index 14e7fcdc2a..f3ea1ae9a7 100644 ---- a/3rdparty/utf8-cpp/CMakeLists.txt -+++ b/3rdparty/utf8-cpp/CMakeLists.txt -@@ -1,2 +1,2 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - set(CMAKE_CXX_STANDARD 11) -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 48b55f4c55..f9076d9b49 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -1,8 +1,6 @@ --cmake_minimum_required(VERSION 3.13.0) -+cmake_minimum_required(VERSION 3.30.0) - project(clementine) - --cmake_policy(SET CMP0053 OLD) -- - include(CheckCXXCompilerFlag) - include(FindPkgConfig) - include(cmake/C++11Compat.cmake) -diff --git a/cmake/ParseArguments.cmake b/cmake/ParseArguments.cmake -index fd5f9987ec..19ca67ab1c 100644 ---- a/cmake/ParseArguments.cmake -+++ b/cmake/ParseArguments.cmake -@@ -1,6 +1,6 @@ - # From http://www.cmake.org/Wiki/CMakeMacroParseArguments - --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - MACRO(PARSE_ARGUMENTS prefix arg_names option_names) - SET(DEFAULT_ARGS) -diff --git a/cmake/Translations.cmake b/cmake/Translations.cmake -index a16bcc3901..fbee765107 100644 ---- a/cmake/Translations.cmake -+++ b/cmake/Translations.cmake -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - set (XGETTEXT_OPTIONS --qt --keyword=tr:1,2c --keyword=tr --flag=tr:1:pass-c-format --flag=tr:1:pass-qt-format - --keyword=trUtf8 --flag=tr:1:pass-c-format --flag=tr:1:pass-qt-format -diff --git a/gst/moodbar/CMakeLists.txt b/gst/moodbar/CMakeLists.txt -index 0bb87e8844..dfe9bc9830 100644 ---- a/gst/moodbar/CMakeLists.txt -+++ b/gst/moodbar/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wall") -diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt -index 81031b072e..b7ada3ae79 100644 ---- a/tests/CMakeLists.txt -+++ b/tests/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.0.0) -+cmake_minimum_required(VERSION 3.10.0) - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -Wno-c++11-narrowing") - diff --git a/srcpkgs/clementine/template b/srcpkgs/clementine/template index 348d59808970e0..dac6de2064dff0 100644 --- a/srcpkgs/clementine/template +++ b/srcpkgs/clementine/template @@ -1,8 +1,8 @@ # Template file for 'clementine' pkgname=clementine version=1.4.1 -revision=4 -_fullver=${version}-35-g400085808 +revision=5 +_fullver=${version}-82-g47062c88e build_style=cmake configure_args="-DUSE_SYSTEM_TAGLIB=ON -DBUILD_WERROR=OFF -DUSE_SYSTEM_PROJECTM=ON -DFORCE_GIT_REVISION=${_fullver} -DCMAKE_CXX_STANDARD=17" @@ -13,14 +13,16 @@ makedepends="chromaprint-devel boost-headers gst-plugins-base1-devel taglib-devel crypto++-devel libgpod-devel libmygpo-qt-devel qt5-x11extras-devel qt5-plugin-mysql qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds qt5-plugin-odbc qt5-tools-devel liblastfm-qt5-devel - projectM-devel" + libprojectM-devel" +# for preset files +depends="projectM" depends="desktop-file-utils" short_desc="Modern music player and library organizer" maintainer="Andrea Brancaleoni " license="GPL-3.0-or-later" homepage="https://www.clementine-player.org/" distfiles="https://github.com/clementine-player/Clementine/releases/download/${_fullver}/clementine-${_fullver}.tar.xz" -checksum=6333035fd48899768132815cbb6edf3277d247e82d78b74bb505b58baeace84f +checksum=8f5a4441bd1ee91fa49bc08d35005a1fcdc3171119d2e36a541189d3985338d1 case "$XBPS_TARGET_MACHINE" in *-musl) From 32a33f36880d2727d23ea2776c990ee9ff2c8ab7 Mon Sep 17 00:00:00 2001 From: JkktBkkt Date: Tue, 11 Aug 2026 16:23:36 +0300 Subject: [PATCH 4/5] qmmp: rebuild to use libprojectM (v4). --- srcpkgs/qmmp/patches/fix-projectM-4.patch | 391 ++++++++++++++++++++++ srcpkgs/qmmp/template | 8 +- 2 files changed, 396 insertions(+), 3 deletions(-) create mode 100644 srcpkgs/qmmp/patches/fix-projectM-4.patch diff --git a/srcpkgs/qmmp/patches/fix-projectM-4.patch b/srcpkgs/qmmp/patches/fix-projectM-4.patch new file mode 100644 index 00000000000000..548b1ee207cd14 --- /dev/null +++ b/srcpkgs/qmmp/patches/fix-projectM-4.patch @@ -0,0 +1,391 @@ +diff --git a/src/plugins/Visual/projectm/projectm4widget.cpp b/src/plugins/Visual/projectm/projectm4widget.cpp +--- a/src/plugins/Visual/projectm/projectm4widget.cpp ++++ b/src/plugins/Visual/projectm/projectm4widget.cpp +@@ -74,12 +74,15 @@ + + void ProjectM4Widget::addPCM(float *left, float *right) + { +- for(size_t i = 0; i < QMMP_VISUAL_NODE_SIZE; ++i) +- { +- m_buf[i * 2] = left[i]; +- m_buf[i * 2 + 1] = right[i]; +- } +- projectm_pcm_add_float(m_handle, m_buf, QMMP_VISUAL_NODE_SIZE, PROJECTM_STEREO); ++ if(m_handle) ++ { ++ for(size_t i = 0; i < QMMP_VISUAL_NODE_SIZE; ++i) ++ { ++ m_buf[i * 2] = left[i]; ++ m_buf[i * 2 + 1] = right[i]; ++ } ++ projectm_pcm_add_float(m_handle, m_buf, QMMP_VISUAL_NODE_SIZE, PROJECTM_STEREO); ++ } + } + + void ProjectM4Widget::initializeGL() +@@ -176,7 +179,7 @@ + { + QDir presetDir(path); + presetDir.setFilter(QDir::Files); +- const QFileInfoList files = presetDir.entryInfoList({ "*.prjm", "*.milk" }, QDir::Files); ++ const QFileInfoList files = presetDir.entryInfoList({ u"*.prjm"_s, u"*.milk"_s }, QDir::Files); + + for(const QFileInfo &info : std::as_const(files)) + { + +diff --git a/src/plugins/Visual/projectm/CMakeLists.txt b/src/plugins/Visual/projectm/CMakeLists.txt +--- a/src/plugins/Visual/projectm/CMakeLists.txt ++++ b/src/plugins/Visual/projectm/CMakeLists.txt +@@ -10,10 +10,14 @@ + set(PROJECTM_FOUND TRUE CACHE INTERNAL "projectm") + set(PROJECTM_PRESET_PATH ${CMAKE_INSTALL_DATADIR}/presets CACHE STRING "projectM preset search path") + set(PROJECTM_TEXTURE_PATH ${CMAKE_INSTALL_DATADIR}/textures CACHE STRING "projectM texture search path") ++ option(PROJECTM_FORCE_GLES "force OpenGL ES for projectM" OFF) + set(libprojectm_DEFINES ${libprojectm_DEFINES} + PROJECTM_PRESET_PATH=\"${PROJECTM_PRESET_PATH}\" + PROJECTM_TEXTURE_PATH=\"${PROJECTM_TEXTURE_PATH}\" + ) ++ if(PROJECTM_FORCE_GLES) ++ set(libprojectm_DEFINES ${libprojectm_DEFINES} PROJECTM_FORCE_GLES) ++ endif() + message(STATUS "Found projectM 4.x") + else(projectM4_FOUND) + # projectM 2.x/3.x +@@ -45,7 +49,7 @@ + ) + + if(projectM4_FOUND) +- set(libprojectm_SRCS ${libprojectm_SRCS} projectm4widget.cpp) ++ set(libprojectm_SRCS ${libprojectm_SRCS} projectm4window.cpp) + else(projectM4_FOUND) + set(libprojectm_SRCS ${libprojectm_SRCS} projectmwidget.cpp projectmwrapper.cpp) + endif(projectM4_FOUND) + +diff --git a/src/plugins/Visual/projectm/projectm.pro b/src/plugins/Visual/projectm/projectm.pro +--- a/src/plugins/Visual/projectm/projectm.pro ++++ b/src/plugins/Visual/projectm/projectm.pro +@@ -14,13 +14,16 @@ + + #DEFINES += PROJECTM_31 + #DEFINES += PROJECTM_4 ++DEFINES += PROJECTM_FORCE_GLES + + freebsd:DEFINES += PROJECTM_31 + + contains(DEFINES, PROJECTM_4) { +- HEADERS += projectm4widget.h ++ HEADERS += \ ++ projectm4window.h + +- SOURCES += projectm4widget.cpp ++ SOURCES += \ ++ projectm4window.cpp + } else { + HEADERS += projectmwidget.h \ + projectmwrapper.h +diff --git a/src/plugins/Visual/projectm/projectmplugin.cpp b/src/plugins/Visual/projectm/projectmplugin.cpp +--- a/src/plugins/Visual/projectm/projectmplugin.cpp ++++ b/src/plugins/Visual/projectm/projectmplugin.cpp +@@ -29,7 +29,7 @@ + #include + #include + #ifdef PROJECTM_4 +-#include "projectm4widget.h" ++#include "projectm4window.h" + #else + #include "projectmwidget.h" + #endif +@@ -48,21 +48,21 @@ + m_splitter->addWidget(listWidget); + #ifdef PROJECTM_4 + m_projectMWidget = new ProjectM4Widget(listWidget, m_splitter); ++ m_splitter->addWidget(createWindowContainer(m_projectMWidget, this)); + #else + m_projectMWidget = new ProjectMWidget(listWidget, m_splitter); ++ m_splitter->addWidget(m_projectMWidget); + #endif +- m_splitter->addWidget(m_projectMWidget); +- +- m_splitter->setStretchFactor(1,1); ++ m_splitter->setStretchFactor(1, 1); + QHBoxLayout *layout = new QHBoxLayout; + layout->addWidget(m_splitter); +- layout->setContentsMargins(0,0,0,0); ++ layout->setContentsMargins(0, 0, 0, 0); + setLayout(layout); +- addActions(m_projectMWidget->actions()); + #ifdef PROJECTM_4 + connect(m_projectMWidget, &ProjectM4Widget::showMenuToggled, listWidget, &QListWidget::setVisible); + connect(m_projectMWidget, &ProjectM4Widget::fullscreenToggled, this, &ProjectMPlugin::setFullScreen); + #else ++ addActions(m_projectMWidget->actions()); + connect(m_projectMWidget, &ProjectMWidget::showMenuToggled, listWidget, &QListWidget::setVisible); + connect(m_projectMWidget, &ProjectMWidget::fullscreenToggled, this, &ProjectMPlugin::setFullScreen); + #endif +diff --git a/src/plugins/Visual/projectm/projectmplugin.h b/src/plugins/Visual/projectm/projectmplugin.h +--- a/src/plugins/Visual/projectm/projectmplugin.h ++++ b/src/plugins/Visual/projectm/projectmplugin.h +@@ -59,7 +59,6 @@ + ProjectMWidget *m_projectMWidget; + #endif + QSplitter *m_splitter; +- short m_buf[2][512]; + float m_left[QMMP_VISUAL_NODE_SIZE]; + float m_right[QMMP_VISUAL_NODE_SIZE]; + }; + + +diff --git a/src/plugins/Visual/projectm/projectm4widget.cpp b/src/plugins/Visual/projectm/projectm4window.cpp +similarity index 90% +rename from src/plugins/Visual/projectm/projectm4widget.cpp +rename to src/plugins/Visual/projectm/projectm4window.cpp +index aaaaaaaa..bbbbbbbb 100644 +--- a/src/plugins/Visual/projectm/projectm4widget.cpp ++++ b/src/plugins/Visual/projectm/projectm4window.cpp +@@ -27,12 +27,14 @@ + #include + #include + #include ++#include + #include ++#include + #include + #include + #include + #include +-#include "projectm4widget.h" ++#include "projectm4window.h" + + #ifndef PROJECTM_PRESET_PATH + #define PROJECTM_PRESET_PATH "/usr/share/projectM/presets" +@@ -42,13 +44,20 @@ + #define PROJECTM_TEXTURE_PATH "/usr/share/projectM/textures" + #endif + +- + ProjectM4Widget::ProjectM4Widget(QListWidget *listWidget, QWidget *parent) +- : QOpenGLWidget(parent) +-{ +- setMouseTracking(true); ++ : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate), m_parent(parent) ++{ ++#ifdef PROJECTM_FORCE_GLES ++ QSurfaceFormat f = format(); ++ if(f.renderableType() != QSurfaceFormat::OpenGLES) ++ { ++ f.setRenderableType(QSurfaceFormat::OpenGLES); ++ setFormat(f); ++ } ++#endif ++ + m_listWidget = listWidget; +- m_menu = new QMenu(this); ++ m_menu = new QMenu(parent); + createActions(); + } + +@@ -87,25 +96,14 @@ + + void ProjectM4Widget::initializeGL() + { +- glShadeModel(GL_SMOOTH); +- glClearColor(0,0,0,0); +- // Setup our viewport +- glViewport(0, 0, width(), height()); +- // Change to the projection matrix and set our viewing volume. +- glMatrixMode(GL_TEXTURE); +- glLoadIdentity(); +- glMatrixMode(GL_PROJECTION); +- glLoadIdentity(); +- glMatrixMode(GL_MODELVIEW); +- glLoadIdentity(); ++ initializeOpenGLFunctions(); ++ ++ glClearColor(0.0F, 0.0F, 0.0F, 0.0F); ++ glViewport(0, 0, width() * devicePixelRatio(), height() * devicePixelRatio()); + glDrawBuffer(GL_BACK); + glReadBuffer(GL_BACK); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +- glEnable(GL_LINE_SMOOTH); +- glEnable(GL_POINT_SMOOTH); +- glClearColor(0.0f, 0.0f, 0.0f, 0.0f); +- glLineStipple(2, 0xAAAA); + + if(!m_handle) + { +@@ -127,6 +125,7 @@ + projectm_set_hard_cut_sensitivity(m_handle, 1.0); + projectm_set_beat_sensitivity(m_handle, 1.0); + projectm_set_easter_egg(m_handle, 1.0); ++ projectm_set_window_size(m_handle, width(), height()); + + m_playlistHandle = projectm_playlist_create(m_handle); + projectm_playlist_set_shuffle(m_playlistHandle, false); +@@ -141,7 +140,7 @@ + if(m_handle) + { + initializeGL(); +- projectm_set_window_size(m_handle, w, h); ++ projectm_set_window_size(m_handle, w * devicePixelRatio(), h * devicePixelRatio()); + } + } + +@@ -155,9 +154,9 @@ + } + } + +-void ProjectM4Widget::mousePressEvent (QMouseEvent *event) +-{ +- if(event->button() == Qt::RightButton) ++void ProjectM4Widget::mousePressEvent(QMouseEvent *event) ++{ ++ if(event->button() == Qt::RightButton) + m_menu->exec(event->globalPosition().toPoint()); + } + +@@ -172,7 +171,7 @@ + m_menu->addSeparator(); + m_menu->addAction(tr("&Fullscreen"), tr("F"), this, &ProjectM4Widget::fullscreenToggled)->setCheckable(true); + m_menu->addSeparator(); +- addActions(m_menu->actions()); ++ m_parent->addActions(m_menu->actions()); + } + + void ProjectM4Widget::findPresets(const QString &path) + +diff --git a/src/plugins/Visual/projectm/projectm4widget.h b/src/plugins/Visual/projectm/projectm4window.h +similarity index 98% +rename from src/plugins/Visual/projectm/projectm4widget.h +rename to src/plugins/Visual/projectm/projectm4window.h +index aaaaaaaa..bbbbbbbb 100644 +--- a/src/plugins/Visual/projectm/projectm4widget.h ++++ b/src/plugins/Visual/projectm/projectm4window.h +@@ -17,10 +17,12 @@ + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +-#ifndef PROJECTM4WIDGET_H +-#define PROJECTM4WIDGET_H ++#ifndef PROJECTM4WINDOW_H ++#define PROJECTM4WINDOW_H + + #include ++#include ++#include + #include + #include + #include +@@ -32,7 +34,7 @@ + /** + @author Ilya Kotov + */ +-class ProjectM4Widget : public QOpenGLWidget ++class ProjectM4Widget : public QOpenGLWindow, protected QOpenGLFunctions + { + Q_OBJECT + public: +@@ -70,6 +72,7 @@ + projectm_playlist_handle m_playlistHandle = nullptr; + QMenu *m_menu; + QListWidget *m_listWidget; ++ QWidget *m_parent; + float m_buf[QMMP_VISUAL_NODE_SIZE * 2] = { 0 }; + }; + +diff --git a/src/plugins/Visual/projectm/CMakeLists.txt b/src/plugins/Visual/projectm/CMakeLists.txt +--- a/src/plugins/Visual/projectm/CMakeLists.txt ++++ b/src/plugins/Visual/projectm/CMakeLists.txt +@@ -1,46 +1,41 @@ + project(libprojectm) + +-# projectM +-if(QT_FEATURE_opengl) ++# projectM 4.x ++find_package(projectM4 COMPONENTS Playlist) ++if(projectM4_FOUND) ++ message(STATUS "Found projectM 4.x") ++ set(PROJECTM_FOUND TRUE CACHE INTERNAL "projectm") ++ set(PROJECTM_PRESET_PATH ${CMAKE_INSTALL_FULL_DATADIR}/projectM/presets CACHE STRING "projectM preset search path") ++ set(PROJECTM_TEXTURE_PATH ${CMAKE_INSTALL_FULL_DATADIR}/projectM/textures CACHE STRING "projectM texture search path") ++ option(PROJECTM_FORCE_GLES "force OpenGL ES for projectM" OFF) ++ set(libprojectm_DEFINES ${libprojectm_DEFINES} ++ PROJECTM_4 ++ PROJECTM_PRESET_PATH=\"${PROJECTM_PRESET_PATH}\" ++ PROJECTM_TEXTURE_PATH=\"${PROJECTM_TEXTURE_PATH}\" ++ ) ++ if(PROJECTM_FORCE_GLES) ++ set(libprojectm_DEFINES ${libprojectm_DEFINES} PROJECTM_FORCE_GLES) ++ endif() ++elseif(QT_FEATURE_opengl) + message(STATUS "Found desktop OpenGL implementation") +- # projectM 4.0 +- find_package(projectM4 COMPONENTS Playlist) +- if(projectM4_FOUND) +- add_definitions(-DPROJECTM_4) +- set(PROJECTM_FOUND TRUE CACHE INTERNAL "projectm") +- set(PROJECTM_PRESET_PATH ${CMAKE_INSTALL_DATADIR}/presets CACHE STRING "projectM preset search path") +- set(PROJECTM_TEXTURE_PATH ${CMAKE_INSTALL_DATADIR}/textures CACHE STRING "projectM texture search path") +- option(PROJECTM_FORCE_GLES "force OpenGL ES for projectM" OFF) +- set(libprojectm_DEFINES ${libprojectm_DEFINES} +- PROJECTM_PRESET_PATH=\"${PROJECTM_PRESET_PATH}\" +- PROJECTM_TEXTURE_PATH=\"${PROJECTM_TEXTURE_PATH}\" +- ) +- if(PROJECTM_FORCE_GLES) +- set(libprojectm_DEFINES ${libprojectm_DEFINES} PROJECTM_FORCE_GLES) ++ # projectM 2.x/3.x ++ pkg_search_module(PROJECTM libprojectM>=2.0.0 IMPORTED_TARGET) ++ if(PROJECTM_FOUND) ++ find_file(PROJECTM_CONFIG config.inp PATHS "/usr/share/projectM/" "/usr/local/share/projectM/") ++ if(PROJECTM_VERSION VERSION_GREATER_EQUAL 3.1.0) ++ set(libprojectm_DEFINES ${libprojectm_DEFINES} PROJECTM_31) ++ message(STATUS "Found projectM 3.x") ++ else() ++ message(STATUS "Found projectM 2.x") + endif() +- message(STATUS "Found projectM 4.x") +- else(projectM4_FOUND) +- # projectM 2.x/3.x +- pkg_search_module(PROJECTM libprojectM>=2.0.0 IMPORTED_TARGET) +- if(PROJECTM_FOUND) +- find_file(PROJECTM_CONFIG config.inp +- PATHS "/usr/share/projectM/" "/usr/local/share/projectM/") +- if(PROJECTM_VERSION VERSION_GREATER_EQUAL 3.1.0) +- ADD_DEFINITIONS(-DPROJECTM_31) +- MESSAGE(STATUS "Found projectM 3.x") +- else() +- MESSAGE(STATUS "Found projectM 2.x") +- endif() +- endif(PROJECTM_FOUND) +- endif(projectM4_FOUND) +-else(QT_FEATURE_opengl) ++ if(PROJECTM_CONFIG) ++ set(libprojectm_DEFINES ${libprojectm_DEFINES} PROJECTM_CONFIG=\"${PROJECTM_CONFIG}\") ++ message(STATUS "Found projectM configuration: ${PROJECTM_CONFIG}") ++ endif() ++ endif() ++else() + message(WARNING "Unsuppoted OpenGL implementation, projectM disabled") +-endif(QT_FEATURE_opengl) +- +-if(PROJECTM_CONFIG) +- set(libprojectm_DEFINES ${libprojectm_DEFINES} PROJECTM_CONFIG=\"${PROJECTM_CONFIG}\") +- message(STATUS "Found projectM configuration: ${PROJECTM_CONFIG}") +-endif(PROJECTM_CONFIG) ++endif() + + set(libprojectm_SRCS + projectmplugin.cpp +@@ -56,11 +51,11 @@ + + if(PROJECTM_FOUND) + add_library(projectm MODULE ${libprojectm_SRCS}) ++ target_compile_definitions(projectm PRIVATE ${libprojectm_DEFINES}) + + if(projectM4_FOUND) + target_link_libraries(projectm PRIVATE Qt6::OpenGLWidgets libqmmp libprojectM::playlist) + else(projectM4_FOUND) +- target_compile_definitions(projectm PRIVATE ${libprojectm_DEFINES}) + target_link_libraries(projectm PRIVATE Qt6::OpenGLWidgets libqmmp PkgConfig::PROJECTM) + if(WIN32) + target_link_libraries(projectm PRIVATE -lopengl32) diff --git a/srcpkgs/qmmp/template b/srcpkgs/qmmp/template index b88f03c0af6c67..8a2fac501f749c 100644 --- a/srcpkgs/qmmp/template +++ b/srcpkgs/qmmp/template @@ -1,6 +1,6 @@ # Template file for 'qmmp' pkgname=qmmp -version=2.3.2 +version=2.3.3 revision=1 build_style=cmake configure_args="-DUSE_HAL:BOOL=FALSE -DQMMP_DEFAULT_UI:STRING=simple" @@ -9,14 +9,16 @@ makedepends="enca-devel faad2-devel ffmpeg6-devel jack-devel libarchive-devel libbs2b-devel libcdio-paranoia-devel libcurl-devel libgme-devel libmad-devel libmms-devel libmodplug-devel libmpcdec-devel libsamplerate-devel libshout-devel libsidplayfp-devel libsoxr-devel libwildmidi-devel opusfile-devel pipewire-devel - projectM-devel pulseaudio-devel qt6-base-devel qt6-multimedia-devel qt6-tools-devel + libprojectM-devel pulseaudio-devel qt6-base-devel qt6-multimedia-devel qt6-tools-devel taglib-devel wavpack-devel" +# for preset files +depends="projectM" short_desc="Audio player based on Qt" maintainer="Orphaned " license="GPL-3.0-or-later" homepage="http://qmmp.ylsoftware.com" distfiles="http://qmmp.ylsoftware.com/files/qmmp/${version%.*}/qmmp-${version}.tar.bz2" -checksum=4d8bbae619e99cfd665d96c3688d2d306f5ffc30144e07b37ca701a99e326365 +checksum=51c964e9e685cf67266b2e8e3135ee4504b6bf6b2283f46bbfd4abe36ae3690d # Remove references to prebuilt Qt translation files (.qm) that are # missing from the source tarball and not generated by the CMake build. From d89ba7d11ac5799290597a679556af8fbce5cb03 Mon Sep 17 00:00:00 2001 From: JkktBkkt Date: Wed, 29 Jul 2026 17:12:30 +0300 Subject: [PATCH 5/5] fooyin: update to 0.12.4. --- .../fix-rating-star-conversion-i686.patch | 49 +++++++++++++++++++ srcpkgs/fooyin/template | 16 +++--- 2 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 srcpkgs/fooyin/patches/fix-rating-star-conversion-i686.patch diff --git a/srcpkgs/fooyin/patches/fix-rating-star-conversion-i686.patch b/srcpkgs/fooyin/patches/fix-rating-star-conversion-i686.patch new file mode 100644 index 00000000000000..80edc7411d9d20 --- /dev/null +++ b/srcpkgs/fooyin/patches/fix-rating-star-conversion-i686.patch @@ -0,0 +1,49 @@ +From: Luke Taylor +Date: Thu, 13 Aug 2026 18:13:30 +0100 +Subject: [PATCH] [core] Fix rating star conversion on i686 + +Addresses #1492 +--- + src/core/track.cpp | 4 +++- + tests/core/tracktest.cpp | 13 +++++++++++++ + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/src/core/track.cpp b/src/core/track.cpp +index 5914a3a74..bb2ff1986 100644 +--- a/src/core/track.cpp ++++ b/src/core/track.cpp +@@ -1025,7 +1025,9 @@ float Track::rating() const + + int Track::ratingStars() const + { +- return static_cast(std::floor(p->rating * MaxStarCount)); ++ // Round the product to binary32 before flooring, otherwise x87 may retain excess precision ++ const float scaledRating = std::fma(p->rating, static_cast(MaxStarCount), 0.0F); ++ return static_cast(std::floor(scaledRating)); + } + + QString Track::ratingStarsText() const +diff --git a/tests/core/tracktest.cpp b/tests/core/tracktest.cpp +index b21ea0e5f..2ab65481b 100644 +--- a/tests/core/tracktest.cpp ++++ b/tests/core/tracktest.cpp +@@ -87,6 +87,19 @@ TEST(TrackTest, DerivesPathFieldsForRemoteUrls) + EXPECT_TRUE(track.path().isEmpty()); + } + ++TEST(TrackTest, PreservesRatingStarSteps) ++{ ++ Track track; ++ ++ for(int rating{1}; rating <= 10; ++rating) { ++ track.setRatingStars(rating); ++ EXPECT_EQ(track.ratingStars(), rating); ++ } ++ ++ track.setRating(0.75F); ++ EXPECT_EQ(track.ratingStars(), 7); ++} ++ + TEST(TrackTest, UsesCompactMetadataAccessors) + { + Track track; diff --git a/srcpkgs/fooyin/template b/srcpkgs/fooyin/template index 6914fe02349c6c..2471a320a7e1c6 100644 --- a/srcpkgs/fooyin/template +++ b/srcpkgs/fooyin/template @@ -1,17 +1,19 @@ # Template file for 'fooyin' pkgname=fooyin -version=0.10.8 +version=0.12.4 revision=1 build_style=cmake configure_args=" -DBUILD_PCH=ON -DBUILD_WERROR=OFF" hostmakedepends="pkg-config qt6-base qt6-tools" -makedepends="qt6-base-devel qt6-svg-devel alsa-lib-devel - ffmpeg6-devel icu-devel libarchive-devel libebur128-devel - libgme-devel libopenmpt-devel libsndfile-devel pipewire-devel SDL2-devel - taglib-devel KDSingleApplication qcoro-qt6-devel" -depends="qt6-svg qt6-plugin-sqlite" +# Required, optional, input, plugins, output +makedepends="qt6-base-devel qt6-svg-devel icu-devel taglib-devel ffmpeg6-devel + KDSingleApplication qcoro-qt6-devel + libarchive-devel libgme-devel libopenmpt-devel libsndfile-devel + libebur128-devel libprojectM-devel soundtouch-devel libsoxr-devel + alsa-lib-devel pipewire-devel pulseaudio-devel SDL2-devel" +depends="qt6-svg qt6-plugin-sqlite projectM" checkdepends="gtest-devel" short_desc="Customisable music player" maintainer="Ivan Mirić " @@ -19,7 +21,7 @@ license="GPL-3.0-only" homepage="https://www.fooyin.org/" changelog="https://raw.githubusercontent.com/fooyin/fooyin/refs/heads/master/CHANGELOG.md" distfiles="https://github.com/fooyin/fooyin/archive/v${version}.tar.gz" -checksum=2e77f2dd9c3ec713448fa41699d9d38c1e719f489417b3f3af73618c1f3c0659 +checksum=38b8f647081e9a6f1d1b52ea76dcf2f9f73c4bd2b4d2d67e0220c458f3fef74e if [ "$XBPS_CHECK_PKGS" ]; then configure_args+=" -DBUILD_TESTING=ON"