Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@ debian/*.log
#else
*.autosave
*.o


build/
.vscode/
2 changes: 1 addition & 1 deletion .reuse/dep5
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Copyright: None
License: CC0-1.0

# Project file
Files: *CMakeLists.txt *pc.in *.cmake.in
Files: *CMakeLists.txt *pc.in *.cmake.in *.cmake
Copyright: None
License: CC0-1.0

Expand Down
121 changes: 35 additions & 86 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15)

set(VERSION "1.0.0" CACHE STRING "PDF rendering library based on PDFium")

project(deepin-pdfium
project(deepin-pdfium
VERSION ${VERSION}
DESCRIPTION "PDF rendering library based on PDFium"
LANGUAGES CXX C
Expand All @@ -18,11 +18,11 @@ set(CMAKE_AUTOUIC ON)

# 编译选项
add_compile_options(
-fstack-protector-strong
-D_FORTITY_SOURCE=1
-z noexecstack
-pie
-fPIC
-fstack-protector-strong
-D_FORTITY_SOURCE=1
-z noexecstack
-pie
-fPIC
-Wno-unused-parameter
)

Expand All @@ -39,8 +39,13 @@ execute_process(
)
add_definitions(-DSYSTEMPAGESIZE=${SYSTEM_PAGE_SIZE})

# 查找Qt6依赖包
find_package(Qt6 COMPONENTS Core Gui REQUIRED)
# 查找Qt5和Qt6
find_package(Qt5 COMPONENTS Core Gui QUIET)
find_package(Qt6 COMPONENTS Core Gui QUIET)

if(NOT Qt5_FOUND AND NOT Qt6_FOUND)
message(FATAL_ERROR "Neither Qt5 nor Qt6 found - please install at least one")
endif()
find_package(PkgConfig REQUIRED)
pkg_check_modules(DEPS REQUIRED
chardet
Expand All @@ -52,97 +57,41 @@ pkg_check_modules(DEPS REQUIRED
# PDFium 第三方库
add_subdirectory(src/3rdparty/pdfium)

# 主库目标
add_library(${PROJECT_NAME} SHARED
# 定义导出宏
# add_definitions(-DBUILD_DEEPDF_LIB)

# 源文件列表
set(DEEPDF_SOURCES
include/dpdfglobal.h
include/dpdfdoc.h
include/dpdfpage.h
include/dpdfannot.h
src/dpdfglobal.cpp
src/dpdfdoc.cpp
src/dpdfdoc.cpp
src/dpdfpage.cpp
src/dpdfannot.cpp
)

# 设置库的版本信息和 SOVERSION
set_target_properties(${PROJECT_NAME} PROPERTIES
VERSION "${PROJECT_VERSION}"
SOVERSION "${PROJECT_VERSION_MAJOR}"
)

target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/deepin-pdfium>
PRIVATE
${DEPS_INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME}
PRIVATE
pdfium
Qt6::Core
Qt6::Gui
${DEPS_LIBRARIES}
z
jpeg
icuuc
)

# 安装
include(GNUInstallDirs)

install(TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

install(FILES
include/dpdfglobal.h
include/dpdfdoc.h
include/dpdfpage.h
include/dpdfannot.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/deepin-pdfium
)

# pkg-config
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/deepin-pdfium.pc.in
${CMAKE_CURRENT_BINARY_DIR}/deepin-pdfium.pc
@ONLY
)

install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/deepin-pdfium.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)

include(CMakePackageConfigHelpers)

set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/deepin-pdfium)
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})

configure_package_config_file(
misc/deepin-pdfiumConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/deepin-pdfiumConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/deepin-pdfium
PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR
)

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/deepin-pdfiumConfig.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/deepin-pdfium
)

install(TARGETS deepin-pdfium
EXPORT deepin-pdfiumTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(EXPORT deepin-pdfiumTargets
FILE deepin-pdfiumTargets.cmake
NAMESPACE deepin-pdfium::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/deepin-pdfium
)
# 创建Qt5版本库
if(Qt5_FOUND)
message(STATUS ">>> Enable Qt5 version of the library")
set(QT_DESIRED_VERSION 5)
set(TARGET_NAME ${PROJECT_NAME}5)
include(target.cmake)
endif()

# 创建Qt6版本库
if(Qt6_FOUND)
message(STATUS ">>> Enable Qt6 version of the library")
# keep the same project name for Qt6 in order to compability with other applications, ie. DFM
set(QT_DESIRED_VERSION 6)
set(TARGET_NAME ${PROJECT_NAME})
include(target.cmake)
endif()
19 changes: 17 additions & 2 deletions debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ Maintainer: deepin <packages@deepin.com>
Build-Depends: debhelper (>= 11),
cmake,
qt6-base-dev,
qt6-tools-dev-tools,
qtbase5-dev,
qttools5-dev-tools,
pkg-config,
libjpeg-dev,
libicu-dev,
Expand All @@ -20,11 +23,23 @@ Standards-Version: 4.3.0
Package: libdeepin-pdfium
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: A libaray about PDF.
Description: A libaray about PDF base on Qt6.
A library for parsing and editing and displaying PDF.

Package: libdeepin-pdfium5
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: A libaray about PDF base on Qt5.
A library for parsing and editing and displaying PDF.

Package: libdeepin-pdfium-dev
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libdeepin-pdfium
Description: A libaray about PDF dev
Description: A libaray about PDF dev base on Qt6.
A libaray that provides for parsing and editing and displaying PDF interface dev.

Package: libdeepin-pdfium5-dev
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libdeepin-pdfium5
Description: A libaray about PDF dev base on Qt5.
A libaray that provides for parsing and editing and displaying PDF interface dev.
2 changes: 1 addition & 1 deletion debian/libdeepin-pdfium.install
Original file line number Diff line number Diff line change
@@ -1 +1 @@
/usr/lib/*/libdeepin-pdfium*.so*
/usr/lib/*/libdeepin-pdfium.so*
3 changes: 3 additions & 0 deletions debian/libdeepin-pdfium5-dev.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/usr/include/deepin-pdfium5/*
/usr/lib/*/pkgconfig/deepin-pdfium5.pc
/usr/lib/*/cmake/deepin-pdfium5/*
1 change: 1 addition & 0 deletions debian/libdeepin-pdfium5.install
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/usr/lib/*/libdeepin-pdfium5.so*
27 changes: 26 additions & 1 deletion debian/rules
Original file line number Diff line number Diff line change
@@ -1,8 +1,33 @@
#!/usr/bin/make -f
include /usr/share/dpkg/default.mk

