From d0554736364639503962d8cd070fc24a8d31e1b8 Mon Sep 17 00:00:00 2001 From: Zhang Sheng Date: Fri, 27 Dec 2024 13:54:50 +0800 Subject: [PATCH 1/3] refactor: migrate build system from QMake to CMake - Remove all QMake project files (.pro and .pri) - Add CMakeLists.txt for CMake build system - Update include paths in source files - Update .gitignore for CMake related directories - Add cmake as build dependency in debian/control Log: --- .gitignore | 4 ++ 3rdparty/3rdparty.pri | 5 -- 3rdparty/libs/encoding/encoding.cpp | 1 - 3rdparty/libs/fileext/cfb/cfb.cpp | 2 +- 3rdparty/libs/libs.pri | 56 -------------------- 3rdparty/utils/libofd/ofd/Color.h | 18 +++---- 3rdparty/utils/utils.pri | 56 -------------------- CMakeLists.txt | 32 +++++++++++ debian/control | 1 + docparser.pro | 3 -- src/CMakeLists.txt | 82 +++++++++++++++++++++++++++++ src/docparser.pc.in | 10 ++++ src/src.pro | 64 ---------------------- 13 files changed, 139 insertions(+), 195 deletions(-) delete mode 100644 3rdparty/3rdparty.pri delete mode 100644 3rdparty/libs/libs.pri delete mode 100644 3rdparty/utils/utils.pri create mode 100644 CMakeLists.txt delete mode 100644 docparser.pro create mode 100644 src/CMakeLists.txt create mode 100644 src/docparser.pc.in delete mode 100755 src/src.pro diff --git a/.gitignore b/.gitignore index 8a9d35c..ff390bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ *.user +build/ +.vscode/ +.idea/ +cmake-build-*/ diff --git a/3rdparty/3rdparty.pri b/3rdparty/3rdparty.pri deleted file mode 100644 index 6c60a5c..0000000 --- a/3rdparty/3rdparty.pri +++ /dev/null @@ -1,5 +0,0 @@ -INCLUDEPATH += $$PWD - -include($$PWD/libs/libs.pri) -include($$PWD/utils/utils.pri) - diff --git a/3rdparty/libs/encoding/encoding.cpp b/3rdparty/libs/encoding/encoding.cpp index 602f300..acabaf5 100644 --- a/3rdparty/libs/encoding/encoding.cpp +++ b/3rdparty/libs/encoding/encoding.cpp @@ -5,7 +5,6 @@ * @author dmryutov (dmryutov@gmail.com) * @date 22.08.2017 -- 29.10.2017 */ -#pragma once #include #include #include diff --git a/3rdparty/libs/fileext/cfb/cfb.cpp b/3rdparty/libs/fileext/cfb/cfb.cpp index f84d461..2571ac9 100644 --- a/3rdparty/libs/fileext/cfb/cfb.cpp +++ b/3rdparty/libs/fileext/cfb/cfb.cpp @@ -14,7 +14,7 @@ #include #include -#include "encoding/encoding.cpp" +#include "encoding/encoding.hpp" #include "tools.hpp" #include "cfb.hpp" diff --git a/3rdparty/libs/libs.pri b/3rdparty/libs/libs.pri deleted file mode 100644 index ce2dada..0000000 --- a/3rdparty/libs/libs.pri +++ /dev/null @@ -1,56 +0,0 @@ -INCLUDEPATH += $$PWD - -HEADERS += \ - $$PWD/fileext/cfb/cfb.hpp \ - $$PWD/fileext/csv/csv.hpp \ - $$PWD/fileext/doc/doc.hpp \ - $$PWD/fileext/docx/docx.hpp \ - $$PWD/fileext/excel/xlsx.hpp \ - $$PWD/fileext/excel/biffh.hpp \ - $$PWD/fileext/excel/book.hpp \ - $$PWD/fileext/excel/excel.hpp \ - $$PWD/fileext/excel/format.hpp \ - $$PWD/fileext/excel/formula.hpp \ - $$PWD/fileext/excel/frmt.hpp \ - $$PWD/fileext/excel/sheet.hpp \ - $$PWD/fileext/odf/odf.hpp \ - $$PWD/fileext/ooxml/ooxml.hpp \ - $$PWD/fileext/pdf/pdf.hpp \ - $$PWD/fileext/ppt/ppt.hpp \ - $$PWD/fileext/pptx/pptx.hpp \ - $$PWD/fileext/rtf/formatting.hpp \ - $$PWD/fileext/rtf/keyword.hpp \ - $$PWD/fileext/rtf/rtf.hpp \ - $$PWD/fileext/rtf/table.hpp \ - $$PWD/fileext/txt/txt.hpp \ - $$PWD/fileext/xlsb/xlsb.h \ - $$PWD/fileext/fileext.hpp \ - $$PWD/encoding/encoding.hpp \ - $$PWD/tools.hpp - -SOURCES += \ - $$PWD/fileext/cfb/cfb.cpp \ - $$PWD/fileext/csv/csv.cpp \ - $$PWD/fileext/doc/doc.cpp \ - $$PWD/fileext/docx/docx.cpp \ - $$PWD/fileext/excel/xlsx.cpp \ - $$PWD/fileext/excel/book.cpp \ - $$PWD/fileext/excel/excel.cpp \ - $$PWD/fileext/excel/format.cpp \ - $$PWD/fileext/excel/formula.cpp \ - $$PWD/fileext/excel/sheet.cpp \ - $$PWD/fileext/odf/odf.cpp \ - $$PWD/fileext/ooxml/ooxml.cpp \ - $$PWD/fileext/pdf/pdf.cpp \ - $$PWD/fileext/ppt/ppt.cpp \ - $$PWD/fileext/pptx/pptx.cpp \ - $$PWD/fileext/rtf/formatting.cpp \ - $$PWD/fileext/rtf/keyword.cpp \ - $$PWD/fileext/rtf/rtf.cpp \ - $$PWD/fileext/rtf/table.cpp \ - $$PWD/fileext/txt/txt.cpp \ - $$PWD/fileext/xlsb/xlsb.cpp \ - $$PWD/fileext/fileext.cpp \ - $$PWD/encoding/encoding.cpp \ - $$PWD/tools.cpp - diff --git a/3rdparty/utils/libofd/ofd/Color.h b/3rdparty/utils/libofd/ofd/Color.h index e486439..831be11 100644 --- a/3rdparty/utils/libofd/ofd/Color.h +++ b/3rdparty/utils/libofd/ofd/Color.h @@ -66,7 +66,7 @@ namespace ofd{ uint64_t GetRefID() const {return m_refID;}; void SetRefID(uint64_t refID){m_refID = refID;}; private: - uint64_t m_refID; // 资源引用ID。缺省值0,指向文档设定的颜色空间。 + uint64_t m_refID; // 资源引用ID。缺省值0,指向文档设定的颜色空间。 }; // class ColorSpace @@ -78,7 +78,7 @@ namespace ofd{ ColorRGB() : Red(0), Green(0), Blue(0){ } ColorRGB(uint32_t r, uint32_t g, uint32_t b): - Red(r), Green(g), Blue(b){ + Red(r), Green(g), Blue(b){ } std::tuple GetRGB() const{ @@ -217,7 +217,7 @@ namespace ofd{ // 取出相应索引的预定义颜色用来绘制。索引从0开始。 uint32_t Alpha; // 颜色透明度,在0-255之间取值。默认值为255,表示完全不透明。 - // TODO + // TODO // Pattern; // 底纹 标准 P34 页,Page.xsd。 // AxialShd; // 轴向渐变 标准 P36 页,Page.xsd。 // RadialShd; // 径向渐变 标准 P40 页,Page.xsd。 @@ -243,12 +243,12 @@ namespace ofd{ bool m_bUsePalette; // 使用颜色空间调色板标志 }; // class Color - #define COLOR_BLACK ofd::Color::Instance(0,0,0) - #define COLOR_WHITE ofd::Color::Instance(255,255,255) + #define COLOR_BLACK ofd::Color::Instance(0,0,0) + #define COLOR_WHITE ofd::Color::Instance(255,255,255) #define COLOR_TRANSPARENT ofd::Color::Instance(0,0,0,nullptr, 0) - #define COLOR_RED ofd::Color::Instance(255,0,0) - #define COLOR_GREEN ofd::Color::Instance(0,255,0) - #define COLOR_BLUE ofd::Color::Instance(0,0,255) + #define COLOR_RED ofd::Color::Instance(255,0,0) + #define COLOR_GREEN ofd::Color::Instance(0,255,0) + #define COLOR_BLUE ofd::Color::Instance(0,0,255) // ======== struct ColorStop_t ======== typedef struct _ColorStop { @@ -256,7 +256,7 @@ namespace ofd{ ColorPtr Color; double Offset; - _ColorStop(ColorPtr color, double offset) : + _ColorStop(ColorPtr color, double offset) : Color(color), Offset(offset){ } diff --git a/3rdparty/utils/utils.pri b/3rdparty/utils/utils.pri deleted file mode 100644 index 981fa77..0000000 --- a/3rdparty/utils/utils.pri +++ /dev/null @@ -1,56 +0,0 @@ -INCLUDEPATH += $$PWD/libofd - -SOURCES += \ - $$PWD/libofd/Color.cc \ - $$PWD/libofd/CompositeObject.cc \ - $$PWD/libofd/Document.cc \ - $$PWD/libofd/GlobalParams.cc \ - $$PWD/libofd/Layer.cc \ - $$PWD/libofd/Object.cc \ - $$PWD/libofd/Package.cc \ - $$PWD/libofd/Page.cc \ - $$PWD/libofd/PageBlock.cc \ - $$PWD/libofd/Path.cc \ - $$PWD/libofd/PathObject.cc \ - $$PWD/libofd/Pattern.cc \ - $$PWD/libofd/Render.cc \ - $$PWD/libofd/Resource.cc \ - $$PWD/libofd/Signature.cc \ - $$PWD/libofd/TextObject.cc \ - $$PWD/libofd/VideoObject.cc \ - $$PWD/libofd/utils/StringFormatter.cc \ - $$PWD/libofd/utils/tinyxml2.cc \ - $$PWD/libofd/utils/unicode.cc \ - $$PWD/libofd/utils/utils.cc \ - $$PWD/libofd/utils/uuid.cc \ - $$PWD/libofd/utils/xml.cc \ - $$PWD/libofd/utils/zip.cc - -HEADERS += \ - $$PWD/libofd/ofd/Color.h \ - $$PWD/libofd/ofd/Common.h \ - $$PWD/libofd/ofd/CompositeObject.h \ - $$PWD/libofd/ofd/Document.h \ - $$PWD/libofd/ofd/DrawState.h \ - $$PWD/libofd/ofd/GlobalParams.h \ - $$PWD/libofd/ofd/Layer.h \ - $$PWD/libofd/ofd/Object.h \ - $$PWD/libofd/ofd/Package.h \ - $$PWD/libofd/ofd/Page.h \ - $$PWD/libofd/ofd/PageBlock.h \ - $$PWD/libofd/ofd/Path.h \ - $$PWD/libofd/ofd/PathObject.h \ - $$PWD/libofd/ofd/Pattern.h \ - $$PWD/libofd/ofd/Render.h \ - $$PWD/libofd/ofd/Resource.h \ - $$PWD/libofd/ofd/Signature.h \ - $$PWD/libofd/ofd/TextObject.h \ - $$PWD/libofd/ofd/VideoObject.h \ - $$PWD/libofd/utils/StringFormatter.h \ - $$PWD/libofd/utils/tinyxml2.h \ - $$PWD/libofd/utils/unicode.h \ - $$PWD/libofd/utils/utils.h \ - $$PWD/libofd/utils/uuid.h \ - $$PWD/libofd/utils/xml.h \ - $$PWD/libofd/utils/zip.h - diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d24c2c6 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,32 @@ +cmake_minimum_required(VERSION 3.13) +project(docparser VERSION 1.0.0 LANGUAGES CXX) + +# 设置C++标准 +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# 在顶层CMakeLists.txt中添加 +set(CMAKE_CXX_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) + +# 安全编译选项 +add_compile_options(-fstack-protector-strong -D_FORTITY_SOURCE=1 -fvisibility=hidden) +add_link_options(-z noexecstack -pie -fPIC) + +# 设置安装路径 +include(GNUInstallDirs) + +# 查找依赖包 +find_package(PkgConfig REQUIRED) +pkg_check_modules(DEPS REQUIRED + poppler-cpp + libzip + pugixml + freetype2 + libxml-2.0 + uuid + tinyxml2 +) + +# 添加子目录 +add_subdirectory(src) diff --git a/debian/control b/debian/control index 3d1981b..e56efa8 100644 --- a/debian/control +++ b/debian/control @@ -3,6 +3,7 @@ Section: libdevel Priority: optional Maintainer: deepin Build-Depends: + cmake, debhelper (>= 11), qtbase5-dev, qt5-qmake, diff --git a/docparser.pro b/docparser.pro deleted file mode 100644 index 069da53..0000000 --- a/docparser.pro +++ /dev/null @@ -1,3 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += src diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..50f0734 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,82 @@ +# 收集源文件 +file(GLOB_RECURSE SRC_FILES_MAIN + "${CMAKE_CURRENT_SOURCE_DIR}/*.h" + "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" +) + +file(GLOB_RECURSE SRC_FILES_3RDPARTY_LIBS + "${CMAKE_SOURCE_DIR}/3rdparty/libs/*.cpp" + "${CMAKE_SOURCE_DIR}/3rdparty/libs/*.hpp" + "${CMAKE_SOURCE_DIR}/3rdparty/libs/*.h" + +) + +file(GLOB_RECURSE SRC_FILES_3RDPARTY_UTILS + "${CMAKE_SOURCE_DIR}/3rdparty/utils/*.cpp" + "${CMAKE_SOURCE_DIR}/3rdparty/utils/*.cc" + "${CMAKE_SOURCE_DIR}/3rdparty/utils/*.h" +) + +# 创建源文件列表 +set(SRC_FILES + ${SRC_FILES_MAIN} + ${SRC_FILES_3RDPARTY_LIBS} + ${SRC_FILES_3RDPARTY_UTILS} +) + +# 移除重复的源文件 +list(REMOVE_DUPLICATES SRC_FILES) + +# 打印源文件列表,用于调试 +message(STATUS "Source files:") +foreach(SOURCE_FILE ${SRC_FILES}) + message(STATUS " ${SOURCE_FILE}") +endforeach() + +# 创建库目标 +add_library(docparser SHARED + ${SRC_FILES} +) + +# 设置目标属性 +target_include_directories(docparser + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/3rdparty/libs + ${CMAKE_SOURCE_DIR}/3rdparty/utils/libofd + ${DEPS_INCLUDE_DIRS} +) + +target_link_libraries(docparser + PRIVATE + ${DEPS_LIBRARIES} +) + +# 安装目标 +install(TARGETS docparser + EXPORT docparser-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +# 安装头文件 +install(FILES + docparser.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/docparser +) + +# 生成并安装 pkg-config 文件 +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/docparser.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/docparser.pc + @ONLY +) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/docparser.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig +) diff --git a/src/docparser.pc.in b/src/docparser.pc.in new file mode 100644 index 0000000..d317d91 --- /dev/null +++ b/src/docparser.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: docparser +Description: document parse library +Version: @PROJECT_VERSION@ +Libs: -L${libdir} -ldocparser +Cflags: -I${includedir} \ No newline at end of file diff --git a/src/src.pro b/src/src.pro deleted file mode 100755 index 77147c0..0000000 --- a/src/src.pro +++ /dev/null @@ -1,64 +0,0 @@ -TARGET = docparser - -TEMPLATE = lib - -CONFIG += c++11 link_pkgconfig -PKGCONFIG += poppler-cpp libzip pugixml freetype2 libxml-2.0 uuid tinyxml2 - -#安全编译参数 -QMAKE_CFLAGS += -fstack-protector-strong -D_FORTITY_SOURCE=1 -z noexecstack -pie -fPIC -z lazy -QMAKE_CXXFLAGS += -fstack-protector-strong -D_FORTITY_SOURCE=1 -z noexecstack -pie -fPIC -z lazy -QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter - -###安全漏洞检测 -#QMAKE_CXX += -g -fsanitize=undefined,address -O2 -#QMAKE_CXXFLAGS += -g -fsanitize=undefined,address -O2 -#QMAKE_LFLAGS += -g -fsanitize=undefined,address -O2 - -include($$PWD/../3rdparty/3rdparty.pri) - -HEADERS += \ - docparser.h \ - ofd/ofd.h - -SOURCES += \ - docparser.cpp \ - ofd/ofd.cpp - -INCLUDEPATH += $$PWD/../3rdparty/libs - -isEmpty(PREFIX): PREFIX = /usr - -isEmpty(LIB_INSTALL_DIR) { - target.path = $$PREFIX/lib -} else { - target.path = $$LIB_INSTALL_DIR -} -isEmpty(INCLUDE_INSTALL_DIR) { - includes.path = $$PREFIX/include/docparser -} else { - includes.path = $$INCLUDE_INSTALL_DIR -} - -includes.files += $$PWD/*.h - -INSTALLS += includes target - -#----------This is the configuration for generating the pkg-config file -CONFIG += create_pc create_prl no_install_prl - -# This is our libdir -QMAKE_PKGCONFIG_LIBDIR = $$target.path - -# Usually people take the semver version here -QMAKE_PKGCONFIG_VERSION = $$VERSION - -# This is where our API specific headers are -QMAKE_PKGCONFIG_DESTDIR = pkgconfig -QMAKE_PKGCONFIG_INCDIR = $$includes.path - -# This fills in the Name property -QMAKE_PKGCONFIG_NAME = docparser - -# This fills in the Description property -QMAKE_PKGCONFIG_DESCRIPTION = document parse library From e3e10040984e4f2c9e73d27acc609b8da3db3145 Mon Sep 17 00:00:00 2001 From: Zhang Sheng Date: Fri, 27 Dec 2024 13:59:49 +0800 Subject: [PATCH 2/3] feat: Remove Qt - Upgrade CMake minimum version to 3.16 - Update C++ standard to C++17 - Remove Qt - Fix std namespace usage in zip.cc Log: --- 3rdparty/utils/libofd/utils/zip.cc | 2 +- CMakeLists.txt | 4 ++-- debian/control | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/3rdparty/utils/libofd/utils/zip.cc b/3rdparty/utils/libofd/utils/zip.cc index ddbda87..3013be8 100644 --- a/3rdparty/utils/libofd/utils/zip.cc +++ b/3rdparty/utils/libofd/utils/zip.cc @@ -177,7 +177,7 @@ bool Zip::ImplCls::AddDir(const std::string &dirName) { // **************** class Zip **************** Zip::Zip(){ - m_impl = make_unique(this); + m_impl = std::make_unique(this); } Zip::~Zip(){ diff --git a/CMakeLists.txt b/CMakeLists.txt index d24c2c6..3346abb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.16) project(docparser VERSION 1.0.0 LANGUAGES CXX) # 设置C++标准 -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 在顶层CMakeLists.txt中添加 diff --git a/debian/control b/debian/control index e56efa8..b9ccdc1 100644 --- a/debian/control +++ b/debian/control @@ -5,8 +5,6 @@ Maintainer: deepin Build-Depends: cmake, debhelper (>= 11), - qtbase5-dev, - qt5-qmake, pkg-config, libpoppler-cpp-dev, libzip-dev, From 878a4af8e3c0e152a51f1016bf1f8f83fac1ddf8 Mon Sep 17 00:00:00 2001 From: Zhang Sheng Date: Fri, 27 Dec 2024 14:07:38 +0800 Subject: [PATCH 3/3] chore: update version to 1.0.13 1.0.13 Log: 1.0.13 --- .reuse/dep5 | 2 +- archlinux/PKGBUILD | 27 ++++++++++++++++++++------- debian/changelog | 8 ++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/.reuse/dep5 b/.reuse/dep5 index be547ce..b57a281 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -9,7 +9,7 @@ Copyright: None License: CC0-1.0 # Project file -Files: *.pro *.pri +Files: *CMakeLists.txt *.pc.in Copyright: None License: CC0-1.0 diff --git a/archlinux/PKGBUILD b/archlinux/PKGBUILD index a1d0145..39abcf0 100644 --- a/archlinux/PKGBUILD +++ b/archlinux/PKGBUILD @@ -9,8 +9,19 @@ pkgdesc='A document parser library ported from document2html' arch=('x86_64' 'aarch64') url="https://github.com/linuxdeepin/docparser" license=('GPL3') -depends=('poppler' 'libzip' 'pugixml' 'tinyxml2') -makedepends=('qt5-tools') +depends=( + 'poppler' + 'libzip' + 'pugixml' + 'freetype2' + 'libxml2' + 'util-linux-libs' # for uuid + 'tinyxml2' +) +makedepends=( + 'cmake' + 'pkg-config' +) conflicts=('docparser') provides=('docparser') groups=('deepin-git') @@ -19,12 +30,14 @@ source=("${sourcetars[@]}") b2sums=('SKIP') build() { - cd $sourcedir - qmake-qt5 PREFIX=/usr - make + cd $sourcedir + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None + cmake --build build } package() { - cd $sourcedir - make INSTALL_ROOT="$pkgdir" install + cd $sourcedir + DESTDIR="$pkgdir" cmake --install build } diff --git a/debian/changelog b/debian/changelog index 7b88006..1b00092 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +docparser (1.0.13) unstable; urgency=medium + + * Remove Qt + * Use CMake + * Use C++17 + + -- Zhang Sheng Fri, 27 Dec 2024 14:06:31 +0800 + docparser (1.0.12) unstable; urgency=medium * update to 1.0.12