diff options
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r-- | src/CMakeLists.txt | 159 |
1 files changed, 119 insertions, 40 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5255186ea..69526967c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,5 @@ -# Copyright (C) 2010 Felix Geyer <debfx@fobos.de> # Copyright (C) 2017 KeePassXC Team <team@keepassxc.org> +# Copyright (C) 2010 Felix Geyer <debfx@fobos.de> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,15 +27,24 @@ if (NOT GIT_HEAD OR NOT GIT_DESCRIBE) set(GIT_DESCRIBE "") endif() +find_library(ZXCVBN_LIBRARIES zxcvbn) +if(NOT ZXCVBN_LIBRARIES) + add_library(zxcvbn STATIC zxcvbn/zxcvbn.c) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn) + set(ZXCVBN_LIBRARIES zxcvbn) +endif(NOT ZXCVBN_LIBRARIES) + configure_file(version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY) set(keepassx_SOURCES core/AutoTypeAssociations.cpp + core/AsyncTask.h + core/AutoTypeMatch.cpp core/Config.cpp core/CsvParser.cpp + core/CustomData.cpp core/Database.cpp core/DatabaseIcons.cpp - core/Endian.cpp core/Entry.cpp core/EntryAttachments.cpp core/EntryAttributes.cpp @@ -55,30 +64,39 @@ set(keepassx_SOURCES core/ScreenLockListenerPrivate.cpp core/TimeDelta.cpp core/TimeInfo.cpp - core/ToDbExporter.cpp core/Tools.cpp core/Translator.cpp core/Uuid.cpp core/Base32.h core/Base32.cpp - cli/PasswordInput.cpp - cli/PasswordInput.h + cli/Utils.cpp + cli/Utils.h crypto/Crypto.cpp crypto/CryptoHash.cpp crypto/Random.cpp crypto/SymmetricCipher.cpp crypto/SymmetricCipherBackend.h crypto/SymmetricCipherGcrypt.cpp + crypto/kdf/Kdf.cpp + crypto/kdf/Kdf_p.h + crypto/kdf/AesKdf.cpp + crypto/kdf/Argon2Kdf.cpp format/CsvExporter.cpp format/KeePass1.h format/KeePass1Reader.cpp - format/KeePass2.h + format/KeePass2.cpp format/KeePass2RandomStream.cpp - format/KeePass2Reader.cpp format/KeePass2Repair.cpp + format/KdbxReader.cpp + format/KdbxWriter.cpp + format/KdbxXmlReader.cpp + format/KeePass2Reader.cpp format/KeePass2Writer.cpp - format/KeePass2XmlReader.cpp - format/KeePass2XmlWriter.cpp + format/Kdbx3Reader.cpp + format/Kdbx3Writer.cpp + format/Kdbx4Reader.cpp + format/Kdbx4Writer.cpp + format/KdbxXmlWriter.cpp gui/AboutDialog.cpp gui/Application.cpp gui/CategoryListWidget.cpp @@ -91,12 +109,14 @@ set(keepassx_SOURCES gui/DatabaseTabWidget.cpp gui/DatabaseWidget.cpp gui/DatabaseWidgetStateSync.cpp + gui/DetailsWidget.cpp gui/DialogyWidget.cpp gui/DragTabBar.cpp gui/EditWidget.cpp gui/EditWidgetIcons.cpp gui/EditWidgetProperties.cpp gui/FileDialog.cpp + gui/Font.cpp gui/IconModels.cpp gui/KeePass1OpenWidget.cpp gui/KMessageWidget.cpp @@ -114,13 +134,17 @@ set(keepassx_SOURCES gui/UnlockDatabaseWidget.cpp gui/UnlockDatabaseDialog.cpp gui/WelcomeWidget.cpp + gui/widgets/ElidedLabel.cpp gui/csvImport/CsvImportWidget.cpp gui/csvImport/CsvImportWizard.cpp gui/csvImport/CsvParserModel.cpp gui/entry/AutoTypeAssociationsModel.cpp + gui/entry/AutoTypeMatchModel.cpp + gui/entry/AutoTypeMatchView.cpp gui/entry/EditEntryWidget.cpp gui/entry/EditEntryWidget_p.h gui/entry/EntryAttachmentsModel.cpp + gui/entry/EntryAttachmentsWidget.cpp gui/entry/EntryAttributesModel.cpp gui/entry/EntryHistoryModel.cpp gui/entry/EntryModel.cpp @@ -129,13 +153,13 @@ set(keepassx_SOURCES gui/group/GroupModel.cpp gui/group/GroupView.cpp keys/CompositeKey.cpp - keys/CompositeKey_p.h keys/drivers/YubiKey.h keys/FileKey.cpp keys/Key.h keys/PasswordKey.cpp keys/YkChallengeResponseKey.cpp streams/HashedBlockStream.cpp + streams/HmacBlockStream.cpp streams/LayeredStream.cpp streams/qtiocompressor.cpp streams/StoreDataStream.cpp @@ -147,12 +171,15 @@ if(APPLE) set(keepassx_SOURCES ${keepassx_SOURCES} core/ScreenLockListenerMac.h core/ScreenLockListenerMac.cpp + core/MacPasteboard.h + core/MacPasteboard.cpp ) endif() -if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") +if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") set(keepassx_SOURCES ${keepassx_SOURCES} core/ScreenLockListenerDBus.h core/ScreenLockListenerDBus.cpp + gui/MainWindowAdaptor.cpp ) endif() if(MINGW) @@ -166,18 +193,33 @@ set(keepassx_SOURCES_MAINEXE main.cpp ) -add_feature_info(AutoType WITH_XC_AUTOTYPE "Automatic password typing") -add_feature_info(KeePassHTTP WITH_XC_HTTP "Browser integration compatible with ChromeIPass and PassIFox") +add_feature_info(Auto-Type WITH_XC_AUTOTYPE "Automatic password typing") +add_feature_info(Networking WITH_XC_NETWORKING "Compile KeePassXC with network access code (e.g. for downloading website icons)") +add_feature_info(KeePassXC-Browser WITH_XC_BROWSER "Browser integration with KeePassXC-Browser") +add_feature_info(KeePassHTTP WITH_XC_HTTP "Browser integration compatible with ChromeIPass and PassIFox (deprecated, implies Networking)") +add_feature_info(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible with KeeAgent") add_feature_info(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response") add_subdirectory(http) -if(WITH_XC_HTTP) - set(keepasshttp_LIB keepasshttp qhttp Qt5::Network) +if(WITH_XC_NETWORKING) + find_package(CURL REQUIRED) +endif() + +set(BROWSER_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/browser) +add_subdirectory(browser) +add_subdirectory(proxy) +if(WITH_XC_BROWSER) + set(keepassxcbrowser_LIB keepassxcbrowser) endif() add_subdirectory(autotype) add_subdirectory(cli) +add_subdirectory(sshagent) +if(WITH_XC_SSHAGENT) + set(sshagent_LIB sshagent) +endif() + set(autotype_SOURCES core/Tools.cpp autotype/AutoType.cpp @@ -203,32 +245,34 @@ else() list(APPEND keepassx_SOURCES keys/drivers/YubiKeyStub.cpp) endif() -add_library(zxcvbn STATIC zxcvbn/zxcvbn.cpp) -target_link_libraries(zxcvbn) - add_library(autotype STATIC ${autotype_SOURCES}) target_link_libraries(autotype Qt5::Core Qt5::Widgets) -set(autotype_LIB autotype) - add_library(keepassx_core STATIC ${keepassx_SOURCES}) set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) target_link_libraries(keepassx_core - ${keepasshttp_LIB} - ${autotype_LIB} - ${YUBIKEY_LIBRARIES} - zxcvbn + autotype + ${keepassxchttp_LIB} + ${keepassxcbrowser_LIB} + ${sshagent_LIB} Qt5::Core Qt5::Network Qt5::Concurrent Qt5::Widgets + ${CURL_LIBRARIES} + ${YUBIKEY_LIBRARIES} + ${ZXCVBN_LIBRARIES} + ${ARGON2_LIBRARIES} ${GCRYPT_LIBRARIES} ${GPGERROR_LIBRARIES} ${ZLIB_LIBRARIES}) if(APPLE) target_link_libraries(keepassx_core "-framework Foundation") + if(Qt5MacExtras_FOUND) + target_link_libraries(keepassx_core Qt5::MacExtras) + endif() endif() if (UNIX AND NOT APPLE) target_link_libraries(keepassx_core Qt5::DBus) @@ -259,13 +303,7 @@ if(APPLE AND WITH_APP_BUNDLE) set_target_properties(${PROGNAME} PROPERTIES MACOSX_BUNDLE ON MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) -endif() - -install(TARGETS ${PROGNAME} - BUNDLE DESTINATION . COMPONENT Runtime - RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) -if(APPLE AND WITH_APP_BUNDLE) if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" DESTINATION "${DATA_INSTALL_DIR}") @@ -273,22 +311,25 @@ if(APPLE AND WITH_APP_BUNDLE) set(CPACK_GENERATOR "DragNDrop") set(CPACK_DMG_FORMAT "UDBZ") + set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/share/macosx/DS_Store.in") + set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/share/macosx/background.tiff") set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") set(CPACK_SYSTEM_NAME "OSX") set(CPACK_STRIP_FILES ON) set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}") include(CPack) - if(NOT DEFINED QT_BINARY_DIR) - set(QT_BINARY_DIR "/usr/local/opt/qt5/bin" CACHE PATH "QT binary folder") - endif() add_custom_command(TARGET ${PROGNAME} POST_BUILD - COMMAND ${QT_BINARY_DIR}/macdeployqt ${PROGNAME}.app + COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src COMMENT "Deploying app bundle") endif() +install(TARGETS ${PROGNAME} + BUNDLE DESTINATION . COMPONENT Runtime + RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) + if(MINGW) if(${CMAKE_SIZEOF_VOID_P} EQUAL "8") set(OUTPUT_FILE_POSTFIX "Win64") @@ -296,14 +337,23 @@ if(MINGW) set(OUTPUT_FILE_POSTFIX "Win32") endif() + # We have to copy the license file in the configuration phase. + # CMake checks that CPACK_RESOURCE_FILE_LICENSE actually exists and + # we have to copy it because WiX needs it to have a .txt extension. + execute_process(COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2" + "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") + + string(REGEX REPLACE "-snapshot$" "" KEEPASSXC_VERSION_CLEAN ${KEEPASSXC_VERSION}) + set(CPACK_GENERATOR "ZIP;NSIS") set(CPACK_STRIP_FILES ON) set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}-${OUTPUT_FILE_POSTFIX}") set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROGNAME}) - set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION}) + set(CPACK_PACKAGE_VERSION ${KEEPASSXC_VERSION_CLEAN}) set(CPACK_PACKAGE_VENDOR "${PROGNAME} Team") string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.GPL-2") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/INSTALLER_LICENSE.txt") set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") @@ -312,10 +362,22 @@ if(MINGW) set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROGNAME}.lnk' '$INSTDIR\\\\${PROGNAME}.exe'") set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROGNAME}.lnk'") + set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") + set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "ExecWait 'Taskkill /IM KeePassXC.exe'") + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}\nExecWait 'Taskkill /IM keepassxc-proxy.exe /F'") set(CPACK_NSIS_URL_INFO_ABOUT "https://keepassxc.org") set(CPACK_NSIS_DISPLAY_NAME ${PROGNAME}) set(CPACK_NSIS_PACKAGE_NAME "${PROGNAME} v${KEEPASSXC_VERSION}") set(CPACK_NSIS_MUI_FINISHPAGE_RUN "../${PROGNAME}.exe") + set(CPACK_WIX_UPGRADE_GUID 88785A72-3EAE-4F29-89E3-BC6B19BA9A5B) + set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/windows/keepassxc.ico") + set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/share/windows/wix-banner.bmp") + set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/share/windows/wix-dialog.bmp") + set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/share/windows/wix-template.xml") + set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/share/windows/wix-patch.xml") + set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://keepassxc.org") + set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") include(CPack) install(CODE " @@ -324,8 +386,25 @@ if(MINGW) include(DeployQt4) install_qt4_executable(${PROGNAME}.exe) - add_custom_command(TARGET ${PROGNAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${Qt5Core_DIR}/../../../share/qt5/plugins/platforms/qwindows$<$<CONFIG:Debug>:d>.dll - $<TARGET_FILE_DIR:${PROGNAME}>) - install(FILES $<TARGET_FILE_DIR:${PROGNAME}>/qwindows$<$<CONFIG:Debug>:d>.dll DESTINATION "platforms") + + # install Qt5 plugins + set(PLUGINS_DIR ${Qt5_PREFIX}/share/qt5/plugins) + install(FILES + ${PLUGINS_DIR}/platforms/qwindows$<$<CONFIG:Debug>:d>.dll + ${PLUGINS_DIR}/platforms/qdirect2d$<$<CONFIG:Debug>:d>.dll + DESTINATION "platforms") + install(FILES ${PLUGINS_DIR}/styles/qwindowsvistastyle$<$<CONFIG:Debug>:d>.dll DESTINATION "styles") + install(FILES ${PLUGINS_DIR}/platforminputcontexts/qtvirtualkeyboardplugin$<$<CONFIG:Debug>:d>.dll DESTINATION "platforminputcontexts") + install(FILES ${PLUGINS_DIR}/iconengines/qsvgicon$<$<CONFIG:Debug>:d>.dll DESTINATION "iconengines") + install(FILES + ${PLUGINS_DIR}/imageformats/qgif$<$<CONFIG:Debug>:d>.dll + ${PLUGINS_DIR}/imageformats/qicns$<$<CONFIG:Debug>:d>.dll + ${PLUGINS_DIR}/imageformats/qico$<$<CONFIG:Debug>:d>.dll + ${PLUGINS_DIR}/imageformats/qjpeg$<$<CONFIG:Debug>:d>.dll + ${PLUGINS_DIR}/imageformats/qsvg$<$<CONFIG:Debug>:d>.dll + ${PLUGINS_DIR}/imageformats/qwebp$<$<CONFIG:Debug>:d>.dll + DESTINATION "imageformats") + + # install CA cert chains + install(FILES ${Qt5_PREFIX}/ssl/certs/ca-bundle.crt DESTINATION "ssl/certs") endif() |