set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) configure_file(config-freelib.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-freelib.h) configure_file(git-info.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/git-info.h) set(QT_COMPONENTS Core Network Widgets Gui Svg Sql Xml Concurrent) find_package(QT NAMES Qt6 Qt5 QUIET COMPONENTS Core) message(STATUS "Found Qt ${QT_VERSION_MAJOR} VERSION") if(NOT DEFINED FREELIB_QT_MAJOR_VERSION) set(FREELIB_QT_MAJOR_VERSION ${QT_VERSION_MAJOR} CACHE STRING "Qt version to use (5 or 6), defaults to ${QT_VERSION_MAJOR}") endif() message(STATUS "FREELIB_QT_MAJOR_VERSION: ${FREELIB_QT_MAJOR_VERSION}") find_package(KF${FREELIB_QT_MAJOR_VERSION}KIO QUIET) if(KF${FREELIB_QT_MAJOR_VERSION}KIO_FOUND) message(STATUS "Found KIO") add_compile_definitions(USE_KIO) endif() find_package(KF${FREELIB_QT_MAJOR_VERSION}StatusNotifierItem QUIET) if(KF${FREELIB_QT_MAJOR_VERSION}StatusNotifierItem_FOUND) message(STATUS "Found KStatusNotifier") add_compile_definitions(USE_KStatusNotifier) endif() if(FREELIB_QT_MAJOR_VERSION EQUAL 6) find_package(QT NAMES Qt6 REQUIRED) find_package(Qt6 COMPONENTS ${QT_COMPONENTS} REQUIRED) else() find_package(QT NAMES Qt5 REQUIRED) find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) endif() find_package(ZLIB REQUIRED) find_package(TBB QUIET) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) find_package(DjVuLibre QUIET) find_package(PkgConfig) pkg_check_modules(POPPLER QUIET IMPORTED_TARGET poppler poppler-cpp poppler-qt${FREELIB_QT_MAJOR_VERSION}) if(POPPLER_FOUND) message(STATUS "Found Poppler") add_compile_definitions(USE_POPPLER) endif() set(PROJECT_SOURCES main.cpp mainwindow.cpp mainwindow.h mainwindow.ui library.cpp library.h bookfile.cpp bookfile.h librariesdlg.cpp librariesdlg.h librariesdlg.ui settingsdlg.cpp settingsdlg.h settingsdlg.ui exportframe.cpp exportframe.h exportframe.ui conversionframe.cpp conversionframe.h conversionframe.ui fontframe.cpp fontframe.h fontframe.ui exportdlg.cpp exportdlg.h exportdlg.ui aboutdialog.cpp aboutdialog.h aboutdialog.ui helpdialog.cpp helpdialog.h helpdialog.ui tagdialog.cpp tagdialog.h tagdialog.ui bookeditdlg.cpp bookeditdlg.h bookeditdlg.ui statisticsdialog.h statisticsdialog.cpp statisticsdialog.ui importthread.cpp importthread.h exportthread.cpp exportthread.h options.cpp options.h treebookitem.cpp treebookitem.h coverlabel.cpp coverlabel.h starsdelegate.cpp starsdelegate.h starscombobox.cpp starscombobox.h utilites.cpp utilites.h epubreader.cpp epubreader.h passwordlineedit.cpp passwordlineedit.h genresortfilterproxymodel.cpp genresortfilterproxymodel.h fb2mobi/hyphenations.cpp fb2mobi/hyphenations.h fb2mobi/fb2mobi.cpp fb2mobi/fb2mobi.h mobiEdit/mobiedit.cpp mobiEdit/mobiedit.h SmtpClient/src/emailaddress.cpp SmtpClient/src/emailaddress.h SmtpClient/src/mimeattachment.cpp SmtpClient/src/mimeattachment.h SmtpClient/src/mimecontentformatter.cpp SmtpClient/src/mimecontentformatter.h SmtpClient/src/mimefile.cpp SmtpClient/src/mimefile.h SmtpClient/src/mimemessage.cpp SmtpClient/src/mimemessage.h SmtpClient/src/mimemultipart.cpp SmtpClient/src/mimemultipart.h SmtpClient/src/mimepart.cpp SmtpClient/src/mimepart.h SmtpClient/src/mimetext.cpp SmtpClient/src/mimetext.h SmtpClient/src/quotedprintable.cpp SmtpClient/src/quotedprintable.h SmtpClient/src/smtpclient.cpp SmtpClient/src/smtpclient.h SmtpClient/src/mimebase64encoder.cpp SmtpClient/src/mimebase64encoder.h SmtpClient/src/mimebase64formatter.cpp SmtpClient/src/mimebase64formatter.h SmtpClient/src/mimeqpformatter.cpp SmtpClient/src/mimeqpformatter.h SmtpClient/src/mimeqpencoder.cpp SmtpClient/src/mimeqpencoder.h SmtpClient/src/mimecontentencoder.cpp SmtpClient/src/mimecontentencoder.h ) add_subdirectory(Help) find_package(Qt${FREELIB_QT_MAJOR_VERSION} COMPONENTS HttpServer QUIET) if(Qt${FREELIB_QT_MAJOR_VERSION}HttpServer_FOUND) message(STATUS "Found HttpServer") set(PROJECT_SOURCES ${PROJECT_SOURCES} opds_server.cpp opds_server.h ) add_compile_definitions(USE_HTTSERVER) endif() find_package(Qt${FREELIB_QT_MAJOR_VERSION}Keychain QUIET) if(Qt${FREELIB_QT_MAJOR_VERSION}Keychain_FOUND) message(STATUS "Found QtKeychain") add_compile_definitions(USE_QTKEYCHAIN) endif() find_package(QuaZip-Qt${FREELIB_QT_MAJOR_VERSION} QUIET) if(NOT QuaZip-Qt${FREELIB_QT_MAJOR_VERSION}_FOUND) set(QUAZIP_INSTALL OFF) set(BUILD_SHARED_LIBS OFF) add_subdirectory(quazip) endif() if(DJVULIBRE_FOUND) message(STATUS "Found DjVuLibre") set(PROJECT_SOURCES ${PROJECT_SOURCES} djvu.cpp djvu.h ) add_compile_definitions(USE_DEJVULIBRE) endif() find_package(TBB QUIET) if(TBB_FOUND) message(STATUS "Found TBB") add_compile_definitions(USE_TBB) endif() #configure_file(translations.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) #file(COPY ${TS_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/translate) if(UNIX AND NOT APPLE) file(COPY xsl/fonts DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/xsl) endif(UNIX AND NOT APPLE) if(FREELIB_QT_MAJOR_VERSION EQUAL 6) if(WIN32) qt_add_executable(freelib WIN32 MANUAL_FINALIZATION ${PROJECT_SOURCES}) else() qt6_add_resources(PROJECT_SOURCES resource.qrc) qt_add_executable(freelib MANUAL_FINALIZATION ${PROJECT_SOURCES} ) endif(WIN32) else() qt5_add_resources(PROJECT_SOURCES resource.qrc) add_executable(freelib ${PROJECT_SOURCES} ) endif() #FILE(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.ts") #qt5_add_translation(QM_FILES ${TS_FILES}) file(GLOB QM_FILES "${CMAKE_CURRENT_SOURCE_DIR}/language_*.qm") #file(COPY ${QM_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/translations) install(FILES ${QM_FILES} DESTINATION ${DATA_INSTALL_DIR}/translations) if(CMAKE_BUILD_TYPE STREQUAL "Debug") add_custom_command( TARGET freelib POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/translations ) foreach( file_i ${QM_FILES}) add_custom_command( TARGET freelib POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${file_i} ${CMAKE_CURRENT_BINARY_DIR}/translations/) endforeach( file_i ) endif() target_link_libraries(freelib PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::Sql Qt${QT_VERSION_MAJOR}::Xml Qt${QT_VERSION_MAJOR}::Concurrent QuaZip::QuaZip) if(Qt${FREELIB_QT_MAJOR_VERSION}HttpServer_FOUND) target_link_libraries(freelib PRIVATE Qt${QT_VERSION_MAJOR}::HttpServer) endif() if(POPPLER_FOUND) target_link_libraries(freelib PRIVATE PkgConfig::POPPLER) endif() if(KF${FREELIB_QT_MAJOR_VERSION}KIO_FOUND) target_link_libraries(freelib PRIVATE KF${FREELIB_QT_MAJOR_VERSION}::KIOCore) endif() if(KF${FREELIB_QT_MAJOR_VERSION}StatusNotifierItem_FOUND) target_link_libraries(freelib PRIVATE KF${FREELIB_QT_MAJOR_VERSION}::StatusNotifierItem) endif() if(Qt${QT_VERSION_MAJOR}Keychain_FOUND) target_link_libraries(freelib PRIVATE qt${QT_VERSION_MAJOR}keychain) endif() if(TBB_FOUND) target_link_libraries(freelib PRIVATE TBB::tbb) endif() target_precompile_headers(freelib PRIVATE precompiled.h ) set_target_properties(freelib PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) if(QT_VERSION_MAJOR EQUAL 6) qt_finalize_executable(freelib) endif() if(UNIX AND NOT APPLE) install(TARGETS freelib DESTINATION ${CMAKE_INSTALL_BINDIR}) endif(UNIX AND NOT APPLE)