export QT_SELECT=5

# 检测当前安装的Qt版本,优先使用Qt6,否则使用Qt5
define detect_qt_version
ifneq (,$(shell which qmake6 2>/dev/null))
QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt6"
else
QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt5"
endif
endef

# 调用检测Qt版本的命令
$(eval $(call detect_qt_version))

# hardcode this if want to force build with sepecific Qt version
# QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt5"

DH_AUTO_ARGS = --parallel --buildsystem=cmake

%:
dh $@
override_dh_installinit:
true

override_dh_auto_configure:
dh_auto_configure -- VERSION=$(DEB_VERSION_UPSTREAM) LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH)
dh_auto_configure -- \
-DCMAKE_BUILD_TYPE=Release \
-DVERSION=$(DEB_VERSION_UPSTREAM) \
-DCMAKE_INSTALL_LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH) \
-DQT_DIR=$(QT_DIR)
11 changes: 5 additions & 6 deletions deepin-pdfium.pc.in
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/deepin-pdfium
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@TARGET_NAME@

Name: @PROJECT_NAME@
Description: @PROJECT_DESCRIPTION@
Name: @TARGET_NAME@
Description: @PROJECT_DESCRIPTION@ (Qt@QT_DESIRED_VERSION@ version)
Version: @PROJECT_VERSION@
Requires: Qt6Core Qt6Gui
Libs: -L${libdir} -ldeepin-pdfium
Cflags: -I${includedir}
Libs: -L${libdir} -l@TARGET_NAME@
Cflags: -I${includedir}
21 changes: 18 additions & 3 deletions include/dpdfglobal.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,19 @@
#include <QMutex>
#include <QMutexLocker>
#include <QDebug>
#include <QTime>
#include <QElapsedTimer>
#include <QRectF>
#include <QRecursiveMutex>

#ifndef BUILD_DEEPDF_STATIC
# if defined(BUILD_DEEPDF_LIB)
# define DEEPDF_EXPORT Q_DECL_EXPORT
# else
# define DEEPDF_EXPORT Q_DECL_IMPORT
# endif
#else
# define DEEPDF_EXPORT
#endif

class DPdfGlobal
{
Expand Down Expand Up @@ -40,14 +51,18 @@ class DPdfGlobal
};

//pdfium即使不同文档之间loadpage和renderpage也不是线程安全,需要加锁
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
class DPdfMutexLocker : public QMutexLocker
#else
class DPdfMutexLocker : public QMutexLocker<QRecursiveMutex>
#endif
{
public:
DPdfMutexLocker(const QString &tmpLog);
explicit DPdfMutexLocker(const QString &tmpLog);
~DPdfMutexLocker();

QString m_log;
QTime m_time;
QElapsedTimer m_timer;
};

#endif // DPDFGLOBAL_H
2 changes: 1 addition & 1 deletion include/dpdfpage.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class DPdfPage : public QObject
friend class DPdfDoc;

public:
virtual ~DPdfPage();
~DPdfPage();

/**
* @brief 是否有效
Expand Down
4 changes: 2 additions & 2 deletions misc/deepin-pdfiumConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ pkg_check_modules(PDFIUM_DEPS REQUIRED
)

# 包含导出的目标
include("${CMAKE_CURRENT_LIST_DIR}/deepin-pdfiumTargets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/@TARGET_NAME@Targets.cmake")

check_required_components(deepin-pdfium)
check_required_components(@TARGET_NAME@)
Loading
Loading