diff --git a/0001-fix-build-error-about-fptr.patch b/0001-fix-build-error-about-fptr.patch new file mode 100644 index 0000000000000000000000000000000000000000..96be8ff78106414e69948d709192ae505390eac7 --- /dev/null +++ b/0001-fix-build-error-about-fptr.patch @@ -0,0 +1,216 @@ +From b49e0339a3c6cc1b7bfecadddb17c2519e85ecfb Mon Sep 17 00:00:00 2001 +From: Super User +Date: Sat, 19 Aug 2023 17:23:29 +0800 +Subject: [PATCH] fix build error about fptr + +--- +error: + ut_archivemanager.cpp:75:18: error: cannot cast from type 'void (SingleJob::*)()' to pointer type 'fptr' (aka 'void (*)()') + fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 + ^~~~~~~~~~~~~~~~~~~~~~~~~ + ut_readwritelibarchiveplugin.cpp:146:27: error: cannot cast from type 'bool (QSaveFile::*)(QIODevice::OpenMode)' to pointer type 'fptr' (aka 'bool (*)(QFlags)') + fptr QSaveFile_open = (fptr)(&QSaveFile::open); //获取虚函数地址 + ^~~~~~~~~~~~~~~~~~~~~~~~ + + .../ut_readwritelibarchiveplugin.cpp | 14 +++-- + .../archivemanager/ut_archivemanager.cpp | 56 +++++++++---------- + 2 files changed, 38 insertions(+), 32 deletions(-) + +diff --git a/tests/UnitTest/3rdparty/libarchive/readwritelibarchiveplugin/ut_readwritelibarchiveplugin.cpp b/tests/UnitTest/3rdparty/libarchive/readwritelibarchiveplugin/ut_readwritelibarchiveplugin.cpp +index 1934c71..c8b6ce8 100644 +--- a/tests/UnitTest/3rdparty/libarchive/readwritelibarchiveplugin/ut_readwritelibarchiveplugin.cpp ++++ b/tests/UnitTest/3rdparty/libarchive/readwritelibarchiveplugin/ut_readwritelibarchiveplugin.cpp +@@ -25,7 +25,7 @@ + + #include + #include +- ++#include + + Q_DECLARE_METATYPE(KPluginMetaData) + +@@ -135,15 +135,21 @@ TEST_F(TestReadWriteLibarchivePlugin, testdeleteFiles2) + ASSERT_EQ(QFileInfo::exists("../UnitTest/test_sources/tar/compress/test.tar"), true); + } + +-bool open_stub(QIODevice::OpenMode flags) ++bool open_stub(QIODevice::OpenMode mode) + { +- return false; ++ QFlags flags; ++ flags |= static_cast(static_cast(mode)); ++ ++ QSaveFile saveFile; // 创建 QSaveFile 对象 ++ bool result = saveFile.open(flags); // 调用对象的 open 成员函数 ++ return result; + } + + TEST_F(TestReadWriteLibarchivePlugin, testinitializeWriter) + { + typedef bool (*fptr)(QIODevice::OpenMode); +- fptr QSaveFile_open = (fptr)(&QSaveFile::open); //获取虚函数地址 ++ fptr QSaveFile_open = reinterpret_cast(&open_stub); ++ + Stub stub; + stub.set(QSaveFile_open, open_stub); + +diff --git a/tests/UnitTest/src/source/archivemanager/ut_archivemanager.cpp b/tests/UnitTest/src/source/archivemanager/ut_archivemanager.cpp +index 0d6f1ae..e8202df 100644 +--- a/tests/UnitTest/src/source/archivemanager/ut_archivemanager.cpp ++++ b/tests/UnitTest/src/source/archivemanager/ut_archivemanager.cpp +@@ -71,8 +71,8 @@ TEST_F(TestArchiveManager, testcreateArchive) + CompressOptions options; + UiTools::AssignPluginType eType = UiTools::AssignPluginType::APT_Auto; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -85,8 +85,8 @@ TEST_F(TestArchiveManager, testloadArchive) + QString strArchiveFullPath = QFileInfo("../UnitTest/test_sources/zip/extract/test.zip").absoluteFilePath(); + UiTools::AssignPluginType eType = UiTools::AssignPluginType::APT_Auto; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -103,8 +103,8 @@ TEST_F(TestArchiveManager, testaddFiles) + QString strArchiveFullPath = QFileInfo("../UnitTest/test_sources/zip/compress/test.zip").absoluteFilePath(); + CompressOptions options; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -119,8 +119,8 @@ TEST_F(TestArchiveManager, testextractFiles) + stOptions.bAllExtract = true; + UiTools::AssignPluginType eType = UiTools::AssignPluginType::APT_Auto; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -137,8 +137,8 @@ TEST_F(TestArchiveManager, testextractFiles2Path) + entry.strFullPath = "test.txt"; + listEntry << entry; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -154,8 +154,8 @@ TEST_F(TestArchiveManager, testdeleteFiles) + entry.strFullPath = "test.txt"; + listEntry << entry; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -167,8 +167,8 @@ TEST_F(TestArchiveManager, testbatchExtractFiles) + { + QString strArchiveFullPath = QFileInfo("../UnitTest/test_sources/zip/extract/test.zip").absoluteFilePath(); + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -183,8 +183,8 @@ TEST_F(TestArchiveManager, testopenFile) + FileEntry entry; + entry.strFullPath = "test.txt"; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -198,8 +198,8 @@ TEST_F(TestArchiveManager, testupdateArchiveCacheData) + + UpdateOptions options; + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&UpdateJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -211,8 +211,8 @@ TEST_F(TestArchiveManager, testupdateArchiveComment) + { + QString strArchiveFullPath = QFileInfo("../UnitTest/test_sources/zip/extract/test.zip").absoluteFilePath(); + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&SingleJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -225,8 +225,8 @@ TEST_F(TestArchiveManager, testconvertArchive) + QString strArchiveFullPath1 = QFileInfo("../UnitTest/test_sources/zip/extract/test.zip").absoluteFilePath(); + QString strArchiveFullPath2 = QFileInfo("../UnitTest/test_sources/zip/extract/test2.zip").absoluteFilePath(); + +- typedef void (*fptr)(); +- fptr A_foo = (fptr)(&ConvertJob::start); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, start_stub); + +@@ -244,8 +244,8 @@ TEST_F(TestArchiveManager, testpauseOperation) + m_tester->m_pInterface = UiTools::createInterface(QFileInfo("../UnitTest/test_sources/zip/extract/test.zip").absoluteFilePath(), false); + m_tester->m_pArchiveJob = new LoadJob(m_tester->m_pInterface); + +- typedef void (*fptr)(SingleJob *); +- fptr A_foo = (fptr)(&SingleJob::doPause); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, doPause_stub); + +@@ -263,8 +263,8 @@ TEST_F(TestArchiveManager, testcontinueOperation) + m_tester->m_pInterface = UiTools::createInterface(QFileInfo("../UnitTest/test_sources/zip/extract/test.zip").absoluteFilePath(), false); + m_tester->m_pArchiveJob = new LoadJob(m_tester->m_pInterface); + +- typedef void (*fptr)(SingleJob *); +- fptr A_foo = (fptr)(&SingleJob::doContinue); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, doContinue_stub); + +@@ -282,8 +282,8 @@ TEST_F(TestArchiveManager, testcancelOperation) + m_tester->m_pInterface = UiTools::createInterface(QFileInfo("../UnitTest/test_sources/zip/extract/test.zip").absoluteFilePath(), false); + m_tester->m_pArchiveJob = new LoadJob(m_tester->m_pInterface); + +- typedef void (*fptr)(SingleJob *); +- fptr A_foo = (fptr)(&SingleJob::kill); //获取虚函数地址 ++ typedef void (*fptr)(SingleJob*); ++ fptr A_foo = [](SingleJob* obj){ obj->start(); }; // 使用Lambda函数实现函数指针 + Stub stub; + stub.set(A_foo, kill_stub); + +-- +2.39.1 \ No newline at end of file diff --git a/deepin-compressor.spec b/deepin-compressor.spec index 756c5c1acab80119521cf14c814c70aa3eb2c2d0..a2fc12fba71e67d84a2a4e55b0a249406edd6714 100644 --- a/deepin-compressor.spec +++ b/deepin-compressor.spec @@ -1,4 +1,4 @@ -%define specrelease 3 +%define specrelease 4 Name: deepin-compressor Version: 5.10.5 @@ -8,6 +8,7 @@ License: GPLv3+ URL: https://github.com/linuxdeepin/deepin-devicemanager Source0: %{name}-%{version}.tar.gz Patch0: 0001-feat-enable-debuginfo.patch +Patch1: 0001-fix-build-error-about-fptr.patch BuildRequires: gcc-c++ BuildRequires: cmake @@ -91,6 +92,9 @@ echo "%{_libdir}/%{name}/plugins/" > %{buildroot}/%{_sysconfdir}/ld.so.conf.d/%{ /sbin/ldconfig %changelog +* Thu Aug 31 2023 zhangxianting - 5.10.5-4 +- fix: fix building error about fptr + * Tue Mar 14 2023 liweigang - 5.10.5-3 - feat: remove rpath