fuel-scm/CMakeLists.txt

244 lines
7.5 KiB
CMake

cmake_minimum_required(VERSION 3.10)
if (${CMAKE_VERSION} VERSION_GREATER "3.14")
cmake_policy(SET CMP0087 NEW)
endif ()
set(CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}" ${CMAKE_MODULE_PATH})
include(FeatureSummary)
# Setup paths
SET(RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/")
SET(LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/")
SET(ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/")
SET(EXECUTABLE_OUTPUT_PATH ${RUNTIME_OUTPUT_DIRECTORY})
SET(LIBRARY_OUTPUT_PATH ${RUNTIME_OUTPUT_DIRECTORY})
# Fix executable paths for windows
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${RUNTIME_OUTPUT_DIRECTORY})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${RUNTIME_OUTPUT_DIRECTORY})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${RUNTIME_OUTPUT_DIRECTORY})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${RUNTIME_OUTPUT_DIRECTORY})
project(Fuel VERSION "2.0.0")
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_SOURCE_DIR}/ui")
find_package(Qt5 COMPONENTS Core Gui WebEngineWidgets REQUIRED)
find_package(Qt5Keychain REQUIRED)
set(FORMS
ui/MainWindow.ui
ui/CommitDialog.ui
ui/FileActionDialog.ui
ui/SettingsDialog.ui
ui/FslSettingsDialog.ui
ui/CloneDialog.ui
ui/BrowserWidget.ui
ui/RevisionDialog.ui
ui/RemoteDialog.ui
ui/AboutDialog.ui)
set(SOURCES
src/main.cpp
src/MainWindow.cpp
src/CommitDialog.cpp
src/FileActionDialog.cpp
src/SettingsDialog.cpp
src/FslSettingsDialog.cpp
src/CloneDialog.cpp
src/RevisionDialog.cpp
src/Utils.cpp
src/FileTableView.cpp
src/LoggedProcess.cpp
src/BrowserWidget.cpp
src/CustomWebView.cpp
src/Fossil.cpp
src/Workspace.cpp
src/SearchBox.cpp
src/AppSettings.cpp
src/RemoteDialog.cpp
src/AboutDialog.cpp)
set(HEADERS
src/MainWindow.h
src/CommitDialog.h
src/FileActionDialog.h
src/SettingsDialog.h
src/FslSettingsDialog.h
src/CloneDialog.h
src/RevisionDialog.h
src/Utils.h
src/FileTableView.h
src/LoggedProcess.h
src/BrowserWidget.h
src/CustomWebView.h
src/Fossil.h
src/Workspace.h
src/SearchBox.h
src/AppSettings.h
src/RemoteDialog.h
src/AboutDialog.h
src/WorkspaceCommon.h)
set(RESOURCES
rsrc/resources.qrc)
set(TRANSLATIONS
intl/en_US.ts
intl/el_GR.ts
intl/de_DE.ts
intl/es_ES.ts
intl/fr_FR.ts
intl/ru_RU.ts
intl/pt_PT.ts
intl/it_IT.ts
intl/nl_NL.ts
intl/ko_KR.ts)
find_package(Qt5LinguistTools)
if (Qt5LinguistTools_FOUND)
set_source_files_properties(${TRANSLATIONS} PROPERTIES OUTPUT_LOCATION "intl")
qt5_create_translation(QM_MESSAGES ${CMAKE_SOURCE_DIR}/ui ${CMAKE_SOURCE_DIR}/src ${TRANSLATIONS})
qt5_add_translation(QM_FILES ${TRANSLATIONS})
add_custom_target(messages DEPENDS ${QM_MESSAGES})
add_custom_target(translations DEPENDS ${QM_FILES} messages)
file(COPY rsrc/languages.qrc DESTINATION ${CMAKE_BINARY_DIR}/intl)
list(APPEND RESOURCES "${CMAKE_BINARY_DIR}/intl/languages.qrc")
else ()
message("Qt5LinguistTools not found")
endif ()
if (WIN32)
# clang-cl doesn't support resource files
if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND SOURCES "${CMAKE_SOURCE_DIR}/rsrc/fuel.rc")
endif ()
elseif (APPLE)
list(APPEND SOURCES "${CMAKE_SOURCE_DIR}/rsrc/icons/fuel.icns")
endif ()
add_executable(
${PROJECT_NAME}
${FORMS}
${HEADERS}
${SOURCES}
${QM_FILES}
${RESOURCES}
)
target_include_directories(
${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/ui/
${CMAKE_SOURCE_DIR}/src/
)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets Qt5::WebEngineCore Qt5::WebEngineWidgets)
if (TARGET Qt5Keychain::Qt5Keychain)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5Keychain::Qt5Keychain)
else ()
target_link_libraries(${PROJECT_NAME} PRIVATE qt5keychain)
endif ()
target_compile_definitions(${PROJECT_NAME} PRIVATE FUEL_VERSION="${PROJECT_VERSION}")
if (Qt5LinguistTools_FOUND)
add_dependencies(${PROJECT_NAME} translations)
endif ()
# ------------------------------------------------------------------------------------------------#
# Cpack
# ------------------------------------------------------------------------------------------------#
include(GNUInstallDirs)
include(FetchContent)
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "${PROJECT_NAME}")
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
set(CPACK_PACKAGE_VENDOR "${PROJECT_NAME}")
set(CPACK_PACKAGE_DESCRIPTION "A GUI front-end for the Fossil SCM")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A GUI front-end for the Fossil SCM")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/rsrc/license.rtf")
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "${PROJECT_NAME}")
set(CPACK_GENERATOR ZIP)
if (WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE TRUE)
get_target_property(Qt5_Core_Location Qt5::Core LOCATION)
get_filename_component(QT_BIN_DIR ${Qt5_Core_Location} DIRECTORY)
# Fix for windeployqt not being able to find qt5keychain
if (EXISTS ${RUNTIME_OUTPUT_DIRECTORY}/qt5keychain.dll AND NOT EXISTS ${QT_BIN_DIR}/qt5keychain.dll)
message("Copying ${RUNTIME_OUTPUT_DIRECTORY}/qt5keychain.dll to ${QT_BIN_DIR}")
file(COPY ${RUNTIME_OUTPUT_DIRECTORY}/qt5keychain.dll DESTINATION ${QT_BIN_DIR})
endif ()
add_custom_target(
copy_dll
COMMAND ${QT_BIN_DIR}/windeployqt.exe $<TARGET_FILE:${PROJECT_NAME}> --release --no-compiler-runtime --no-opengl-sw
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
install(
TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION .
)
install(CODE "execute_process(COMMAND ${QT_BIN_DIR}/windeployqt.exe $<TARGET_FILE:${PROJECT_NAME}> --release --no-opengl-sw --dir \${CMAKE_INSTALL_PREFIX})")
FetchContent_Declare(
fossil
URL https://fossil-scm.org/home/uv/fossil-w64-2.17.zip
URL_MD5 f62b6e28846871741e057cfd09acdfc8
)
FetchContent_MakeAvailable(fossil)
install(
PROGRAMS ${fossil_SOURCE_DIR}/fossil.exe
DESTINATION .
COMPONENT Fossil
EXCLUDE_FROM_ALL
)
# For Windows Desktop shortcuts
set(CPACK_CREATE_DESKTOP_LINKS "${PROJECT_NAME}" "${PROJECT_NAME}")
set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
set(CPACK_NSIS_MODIFY_PATH "ON")
set(CPACK_NSIS_HELP_LINK "https://fuel-scm.org")
set(CPACK_NSIS_URL_INFO_ABOUT "https://fuel-scm.org")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "Fuel.exe")
SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/rsrc/icons/fuel.ico")
SET(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/rsrc/icons/fuel.ico")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}")
set(CPACK_GENERATOR ${CPACK_GENERATOR} NSIS)
set(CPACK_MODULE_PATH "")
endif ()
if (UNIX)
install(
TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(
FILES ${CMAKE_SOURCE_DIR}/rsrc/fuel.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications/
)
install(
FILES ${CMAKE_SOURCE_DIR}/rsrc/icons/fuel.png
DESTINATION ${CMAKE_INSTALL_DATADIR}/pixmaps/
)
endif ()
include(CPack)
feature_summary(WHAT ALL)