@@ -2,6 +2,11 @@ cmake_minimum_required(VERSION 3.21)
22if (POLICY CMP0144)
33 cmake_policy (SET CMP0144 NEW)
44endif ()
5+
6+ # Option to use system libraries instead of vcpkg (for Nix, Linux distros, etc.)
7+ option (USE_SYSTEM_LIBS "Use system libraries instead of vcpkg" OFF )
8+
9+ if (NOT USE_SYSTEM_LIBS)
510set (CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR} /vcpkg/bin/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file" )
611set (VCPKG_MANIFEST_DIR "${CMAKE_SOURCE_DIR} /vcpkg" )
712set (VCPKG_OVERLAY_TRIPLETS "${CMAKE_SOURCE_DIR} /vcpkg/triplets" )
@@ -12,6 +17,7 @@ elseif(APPLE)
1217else ()
1318 set (VCPKG_TARGET_TRIPLET "x64-linux" CACHE STRING "Vcpkg triplet" )
1419endif ()
20+ endif ()
1521project (paperback VERSION 0.6.1 LANGUAGES CXX)
1622
1723if ("${PROJECT_VERSION_TWEAK} " STREQUAL "" )
@@ -29,8 +35,28 @@ if(MSVC)
2935 set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" )
3036endif ()
3137
32- find_package (Gettext REQUIRED)
33- find_package (wxWidgets CONFIG REQUIRED COMPONENTS webview)
38+ find_program (CLANG_FORMAT_EXE NAMES clang-format)
39+ if (CLANG_FORMAT_EXE)
40+ file (GLOB_RECURSE ALL_SOURCE_FILES CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR} /app/*.cpp ${CMAKE_SOURCE_DIR} /app/*.hpp)
41+ add_custom_target (format COMMAND ${CLANG_FORMAT_EXE} -i ${ALL_SOURCE_FILES} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} )
42+ endif ()
43+ find_program (CLANG_TIDY_EXE NAMES clang-tidy)
44+ if (CLANG_TIDY_EXE)
45+ file (GLOB_RECURSE ALL_SOURCE_FILES CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR} /app/*.cpp ${CMAKE_SOURCE_DIR} /app/*.hpp)
46+ add_custom_target (lint COMMAND ${CLANG_TIDY_EXE} -warnings-as-errors=* --header-filter =^${CMAKE_SOURCE_DIR} /app/ --extra-arg=-std=c++20 ${ALL_SOURCE_FILES} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} USES_TERMINAL )
47+ endif ()
48+
49+ if (USE_SYSTEM_LIBS)
50+ # Find system libraries (for Nix, system package managers, etc.)
51+ # Most dependencies are now handled by the Rust library
52+ find_package (wxWidgets REQUIRED base core net webview)
53+ find_library (PDFIUM_LIBRARY NAMES pdfium REQUIRED)
54+ find_path (PDFIUM_INCLUDE_DIR NAMES fpdfview.h REQUIRED)
55+ else ()
56+ find_package (wxWidgets CONFIG REQUIRED COMPONENTS webview)
57+ endif ()
58+
59+ find_package (Gettext)
3460
3561if (GETTEXT_FOUND)
3662 find_program (XGETTEXT_EXECUTABLE NAMES xgettext)
@@ -149,17 +175,33 @@ else()
149175endif ()
150176add_dependencies (paperback libpaperback_rust)
151177target_include_directories (paperback PRIVATE ${CMAKE_SOURCE_DIR} /app ${CMAKE_SOURCE_DIR} ${PAPERBACK_GENERATED_DIR} ${RUST_TARGET_DIR} /cxxbridge)
152- target_link_directories (paperback PRIVATE ${PDFIUM_LIB_DIR} )
153- target_link_directories (paperback PRIVATE "${CMAKE_BINARY_DIR} /vcpkg_installed/${VCPKG_TARGET_TRIPLET} /lib" )
154- target_link_libraries (paperback PRIVATE
155- ${RUST_LIB_OUTPUT}
156- pdfium
157- wx::base
158- wx::core
159- wx::net
160- wx::webview
161- )
162- if (WIN32 )
178+
179+ if (USE_SYSTEM_LIBS)
180+ target_include_directories (paperback PRIVATE
181+ ${PDFIUM_INCLUDE_DIR}
182+ ${wxWidgets_INCLUDE_DIRS}
183+ )
184+ target_compile_options (paperback PRIVATE ${wxWidgets_CXX_FLAGS} )
185+ target_compile_definitions (paperback PRIVATE ${wxWidgets_DEFINITIONS} )
186+ target_link_libraries (paperback PRIVATE
187+ ${RUST_LIB_OUTPUT}
188+ ${PDFIUM_LIBRARY}
189+ ${wxWidgets_LIBRARIES}
190+ )
191+ else ()
192+ target_link_directories (paperback PRIVATE ${PDFIUM_LIB_DIR} )
193+ target_link_directories (paperback PRIVATE "${CMAKE_BINARY_DIR} /vcpkg_installed/${VCPKG_TARGET_TRIPLET} /lib" )
194+ target_link_libraries (paperback PRIVATE
195+ ${RUST_LIB_OUTPUT}
196+ pdfium
197+ wx::base
198+ wx::core
199+ wx::net
200+ wx::webview
201+ )
202+ endif ()
203+
204+ if (WIN32 )
163205 target_link_libraries (paperback PRIVATE bcrypt ntdll)
164206endif ()
165207
@@ -238,3 +280,37 @@ if(WIN32)
238280else ()
239281 add_custom_target (release DEPENDS package)
240282endif ()
283+
284+ # Installation rules (Linux desktop integration)
285+ if (UNIX AND NOT APPLE )
286+ # Install binary
287+ install (TARGETS paperback DESTINATION bin)
288+
289+ # Install desktop file
290+ install (FILES ${CMAKE_SOURCE_DIR} /paperback.desktop
291+ DESTINATION share/applications)
292+
293+ # Install icons
294+ foreach (size 16 32 48 64 128 256)
295+ install (FILES ${CMAKE_SOURCE_DIR} /icons/hicolor/${size} x${size} /apps/paperback.png
296+ DESTINATION share/icons/hicolor/${size} x${size} /apps)
297+ endforeach ()
298+
299+ # Install documentation
300+ if (TARGET doc )
301+ install (FILES ${CMAKE_BINARY_DIR} /readme.html
302+ DESTINATION share/doc /paperback)
303+ endif ()
304+
305+ # Install translations
306+ if (MO_FILES)
307+ foreach (mo_file ${MO_FILES} )
308+ get_filename_component (mo_dir ${mo_file} DIRECTORY )
309+ get_filename_component (lang_dir ${mo_dir} DIRECTORY )
310+ get_filename_component (lang ${lang_dir} NAME )
311+ install (FILES ${mo_file}
312+ DESTINATION share/locale/${lang} /LC_MESSAGES
313+ RENAME paperback.mo)
314+ endforeach ()
315+ endif ()
316+ endif ()
0 commit comments