You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
7.8 KiB
203 lines
7.8 KiB
cmake_minimum_required(VERSION 3.16) |
|
project(vibechat VERSION 0.1.0 LANGUAGES C CXX) |
|
|
|
set(CMAKE_CXX_STANDARD 20) |
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
|
set(CMAKE_AUTOMOC ON) |
|
set(CMAKE_AUTORCC ON) |
|
set(CMAKE_C_STANDARD 99) |
|
|
|
find_package(OpenSSL REQUIRED) |
|
|
|
find_package(Qt6 COMPONENTS Widgets Network Test QUIET) |
|
if(NOT Qt6_FOUND) |
|
find_package(Qt5 COMPONENTS Widgets Network Test REQUIRED) |
|
set(QT_LIBS Qt5::Widgets Qt5::Network) |
|
set(QT_CORE Qt5::Core) |
|
set(QT_TEST_LIB Qt5::Test) |
|
else() |
|
set(QT_LIBS Qt6::Widgets Qt6::Network) |
|
set(QT_CORE Qt6::Core) |
|
set(QT_TEST_LIB Qt6::Test) |
|
endif() |
|
|
|
find_package(rlottie REQUIRED) |
|
find_package(ZLIB REQUIRED) |
|
find_package(OpenSSL REQUIRED) |
|
|
|
set(ZXING_READERS ON CACHE BOOL "") |
|
set(ZXING_WRITERS "OLD" CACHE STRING "") |
|
set(ZXING_ENABLE_QRCODE ON CACHE BOOL "") |
|
set(ZXING_ENABLE_AZTEC OFF CACHE BOOL "") |
|
set(ZXING_ENABLE_DATAMATRIX OFF CACHE BOOL "") |
|
set(ZXING_ENABLE_MAXICODE OFF CACHE BOOL "") |
|
set(ZXING_ENABLE_PDF417 OFF CACHE BOOL "") |
|
set(ZXING_ENABLE_1D OFF CACHE BOOL "") |
|
set(ZXING_C_API OFF CACHE BOOL "") |
|
set(ZXING_EXAMPLES OFF CACHE BOOL "") |
|
set(ZXING_EXAMPLES_QT OFF CACHE BOOL "") |
|
set(ZXING_BLACKBOX_TESTS OFF CACHE BOOL "") |
|
set(ZXING_UNIT_TESTS OFF CACHE BOOL "") |
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "") |
|
add_subdirectory(zxing-cpp) |
|
set_target_properties(ZXing PROPERTIES AUTOMOC OFF) |
|
|
|
# FFmpeg - custom built shared libraries |
|
set(FFMPEG_INSTALL_DIR "${CMAKE_SOURCE_DIR}/ffmpeg/ffmpeg_build/install") |
|
set(ENV{PKG_CONFIG_PATH} "${FFMPEG_INSTALL_DIR}/lib/pkgconfig") |
|
find_package(PkgConfig QUIET) |
|
if(PkgConfig_FOUND) |
|
pkg_check_modules(FFMPEG_PC libavcodec libavformat libavutil libswscale libswresample IMPORTED_TARGET) |
|
if(FFMPEG_PC_FOUND) |
|
set(FFMPEG_FOUND TRUE) |
|
set(FFMPEG_TARGET PkgConfig::FFMPEG_PC) |
|
set(FFMPEG_INCLUDE_DIRS "${FFMPEG_PC_INCLUDE_DIRS}") |
|
endif() |
|
endif() |
|
if(NOT FFMPEG_FOUND) |
|
message(STATUS "pkg-config search failed, trying direct library search") |
|
find_path(FFMPEG_INCLUDE_DIR libavcodec/avcodec.h PATHS "${FFMPEG_INSTALL_DIR}/include" NO_DEFAULT_PATH) |
|
find_library(AVCODEC_LIBRARY avcodec PATHS "${FFMPEG_INSTALL_DIR}/lib" NO_DEFAULT_PATH) |
|
find_library(AVFORMAT_LIBRARY avformat PATHS "${FFMPEG_INSTALL_DIR}/lib" NO_DEFAULT_PATH) |
|
find_library(AVUTIL_LIBRARY avutil PATHS "${FFMPEG_INSTALL_DIR}/lib" NO_DEFAULT_PATH) |
|
find_library(SWSCALE_LIBRARY swscale PATHS "${FFMPEG_INSTALL_DIR}/lib" NO_DEFAULT_PATH) |
|
find_library(SWRESAMPLE_LIBRARY swresample PATHS "${FFMPEG_INSTALL_DIR}/lib" NO_DEFAULT_PATH) |
|
if(FFMPEG_INCLUDE_DIR AND AVCODEC_LIBRARY AND AVFORMAT_LIBRARY AND AVUTIL_LIBRARY) |
|
set(FFMPEG_FOUND TRUE) |
|
set(FFMPEG_INCLUDE_DIRS "${FFMPEG_INCLUDE_DIR}") |
|
set(FFMPEG_LIBRARIES "${AVCODEC_LIBRARY}" "${AVFORMAT_LIBRARY}" "${AVUTIL_LIBRARY}" "${SWSCALE_LIBRARY}" "${SWRESAMPLE_LIBRARY}") |
|
message(STATUS "FFmpeg found via direct search") |
|
endif() |
|
endif() |
|
if(NOT FFMPEG_FOUND) |
|
message(WARNING "FFmpeg not found at ${FFMPEG_INSTALL_DIR}. Video transcoding disabled. Run ./ffmpeg/build_ffmpeg.sh to enable.") |
|
set(FFMPEG_TARGET "") |
|
set(FFMPEG_LIBRARIES "") |
|
set(FFMPEG_INCLUDE_DIRS "") |
|
endif() |
|
if(UNIX AND NOT APPLE AND FFMPEG_FOUND) |
|
set(CMAKE_BUILD_RPATH "${FFMPEG_INSTALL_DIR}/lib") |
|
set(CMAKE_INSTALL_RPATH "${FFMPEG_INSTALL_DIR}/lib") |
|
endif() |
|
|
|
# uTun core library (C, built from ../src/ and ../lib/) |
|
add_subdirectory(libutun) |
|
|
|
add_executable(vibechat |
|
src/main.cpp |
|
src/mainwindow.cpp |
|
src/channellist.cpp |
|
src/creategroupdialog.cpp |
|
src/channeldelegate.cpp |
|
src/channelsettingsdialog.cpp |
|
src/chatview.cpp |
|
src/messagedelegate.cpp |
|
src/messagelist.cpp |
|
src/accountlist.cpp |
|
src/accountdelegate.cpp |
|
src/flagpainter.cpp |
|
src/memberpropsdialog.cpp |
|
src/renamedialog.cpp |
|
src/memberlistmodel.cpp |
|
src/emoji.cpp |
|
src/emojipanel.cpp |
|
src/emojitabbar.cpp |
|
src/inputbar.cpp |
|
src/lottieicon.cpp |
|
src/animtimer.cpp |
|
src/qrcode_utils.cpp |
|
src/invite_link.cpp |
|
src/invitedialog.cpp |
|
src/inviteby.cpp |
|
src/joindialog.cpp |
|
src/settingsdialog.cpp |
|
src/networksettingspage.cpp |
|
src/databasesettingspage.cpp |
|
src/statuspage.cpp |
|
src/nodespage.cpp |
|
src/soundsettingspage.cpp |
|
src/sound_manager.cpp |
|
src/audiorecorder.cpp |
|
src/voicemessageencoder.cpp |
|
src/voiceplayback.cpp |
|
src/media_blocks.cpp |
|
src/videoplayer_engine.cpp |
|
src/videoplayer_window.cpp |
|
src/imageviewer_window.cpp |
|
src/audiodevicesettingspage.cpp |
|
src/storagesettingspage.cpp |
|
src/connmonitorwindow.cpp |
|
transport/utun_node.cpp |
|
transport/node_config.cpp |
|
transport/config_updater.cpp |
|
transport/gui_bridge_impl.cpp |
|
transport/miniaudio_impl.c |
|
db/db_manager.cpp |
|
../../lib/sqlite3.c |
|
resources/chatgui.qrc |
|
) |
|
|
|
target_include_directories(vibechat PRIVATE ${CMAKE_SOURCE_DIR}/../../lib ${CMAKE_SOURCE_DIR}/../../src ${CMAKE_SOURCE_DIR}/db ${CMAKE_SOURCE_DIR}/../../lib/libopus/include ${FFMPEG_INCLUDE_DIRS}) |
|
target_compile_definitions(vibechat PRIVATE SQLITE_THREADSAFE=1 USE_SQLITE) |
|
if(FFMPEG_FOUND) |
|
target_compile_definitions(vibechat PRIVATE HAVE_FFMPEG) |
|
endif() |
|
set_source_files_properties(../../lib/sqlite3.c transport/miniaudio_impl.c PROPERTIES LANGUAGE C) |
|
if(WIN32) |
|
target_link_libraries(vibechat PRIVATE ${QT_LIBS} rlottie::rlottie ZLIB::ZLIB OpenSSL::Crypto ZXing::ZXing utun pthread ${FFMPEG_TARGET} ${FFMPEG_LIBRARIES}) |
|
else() |
|
target_link_libraries(vibechat PRIVATE ${QT_LIBS} rlottie::rlottie ZLIB::ZLIB OpenSSL::Crypto ZXing::ZXing utun pthread dl ${FFMPEG_TARGET} ${FFMPEG_LIBRARIES}) |
|
endif() |
|
|
|
# ============================================================================ |
|
# Tests |
|
# ============================================================================ |
|
add_executable(test_member_sync |
|
../../lib/sqlite3.c |
|
../../tests/test_member_sync.c |
|
) |
|
target_include_directories(test_member_sync PRIVATE |
|
transport ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/../../lib |
|
${CMAKE_SOURCE_DIR}/../../src |
|
zxing-cpp/core/src ../../tests |
|
) |
|
target_compile_definitions(test_member_sync PRIVATE USE_SQLITE SQLITE_THREADSAFE=1) |
|
set_source_files_properties(../../lib/sqlite3.c ../../tests/test_member_sync.c PROPERTIES LANGUAGE C) |
|
if(WIN32) |
|
target_link_libraries(test_member_sync PRIVATE OpenSSL::Crypto pthread) |
|
else() |
|
target_link_libraries(test_member_sync PRIVATE OpenSSL::Crypto pthread dl) |
|
endif() |
|
|
|
# ============================================================================ |
|
# Tests |
|
# ============================================================================ |
|
|
|
enable_testing() |
|
|
|
add_executable(test_config_updater |
|
tests/test_config_updater.cpp |
|
transport/config_updater.cpp |
|
) |
|
target_include_directories(test_config_updater PRIVATE ${CMAKE_SOURCE_DIR}) |
|
target_link_libraries(test_config_updater PRIVATE ${QT_CORE} pthread) |
|
add_test(NAME test_config_updater COMMAND test_config_updater) |
|
|
|
# smoke-тест видео-декодера (FFmpeg). Ручной запуск: test_video_engine <mp4> |
|
add_executable(test_video_engine |
|
tests/test_video_engine.cpp |
|
src/videoplayer_engine.cpp |
|
src/sound_manager.cpp |
|
transport/miniaudio_impl.c |
|
) |
|
target_include_directories(test_video_engine PRIVATE ${CMAKE_SOURCE_DIR}/../../lib ${CMAKE_SOURCE_DIR}/../../src ${CMAKE_SOURCE_DIR}/db ${CMAKE_SOURCE_DIR}/../../lib/libopus/include ${FFMPEG_INCLUDE_DIRS}) |
|
target_compile_definitions(test_video_engine PRIVATE USE_SQLITE SQLITE_THREADSAFE=1) |
|
if(FFMPEG_FOUND) |
|
target_compile_definitions(test_video_engine PRIVATE HAVE_FFMPEG) |
|
endif() |
|
set_source_files_properties(transport/miniaudio_impl.c PROPERTIES LANGUAGE C) |
|
if(WIN32) |
|
target_link_libraries(test_video_engine PRIVATE ${QT_LIBS} ${QT_CORE} utun pthread ${FFMPEG_TARGET} ${FFMPEG_LIBRARIES}) |
|
else() |
|
target_link_libraries(test_video_engine PRIVATE ${QT_LIBS} ${QT_CORE} utun pthread dl ${FFMPEG_TARGET} ${FFMPEG_LIBRARIES}) |
|
endif()
|
|
|