From 40336c23374f26784d09666851bf2125e0ecc0bb Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 25 Mar 2022 18:39:14 +0100 Subject: [PATCH] added root cmake file in retroshare-gui --- retroshare-gui/CMakeLists.txt | 470 ++++++++++++++++++++++++++++++++++ 1 file changed, 470 insertions(+) create mode 100644 retroshare-gui/CMakeLists.txt diff --git a/retroshare-gui/CMakeLists.txt b/retroshare-gui/CMakeLists.txt new file mode 100644 index 000000000..57721d9f8 --- /dev/null +++ b/retroshare-gui/CMakeLists.txt @@ -0,0 +1,470 @@ +################################################################################ +# retroshare-gui/CMakeLists.txt # +# Copyright (C) 2022, Retroshare team # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU Affero General Public License as # +# published by the Free Software Foundation, either version 3 of the # +# License, or (at your option) any later version. # +# # +# 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 Affero General Public License for more details. # +# # +# You should have received a copy of the GNU Affero General Public License # +# along with this program. If not, see . # +################################################################################ + +cmake_minimum_required (VERSION 3.18.0) +project(retroshare-gui VERSION 0.6.6 LANGUAGES CXX) + +include(CMakeDependentOption) + +set( + RS_BIN_INSTALL_DIR + "${CMAKE_INSTALL_PREFIX}/bin" + CACHE PATH + "Path where to install retroshare-service compiled binary" ) + +option( + RS_DEVELOPMENT_BUILD + "Disable optimization to speed up build, enable verbose build log. \ + just for development purposes, not suitable for library usage" + OFF ) + +option( + RS_JSON_API + "Use restbed to expose libretroshare as JSON API via HTTP" + ON ) + +option( + RS_SERVICE_DESKTOP + "Install icons and shortcuts for desktop environements" + OFF ) + +option( + RS_SERVICE_TERMINAL_LOGIN + "Enable RetroShare login via terminal" + ON ) + +cmake_dependent_option( + RS_SERVICE_TERMINAL_WEBUI_PASSWORD + "Enable settin Web UI password via terminal in retroshare-service" + OFF + "RS_WEBUI" + ON ) + +cmake_dependent_option( + RS_WEBUI + "Install RetroShare Web UI" + OFF + "RS_JSON_API" + ON ) + +################################################################################ + +set(FETCHCONTENT_QUIET OFF) +include(FetchContent) + +find_package(Git REQUIRED) + +################################################################################ + +if(RS_DEVELOPMENT_BUILD) + set(CMAKE_VERBOSE_MAKEFILE ON) + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +endif(RS_DEVELOPMENT_BUILD) + +################################################################################ + +include(src/CMakeLists.txt) + +add_executable(${PROJECT_NAME} ${RS_SERVICE_SOURCES}) + +install(TARGETS ${PROJECT_NAME} DESTINATION ${RS_BIN_INSTALL_DIR}) + +################################################################################ + +if(RS_DEVELOPMENT_BUILD) + target_compile_options(${PROJECT_NAME} PRIVATE "-O0") +endif(RS_DEVELOPMENT_BUILD) + +################################################################################ + +set(RETROSHAREGUI_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../retroshare-gui/") +if(EXISTS "${RETROSHAREGUI_DEVEL_DIR}/.git" ) + message( + STATUS + "retroshare-gui submodule found at ${RETROSHAREGUI_DEVEL_DIR} using it" ) + add_subdirectory( + "${RETROSHAREGUI_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/retroshare-gui" ) +else() + FetchContent_Declare( + retroshare-gui + GIT_REPOSITORY "https://gitlab.com/RetroShare/retroshare.git" + GIT_TAG "origin/master" + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + TIMEOUT 10 + ) + FetchContent_MakeAvailable(retroshare-gui) +endif() + +target_link_libraries(${PROJECT_NAME} PRIVATE retroshare) + +################################################################################ + +if(RS_SERVICE_DESKTOP) + if(UNIX AND NOT APPLE) + install( + FILES data/retroshare.svg + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/ ) + + install( + FILES data/retroshare.xpm + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps/ ) + + install( + FILES data/24x24/apps/retroshare.png + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/24x24/apps/retroshare.png ) + + install( + FILES data/48x48/apps/retroshare.png + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps/retroshare.png ) + + install( + FILES data/64x64/apps/retroshare.png + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps/retroshare.png ) + + install( + FILES data/128x128/apps/retroshare.png + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps/retroshare.png ) + + install( + FILES data/retroshare.desktop + DESTINATION ${CMAKE_INSTALL_PREFIX}/data/retroshare.desktop ) + + install( + FILES gui/qss/chat/Bubble gui/qss/chat/Bubble_Compact + DESTINATION ${CMAKE_INSTALL_PREFIX}/data/stylesheets/ ) + + install( + FILES src/sounds/ src/qss/ + DESTINATION ${CMAKE_INSTALL_PREFIX}/ ) + endif(UNIX AND NOT APPLE) +endif(RS_SERVICE_DESKTOP) + +################################################################################ + +if(RS_JSON_API) + target_compile_definitions(${PROJECT_NAME} PUBLIC RS_JSONAPI) +endif(RS_JSON_API) + +################################################################################ + +################################################################################ +# TODO # +################################################################################ + +if(RS_GUI_CMARK) + set(CMARK_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/cmark/") + if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/.git" ) + message( STATUS "cmark submodule found at ${LIBRETROSHARE_DEVEL_DIR} using it" ) + add_subdirectory( "${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" ) + else() + FetchContent_Declare( + cmark + GIT_REPOSITORY "https://github.com/commonmark/cmark.git" + GIT_TAG "origin/master" + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + TIMEOUT 10 + ) + FetchContent_MakeAvailable(cmark) + endif() +endif(RS_GUI_CMARK) + + +# # Auto detect installed version of cmark +# rs_gui_cmark { +# DEFINES *= USE_CMARK +# no_rs_cross_compiling { +# message("Using compiled cmark") +# CMARK_SRC_PATH=$$clean_path($${RS_SRC_PATH}/supportlibs/cmark) +# CMARK_BUILD_PATH=$$clean_path($${RS_BUILD_PATH}/supportlibs/cmark/build) +# INCLUDEPATH *= $$clean_path($${CMARK_SRC_PATH}/src/) +# DEPENDPATH *= $$clean_path($${CMARK_SRC_PATH}/src/) +# QMAKE_LIBDIR *= $$clean_path($${CMARK_BUILD_PATH}/) +# # Using sLibs would fail as libcmark.a is generated at compile-time +# LIBS *= -L$$clean_path($${CMARK_BUILD_PATH}/src/) -lcmark +# +# DUMMYCMARKINPUT = FORCE +# CMAKE_GENERATOR_OVERRIDE="" +# win32-g++|win32-clang-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" +# gencmarklib.name = Generating libcmark. +# gencmarklib.input = DUMMYCMARKINPUT +# gencmarklib.output = $$clean_path($${CMARK_BUILD_PATH}/src/libcmark.a) +# gencmarklib.CONFIG += target_predeps combine +# gencmarklib.variable_out = PRE_TARGETDEPS +# gencmarklib.commands = \ +# cd $${RS_SRC_PATH} && ( \ +# git submodule update --init supportlibs/cmark ; \ +# cd $${CMARK_SRC_PATH} ; \ +# true ) && \ +# mkdir -p $${CMARK_BUILD_PATH} && cd $${CMARK_BUILD_PATH} && \ +# cmake \ +# -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \ +# \"-DCMAKE_CXX_FLAGS=$${QMAKE_CXXFLAGS}\" \ +# $${CMAKE_GENERATOR_OVERRIDE} \ +# -DCMAKE_INSTALL_PREFIX=. \ +# -B. \ +# -H$$shell_path($${CMARK_SRC_PATH}) && \ +# $(MAKE) +# QMAKE_EXTRA_COMPILERS += gencmarklib +# } else { +# message("Using systems cmark") +# sLibs *= libcmark +# } +# } + +################################# Linux ########################################## +# Put lib dir in QMAKE_LFLAGS so it appears before -L/usr/lib + +if(UNIX) + find_package(PkgConfig REQUIRED) + + pkg_check_modules(X11 REQUIRED x11) + pkg_check_modules(XSCRNSAVER REQUIRED xscrnsaver) + + target_link_libraries(${PROJECT_NAME} PRIVATE ${X11_LIBRARIES}) + target_include_directories(${PROJECT_NAME} PRIVATE ${X11_INCLUDE_DIRS}) + target_compile_options(${PROJECT_NAME} PRIVATE ${X11_CFLAGS_OTHER}) + + target_link_libraries(${PROJECT_NAME} ${XSCRNSAVER_LIBRARIES}) + target_include_directories(retroshare-gui PRIVATE ${XSCRNSAVER_INCLUDE_DIRS}) + target_compile_options(retroshare-gui PRIVATE ${XSCRNSAVER_CFLAGS_OTHER}) + + target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_XSS) + target_compile_definitions(${PROJECT_NAME} PRIVATE _FILE_OFFSET_BITS=64) + target_link_options(${PROJECT_NAME} PRIVATE LINKER:-rdynamic) +endif(UNIX) + +if(RS_SANITIZE) + target_link_libraries(${PROJECT_NAME} asan) + target_link_libraries(${PROJECT_NAME} ubsan) +endif(RS_SANITIZE) + +# #################### Cross compilation for windows under Linux ################### +# +# win32-x-g++ { +# OBJECTS_DIR = temp/win32-x-g++/obj +# +# LIBS += ../../../../lib/win32-x-g++-v0.5/libssl.a +# LIBS += ../../../../lib/win32-x-g++-v0.5/libcrypto.a +# LIBS += ../../../../lib/win32-x-g++-v0.5/libgpgme.dll.a +# LIBS += ../../../../lib/win32-x-g++-v0.5/libminiupnpc.a +# LIBS += ../../../../lib/win32-x-g++-v0.5/libz.a +# LIBS += -L${HOME}/.wine/drive_c/pthreads/lib -lpthreadGCE2 +# LIBS += -lQtUiTools +# LIBS += -lws2_32 -luuid -lole32 -liphlpapi -lcrypt32 -gdi32 +# LIBS += -lole32 -lwinmm +# +# DEFINES *= WINDOWS_SYS WIN32 WIN32_CROSS_UBUNTU +# +# INCLUDEPATH += ../../../../gpgme-1.1.8/src/ +# INCLUDEPATH += ../../../../libgpg-error-1.7/src/ +# +# RC_FILE = gui/images/retroshare_win.rc +# } +# +# #################################### Windows ##################################### +# +# win32-g++|win32-clang-g++ { +# CONFIG(debug, debug|release) { +# # show console output +# CONFIG += console +# } else { +# CONFIG -= console +# } +# +# CONFIG(debug, debug|release) { +# } else { +# # Tell linker to use ASLR protection +# QMAKE_LFLAGS += -Wl,-dynamicbase +# # Tell linker to use DEP protection +# QMAKE_LFLAGS += -Wl,-nxcompat +# } +# +# # Fix linking error (ld.exe: Error: export ordinal too large) due to too +# # many exported symbols. +# !libretroshare_shared:QMAKE_LFLAGS+=-Wl,--exclude-libs,ALL +# +# # Switch off optimization for release version +# QMAKE_CXXFLAGS_RELEASE -= -O2 +# QMAKE_CXXFLAGS_RELEASE += -O0 +# QMAKE_CFLAGS_RELEASE -= -O2 +# QMAKE_CFLAGS_RELEASE += -O0 +# +# # Switch on optimization for debug version +# #QMAKE_CXXFLAGS_DEBUG += -O2 +# #QMAKE_CFLAGS_DEBUG += -O2 +# +# OBJECTS_DIR = temp/obj +# +# dLib = ws2_32 gdi32 uuid ole32 iphlpapi crypt32 winmm +# LIBS *= $$linkDynamicLibs(dLib) +# +# RC_FILE = gui/images/retroshare_win.rc +# +# # export symbols for the plugins +# LIBS += -Wl,--export-all-symbols,--out-implib,lib/libretroshare-gui.a +# +# # create lib directory +# isEmpty(QMAKE_SH) { +# QMAKE_PRE_LINK = $(CHK_DIR_EXISTS) lib $(MKDIR) lib +# } else { +# QMAKE_PRE_LINK = $(CHK_DIR_EXISTS) lib || $(MKDIR) lib +# } +# +# greaterThan(QT_MAJOR_VERSION, 4) { +# # Qt 5 +# RC_INCLUDEPATH += $$_PRO_FILE_PWD_/../../libretroshare/src +# } else { +# # Qt 4 +# QMAKE_RC += --include-dir=$$_PRO_FILE_PWD_/../../libretroshare/src +# } +# } +# +# ##################################### MacOS ###################################### +# +# macx { +# # ENABLE THIS OPTION FOR Univeral Binary BUILD. +# #CONFIG += ppc x86 +# #QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4 +# QMAKE_INFO_PLIST = Info.plist +# mac_icon.files = $$files($$PWD/rsMacIcon.icns) +# mac_icon.path = Contents/Resources +# QMAKE_BUNDLE_DATA += mac_icon +# dplQSS.files = $$PWD/qss +# dplQSS.path = Contents/Resources +# QMAKE_BUNDLE_DATA += dplQSS +# dplChatStyles.files = \ +# $$PWD/gui/qss/chat/Bubble \ +# $$PWD/gui/qss/chat/Bubble_Compact +# dplChatStyles.path = Contents/Resources/stylesheets +# QMAKE_BUNDLE_DATA += dplChatStyles +# # mac_webui.files = $$files($$PWD/../../libresapi/src/webui) +# # mac_webui.path = Contents/Resources +# # QMAKE_BUNDLE_DATA += mac_webui +# +# OBJECTS_DIR = temp/obj +# +# CONFIG += version_detail_bash_script +# LIBS += -lssl -lcrypto -lz +# for(lib, LIB_DIR):exists($$lib/libminiupnpc.a){ LIBS += $$lib/libminiupnpc.a} +# LIBS += -framework CoreFoundation +# LIBS += -framework Security +# LIBS += -framework Carbon +# +# for(lib, LIB_DIR):LIBS += -L"$$lib" +# for(bin, BIN_DIR):LIBS += -L"$$bin" +# +# DEPENDPATH += . $$INC_DIR +# INCLUDEPATH += . $$INC_DIR +# +# #DEFINES *= MAC_IDLE # for idle feature +# CONFIG -= uitools +# } +# +# ##################################### FreeBSD ###################################### +# +# freebsd-* { +# INCLUDEPATH *= /usr/local/include/gpgme +# LIBS *= -lssl +# LIBS *= -lgpgme +# LIBS *= -lupnp +# LIBS *= -lgnome-keyring +# +# LIBS += -lsqlite3 +# } +# +# ##################################### Haiku ###################################### +# +# haiku-* { +# PRE_TARGETDEPS *= ../../libretroshare/src/lib/libretroshare.a +# PRE_TARGETDEPS *= ../../openpgpsdk/src/lib/libops.a +# +# LIBS *= ../../libretroshare/src/lib/libretroshare.a +# LIBS *= ../../openpgpsdk/src/lib/libops.a -lbz2 -lbsd +# LIBS *= -lssl -lcrypto -lnetwork +# LIBS *= -lgpgme +# LIBS *= -lupnp +# LIBS *= -lz +# LIBS *= -lixml +# +# LIBS += ../../supportlibs/pegmarkdown/lib/libpegmarkdown.a +# LIBS += -lsqlite3 +# } +# +# ##################################### OpenBSD ###################################### +# +# openbsd-* { +# INCLUDEPATH *= /usr/local/include +# +# LIBS *= -lssl -lcrypto +# LIBS *= -lgpgme +# LIBS *= -lupnp +# LIBS *= -lgnome-keyring +# LIBS += -lsqlite3 +# LIBS *= -rdynamic +# } +# +# ################################### COMMON stuff ################################## +# +# wikipoos { +# PRE_TARGETDEPS *= $$OUT_PWD/../../supportlibs/pegmarkdown/lib/libpegmarkdown.a +# LIBS *= $$OUT_PWD/../../supportlibs/pegmarkdown/lib/libpegmarkdown.a +# LIBS *= -lglib-2.0 +# } + +set(LIBRETROSHARE_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libretroshare/") +if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/.git" ) + message( + STATUS + "libretroshare submodule found at ${LIBRETROSHARE_DEVEL_DIR} using it" ) + add_subdirectory( + "${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" ) +else() + FetchContent_Declare( + libretroshare + GIT_REPOSITORY "https://gitlab.com/RetroShare/libretroshare.git" + GIT_TAG "origin/master" + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + TIMEOUT 10 + ) + FetchContent_MakeAvailable(libretroshare) +endif() + +################################ QT FILES ####################################### + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +find_package( Qt5 COMPONENTS Widgets REQUIRED) + +target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets) + +################################ GENERAL ####################################### + +target_link_libraries(${PROJECT_NAME} PRIVATE retroshare) +add_dependencies(${PROJECT_NAME} libretroshare) + +add_executable(${PROJECT_NAME} ${RS_SOURCES} ${RS_FORMS} ${RS_QTRESOURCES}) + +install(TARGETS ${PROJECT_NAME} DESTINATION ${RS_BIN_INSTALL_DIR})