keepassxc/src/CMakeLists.txt

359 lines
12 KiB
CMake
Raw Normal View History

2017-06-09 17:40:36 -04:00
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
2017-12-19 18:19:04 -05:00
# Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
2010-08-07 09:10:44 -04:00
#
# 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
# the Free Software Foundation, either version 2 or (at your option)
# version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
2012-05-21 17:37:29 -04:00
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
2010-08-13 12:08:06 -04:00
2012-05-21 17:37:29 -04:00
configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h)
2010-08-13 12:08:06 -04:00
2015-07-18 03:05:26 -04:00
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_HEAD)
git_describe(GIT_DESCRIBE --long)
if (NOT GIT_HEAD OR NOT GIT_DESCRIBE)
set(GIT_HEAD "")
set(GIT_DESCRIBE "")
endif()
find_library(ZXCVBN_LIBRARIES zxcvbn)
if(NOT ZXCVBN_LIBRARIES)
add_library(zxcvbn STATIC zxcvbn/zxcvbn.cpp)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn)
set(ZXCVBN_LIBRARIES zxcvbn)
endif(NOT ZXCVBN_LIBRARIES)
2015-07-18 03:05:26 -04:00
configure_file(version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY)
2010-08-07 09:10:44 -04:00
set(keepassx_SOURCES
core/AutoTypeAssociations.cpp
2011-12-25 13:17:40 -05:00
core/Config.cpp
core/CsvParser.cpp
2010-08-07 09:10:44 -04:00
core/Database.cpp
2010-09-19 15:22:24 -04:00
core/DatabaseIcons.cpp
core/Endian.cpp
2010-08-07 09:10:44 -04:00
core/Entry.cpp
core/EntryAttachments.cpp
core/EntryAttributes.cpp
2014-05-15 17:48:54 -04:00
core/EntrySearcher.cpp
2012-07-18 14:44:28 -04:00
core/FilePath.cpp
core/Global.h
2010-08-07 09:10:44 -04:00
core/Group.cpp
core/InactivityTimer.cpp
core/ListDeleter.h
2010-08-07 09:10:44 -04:00
core/Metadata.cpp
core/PasswordGenerator.cpp
core/PassphraseGenerator.cpp
core/SignalMultiplexer.cpp
core/ScreenLockListener.cpp
core/ScreenLockListener.h
core/ScreenLockListenerPrivate.h
core/ScreenLockListenerPrivate.cpp
core/TimeDelta.cpp
2010-08-07 09:10:44 -04:00
core/TimeInfo.cpp
2014-05-16 05:48:30 -04:00
core/ToDbExporter.cpp
2012-04-10 09:31:47 -04:00
core/Tools.cpp
2014-05-17 19:33:22 -04:00
core/Translator.cpp
2010-08-07 09:10:44 -04:00
core/Uuid.cpp
core/Base32.h
core/Base32.cpp
2017-10-21 16:38:24 -04:00
cli/Utils.cpp
cli/Utils.h
crypto/Crypto.cpp
crypto/CryptoHash.cpp
crypto/Random.cpp
crypto/SymmetricCipher.cpp
crypto/SymmetricCipherBackend.h
crypto/SymmetricCipherGcrypt.cpp
format/CsvExporter.cpp
format/KeePass1.h
format/KeePass1Reader.cpp
format/KeePass2.h
format/KeePass2RandomStream.cpp
format/KeePass2Reader.cpp
format/KeePass2Repair.cpp
format/KeePass2Writer.cpp
format/KeePass2XmlReader.cpp
format/KeePass2XmlWriter.cpp
2012-05-02 09:37:21 -04:00
gui/AboutDialog.cpp
gui/Application.cpp
gui/CategoryListWidget.cpp
gui/ChangeMasterKeyWidget.cpp
gui/Clipboard.cpp
gui/CloneDialog.cpp
gui/DatabaseOpenWidget.cpp
gui/DatabaseRepairWidget.cpp
gui/DatabaseSettingsWidget.cpp
gui/DatabaseTabWidget.cpp
2010-08-24 16:26:52 -04:00
gui/DatabaseWidget.cpp
gui/DatabaseWidgetStateSync.cpp
gui/DetailsWidget.cpp
gui/DialogyWidget.cpp
gui/DragTabBar.cpp
2012-05-14 12:18:31 -04:00
gui/EditWidget.cpp
2012-05-15 07:02:05 -04:00
gui/EditWidgetIcons.cpp
2012-10-29 17:41:37 -04:00
gui/EditWidgetProperties.cpp
gui/FileDialog.cpp
gui/Font.cpp
gui/IconModels.cpp
gui/KeePass1OpenWidget.cpp
gui/KMessageWidget.cpp
gui/LineEdit.cpp
2010-09-19 10:59:32 -04:00
gui/MainWindow.cpp
gui/MessageBox.cpp
gui/MessageWidget.cpp
gui/PasswordEdit.cpp
gui/PasswordGeneratorWidget.cpp
gui/SettingsWidget.cpp
gui/SearchWidget.cpp
gui/SortFilterHideProxyModel.cpp
2017-04-13 06:05:36 -04:00
gui/SetupTotpDialog.cpp
gui/TotpDialog.cpp
2012-10-12 06:12:00 -04:00
gui/UnlockDatabaseWidget.cpp
gui/UnlockDatabaseDialog.cpp
2012-05-27 14:06:03 -04:00
gui/WelcomeWidget.cpp
gui/csvImport/CsvImportWidget.cpp
gui/csvImport/CsvImportWizard.cpp
gui/csvImport/CsvParserModel.cpp
2012-07-16 11:39:20 -04:00
gui/entry/AutoTypeAssociationsModel.cpp
gui/entry/EditEntryWidget.cpp
gui/entry/EditEntryWidget_p.h
gui/entry/EntryAttachmentsModel.cpp
gui/entry/EntryAttributesModel.cpp
2012-05-15 14:12:05 -04:00
gui/entry/EntryHistoryModel.cpp
gui/entry/EntryModel.cpp
gui/entry/EntryView.cpp
gui/group/EditGroupWidget.cpp
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/LayeredStream.cpp
streams/qtiocompressor.cpp
streams/StoreDataStream.cpp
streams/SymmetricCipherStream.cpp
2017-04-13 06:05:36 -04:00
totp/totp.h
totp/totp.cpp
2010-08-07 09:10:44 -04:00
)
if(APPLE)
set(keepassx_SOURCES ${keepassx_SOURCES}
core/ScreenLockListenerMac.h
core/ScreenLockListenerMac.cpp
2017-11-19 22:38:48 -05:00
core/MacPasteboard.h
core/MacPasteboard.cpp
)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(keepassx_SOURCES ${keepassx_SOURCES}
core/ScreenLockListenerDBus.h
core/ScreenLockListenerDBus.cpp
)
endif()
if(MINGW)
set(keepassx_SOURCES ${keepassx_SOURCES}
core/ScreenLockListenerWin.h
core/ScreenLockListenerWin.cpp
)
endif()
2010-08-07 09:10:44 -04:00
set(keepassx_SOURCES_MAINEXE
main.cpp
)
2017-02-25 11:11:02 -05:00
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(YubiKey WITH_XC_YUBIKEY "YubiKey HMAC-SHA1 challenge-response")
2017-10-29 11:17:24 -04:00
add_feature_info(SSHAgent WITH_XC_SSHAGENT "SSH agent integration compatible with KeeAgent")
2017-02-15 18:44:20 -05:00
add_subdirectory(http)
if(WITH_XC_HTTP)
set(keepasshttp_LIB keepasshttp qhttp Qt5::Network)
endif()
add_subdirectory(autotype)
2017-01-30 19:18:35 -05:00
add_subdirectory(cli)
2017-10-29 11:17:24 -04:00
add_subdirectory(sshagent)
if(WITH_XC_SSHAGENT)
set(sshagent_LIB sshagent)
endif()
set(autotype_SOURCES
core/Tools.cpp
autotype/AutoType.cpp
autotype/AutoTypeAction.cpp
autotype/AutoTypePlatformPlugin.h
autotype/AutoTypeSelectDialog.cpp
autotype/AutoTypeSelectView.cpp
autotype/ShortcutWidget.cpp
autotype/WildcardMatcher.cpp
autotype/WindowSelectComboBox.cpp
autotype/test/AutoTypeTestInterface.h
)
if(MINGW)
set(keepassx_SOURCES_MAINEXE
${keepassx_SOURCES_MAINEXE}
${CMAKE_SOURCE_DIR}/share/windows/icon.rc)
endif()
if(WITH_XC_YUBIKEY)
2017-05-06 11:50:05 -04:00
list(APPEND keepassx_SOURCES keys/drivers/YubiKey.cpp)
else()
2017-05-06 11:50:05 -04:00
list(APPEND keepassx_SOURCES keys/drivers/YubiKeyStub.cpp)
endif()
add_library(autotype STATIC ${autotype_SOURCES})
target_link_libraries(autotype Qt5::Core Qt5::Widgets)
set(autotype_LIB autotype)
2012-05-21 17:37:29 -04:00
add_library(keepassx_core STATIC ${keepassx_SOURCES})
2010-08-07 09:10:44 -04:00
2017-02-15 18:44:20 -05:00
set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE)
target_link_libraries(keepassx_core
${keepasshttp_LIB}
${autotype_LIB}
2017-10-29 11:17:24 -04:00
${sshagent_LIB}
2017-03-06 07:51:52 -05:00
${YUBIKEY_LIBRARIES}
${ZXCVBN_LIBRARIES}
2015-07-22 10:59:38 -04:00
Qt5::Core
2016-07-25 00:41:13 -04:00
Qt5::Network
Qt5::Concurrent
2015-07-22 10:59:38 -04:00
Qt5::Widgets
2012-05-21 17:37:29 -04:00
${GCRYPT_LIBRARIES}
${GPGERROR_LIBRARIES}
2012-05-21 17:37:29 -04:00
${ZLIB_LIBRARIES})
if(APPLE)
target_link_libraries(keepassx_core "-framework Foundation")
2017-10-15 18:27:07 -04:00
if(Qt5MacExtras_FOUND)
target_link_libraries(keepassx_core Qt5::MacExtras)
endif()
endif()
2017-02-15 18:44:20 -05:00
if (UNIX AND NOT APPLE)
target_link_libraries(keepassx_core Qt5::DBus)
endif()
if(MINGW)
target_link_libraries(keepassx_core Wtsapi32.lib)
endif()
if(MINGW)
include(GenerateProductVersion)
generate_product_version(
WIN32_ProductVersionFiles
NAME "KeePassXC"
COMPANY_NAME "KeePassXC Team"
VERSION_MAJOR ${KEEPASSXC_VERSION_MAJOR}
VERSION_MINOR ${KEEPASSXC_VERSION_MINOR}
VERSION_PATCH ${KEEPASSXC_VERSION_PATCH}
)
endif()
2017-05-05 13:49:52 -04:00
add_executable(${PROGNAME} WIN32 ${keepassx_SOURCES_MAINEXE} ${WIN32_ProductVersionFiles})
2017-02-15 18:44:20 -05:00
target_link_libraries(${PROGNAME} keepassx_core)
set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON)
2017-05-05 13:49:52 -04:00
if(APPLE AND WITH_APP_BUNDLE)
configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
set_target_properties(${PROGNAME} PROPERTIES
2017-05-05 13:49:52 -04:00
MACOSX_BUNDLE ON
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
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}")
endif()
set(CPACK_GENERATOR "DragNDrop")
set(CPACK_DMG_FORMAT "UDBZ")
set(CPACK_DMG_VOLUME_NAME "${PROGNAME}")
set(CPACK_SYSTEM_NAME "OSX")
set(CPACK_STRIP_FILES ON)
2017-05-06 11:50:05 -04:00
set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}")
2012-10-22 14:40:03 -04:00
include(CPack)
add_custom_command(TARGET ${PROGNAME}
POST_BUILD
2017-10-15 18:27:07 -04:00
COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
COMMENT "Deploying app bundle")
endif()
2012-10-22 14:40:03 -04:00
2017-10-15 18:27:07 -04:00
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")
else()
set(OUTPUT_FILE_POSTFIX "Win32")
endif()
2017-10-30 10:41:20 -04:00
# 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")
set(CPACK_GENERATOR "ZIP;NSIS")
2012-10-22 14:40:03 -04:00
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_VENDOR "${PROGNAME} Team")
string(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/windows/installer-header.bmp")
2017-10-30 10:41:20 -04:00
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}")
set(CPACK_NSIS_INSTALLED_ICON_NAME "\\\\${PROGNAME}.exe")
string(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/windows/installer-wizard.bmp")
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_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")
2017-10-30 10:41:20 -04:00
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")
2012-10-22 14:40:03 -04:00
include(CPack)
install(CODE "
set(gp_tool \"objdump\")
" COMPONENT Runtime)
2012-10-22 14:40:03 -04:00
include(DeployQt4)
install_qt4_executable(${PROGNAME}.exe)
add_custom_command(TARGET ${PROGNAME} POST_BUILD
2017-12-19 18:19:04 -05:00
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${Qt5_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")
2012-10-22 14:40:03 -04:00
endif()