Compare commits
137 Commits
nightly/20
...
beta/20250
| Author | SHA1 | Date | |
|---|---|---|---|
| fe504827fa | |||
| ca02cf172a | |||
| ba44b70f97 | |||
| 87e38c2bf5 | |||
| 98a300d36f | |||
| 5ac31130d0 | |||
| 9c11ec6233 | |||
| c9ab1a8e24 | |||
| 76e1bd9eb1 | |||
| ffb20d6767 | |||
| 87e63724c3 | |||
| 9fad769040 | |||
| 4106b8c752 | |||
| fd6e733433 | |||
| ee0a754b6a | |||
| 9278919410 | |||
| 8c1b79a86c | |||
| 3e6108f167 | |||
| 22be4be864 | |||
| bb359f851b | |||
| 36730480aa | |||
| e7d626a421 | |||
| 185869824a | |||
| 9858891fea | |||
| be7ec378c8 | |||
| cbed58544f | |||
| c642c1ddfa | |||
| aa8c1edbd4 | |||
| 2a28438275 | |||
| 92945ad29f | |||
| c22260fb20 | |||
| 0163ad7da1 | |||
| becd7ac144 | |||
| 8b19f733af | |||
| 25c9f0ef5c | |||
| f1895b31b8 | |||
| 13a314bde5 | |||
| 8c9f6a85a3 | |||
| 82eb5c59a6 | |||
| 84a9ba4196 | |||
| 6dac4d2ee3 | |||
| 674bf38766 | |||
| 52f3a9bc28 | |||
| abce881b50 | |||
| 666b149033 | |||
| eb10ccbd4a | |||
| f513358236 | |||
| 3c00829afb | |||
| 84a59889e3 | |||
| 6c35561817 | |||
| 6ffdda7b81 | |||
| a51078c900 | |||
| 76a710e2ab | |||
| bc324aa8bb | |||
| 5c772960bc | |||
| da2acefced | |||
| 524c9b0ed4 | |||
| 8677349c4a | |||
| 905b2e858e | |||
| 6fc2e75a33 | |||
| c738caa3a4 | |||
| cb13d4f771 | |||
| 436e11a6a4 | |||
| 869aef8929 | |||
| e0f939318e | |||
| 136dea011f | |||
| af09269d81 | |||
| 5a5ef4711d | |||
| 1dd745d446 | |||
| 3dd2d26d86 | |||
| eb6b6a2b93 | |||
| b15d692a0e | |||
| e76bcbd555 | |||
| b5a979e6b1 | |||
| 898444dd3c | |||
| 99f246016d | |||
| e24f3d91e8 | |||
| 3a7850b398 | |||
| 1e1750024b | |||
| 2ba53a2e40 | |||
| ceec1f95b9 | |||
| 1ac3db4f33 | |||
| 93d3d18c7b | |||
| d4b7891f48 | |||
| d7c294edd0 | |||
| 945cfe176d | |||
| fa3a153896 | |||
| e9106b2bcc | |||
| a967518d45 | |||
| 7ebed53e97 | |||
| ca05963c40 | |||
| df98c6c3fd | |||
| 05501e33e9 | |||
| 91780ae400 | |||
| 4900ca9f1b | |||
| 0f965aae28 | |||
| f8c29fc4a1 | |||
| 2e1889caf1 | |||
| 8070d1bfc2 | |||
| 4ee1a309a1 | |||
| 0333016c44 | |||
| 32b7525ee3 | |||
| 32b941ab96 | |||
| e4932abd39 | |||
| 718d1d266d | |||
| 8d55f352b4 | |||
| 2a72da564e | |||
| 88d0539085 | |||
| 4b1c299a1d | |||
| 479da3ca54 | |||
| 02140a11c4 | |||
| b5dbe23c17 | |||
| ff5f94b34a | |||
| def2e19abe | |||
| 69430c4af3 | |||
| 911fdbc9e5 | |||
| 80b3336f1b | |||
| f8bafd4154 | |||
| b8b06ccfa1 | |||
| 6cb5a8206a | |||
| ae1a2462e2 | |||
| 31581db7f5 | |||
| c323dcfe13 | |||
| 8a31aca346 | |||
| 7eeabbe1c6 | |||
| 8c0ecaf3c5 | |||
| c91bff35b6 | |||
| cb05b4afd0 | |||
| 4419f7bfbc | |||
| deaa15a36e | |||
| 6b70ffcf3e | |||
| a407fa2c47 | |||
| 3143d60760 | |||
| 73eacd5125 | |||
| fc70ddc6dc | |||
| e2e5a0c8cc | |||
| dd9ed8d57d |
4
.gitmodules
vendored
@ -31,3 +31,7 @@
|
|||||||
path = 3rdparty/zxing-cpp
|
path = 3rdparty/zxing-cpp
|
||||||
url = https://github.com/nu-book/zxing-cpp.git
|
url = https://github.com/nu-book/zxing-cpp.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
[submodule "3rdparty/hunspell"]
|
||||||
|
path = 3rdparty/hunspell
|
||||||
|
url = https://gitlab.savoirfairelinux.com/jami/hunspell.git
|
||||||
|
ignore = dirty
|
||||||
|
|||||||
1
3rdparty/hunspell
vendored
Submodule
171
CMakeLists.txt
@ -26,7 +26,7 @@ set(CMAKE_SCRIPTS_DIR ${PROJECT_SOURCE_DIR}/extras/build/cmake)
|
|||||||
include(${CMAKE_SCRIPTS_DIR}/extra_tools.cmake)
|
include(${CMAKE_SCRIPTS_DIR}/extra_tools.cmake)
|
||||||
|
|
||||||
option(WITH_DAEMON_SUBMODULE "Build with daemon submodule" ON)
|
option(WITH_DAEMON_SUBMODULE "Build with daemon submodule" ON)
|
||||||
option(JAMICORE_AS_SUBDIR "Build Jami-core as a subdir dependency" OFF)
|
option(JAMICORE_AS_SUBDIR "Build Jami-core as a subdir dependency" ON)
|
||||||
option(WITH_WEBENGINE "Build with WebEngine" ON)
|
option(WITH_WEBENGINE "Build with WebEngine" ON)
|
||||||
option(ENABLE_LIBWRAP "Enable libwrap (single process mode)" ON)
|
option(ENABLE_LIBWRAP "Enable libwrap (single process mode)" ON)
|
||||||
if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||||
@ -58,10 +58,9 @@ else()
|
|||||||
set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/daemon)
|
set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/daemon)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# For now only MSVC is supported for building Jami-core within the
|
|
||||||
# client cmake.
|
|
||||||
if(JAMICORE_AS_SUBDIR)
|
if(JAMICORE_AS_SUBDIR)
|
||||||
add_subdirectory(${DAEMON_DIR})
|
add_subdirectory(${DAEMON_DIR} EXCLUDE_FROM_ALL)
|
||||||
|
set(LIBJAMI_LIB jami-core)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# init some variables for includes, libs, etc.
|
# init some variables for includes, libs, etc.
|
||||||
@ -76,6 +75,7 @@ list(APPEND QWINDOWKIT_OPTIONS
|
|||||||
QWINDOWKIT_BUILD_WIDGETS OFF
|
QWINDOWKIT_BUILD_WIDGETS OFF
|
||||||
QWINDOWKIT_INSTALL OFF
|
QWINDOWKIT_INSTALL OFF
|
||||||
QWINDOWKIT_BUILD_STATIC ON
|
QWINDOWKIT_BUILD_STATIC ON
|
||||||
|
QWINDOWKIT_BUILD_QUICK ON
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
@ -83,29 +83,27 @@ if(WIN32)
|
|||||||
if(BETA)
|
if(BETA)
|
||||||
message(STATUS "Beta config enabled")
|
message(STATUS "Beta config enabled")
|
||||||
add_definitions(-DBETA)
|
add_definitions(-DBETA)
|
||||||
set(JAMI_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Beta)
|
|
||||||
else()
|
|
||||||
set(JAMI_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Release)
|
|
||||||
endif()
|
endif()
|
||||||
|
set(JAMI_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
list(APPEND QWINDOWKIT_OPTIONS QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDERS OFF)
|
list(APPEND QWINDOWKIT_OPTIONS QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDERS OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# qmsetup uses the wrong package dir on some distributions
|
# If qwindowkit can't find qmsetup via cmake's find_package function, it will install it and
|
||||||
# (including Fedora and openSUSE Leap at least)
|
# then call find_package again. Unfortunately, even the second call to find_package sometimes
|
||||||
check_distro_needs_qmsetup_patch(DISTRO_NEEDS_QMSETUP_PATCH)
|
# fails due to qmsetup having been installed in the wrong directory. The following patch
|
||||||
if(DISTRO_NEEDS_QMSETUP_PATCH)
|
# ensures that qmsetup is always installed in the directory where find_package looks for it.
|
||||||
list(APPEND QWINDOWKIT_PATCHES ${EXTRA_PATCHES_DIR}/0001-fix-fedora-fc-build.patch)
|
if(NOT WIN32)
|
||||||
set(qmsetup_cmake_path ${CMAKE_BINARY_DIR}/_install/lib64/cmake/qmsetup)
|
list(APPEND QWINDOWKIT_PATCHES ${EXTRA_PATCHES_DIR}/0001-fix-qm_install_package-function.patch)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# qwindowkit (frameless window)
|
# qwindowkit (frameless window)
|
||||||
add_fetch_content(
|
add_fetch_content(
|
||||||
TARGET qwindowkit
|
TARGET qwindowkit
|
||||||
URL https://github.com/stdware/qwindowkit.git
|
URL https://github.com/stdware/qwindowkit.git
|
||||||
BRANCH 79b1f3110754f9c21af2d7dacbd07b1a9dbaf6ef
|
BRANCH 758b00cb6c2d924be3a1ea137ec366dc33a5132d
|
||||||
PATCHES ${QWINDOWKIT_PATCHES}
|
PATCHES ${QWINDOWKIT_PATCHES}
|
||||||
OPTIONS ${QWINDOWKIT_OPTIONS}
|
OPTIONS ${QWINDOWKIT_OPTIONS}
|
||||||
)
|
)
|
||||||
@ -172,7 +170,7 @@ set(TESTS_DIR ${PROJECT_SOURCE_DIR}/tests)
|
|||||||
# Here we let find_package(<PackageName>...) try to find Qt 6,
|
# Here we let find_package(<PackageName>...) try to find Qt 6,
|
||||||
# If it is found, find_package will succeed, and the CMake variable
|
# If it is found, find_package will succeed, and the CMake variable
|
||||||
# QT_VERSION_MAJOR will be defined 6.
|
# QT_VERSION_MAJOR will be defined 6.
|
||||||
set(QT6_MINVER_MINOR 6)
|
set(QT6_MINVER_MINOR 8)
|
||||||
if(QT6_VER AND QT6_PATH)
|
if(QT6_VER AND QT6_PATH)
|
||||||
find_package(QT NAMES Qt6 REQUIRED
|
find_package(QT NAMES Qt6 REQUIRED
|
||||||
PATHS ${QT6_PATH} NO_DEFAULT_PATH)
|
PATHS ${QT6_PATH} NO_DEFAULT_PATH)
|
||||||
@ -181,15 +179,9 @@ else()
|
|||||||
find_package(QT NAMES Qt6 REQUIRED)
|
find_package(QT NAMES Qt6 REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
if (${QT_VERSION_MINOR} GREATER_EQUAL ${QT6_MINVER_MINOR})
|
if (${QT_VERSION_MINOR} GREATER_EQUAL ${QT6_MINVER_MINOR})
|
||||||
# Enforce a minimum Qt version of 6.6.2 for the Windows build
|
|
||||||
# https://github.com/stdware/qwindowkit/issues/23
|
|
||||||
if(MSVC AND ${QT_VERSION_MINOR} EQUAL 6 AND ${QT_VERSION_PATCH} LESS 2)
|
|
||||||
message(FATAL_ERROR "Qt 6.6.2 or higher is required. Found ${QT_VERSION}")
|
|
||||||
endif()
|
|
||||||
# Qt version is 6.6 or higher
|
|
||||||
message(STATUS "Found a suitable Qt version ${QT_VERSION}")
|
message(STATUS "Found a suitable Qt version ${QT_VERSION}")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Qt 6.6 or higher is required. Found ${QT_VERSION}")
|
message(FATAL_ERROR "Qt 6.8 or higher is required. Found ${QT_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# libjamiclient
|
# libjamiclient
|
||||||
@ -241,11 +233,12 @@ cloned this repository via git, perhaps you did not initialize its \
|
|||||||
submodules afterwards. You can do so by running \"git submodule \
|
submodules afterwards. You can do so by running \"git submodule \
|
||||||
update --init\" in the repository.")
|
update --init\" in the repository.")
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_MODULE_PATH
|
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/extras/build/cmake/modules)
|
||||||
${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
|
if (NOT JAMICORE_AS_SUBDIR)
|
||||||
find_package(LibJami REQUIRED)
|
find_package(LibJami REQUIRED)
|
||||||
if(LIBJAMI_FOUND)
|
if(LIBJAMI_FOUND)
|
||||||
include_directories(${LIBJAMI_INCLUDE_DIRS})
|
include_directories(${LIBJAMI_INCLUDE_DIRS})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(FindPython3)
|
include(FindPython3)
|
||||||
@ -254,7 +247,7 @@ set(PYTHON_EXEC ${Python3_EXECUTABLE})
|
|||||||
|
|
||||||
# Versioning and build ID generation
|
# Versioning and build ID generation
|
||||||
set(VERSION_FILE ${CMAKE_CURRENT_BINARY_DIR}/version_info.cpp)
|
set(VERSION_FILE ${CMAKE_CURRENT_BINARY_DIR}/version_info.cpp)
|
||||||
# Touch the file to make sure it exists at configure time as
|
# Touch the file to ensure it exists at configure time as
|
||||||
# we add it to the target_sources below.
|
# we add it to the target_sources below.
|
||||||
file(TOUCH ${VERSION_FILE})
|
file(TOUCH ${VERSION_FILE})
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
@ -265,6 +258,7 @@ add_custom_target(
|
|||||||
-DAPP_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
|
-DAPP_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
|
||||||
-DCORE_SOURCE_DIR=${DAEMON_DIR}
|
-DCORE_SOURCE_DIR=${DAEMON_DIR}
|
||||||
-DCPP_INT_FILE=${VERSION_INFO_DIR}/version_info.cpp.in
|
-DCPP_INT_FILE=${VERSION_INFO_DIR}/version_info.cpp.in
|
||||||
|
-DBUILD_VERSION=${BUILD_VERSION}
|
||||||
-P ${CMAKE_SCRIPTS_DIR}/generate_version_info.cmake
|
-P ${CMAKE_SCRIPTS_DIR}/generate_version_info.cmake
|
||||||
)
|
)
|
||||||
list(APPEND CLIENT_INCLUDE_DIRS ${VERSION_INFO_DIR})
|
list(APPEND CLIENT_INCLUDE_DIRS ${VERSION_INFO_DIR})
|
||||||
@ -346,6 +340,8 @@ set(COMMON_SOURCES
|
|||||||
${APP_SRC_DIR}/conversationlistmodel.cpp
|
${APP_SRC_DIR}/conversationlistmodel.cpp
|
||||||
${APP_SRC_DIR}/searchresultslistmodel.cpp
|
${APP_SRC_DIR}/searchresultslistmodel.cpp
|
||||||
${APP_SRC_DIR}/calloverlaymodel.cpp
|
${APP_SRC_DIR}/calloverlaymodel.cpp
|
||||||
|
${APP_SRC_DIR}/spellcheckdictionarylistmodel.cpp
|
||||||
|
${APP_SRC_DIR}/spellcheckadapter.cpp
|
||||||
${APP_SRC_DIR}/filestosendlistmodel.cpp
|
${APP_SRC_DIR}/filestosendlistmodel.cpp
|
||||||
${APP_SRC_DIR}/wizardviewstepmodel.cpp
|
${APP_SRC_DIR}/wizardviewstepmodel.cpp
|
||||||
${APP_SRC_DIR}/avatarregistry.cpp
|
${APP_SRC_DIR}/avatarregistry.cpp
|
||||||
@ -360,13 +356,13 @@ set(COMMON_SOURCES
|
|||||||
${APP_SRC_DIR}/currentcall.cpp
|
${APP_SRC_DIR}/currentcall.cpp
|
||||||
${APP_SRC_DIR}/messageparser.cpp
|
${APP_SRC_DIR}/messageparser.cpp
|
||||||
${APP_SRC_DIR}/previewengine.cpp
|
${APP_SRC_DIR}/previewengine.cpp
|
||||||
${APP_SRC_DIR}/imagedownloader.cpp
|
${APP_SRC_DIR}/filedownloader.cpp
|
||||||
${APP_SRC_DIR}/pluginversionmanager.cpp
|
${APP_SRC_DIR}/pluginversionmanager.cpp
|
||||||
${APP_SRC_DIR}/connectioninfolistmodel.cpp
|
${APP_SRC_DIR}/connectioninfolistmodel.cpp
|
||||||
${APP_SRC_DIR}/pluginversionmanager.cpp
|
${APP_SRC_DIR}/pluginversionmanager.cpp
|
||||||
${APP_SRC_DIR}/linkdevicemodel.cpp
|
${APP_SRC_DIR}/linkdevicemodel.cpp
|
||||||
${APP_SRC_DIR}/qrcodescannermodel.cpp
|
${APP_SRC_DIR}/qrcodescannermodel.cpp
|
||||||
)
|
${APP_SRC_DIR}/spellchecker.cpp)
|
||||||
|
|
||||||
set(COMMON_HEADERS
|
set(COMMON_HEADERS
|
||||||
${APP_SRC_DIR}/global.h
|
${APP_SRC_DIR}/global.h
|
||||||
@ -376,7 +372,6 @@ set(COMMON_HEADERS
|
|||||||
${APP_SRC_DIR}/appversionmanager.h
|
${APP_SRC_DIR}/appversionmanager.h
|
||||||
${APP_SRC_DIR}/utils.h
|
${APP_SRC_DIR}/utils.h
|
||||||
${APP_SRC_DIR}/bannedlistmodel.h
|
${APP_SRC_DIR}/bannedlistmodel.h
|
||||||
${APP_SRC_DIR}/version.h
|
|
||||||
${APP_SRC_DIR}/accountlistmodel.h
|
${APP_SRC_DIR}/accountlistmodel.h
|
||||||
${APP_SRC_DIR}/instancemanager.h
|
${APP_SRC_DIR}/instancemanager.h
|
||||||
${APP_SRC_DIR}/connectivitymonitor.h
|
${APP_SRC_DIR}/connectivitymonitor.h
|
||||||
@ -418,6 +413,8 @@ set(COMMON_HEADERS
|
|||||||
${APP_SRC_DIR}/conversationlistmodel.h
|
${APP_SRC_DIR}/conversationlistmodel.h
|
||||||
${APP_SRC_DIR}/searchresultslistmodel.h
|
${APP_SRC_DIR}/searchresultslistmodel.h
|
||||||
${APP_SRC_DIR}/calloverlaymodel.h
|
${APP_SRC_DIR}/calloverlaymodel.h
|
||||||
|
${APP_SRC_DIR}/spellcheckdictionarylistmodel.h
|
||||||
|
${APP_SRC_DIR}/spellcheckadapter.h
|
||||||
${APP_SRC_DIR}/filestosendlistmodel.h
|
${APP_SRC_DIR}/filestosendlistmodel.h
|
||||||
${APP_SRC_DIR}/wizardviewstepmodel.h
|
${APP_SRC_DIR}/wizardviewstepmodel.h
|
||||||
${APP_SRC_DIR}/avatarregistry.h
|
${APP_SRC_DIR}/avatarregistry.h
|
||||||
@ -432,7 +429,7 @@ set(COMMON_HEADERS
|
|||||||
${APP_SRC_DIR}/currentcall.h
|
${APP_SRC_DIR}/currentcall.h
|
||||||
${APP_SRC_DIR}/messageparser.h
|
${APP_SRC_DIR}/messageparser.h
|
||||||
${APP_SRC_DIR}/htmlparser.h
|
${APP_SRC_DIR}/htmlparser.h
|
||||||
${APP_SRC_DIR}/imagedownloader.h
|
${APP_SRC_DIR}/filedownloader.h
|
||||||
${APP_SRC_DIR}/pluginversionmanager.h
|
${APP_SRC_DIR}/pluginversionmanager.h
|
||||||
${APP_SRC_DIR}/connectioninfolistmodel.h
|
${APP_SRC_DIR}/connectioninfolistmodel.h
|
||||||
${APP_SRC_DIR}/pttlistener.h
|
${APP_SRC_DIR}/pttlistener.h
|
||||||
@ -440,14 +437,26 @@ set(COMMON_HEADERS
|
|||||||
${APP_SRC_DIR}/crashreporter.h
|
${APP_SRC_DIR}/crashreporter.h
|
||||||
${APP_SRC_DIR}/linkdevicemodel.h
|
${APP_SRC_DIR}/linkdevicemodel.h
|
||||||
${APP_SRC_DIR}/qrcodescannermodel.h
|
${APP_SRC_DIR}/qrcodescannermodel.h
|
||||||
)
|
${APP_SRC_DIR}/spellchecker.h)
|
||||||
|
|
||||||
|
set(CONTRIB_DARWIN_FOLDER "")
|
||||||
|
if(APPLE)
|
||||||
|
list(LENGTH CMAKE_OSX_ARCHITECTURES ARCH_LEN)
|
||||||
|
if(ARCH_LEN EQUAL 1)
|
||||||
|
# single-arch -> use <arch>-apple-darwin<ver>
|
||||||
|
set(DARWIN_ARCH "${CMAKE_OSX_ARCHITECTURES}")
|
||||||
|
set(CONTRIB_DARWIN_FOLDER "${DARWIN_ARCH}-apple-darwin${CMAKE_SYSTEM_VERSION}")
|
||||||
|
else() # multi-arch -> use apple-darwin<ver>
|
||||||
|
set(CONTRIB_DARWIN_FOLDER "apple-darwin${CMAKE_SYSTEM_VERSION}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# For libavutil/avframe.
|
# For libavutil/avframe.
|
||||||
set(LIBJAMI_CONTRIB_DIR "${DAEMON_DIR}/contrib")
|
set(LIBJAMI_CONTRIB_DIR "${DAEMON_DIR}/contrib")
|
||||||
find_path(AVUTIL_INCLUDE_DIR libavutil/avutil.h
|
find_path(AVUTIL_INCLUDE_DIR libavutil/avutil.h
|
||||||
PATHS
|
PATHS
|
||||||
${LIBJAMI_CONTRIB_DIR}/native/ffmpeg
|
${LIBJAMI_CONTRIB_DIR}/native/ffmpeg
|
||||||
${LIBJAMI_CONTRIB_DIR}/apple-darwin/include/
|
${LIBJAMI_CONTRIB_DIR}/${CONTRIB_DARWIN_FOLDER}/include/
|
||||||
${LIBJAMI_CONTRIB_DIR}/build/ffmpeg/Build/win32/x64/include)
|
${LIBJAMI_CONTRIB_DIR}/build/ffmpeg/Build/win32/x64/include)
|
||||||
include_directories(${AVUTIL_INCLUDE_DIR})
|
include_directories(${AVUTIL_INCLUDE_DIR})
|
||||||
|
|
||||||
@ -468,6 +477,25 @@ if(ENABLE_CRASHREPORTS)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
|
||||||
|
# hunspell
|
||||||
|
pkg_search_module(hunspell IMPORTED_TARGET hunspell)
|
||||||
|
if(hunspell_FOUND)
|
||||||
|
message(STATUS "hunspell found")
|
||||||
|
set(HUNSPELL_LIBRARIES PkgConfig::hunspell)
|
||||||
|
else()
|
||||||
|
message(STATUS "hunspell not found - building hunspell")
|
||||||
|
|
||||||
|
set(HUNSPELL_DIR ${PROJECT_SOURCE_DIR}/3rdparty/hunspell)
|
||||||
|
|
||||||
|
# Build using the submodule and its CMakeLists.txt
|
||||||
|
add_subdirectory(${HUNSPELL_DIR} hunspell_build EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
|
set(HUNSPELL_INCLUDE_DIR ${HUNSPELL_DIR}/src)
|
||||||
|
set(HUNSPELL_LIBRARIES hunspell::hunspell)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(WINDOWS_SYS_LIBS
|
set(WINDOWS_SYS_LIBS
|
||||||
windowsapp.lib
|
windowsapp.lib
|
||||||
@ -530,8 +558,6 @@ elseif (NOT APPLE)
|
|||||||
${APP_SRC_DIR}/screencastportal.h)
|
${APP_SRC_DIR}/screencastportal.h)
|
||||||
list(APPEND QT_MODULES DBus)
|
list(APPEND QT_MODULES DBus)
|
||||||
|
|
||||||
find_package(PkgConfig REQUIRED)
|
|
||||||
|
|
||||||
pkg_check_modules(GLIB REQUIRED glib-2.0)
|
pkg_check_modules(GLIB REQUIRED glib-2.0)
|
||||||
if(GLIB_FOUND)
|
if(GLIB_FOUND)
|
||||||
add_definitions(${GLIB_CFLAGS_OTHER})
|
add_definitions(${GLIB_CFLAGS_OTHER})
|
||||||
@ -560,19 +586,12 @@ elseif (NOT APPLE)
|
|||||||
add_definitions(${LIBGDKPIXBUF_CFLAGS})
|
add_definitions(${LIBGDKPIXBUF_CFLAGS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(PREPEND CMAKE_PREFIX_PATH
|
|
||||||
${LIBJAMI_CONTRIB_DIR}/native/ffmpeg/libavutil)
|
|
||||||
pkg_check_modules(LIBAVUTIL libavutil>=55.75.100)
|
|
||||||
list(REMOVE_ITEM CMAKE_PREFIX_PATH
|
|
||||||
${LIBJAMI_CONTRIB_DIR}/native/ffmpeg/libavutil)
|
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${LIBCLIENT_SRC_DIR}
|
${LIBCLIENT_SRC_DIR}
|
||||||
${LIBNM_INCLUDE_DIRS}
|
${LIBNM_INCLUDE_DIRS}
|
||||||
${LIBNOTIFY_INCLUDE_DIRS}
|
${LIBNOTIFY_INCLUDE_DIRS}
|
||||||
${LIBGDKPIXBUF_INCLUDE_DIRS}
|
${LIBGDKPIXBUF_INCLUDE_DIRS}
|
||||||
${GLIB_INCLUDE_DIRS}
|
${GLIB_INCLUDE_DIRS})
|
||||||
${LIBAVUTIL_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
set(JAMI_DATA_PREFIX "${CMAKE_INSTALL_PREFIX}/share")
|
set(JAMI_DATA_PREFIX "${CMAKE_INSTALL_PREFIX}/share")
|
||||||
|
|
||||||
@ -614,6 +633,13 @@ else() # APPLE
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Adding HUNSPELL_INCLUDE_DIR" ${HUNSPELL_INCLUDE_DIR})
|
||||||
|
list(APPEND CLIENT_INCLUDE_DIRS ${HUNSPELL_INCLUDE_DIR} ${CMAKE_BINARY_DIR}/include
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/hunspell/src)
|
||||||
|
|
||||||
|
message(STATUS "Adding HUNSPELL_LIBRARIES" ${HUNSPELL_INCLUDE_DIR})
|
||||||
|
list(APPEND CLIENT_LIBS ${HUNSPELL_LIBRARIES})
|
||||||
|
|
||||||
# Qt find package
|
# Qt find package
|
||||||
if(QT6_VER AND QT6_PATH)
|
if(QT6_VER AND QT6_PATH)
|
||||||
message(STATUS "Using custom Qt version")
|
message(STATUS "Using custom Qt version")
|
||||||
@ -667,20 +693,34 @@ add_subdirectory(3rdparty/SortFilterProxyModel)
|
|||||||
set(SFPM_OBJECTS $<TARGET_OBJECTS:SortFilterProxyModel>)
|
set(SFPM_OBJECTS $<TARGET_OBJECTS:SortFilterProxyModel>)
|
||||||
|
|
||||||
# md4c
|
# md4c
|
||||||
set(BUILD_MD2HTML_EXECUTABLE OFF CACHE BOOL "Don't build md2html executable" FORCE)
|
find_package(md4c)
|
||||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Don't build shared md4c library" FORCE)
|
if(md4c_FOUND)
|
||||||
add_subdirectory(3rdparty/md4c EXCLUDE_FROM_ALL)
|
message(STATUS "Using system-provided md4c-html")
|
||||||
list(APPEND CLIENT_LINK_DIRS ${MD4C_BINARY_DIR}/src)
|
list(APPEND CLIENT_LIBS md4c::md4c-html)
|
||||||
list(APPEND CLIENT_INCLUDE_DIRS ${MD4C_SOURCE_DIR}/src)
|
else()
|
||||||
list(APPEND CLIENT_LIBS md4c-html)
|
message("Using bundled md4c-html library")
|
||||||
|
set(BUILD_MD2HTML_EXECUTABLE OFF CACHE BOOL "Don't build md2html executable" FORCE)
|
||||||
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Don't build shared md4c library" FORCE)
|
||||||
|
add_subdirectory(3rdparty/md4c EXCLUDE_FROM_ALL)
|
||||||
|
list(APPEND CLIENT_LINK_DIRS ${MD4C_BINARY_DIR}/src)
|
||||||
|
list(APPEND CLIENT_INCLUDE_DIRS ${MD4C_SOURCE_DIR}/src)
|
||||||
|
list(APPEND CLIENT_LIBS md4c-html)
|
||||||
|
endif()
|
||||||
|
|
||||||
# tidy-html5
|
# tidy-html5
|
||||||
set(BUILD_SHARED_LIB OFF CACHE BOOL "Don't build shared tidy library" FORCE)
|
pkg_check_modules(tidy IMPORTED_TARGET tidy)
|
||||||
set(SUPPORT_CONSOLE_APP OFF CACHE BOOL "Don't build tidy console app" FORCE)
|
if(tidy_FOUND)
|
||||||
add_subdirectory(3rdparty/tidy-html5 EXCLUDE_FROM_ALL)
|
message(STATUS "Using system-provided tidy")
|
||||||
list(APPEND CLIENT_LINK_DIRS ${tidy_BINARY_DIR}/Release)
|
list(APPEND CLIENT_LIBS PkgConfig::tidy)
|
||||||
list(APPEND CLIENT_INCLUDE_DIRS ${tidy_SOURCE_DIR}/include)
|
else()
|
||||||
list(APPEND CLIENT_LIBS tidy-static)
|
message("Using bundled tidy library")
|
||||||
|
set(BUILD_SHARED_LIB OFF CACHE BOOL "Don't build shared tidy library" FORCE)
|
||||||
|
set(SUPPORT_CONSOLE_APP OFF CACHE BOOL "Don't build tidy console app" FORCE)
|
||||||
|
add_subdirectory(3rdparty/tidy-html5 EXCLUDE_FROM_ALL)
|
||||||
|
list(APPEND CLIENT_LINK_DIRS ${tidy_BINARY_DIR}/Release)
|
||||||
|
list(APPEND CLIENT_INCLUDE_DIRS ${tidy_SOURCE_DIR}/include)
|
||||||
|
list(APPEND CLIENT_LIBS tidy-static)
|
||||||
|
endif()
|
||||||
|
|
||||||
# ZXing-cpp configuration
|
# ZXing-cpp configuration
|
||||||
set(BUILD_EXAMPLES OFF CACHE BOOL "")
|
set(BUILD_EXAMPLES OFF CACHE BOOL "")
|
||||||
@ -700,9 +740,12 @@ qt_add_executable(
|
|||||||
${COMMON_SOURCES}
|
${COMMON_SOURCES}
|
||||||
${QML_RESOURCES}
|
${QML_RESOURCES}
|
||||||
${QML_RESOURCES_QML}
|
${QML_RESOURCES_QML}
|
||||||
${SFPM_OBJECTS})
|
${SFPM_OBJECTS}
|
||||||
|
src/app/spellcheckadapter.h src/app/spellcheckadapter.cpp)
|
||||||
|
|
||||||
# Make sure we can find the generated version file
|
#add_dependencies(${PROJECT_NAME} hunspell)
|
||||||
|
|
||||||
|
# Ensure the generated version file can be found.
|
||||||
add_dependencies(${PROJECT_NAME} generate_version_info)
|
add_dependencies(${PROJECT_NAME} generate_version_info)
|
||||||
|
|
||||||
foreach(MODULE ${QT_MODULES})
|
foreach(MODULE ${QT_MODULES})
|
||||||
@ -796,14 +839,19 @@ elseif (NOT APPLE)
|
|||||||
PRIVATE
|
PRIVATE
|
||||||
JAMI_INSTALL_PREFIX="${JAMI_DATA_PREFIX}")
|
JAMI_INSTALL_PREFIX="${JAMI_DATA_PREFIX}")
|
||||||
|
|
||||||
|
target_compile_definitions(
|
||||||
|
${PROJECT_NAME}
|
||||||
|
PRIVATE
|
||||||
|
HUNSPELL_INSTALL_DIR="${HUNSPELL_DICT_DIR}")
|
||||||
|
|
||||||
# Logos
|
# Logos
|
||||||
install(
|
install(
|
||||||
FILES resources/images/jami.svg
|
FILES resources/images/net.jami.Jami.svg
|
||||||
DESTINATION
|
DESTINATION
|
||||||
${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps)
|
${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps)
|
||||||
|
|
||||||
install(
|
install(
|
||||||
FILES resources/images/jami-48px.png
|
FILES resources/images/net.jami.Jami-48px.png
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps
|
||||||
RENAME jami.png)
|
RENAME jami.png)
|
||||||
|
|
||||||
@ -896,7 +944,7 @@ else()
|
|||||||
target_sources(${PROJECT_NAME} PRIVATE ${resources})
|
target_sources(${PROJECT_NAME} PRIVATE ${resources})
|
||||||
list(APPEND CLIENT_LIBS ${libs})
|
list(APPEND CLIENT_LIBS ${libs})
|
||||||
|
|
||||||
file(GLOB CONTRIB ${LIBJAMI_CONTRIB_DIR}/apple-darwin/lib/*.a)
|
file(GLOB CONTRIB ${LIBJAMI_CONTRIB_DIR}/${CONTRIB_DARWIN_FOLDER}/lib/*.a)
|
||||||
list(APPEND CLIENT_LIBS ${CONTRIB})
|
list(APPEND CLIENT_LIBS ${CONTRIB})
|
||||||
|
|
||||||
find_package(Iconv REQUIRED)
|
find_package(Iconv REQUIRED)
|
||||||
@ -981,5 +1029,6 @@ qt_finalize_executable(${PROJECT_NAME})
|
|||||||
# tests
|
# tests
|
||||||
if(BUILD_TESTING)
|
if(BUILD_TESTING)
|
||||||
message("Add Jami tests")
|
message("Add Jami tests")
|
||||||
|
enable_testing()
|
||||||
add_subdirectory(${TESTS_DIR})
|
add_subdirectory(${TESTS_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
23
INSTALL.md
@ -189,18 +189,20 @@ Only 64-bit MSVC build can be compiled.
|
|||||||
|
|
||||||
- Download [Qt (Open Source)](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5)
|
- Download [Qt (Open Source)](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5)
|
||||||
|
|
||||||
- Using the online installer, install the following Qt 6.6.1 components:
|
- Using the online installer, install the following Qt 6.8.3 components:
|
||||||
|
|
||||||
- Git 2.10.2
|
- Git 2.10.2
|
||||||
- MSVC 2019 64-bit
|
- MSVC 2022 64-bit
|
||||||
- Qt 5 Compatibility Module
|
- Extension :
|
||||||
|
- Qt WebEngine
|
||||||
- Additional Libraries
|
- Additional Libraries
|
||||||
- Qt Multimedia
|
- Qt Multimedia
|
||||||
- Qt Network Authorization
|
- Qt Network Authorization
|
||||||
- Qt WebChannel
|
- Qt WebChannel
|
||||||
- Qt WebEngine
|
|
||||||
- Qt WebSockets
|
- Qt WebSockets
|
||||||
- Qt WebView
|
- Qt WebView
|
||||||
|
- Qt 5 Compatibility Module
|
||||||
|
- Qt Positioning
|
||||||
|
|
||||||
- Download [Visual Studio](https://visualstudio.microsoft.com/) (versions 2019 or 2022). _See the SDK notes below._
|
- Download [Visual Studio](https://visualstudio.microsoft.com/) (versions 2019 or 2022). _See the SDK notes below._
|
||||||
|
|
||||||
@ -212,7 +214,7 @@ Only 64-bit MSVC build can be compiled.
|
|||||||
|
|
||||||
| | Qt Version |
|
| | Qt Version |
|
||||||
| -------------------- | ---------- |
|
| -------------------- | ---------- |
|
||||||
| Minimum requirement: | 6.6.2 |
|
| Minimum requirement: | 6.8.3 |
|
||||||
|
|
||||||
- Install [Python3](https://www.python.org/downloads/) for Windows
|
- Install [Python3](https://www.python.org/downloads/) for Windows
|
||||||
|
|
||||||
@ -238,12 +240,13 @@ Only 64-bit MSVC build can be compiled.
|
|||||||
- Using a new **Non-Elevated Command Prompt**
|
- Using a new **Non-Elevated Command Prompt**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python build.py --init --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.6.2/msvc2019_64)
|
python build.py --init --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.8.3/msvc2022_64)
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python build.py --install --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.6.2/msvc2019_64)
|
python build.py --install --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.8.3/msvc2022_64)
|
||||||
```
|
```
|
||||||
|
> **CMake** Note: The build script does not specify what CMake generator should be used. This means CMake will search the system for the appropriate generator, which might not always select the right one if, for instance, Ninja is installed. To resolve that, the CMAKE_GENERATOR environment variable can be used, set to "Visual Studio 16 2019" or "Visual Studio 19 2022" depending on the installed Visual Studio version.
|
||||||
|
|
||||||
> **SDK** Note:
|
> **SDK** Note:
|
||||||
> Jami can be build with more recent Windows SDK than the one specified in the table above. However, if your have another version than SDK 10.0.18362.0 installed, you need to identify it according to the example below. And you still need to have the required version in addition to the one you chose.
|
> Jami can be build with more recent Windows SDK than the one specified in the table above. However, if your have another version than SDK 10.0.18362.0 installed, you need to identify it according to the example below. And you still need to have the required version in addition to the one you chose.
|
||||||
@ -292,12 +295,12 @@ Once the build has finished, you should then be able to use the Visual Studio So
|
|||||||
|
|
||||||
**Set up**
|
**Set up**
|
||||||
|
|
||||||
- macOS minimum version 11.0
|
- macOS minimum version 12.0
|
||||||
- install python3
|
- install python3
|
||||||
- download xcode
|
- download xcode
|
||||||
- install Qt 6.6
|
- install Qt 6.8
|
||||||
|
|
||||||
Qt 6.6 can be installed via brew
|
Qt 6.8 can be installed via brew
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
brew install qt
|
brew install qt
|
||||||
|
|||||||
@ -4,10 +4,5 @@
|
|||||||
<?define ExeName="Jami" ?>
|
<?define ExeName="Jami" ?>
|
||||||
<?define AppName="Jami" ?>
|
<?define AppName="Jami" ?>
|
||||||
<?define Manufacturer="Savoir-Faire Linux"?>
|
<?define Manufacturer="Savoir-Faire Linux"?>
|
||||||
|
|
||||||
<?if $(var.Configuration) = Release ?>
|
|
||||||
<?define ReleaseDir="..\x64\Release"?>
|
<?define ReleaseDir="..\x64\Release"?>
|
||||||
<?else?>
|
|
||||||
<?define ReleaseDir="..\x64\Beta"?>
|
|
||||||
<?endif ?>
|
|
||||||
</Include>
|
</Include>
|
||||||
|
|||||||
@ -16,9 +16,9 @@
|
|||||||
<InstallerPlatform>x64</InstallerPlatform>
|
<InstallerPlatform>x64</InstallerPlatform>
|
||||||
<DefineSolutionProperties>false</DefineSolutionProperties>
|
<DefineSolutionProperties>false</DefineSolutionProperties>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
|
<PropertyGroup>
|
||||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
|
<IntermediateOutputPath>obj\Release\</IntermediateOutputPath>
|
||||||
<DefineConstants>AppHarvestPath=..\x64\Release;CrtHarvestPath=$(VC_CRT_Dir)</DefineConstants>
|
<DefineConstants>AppHarvestPath=..\x64\Release;CrtHarvestPath=$(VC_CRT_Dir)</DefineConstants>
|
||||||
<SuppressPdbOutput>True</SuppressPdbOutput>
|
<SuppressPdbOutput>True</SuppressPdbOutput>
|
||||||
<CompilerAdditionalOptions>
|
<CompilerAdditionalOptions>
|
||||||
@ -26,16 +26,6 @@
|
|||||||
<WixVariables>
|
<WixVariables>
|
||||||
</WixVariables>
|
</WixVariables>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Beta|x64' ">
|
|
||||||
<OutputPath>bin\$(Configuration)\</OutputPath>
|
|
||||||
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
|
|
||||||
<DefineConstants>AppHarvestPath=..\x64\Beta;CrtHarvestPath=$(VC_CRT_Dir)</DefineConstants>
|
|
||||||
<SuppressPdbOutput>True</SuppressPdbOutput>
|
|
||||||
<CompilerAdditionalOptions>
|
|
||||||
</CompilerAdditionalOptions>
|
|
||||||
<WixVariables>
|
|
||||||
</WixVariables>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Product.wxs" />
|
<Compile Include="Product.wxs" />
|
||||||
<Compile Include="AppComponents.wxs" />
|
<Compile Include="AppComponents.wxs" />
|
||||||
@ -70,7 +60,7 @@
|
|||||||
<Error Text="The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/" />
|
<Error Text="The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/" />
|
||||||
</Target>
|
</Target>
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
<HeatDirectory Directory="..\x64\$(Configuration)"
|
<HeatDirectory Directory="..\x64\Release"
|
||||||
PreprocessorVariable="var.AppHarvestPath"
|
PreprocessorVariable="var.AppHarvestPath"
|
||||||
OutputFile="AppComponents.wxs"
|
OutputFile="AppComponents.wxs"
|
||||||
ComponentGroupName="AppHeatGenerated"
|
ComponentGroupName="AppHeatGenerated"
|
||||||
|
|||||||
15
build.py
@ -112,7 +112,7 @@ ZYPPER_CLIENT_DEPENDENCIES = [
|
|||||||
'qt6-svg-devel', 'qt6-multimedia-devel', 'qt6-multimedia-imports',
|
'qt6-svg-devel', 'qt6-multimedia-devel', 'qt6-multimedia-imports',
|
||||||
'qt6-declarative-devel', 'qt6-qmlcompiler-private-devel',
|
'qt6-declarative-devel', 'qt6-qmlcompiler-private-devel',
|
||||||
'qt6-quickcontrols2-devel', 'qt6-shadertools-devel',
|
'qt6-quickcontrols2-devel', 'qt6-shadertools-devel',
|
||||||
'qrencode-devel', 'NetworkManager-devel'
|
'qrencode-devel', 'NetworkManager-devel', 'hunspell-devel', 'libhunspell-devel'
|
||||||
]
|
]
|
||||||
|
|
||||||
ZYPPER_QT_WEBENGINE = [
|
ZYPPER_QT_WEBENGINE = [
|
||||||
@ -139,7 +139,7 @@ DNF_CLIENT_DEPENDENCIES = [
|
|||||||
'libnotify-devel',
|
'libnotify-devel',
|
||||||
'qt6-qtbase-devel',
|
'qt6-qtbase-devel',
|
||||||
'qt6-qtsvg-devel', 'qt6-qtmultimedia-devel', 'qt6-qtdeclarative-devel',
|
'qt6-qtsvg-devel', 'qt6-qtmultimedia-devel', 'qt6-qtdeclarative-devel',
|
||||||
'qrencode-devel', 'NetworkManager-libnm-devel'
|
'qrencode-devel', 'NetworkManager-libnm-devel', 'hunspell-devel', 'libhunspell-devel'
|
||||||
]
|
]
|
||||||
|
|
||||||
DNF_QT_WEBENGINE = ['qt6-qtwebengine-devel']
|
DNF_QT_WEBENGINE = ['qt6-qtwebengine-devel']
|
||||||
@ -171,7 +171,7 @@ APT_CLIENT_DEPENDENCIES = [
|
|||||||
'qml6-module-qtquick-dialogs', 'qml6-module-qtquick-layouts',
|
'qml6-module-qtquick-dialogs', 'qml6-module-qtquick-layouts',
|
||||||
'qml6-module-qtquick-shapes', 'qml6-module-qtquick-window',
|
'qml6-module-qtquick-shapes', 'qml6-module-qtquick-window',
|
||||||
'qml6-module-qtquick-templates', 'qml6-module-qt-labs-platform',
|
'qml6-module-qtquick-templates', 'qml6-module-qt-labs-platform',
|
||||||
'libqrencode-dev', 'libnm-dev'
|
'libqrencode-dev', 'libnm-dev', 'hunspell', 'libhunspell-dev'
|
||||||
]
|
]
|
||||||
|
|
||||||
APT_QT_WEBENGINE = [
|
APT_QT_WEBENGINE = [
|
||||||
@ -194,7 +194,7 @@ PACMAN_CLIENT_DEPENDENCIES = [
|
|||||||
'qt6-declarative', 'qt6-5compat', 'qt6-multimedia',
|
'qt6-declarative', 'qt6-5compat', 'qt6-multimedia',
|
||||||
'qt6-networkauth', 'qt6-shadertools',
|
'qt6-networkauth', 'qt6-shadertools',
|
||||||
'qt6-svg', 'qt6-tools',
|
'qt6-svg', 'qt6-tools',
|
||||||
'qrencode', 'libnm'
|
'qrencode', 'libnm', 'hunspell'
|
||||||
]
|
]
|
||||||
|
|
||||||
PACMAN_QT_WEBENGINE = ['qt6-webengine']
|
PACMAN_QT_WEBENGINE = ['qt6-webengine']
|
||||||
@ -374,7 +374,7 @@ def run_install(args):
|
|||||||
# Prepare the build-windows.py script call
|
# Prepare the build-windows.py script call
|
||||||
build_windows = 'extras/scripts/build-windows.py'
|
build_windows = 'extras/scripts/build-windows.py'
|
||||||
# Initialize build environment
|
# Initialize build environment
|
||||||
execute_script([f'python {build_windows} --init'])
|
execute_script([f'python {build_windows} --init --qt={args.qt}'])
|
||||||
|
|
||||||
# Construct build command with options
|
# Construct build command with options
|
||||||
build_cmd = [
|
build_cmd = [
|
||||||
@ -417,6 +417,8 @@ def run_install(args):
|
|||||||
install_args += ('-D', args.extra_cmake_flags)
|
install_args += ('-D', args.extra_cmake_flags)
|
||||||
if args.enable_crash_reports:
|
if args.enable_crash_reports:
|
||||||
install_args.append('-C')
|
install_args.append('-C')
|
||||||
|
if args.ignore_system_libs:
|
||||||
|
install_args.append('-i')
|
||||||
|
|
||||||
if args.distribution == OSX_DISTRIBUTION_NAME:
|
if args.distribution == OSX_DISTRIBUTION_NAME:
|
||||||
# The `universal_newlines` parameter has been renamed to `text` in
|
# The `universal_newlines` parameter has been renamed to `text` in
|
||||||
@ -769,6 +771,9 @@ def parse_args():
|
|||||||
ap.add_argument('--enable-crash-reports',
|
ap.add_argument('--enable-crash-reports',
|
||||||
action='store_true', default=False,
|
action='store_true', default=False,
|
||||||
help='Enable crash reporting')
|
help='Enable crash reporting')
|
||||||
|
ap.add_argument('--ignore_system_libs', dest='ignore_system_libs',
|
||||||
|
default=False, action='store_true',
|
||||||
|
help='Build contrib packages regardless of system detection')
|
||||||
|
|
||||||
dist = choose_distribution()
|
dist = choose_distribution()
|
||||||
|
|
||||||
|
|||||||
2
daemon
@ -17,32 +17,6 @@
|
|||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
include(CMakeParseArguments)
|
include(CMakeParseArguments)
|
||||||
|
|
||||||
# Helper function to check if we're on a distribution that requires us
|
|
||||||
# to apply a patch in order for qmsetup to use the right package directory
|
|
||||||
function(check_distro_needs_qmsetup_patch DISTRO_NEEDS_QMSETUP_PATCH)
|
|
||||||
set(${DISTRO_NEEDS_QMSETUP_PATCH} FALSE PARENT_SCOPE)
|
|
||||||
# Check for the existence of /etc/os-release
|
|
||||||
if(EXISTS "/etc/os-release")
|
|
||||||
# Read the content of the file
|
|
||||||
file(READ "/etc/os-release" OS_RELEASE_CONTENT)
|
|
||||||
# Check if the distribution is Fedora or Red Hat-based
|
|
||||||
string(REGEX MATCH "ID=fedora|ID_LIKE=\"rhel fedora\"|ID_LIKE=\"rhel centos fedora\"" RED_HAT_BASED "${OS_RELEASE_CONTENT}")
|
|
||||||
# Check if the distribution is openSUSE Leap
|
|
||||||
string(REGEX MATCH "ID=\"opensuse-leap\"" OPENSUSE_LEAP "${OS_RELEASE_CONTENT}")
|
|
||||||
if(RED_HAT_BASED)
|
|
||||||
set(${DISTRO_NEEDS_QMSETUP_PATCH} TRUE PARENT_SCOPE)
|
|
||||||
message(STATUS "Running on a Red Hat-based distribution (Fedora, RHEL, CentOS, etc.)")
|
|
||||||
elseif(OPENSUSE_LEAP)
|
|
||||||
set(${DISTRO_NEEDS_QMSETUP_PATCH} TRUE PARENT_SCOPE)
|
|
||||||
message(STATUS "Running on openSUSE Leap")
|
|
||||||
else()
|
|
||||||
message(STATUS "Distribution is not openSUSE Leap or Red Hat-based")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(STATUS "Cannot determine the distribution type: /etc/os-release not found")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Helper function to add external content with patches and options.
|
# Helper function to add external content with patches and options.
|
||||||
# Parameters:
|
# Parameters:
|
||||||
# TARGET: Name of the target to create
|
# TARGET: Name of the target to create
|
||||||
|
|||||||
@ -24,6 +24,7 @@ set(CMAKE_CURRENT_BINARY_DIR ${APP_BINARY_DIR})
|
|||||||
# Generate the version string for the application and core
|
# Generate the version string for the application and core
|
||||||
configure_version_string(${APP_SOURCE_DIR} APP_VERSION_STRING)
|
configure_version_string(${APP_SOURCE_DIR} APP_VERSION_STRING)
|
||||||
configure_version_string(${CORE_SOURCE_DIR} CORE_VERSION_STRING)
|
configure_version_string(${CORE_SOURCE_DIR} CORE_VERSION_STRING)
|
||||||
|
set(BUILD_VERSION_STRING ${BUILD_VERSION})
|
||||||
|
|
||||||
# Get output file names with the .in extension removed
|
# Get output file names with the .in extension removed
|
||||||
get_filename_component(VERSION_CPP_FILENAME ${CPP_INT_FILE} NAME_WE)
|
get_filename_component(VERSION_CPP_FILENAME ${CPP_INT_FILE} NAME_WE)
|
||||||
|
|||||||
@ -16,30 +16,19 @@
|
|||||||
|
|
||||||
# Once done, this find module will set:
|
# Once done, this find module will set:
|
||||||
#
|
#
|
||||||
# LIBJAMI_INCLUDE_DIRS - libjami include directories
|
# LIBJAMI_INCLUDE_DIR - libjami include directory
|
||||||
# LIBJAMI_FOUND - whether it was able to find the include directories
|
# LIBJAMI_FOUND - whether it was able to find the include directories
|
||||||
# LIBJAMI_LIB - path to libjami or libring library
|
# LIBJAMI_LIB - path to libjami or libring library
|
||||||
|
|
||||||
set(LIBJAMI_FOUND true)
|
set(LIBJAMI_FOUND true)
|
||||||
|
|
||||||
if(WITH_DAEMON_SUBMODULE)
|
if(WITH_DAEMON_SUBMODULE)
|
||||||
set(LIBJAMI_INCLUDE_DIRS ${DAEMON_DIR}/src/jami)
|
set(LIBJAMI_INCLUDE_DIR ${DAEMON_DIR}/src/jami)
|
||||||
else()
|
else()
|
||||||
if(EXISTS ${LIBJAMI_INCLUDE_DIR}/jami.h)
|
find_path(LIBJAMI_INCLUDE_DIR jami.h PATH_SUFFIXES jami)
|
||||||
set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_INCLUDE_DIR})
|
if(NOT LIBJAMI_INCLUDE_DIR)
|
||||||
elseif(EXISTS ${LIBJAMI_BUILD_DIR}/jami/jami.h)
|
|
||||||
set(LIBJAMI_INCLUDE_DIRS ${LIBJAMI_BUILD_DIR}/jami)
|
|
||||||
elseif(EXISTS ${RING_INCLUDE_DIR}/jami.h)
|
|
||||||
set(LIBJAMI_INCLUDE_DIRS ${RING_INCLUDE_DIR})
|
|
||||||
elseif(EXISTS ${RING_BUILD_DIR}/jami/jami.h)
|
|
||||||
set(LIBJAMI_INCLUDE_DIRS ${RING_BUILD_DIR}/jami)
|
|
||||||
elseif(EXISTS ${CMAKE_INSTALL_PREFIX}/include/jami/jami.h)
|
|
||||||
set(LIBJAMI_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/jami)
|
|
||||||
elseif(EXISTS ${CMAKE_INSTALL_PREFIX}/daemon/include/jami/jami.h)
|
|
||||||
set(LIBJAMI_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/daemon/include/jami)
|
|
||||||
else()
|
|
||||||
message(STATUS "Jami daemon headers not found!
|
message(STATUS "Jami daemon headers not found!
|
||||||
Set -DLIBJAMI_BUILD_DIR or -DCMAKE_INSTALL_PREFIX")
|
To build using the daemon git submodule, set -DWITH_DAEMON_SUBMODULE")
|
||||||
set(LIBJAMI_FOUND false)
|
set(LIBJAMI_FOUND false)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@ -52,7 +41,6 @@ set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib;.so;.dll")
|
|||||||
set(LIBJAMI_NAMES
|
set(LIBJAMI_NAMES
|
||||||
jami-core
|
jami-core
|
||||||
jami
|
jami
|
||||||
ring
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WITH_DAEMON_SUBMODULE)
|
if(WITH_DAEMON_SUBMODULE)
|
||||||
@ -121,5 +109,5 @@ endif()
|
|||||||
# Restore the original value of CMAKE_FIND_LIBRARY_SUFFIXES.
|
# Restore the original value of CMAKE_FIND_LIBRARY_SUFFIXES.
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_orig})
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_orig})
|
||||||
|
|
||||||
message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIRS})
|
message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIR})
|
||||||
message(STATUS "Jami daemon library is at " ${LIBJAMI_LIB})
|
message(STATUS "Jami daemon library is at " ${LIBJAMI_LIB})
|
||||||
|
|||||||
@ -4,11 +4,24 @@ ENV DEBIAN_FRONTEND noninteractive
|
|||||||
ENV QT_QUICK_BACKEND software
|
ENV QT_QUICK_BACKEND software
|
||||||
ENV QT_QPA_PLATFORM offscreen
|
ENV QT_QPA_PLATFORM offscreen
|
||||||
|
|
||||||
RUN apt-get clean
|
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y devscripts equivs
|
apt-get install -y --no-install-recommends ca-certificates && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Use only the custom Savoir-faire Linux Ubuntu mirror
|
||||||
|
RUN rm -f /etc/apt/sources.list /etc/apt/sources.list.d/* && \
|
||||||
|
echo "deb http://gpl.savoirfairelinux.net/pub/mirrors/ubuntu jammy main restricted universe multiverse" > /etc/apt/sources.list && \
|
||||||
|
echo "deb http://gpl.savoirfairelinux.net/pub/mirrors/ubuntu jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb http://gpl.savoirfairelinux.net/pub/mirrors/ubuntu jammy-security main restricted universe multiverse" >> /etc/apt/sources.list
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y \
|
||||||
|
devscripts \
|
||||||
|
equivs \
|
||||||
|
gnupg \
|
||||||
|
dirmngr \
|
||||||
|
curl
|
||||||
|
|
||||||
RUN apt install gnupg dirmngr ca-certificates curl --no-install-recommends
|
|
||||||
RUN curl -s https://dl.jami.net/public-key.gpg | tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
|
RUN curl -s https://dl.jami.net/public-key.gpg | tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
|
||||||
RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/internal/ubuntu_22.04/ jami main' > /etc/apt/sources.list.d/jami.list"
|
RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/internal/ubuntu_22.04/ jami main' > /etc/apt/sources.list.d/jami.list"
|
||||||
RUN apt-get update && apt-get install libqt-jami -y
|
RUN apt-get update && apt-get install libqt-jami -y
|
||||||
@ -69,7 +82,8 @@ RUN apt-get install -y pandoc \
|
|||||||
libcppunit-dev \
|
libcppunit-dev \
|
||||||
googletest \
|
googletest \
|
||||||
libgtest-dev \
|
libgtest-dev \
|
||||||
wget
|
wget && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install a recent version of CMake
|
# Install a recent version of CMake
|
||||||
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
|
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
|
||||||
|
|||||||
@ -85,7 +85,7 @@
|
|||||||
<id>net.jami.daemon</id>
|
<id>net.jami.daemon</id>
|
||||||
</requires>
|
</requires>
|
||||||
<launchable type="desktop-id">net.jami.Jami.desktop</launchable>
|
<launchable type="desktop-id">net.jami.Jami.desktop</launchable>
|
||||||
<icon type="stock">jami</icon>
|
<icon type="stock">net.jami.Jami</icon>
|
||||||
<url type="homepage">https://jami.net/</url>
|
<url type="homepage">https://jami.net/</url>
|
||||||
<url type="bugtracker">https://git.jami.net/savoirfairelinux/jami-client-qt/issues</url>
|
<url type="bugtracker">https://git.jami.net/savoirfairelinux/jami-client-qt/issues</url>
|
||||||
<url type="faq">https://docs.jami.net/user/faq.html</url>
|
<url type="faq">https://docs.jami.net/user/faq.html</url>
|
||||||
|
|||||||
@ -1,14 +1,83 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Jami
|
Name=Jami
|
||||||
GenericName=Jami
|
GenericName=Jami
|
||||||
Comment=Privacy-oriented voice, video, chat, and conference platform
|
Comment=Share, freely and privately
|
||||||
Comment[hu]=Adatvédelem-orientált hang-, video-, csevegés- és konferenciaplatform
|
Comment[ab]=Ацеиҩшара, хақәиҭла, хала
|
||||||
Comment[ru]=Jami — приложение для защищённой связи с распределённой архитектурой
|
Comment[af]=Deel, vrylik en privaat
|
||||||
|
Comment[am]=በነጻ እና በግል ያካፍሉ።
|
||||||
|
Comment[ar]=شارك بحرية وبشكل خاص
|
||||||
|
Comment[az]=Sərbəst və gizli şəkildə paylaşın
|
||||||
|
Comment[be]=Падзяліцеся свабодна і прыватна
|
||||||
|
Comment[bg]=Споделяйте, свободно и частно
|
||||||
|
Comment[bn]=শেয়ার করুন, অবাধে এবং গোপনে
|
||||||
|
Comment[ca]=Comparteix, lliurement i de forma privada
|
||||||
|
Comment[cs]=Sdílejte svobodně a soukromě
|
||||||
|
Comment[da]=Del, frit og privat
|
||||||
|
Comment[de]=Teilen, frei und privat
|
||||||
|
Comment[el]=Κοινοποιήστε, ελεύθερα και ιδιωτικά
|
||||||
|
Comment[eo]=Kunhavigu, libere kaj private
|
||||||
|
Comment[es]=Comparte, libre y privadamente
|
||||||
|
Comment[et]=Jaga, vabalt ja privaatselt
|
||||||
|
Comment[fa]=به اشتراک بگذارید، آزادانه و خصوصی
|
||||||
|
Comment[fi]=Jaa, vapaasti ja yksityisesti
|
||||||
|
Comment[fil]=Ibahagi, libre at pribado
|
||||||
|
Comment[fr]=Partagez, librement, gratuitement et en toute confidentialité
|
||||||
|
Comment[gl]=Comparte, de xeito libre e privado
|
||||||
|
Comment[he]=שתפו, באופן חופשי ופרטי
|
||||||
|
Comment[hi]=स्वतंत्र रूप से और निजी तौर पर साझा करें
|
||||||
|
Comment[hr]=Dijelite, slobodno i privatno
|
||||||
|
Comment[hu]=Megosztás, szabadon és bizalmasan
|
||||||
|
Comment[hy]=Տարածեք, ազատ և մասնավոր
|
||||||
|
Comment[id]=Berbagi, secara bebas dan pribadi
|
||||||
|
Comment[is]=Deildu, frjálslega og einslega
|
||||||
|
Comment[it]=Condividere, liberamente e privatamente
|
||||||
|
Comment[ja]=自由に、プライベートに共有
|
||||||
|
Comment[ka]=გააზიარეთ, თავისუფლად და პირადად
|
||||||
|
Comment[km]=ចែករំលែកដោយសេរី និងឯកជន
|
||||||
|
Comment[kn]=ಮುಕ್ತವಾಗಿ ಮತ್ತು ಖಾಸಗಿಯಾಗಿ ಹಂಚಿಕೊಳ್ಳಿ
|
||||||
|
Comment[ko]=자유롭고 비공개적으로 공유하세요
|
||||||
|
Comment[ky]=Бөлүшүү, эркин жана купуя
|
||||||
|
Comment[la]=Communicantes, libere et privatim
|
||||||
|
Comment[lo]=ແບ່ງປັນ, ຢ່າງເສລີແລະເປັນສ່ວນຕົວ
|
||||||
|
Comment[lt]=Dalintis, laisvai ir privačiai
|
||||||
|
Comment[lv]=Kopīgojiet, brīvi un privāti
|
||||||
|
Comment[mk]=Споделете, слободно и приватно
|
||||||
|
Comment[ml]=സ്വതന്ത്രമായും സ്വകാര്യമായും പങ്കിടുക
|
||||||
|
Comment[mn]=Чөлөөт, хувийн байдлаар хуваалцах
|
||||||
|
Comment[mr]=सामायिक करा, मुक्तपणे आणि खाजगीरित्या
|
||||||
|
Comment[ms]=Kongsi, secara bebas dan peribadi
|
||||||
|
Comment[my]=လွတ်လပ်စွာ သီးသန့်မျှဝေပါ။
|
||||||
|
Comment[ne]=स्वतन्त्र र गोप्य रूपमा सेयर गर्नुहोस्
|
||||||
|
Comment[nl]=Deel, vrij en privé
|
||||||
|
Comment[no]=Del, fritt og privat
|
||||||
|
Comment[pl]=Udostępniaj swobodnie i prywatnie
|
||||||
|
Comment[pt_BR]=Compartilhe, livre e privadamente
|
||||||
|
Comment[pt_PT]=Partilhe, livre e privadamente
|
||||||
|
Comment[ro]=Distribuie, în mod liber și privat
|
||||||
|
Comment[ru]=Делитесь, свободно и конфиденциально
|
||||||
|
Comment[si]=නිදහසේ සහ පෞද්ගලිකව බෙදා ගන්න
|
||||||
|
Comment[sk]=Zdieľajte, slobodne a súkromne
|
||||||
|
Comment[sl]=Delite brezplačno in zasebno
|
||||||
|
Comment[sq]=Shpërndaje, lirisht dhe privatisht
|
||||||
|
Comment[sr]=Делите, слободно и приватно
|
||||||
|
Comment[sv]=Dela, fritt och privat
|
||||||
|
Comment[sw]=Shiriki, kwa uhuru na kwa faragha
|
||||||
|
Comment[ta]=பகிரவும், சுதந்திரமாகவும் தனிப்பட்ட முறையிலும்
|
||||||
|
Comment[te]=ఉచితంగా మరియు ప్రైవేట్గా షేర్ చేయండి
|
||||||
|
Comment[th]=แบ่งปันได้อย่างอิสระและเป็นส่วนตัว
|
||||||
|
Comment[tl]=Ibahagi, libre at pribado
|
||||||
|
Comment[tr]=Özgürce ve özel olarak paylaşın
|
||||||
|
Comment[uk]=Поділіться вільно та приватно
|
||||||
|
Comment[vi]=Chia sẻ, tự do và riêng tư
|
||||||
|
Comment[zh_CN]=自由且私密地分享
|
||||||
|
Comment[zh_HK]=自由且私密地分享
|
||||||
|
Comment[zh_TW]=自由且私密地分享
|
||||||
|
Comment[zu]=Yabelana, ngokukhululekile nangasese
|
||||||
Exec=jami %u
|
Exec=jami %u
|
||||||
Icon=jami
|
Icon=net.jami.Jami
|
||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Categories=Network;Telephony;
|
Categories=Chat;FileTransfer;InstantMessaging;Network;P2P;Telephony;VideoConference;
|
||||||
Keywords=Qt;chat;talk;im;message;voip;
|
Keywords=Qt;chat;talk;im;message;voip;
|
||||||
MimeType=x-scheme-handler/jami;
|
MimeType=x-scheme-handler/jami;
|
||||||
|
|||||||
7
extras/packaging/gnu-linux/Jenkinsfile
vendored
@ -34,7 +34,8 @@ def SUBMODULES = ['daemon',
|
|||||||
'3rdparty/SortFilterProxyModel',
|
'3rdparty/SortFilterProxyModel',
|
||||||
'3rdparty/md4c',
|
'3rdparty/md4c',
|
||||||
'3rdparty/tidy-html5',
|
'3rdparty/tidy-html5',
|
||||||
'3rdparty/zxing-cpp']
|
'3rdparty/zxing-cpp',
|
||||||
|
'3rdparty/hunspell']
|
||||||
def TARGETS = [:]
|
def TARGETS = [:]
|
||||||
def REMOTE_HOST = env.SSH_HOST_DL_RING_CX
|
def REMOTE_HOST = env.SSH_HOST_DL_RING_CX
|
||||||
def REMOTE_BASE_DIR = '/srv/repository/ring'
|
def REMOTE_BASE_DIR = '/srv/repository/ring'
|
||||||
@ -84,6 +85,10 @@ pipeline {
|
|||||||
|
|
||||||
environment {
|
environment {
|
||||||
TARBALLS = '/var/cache/jami' // set the cache directory
|
TARBALLS = '/var/cache/jami' // set the cache directory
|
||||||
|
BUILD_VERSION = sh(
|
||||||
|
returnStdout: true,
|
||||||
|
script: 'date +"%Y%m%d%H%M"'
|
||||||
|
).trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
|
|||||||
@ -44,10 +44,10 @@ DEBIAN_DSC_FILENAME := jami_$(DEBIAN_VERSION).dsc
|
|||||||
|
|
||||||
# Qt versions
|
# Qt versions
|
||||||
QT_MAJOR := 6
|
QT_MAJOR := 6
|
||||||
QT_MINOR := 6
|
QT_MINOR := 8
|
||||||
QT_PATCH := 1
|
QT_PATCH := 3
|
||||||
QT_TARBALL_CHECKSUM := dd3668f65645fe270bc615d748bd4dc048bd17b9dc297025106e6ecc419ab95d
|
QT_TARBALL_CHECKSUM := cdd3a69967208276bb01af7ace7dba0ba53e679f886a4cbe624225c60fb73f2c
|
||||||
DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-1
|
DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-0
|
||||||
DEBIAN_QT_DSC_FILENAME := libqt-jami_$(DEBIAN_QT_VERSION).dsc
|
DEBIAN_QT_DSC_FILENAME := libqt-jami_$(DEBIAN_QT_VERSION).dsc
|
||||||
QT_JAMI_PREFIX := /usr/lib/libqt-jami
|
QT_JAMI_PREFIX := /usr/lib/libqt-jami
|
||||||
|
|
||||||
@ -128,7 +128,8 @@ $(RELEASE_TARBALL_FILENAME): tarballs.manifest
|
|||||||
./3rdparty/SortFilterProxyModel \
|
./3rdparty/SortFilterProxyModel \
|
||||||
./3rdparty/md4c \
|
./3rdparty/md4c \
|
||||||
./3rdparty/tidy-html5 \
|
./3rdparty/tidy-html5 \
|
||||||
./3rdparty/zxing-cpp; do \
|
./3rdparty/zxing-cpp \
|
||||||
|
./3rdparty/hunspell; do \
|
||||||
(cd "$$m" && git archive --prefix "$$m/" HEAD \
|
(cd "$$m" && git archive --prefix "$$m/" HEAD \
|
||||||
| tar xf - -C $(TMPDIR)/$(RELEASE_DIRNAME)); \
|
| tar xf - -C $(TMPDIR)/$(RELEASE_DIRNAME)); \
|
||||||
done
|
done
|
||||||
@ -163,18 +164,14 @@ DISTRIBUTIONS := \
|
|||||||
debian_12 \
|
debian_12 \
|
||||||
debian_testing \
|
debian_testing \
|
||||||
debian_unstable \
|
debian_unstable \
|
||||||
ubuntu_20.04 \
|
|
||||||
ubuntu_22.04 \
|
ubuntu_22.04 \
|
||||||
ubuntu_24.04 \
|
ubuntu_24.04 \
|
||||||
ubuntu_24.10 \
|
ubuntu_25.04 \
|
||||||
fedora_37 \
|
|
||||||
fedora_38 \
|
|
||||||
fedora_39 \
|
|
||||||
fedora_40 \
|
|
||||||
fedora_41 \
|
fedora_41 \
|
||||||
|
fedora_42 \
|
||||||
alma_9 \
|
alma_9 \
|
||||||
opensuse-leap_15.4 \
|
alma_10 \
|
||||||
opensuse-leap_15.5 \
|
opensuse-leap_15.6 \
|
||||||
snap
|
snap
|
||||||
|
|
||||||
IS_SHELL_INTERACTIVE := $(shell [ -t 0 ] && echo yes)
|
IS_SHELL_INTERACTIVE := $(shell [ -t 0 ] && echo yes)
|
||||||
@ -193,6 +190,7 @@ $(1)-docker-image-name := jami-packaging-$(1)
|
|||||||
$(1)-docker-image-file := .docker-image-$$($(1)-docker-image-name)
|
$(1)-docker-image-file := .docker-image-$$($(1)-docker-image-name)
|
||||||
$(1)-docker-run-command := docker run \
|
$(1)-docker-run-command := docker run \
|
||||||
--rm --privileged --security-opt apparmor=docker-default \
|
--rm --privileged --security-opt apparmor=docker-default \
|
||||||
|
-e BUILD_VERSION=${BUILD_VERSION} \
|
||||||
-e RELEASE_VERSION="$(RELEASE_VERSION)" \
|
-e RELEASE_VERSION="$(RELEASE_VERSION)" \
|
||||||
-e RELEASE_DIRNAME="$(RELEASE_DIRNAME)" \
|
-e RELEASE_DIRNAME="$(RELEASE_DIRNAME)" \
|
||||||
-e RELEASE_TARBALL_FILENAME="$(RELEASE_TARBALL_FILENAME)" \
|
-e RELEASE_TARBALL_FILENAME="$(RELEASE_TARBALL_FILENAME)" \
|
||||||
@ -252,7 +250,7 @@ define guix-pack-command
|
|||||||
guix pack -C xz -f $(1) -m $(CURDIR)/extras/packaging/gnu-linux/guix/guix-pack-manifest.scm -v3 \
|
guix pack -C xz -f $(1) -m $(CURDIR)/extras/packaging/gnu-linux/guix/guix-pack-manifest.scm -v3 \
|
||||||
-S /usr/bin/jami=bin/jami \
|
-S /usr/bin/jami=bin/jami \
|
||||||
-S /usr/share/applications/net.jami.Jami.desktop=share/applications/net.jami.Jami.desktop \
|
-S /usr/share/applications/net.jami.Jami.desktop=share/applications/net.jami.Jami.desktop \
|
||||||
-S /usr/share/icons/hicolor/scalable/apps/jami.svg=share/icons/hicolor/scalable/apps/jami.svg \
|
-S /usr/share/icons/hicolor/scalable/apps/net.jami.Jami.svg=share/icons/hicolor/scalable/apps/net.jami.Jami.svg \
|
||||||
-S /usr/share/icons/hicolor/48x48/apps/jami.png=share/icons/hicolor/48x48/apps/jami.png \
|
-S /usr/share/icons/hicolor/48x48/apps/jami.png=share/icons/hicolor/48x48/apps/jami.png \
|
||||||
-S /usr/share/metainfo/net.jami.Jami.metainfo.xml=share/metainfo/net.jami.Jami.metainfo.xml \
|
-S /usr/share/metainfo/net.jami.Jami.metainfo.xml=share/metainfo/net.jami.Jami.metainfo.xml \
|
||||||
-S /usr/share/swcatalog/xml/jami.xml=share/swcatalog/xml/jami.xml \
|
-S /usr/share/swcatalog/xml/jami.xml=share/swcatalog/xml/jami.xml \
|
||||||
|
|||||||
@ -1,106 +1,94 @@
|
|||||||
FROM fedora:37
|
FROM almalinux:10
|
||||||
|
RUN dnf clean all && dnf update -y
|
||||||
RUN dnf clean all
|
RUN dnf install -y epel-release
|
||||||
RUN dnf update -y
|
RUN dnf install -y 'dnf-command(config-manager)'
|
||||||
|
RUN dnf config-manager --set-enabled crb
|
||||||
|
RUN dnf config-manager --set-enabled appstream
|
||||||
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
||||||
dnf install -y mock
|
dnf install -y mock
|
||||||
|
RUN yum install -y xorg-x11-xauth
|
||||||
RUN dnf groupinstall -y "X Software Development"
|
|
||||||
|
|
||||||
RUN dnf install -y \
|
RUN dnf install -y \
|
||||||
git \
|
alsa-lib-devel \
|
||||||
rpm-build \
|
astyle \
|
||||||
tar \
|
|
||||||
make \
|
|
||||||
autoconf \
|
autoconf \
|
||||||
automake \
|
automake \
|
||||||
nasm \
|
bison \
|
||||||
speexdsp-devel \
|
check \
|
||||||
pulseaudio-libs-devel \
|
chrpath \
|
||||||
libcanberra-devel \
|
clang15-devel \
|
||||||
libcurl-devel \
|
cmake \
|
||||||
libtool \
|
cryptopp-devel \
|
||||||
mesa-libgbm-devel \
|
cups-devel \
|
||||||
mesa-dri-drivers \
|
|
||||||
dbus-devel \
|
dbus-devel \
|
||||||
expat-devel \
|
expat-devel \
|
||||||
pcre-devel \
|
|
||||||
yaml-cpp-devel \
|
|
||||||
libXext-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
yasm \
|
|
||||||
python2.7 \
|
|
||||||
python3-html5lib \
|
|
||||||
speex-devel \
|
|
||||||
gsm-devel \
|
|
||||||
chrpath \
|
|
||||||
check \
|
|
||||||
astyle \
|
|
||||||
uuid-c++-devel \
|
|
||||||
gettext-devel \
|
|
||||||
gcc-c++ \
|
|
||||||
which \
|
|
||||||
alsa-lib-devel \
|
|
||||||
systemd-devel \
|
|
||||||
libuuid-devel \
|
|
||||||
uuid-devel \
|
|
||||||
gnutls-devel \
|
|
||||||
nettle-devel \
|
|
||||||
opus-devel \
|
|
||||||
patch \
|
|
||||||
jsoncpp-devel \
|
|
||||||
libnatpmp-devel \
|
|
||||||
webkitgtk4-devel \
|
|
||||||
cryptopp-devel \
|
|
||||||
libva-devel \
|
|
||||||
libvdpau-devel \
|
|
||||||
msgpack-devel \
|
|
||||||
NetworkManager-libnm-devel \
|
|
||||||
openssl-devel \
|
|
||||||
clutter-devel \
|
|
||||||
clutter-gtk-devel \
|
|
||||||
libappindicator-gtk3-devel \
|
|
||||||
libnotify-devel \
|
|
||||||
libupnp-devel \
|
|
||||||
qrencode-devel \
|
|
||||||
libargon2-devel \
|
|
||||||
libsndfile-devel \
|
|
||||||
libdrm \
|
|
||||||
gperf \
|
|
||||||
bison \
|
|
||||||
clang \
|
|
||||||
clang-devel \
|
|
||||||
llvm-devel \
|
|
||||||
nodejs \
|
|
||||||
flex \
|
flex \
|
||||||
|
fmt-devel \
|
||||||
|
gcc-c++ \
|
||||||
|
gettext-devel \
|
||||||
|
git \
|
||||||
|
gnutls-devel \
|
||||||
|
gperf \
|
||||||
|
gsm-devel \
|
||||||
gstreamer1 gstreamer1-devel \
|
gstreamer1 gstreamer1-devel \
|
||||||
|
gstreamer1-plugins-bad-free-devel \
|
||||||
gstreamer1-plugins-base-devel \
|
gstreamer1-plugins-base-devel \
|
||||||
gstreamer1-plugins-good \
|
gstreamer1-plugins-good \
|
||||||
gstreamer1-plugins-bad-free-devel \
|
jsoncpp-devel \
|
||||||
nss-devel \
|
libX11-devel \
|
||||||
|
libXext-devel \
|
||||||
|
libXfixes-devel \
|
||||||
|
libXrender-devel \
|
||||||
|
libappindicator-gtk3-devel \
|
||||||
|
libargon2-devel \
|
||||||
|
libcanberra-devel \
|
||||||
|
libcurl-devel \
|
||||||
|
libdrm \
|
||||||
|
libnatpmp-devel \
|
||||||
|
libnotify \
|
||||||
|
libnotify-devel \
|
||||||
|
libsndfile-devel \
|
||||||
|
libstdc++-static \
|
||||||
|
libtool \
|
||||||
|
libupnp-devel \
|
||||||
|
libuuid-devel \
|
||||||
|
libva-devel \
|
||||||
|
libvdpau-devel \
|
||||||
libxcb* \
|
libxcb* \
|
||||||
libxkb* \
|
libxkb* \
|
||||||
libX11-devel \
|
|
||||||
vulkan-devel \
|
|
||||||
libXrender-devel \
|
|
||||||
xcb-util-* \
|
|
||||||
xz \
|
|
||||||
xkeyboard-config \
|
|
||||||
libnotify \
|
|
||||||
wget \
|
|
||||||
libstdc++-static \
|
|
||||||
sqlite-devel \
|
|
||||||
perl-generators \
|
|
||||||
perl-English \
|
|
||||||
libxshmfence-devel \
|
libxshmfence-devel \
|
||||||
|
llvm15-devel \
|
||||||
|
make \
|
||||||
|
mesa-dri-drivers \
|
||||||
|
mesa-libgbm-devel \
|
||||||
|
msgpack-devel \
|
||||||
|
nasm \
|
||||||
|
nettle-devel \
|
||||||
|
NetworkManager-libnm-devel \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
clang \
|
nodejs \
|
||||||
cmake \
|
nss-devel \
|
||||||
fmt-devel \
|
openssl-devel \
|
||||||
|
opus-devel \
|
||||||
|
pcre2-devel \
|
||||||
|
perl-English \
|
||||||
|
perl-generators \
|
||||||
pipewire-devel \
|
pipewire-devel \
|
||||||
cups-devel #Chromium for Qt
|
pulseaudio-libs-devel \
|
||||||
|
python3-html5lib \
|
||||||
|
qrencode-devel \
|
||||||
|
speex-devel \
|
||||||
|
speexdsp-devel \
|
||||||
|
sqlite-devel \
|
||||||
|
systemd-devel \
|
||||||
|
uuid-devel \
|
||||||
|
vulkan-devel \
|
||||||
|
webkitgtk6.0-devel \
|
||||||
|
wget \
|
||||||
|
which \
|
||||||
|
xcb-util-* \
|
||||||
|
xkeyboard-config \
|
||||||
|
yaml-cpp-devel \
|
||||||
|
yasm
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
||||||
|
CMD ["/opt/build-package-rpm.sh"]
|
||||||
CMD ["/opt/build-package-rpm.sh"]
|
|
||||||
@ -70,9 +70,8 @@ RUN dnf install -y \
|
|||||||
libdrm \
|
libdrm \
|
||||||
gperf \
|
gperf \
|
||||||
bison \
|
bison \
|
||||||
clang \
|
clang16-devel \
|
||||||
clang-devel \
|
llvm16-devel \
|
||||||
llvm-devel \
|
|
||||||
nodejs \
|
nodejs \
|
||||||
flex \
|
flex \
|
||||||
gstreamer1 gstreamer1-devel \
|
gstreamer1 gstreamer1-devel \
|
||||||
@ -96,11 +95,11 @@ RUN dnf install -y \
|
|||||||
perl-English \
|
perl-English \
|
||||||
libxshmfence-devel \
|
libxshmfence-devel \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
clang \
|
|
||||||
cmake \
|
cmake \
|
||||||
fmt-devel \
|
fmt-devel \
|
||||||
python3-html5lib \
|
python3-html5lib \
|
||||||
cups-devel \
|
cups-devel \
|
||||||
pipewire-devel
|
pipewire-devel
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
||||||
CMD ["/opt/build-package-rpm.sh"]
|
CMD ["/opt/build-package-rpm.sh"]
|
||||||
@ -27,6 +27,7 @@ RUN /opt/prebuild-package-debian.sh jami-deps
|
|||||||
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
|
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
|
||||||
RUN /opt/install-cmake.sh
|
RUN /opt/install-cmake.sh
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||||
|
|
||||||
# Setting this variable so that FFmpeg gets built without pipewiregrab
|
# Setting this variable so that FFmpeg gets built without pipewiregrab
|
||||||
|
|||||||
@ -18,5 +18,6 @@ RUN /opt/prebuild-package-debian.sh qt-deps
|
|||||||
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
||||||
RUN /opt/prebuild-package-debian.sh jami-deps
|
RUN /opt/prebuild-package-debian.sh jami-deps
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||||
CMD ["/opt/build-package-debian.sh"]
|
CMD ["/opt/build-package-debian.sh"]
|
||||||
|
|||||||
@ -11,14 +11,6 @@ RUN apt-get update --allow-releaseinfo-change && \
|
|||||||
wget \
|
wget \
|
||||||
nasm
|
nasm
|
||||||
|
|
||||||
# As of January 2024, the default compiler on Debian testing is GCC 13.2.0, which
|
|
||||||
# is unable to build one of Qt 6.6.1's dependencies, see:
|
|
||||||
# https://github.com/qt/qtquick3d-assimp/commit/253f8bfa621a9fa6cd2c36291cdaa8c60c99322c
|
|
||||||
# The linked commit above fixes the problem and is included in more recent versions of Qt.
|
|
||||||
# For now, we use GCC 12 as a temporary workaround:
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/install-gcc-debian.sh /opt/install-gcc-debian.sh
|
|
||||||
RUN /opt/install-gcc-debian.sh 12
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
||||||
|
|
||||||
COPY extras/packaging/gnu-linux/rules/debian-qt/control /tmp/builddeps/debian/control
|
COPY extras/packaging/gnu-linux/rules/debian-qt/control /tmp/builddeps/debian/control
|
||||||
@ -29,5 +21,6 @@ RUN /opt/prebuild-package-debian.sh jami-deps
|
|||||||
|
|
||||||
RUN apt-get remove -y libre2-dev libre2-11
|
RUN apt-get remove -y libre2-dev libre2-11
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||||
CMD ["/opt/build-package-debian.sh"]
|
CMD ["/opt/build-package-debian.sh"]
|
||||||
|
|||||||
@ -11,14 +11,6 @@ RUN apt-get update && \
|
|||||||
libdbus-1-dev \
|
libdbus-1-dev \
|
||||||
wget
|
wget
|
||||||
|
|
||||||
# As of January 2024, the default compiler on Debian unstable is GCC 13.2.0, which
|
|
||||||
# is unable to build one of Qt 6.6.1's dependencies, see:
|
|
||||||
# https://github.com/qt/qtquick3d-assimp/commit/253f8bfa621a9fa6cd2c36291cdaa8c60c99322c
|
|
||||||
# The linked commit above fixes the problem and is included in more recent versions of Qt.
|
|
||||||
# For now, we use GCC 12 as a temporary workaround:
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/install-gcc-debian.sh /opt/install-gcc-debian.sh
|
|
||||||
RUN /opt/install-gcc-debian.sh 12
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
||||||
|
|
||||||
COPY extras/packaging/gnu-linux/rules/debian-qt/control /tmp/builddeps/debian/control
|
COPY extras/packaging/gnu-linux/rules/debian-qt/control /tmp/builddeps/debian/control
|
||||||
@ -29,5 +21,6 @@ RUN /opt/prebuild-package-debian.sh jami-deps
|
|||||||
|
|
||||||
RUN apt-get remove -y libre2-dev libre2-11
|
RUN apt-get remove -y libre2-dev libre2-11
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||||
CMD ["/opt/build-package-debian.sh"]
|
CMD ["/opt/build-package-debian.sh"]
|
||||||
|
|||||||
@ -1,105 +0,0 @@
|
|||||||
FROM fedora:39
|
|
||||||
|
|
||||||
RUN dnf clean all
|
|
||||||
RUN dnf update -y
|
|
||||||
|
|
||||||
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
|
||||||
dnf install -y mock
|
|
||||||
|
|
||||||
RUN dnf groupinstall -y "X Software Development"
|
|
||||||
|
|
||||||
RUN dnf install -y \
|
|
||||||
git \
|
|
||||||
rpm-build \
|
|
||||||
tar \
|
|
||||||
make \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
nasm \
|
|
||||||
speexdsp-devel \
|
|
||||||
pulseaudio-libs-devel \
|
|
||||||
libcanberra-devel \
|
|
||||||
libcurl-devel \
|
|
||||||
libtool \
|
|
||||||
mesa-libgbm-devel \
|
|
||||||
mesa-dri-drivers \
|
|
||||||
dbus-devel \
|
|
||||||
expat-devel \
|
|
||||||
pcre-devel \
|
|
||||||
yaml-cpp-devel \
|
|
||||||
libXext-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
yasm \
|
|
||||||
speex-devel \
|
|
||||||
gsm-devel \
|
|
||||||
chrpath \
|
|
||||||
check \
|
|
||||||
astyle \
|
|
||||||
uuid-c++-devel \
|
|
||||||
gettext-devel \
|
|
||||||
gcc-c++ \
|
|
||||||
which \
|
|
||||||
alsa-lib-devel \
|
|
||||||
systemd-devel \
|
|
||||||
libuuid-devel \
|
|
||||||
uuid-devel \
|
|
||||||
gnutls-devel \
|
|
||||||
nettle-devel \
|
|
||||||
opus-devel \
|
|
||||||
patch \
|
|
||||||
jsoncpp-devel \
|
|
||||||
libnatpmp-devel \
|
|
||||||
webkitgtk4-devel \
|
|
||||||
cryptopp-devel \
|
|
||||||
libva-devel \
|
|
||||||
libvdpau-devel \
|
|
||||||
msgpack-devel \
|
|
||||||
NetworkManager-libnm-devel \
|
|
||||||
openssl-devel \
|
|
||||||
clutter-devel \
|
|
||||||
clutter-gtk-devel \
|
|
||||||
libappindicator-gtk3-devel \
|
|
||||||
libnotify-devel \
|
|
||||||
libupnp-devel \
|
|
||||||
qrencode-devel \
|
|
||||||
libargon2-devel \
|
|
||||||
libsndfile-devel \
|
|
||||||
libdrm \
|
|
||||||
gperf \
|
|
||||||
bison \
|
|
||||||
clang \
|
|
||||||
clang-devel \
|
|
||||||
llvm-devel \
|
|
||||||
nodejs \
|
|
||||||
flex \
|
|
||||||
gstreamer1 gstreamer1-devel \
|
|
||||||
gstreamer1-plugins-base-devel \
|
|
||||||
gstreamer1-plugins-good \
|
|
||||||
gstreamer1-plugins-bad-free-devel \
|
|
||||||
nss-devel \
|
|
||||||
libxcb* \
|
|
||||||
libxkb* \
|
|
||||||
libX11-devel \
|
|
||||||
vulkan-devel \
|
|
||||||
libXrender-devel \
|
|
||||||
xcb-util-* \
|
|
||||||
xz \
|
|
||||||
xkeyboard-config \
|
|
||||||
libnotify \
|
|
||||||
wget \
|
|
||||||
libstdc++-static \
|
|
||||||
sqlite-devel \
|
|
||||||
perl-generators \
|
|
||||||
perl-English \
|
|
||||||
libxshmfence-devel \
|
|
||||||
ninja-build \
|
|
||||||
clang \
|
|
||||||
cmake \
|
|
||||||
fmt-devel \
|
|
||||||
python3.10 \
|
|
||||||
cups-devel \
|
|
||||||
pipewire-devel
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
|
||||||
|
|
||||||
CMD ["/opt/build-package-rpm.sh"]
|
|
||||||
@ -1,105 +0,0 @@
|
|||||||
FROM fedora:40
|
|
||||||
|
|
||||||
RUN dnf clean all
|
|
||||||
RUN dnf update -y
|
|
||||||
|
|
||||||
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
|
||||||
dnf install -y mock
|
|
||||||
|
|
||||||
RUN dnf groupinstall -y "X Software Development"
|
|
||||||
|
|
||||||
RUN dnf install -y \
|
|
||||||
git \
|
|
||||||
rpm-build \
|
|
||||||
tar \
|
|
||||||
make \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
nasm \
|
|
||||||
speexdsp-devel \
|
|
||||||
pulseaudio-libs-devel \
|
|
||||||
libcanberra-devel \
|
|
||||||
libcurl-devel \
|
|
||||||
libtool \
|
|
||||||
mesa-libgbm-devel \
|
|
||||||
mesa-dri-drivers \
|
|
||||||
dbus-devel \
|
|
||||||
expat-devel \
|
|
||||||
pcre-devel \
|
|
||||||
yaml-cpp-devel \
|
|
||||||
libXext-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
yasm \
|
|
||||||
speex-devel \
|
|
||||||
gsm-devel \
|
|
||||||
chrpath \
|
|
||||||
check \
|
|
||||||
astyle \
|
|
||||||
uuid-c++-devel \
|
|
||||||
gettext-devel \
|
|
||||||
gcc-c++ \
|
|
||||||
which \
|
|
||||||
alsa-lib-devel \
|
|
||||||
systemd-devel \
|
|
||||||
libuuid-devel \
|
|
||||||
uuid-devel \
|
|
||||||
gnutls-devel \
|
|
||||||
nettle-devel \
|
|
||||||
opus-devel \
|
|
||||||
patch \
|
|
||||||
jsoncpp-devel \
|
|
||||||
libnatpmp-devel \
|
|
||||||
webkitgtk4-devel \
|
|
||||||
cryptopp-devel \
|
|
||||||
libva-devel \
|
|
||||||
libvdpau-devel \
|
|
||||||
msgpack-devel \
|
|
||||||
NetworkManager-libnm-devel \
|
|
||||||
openssl-devel \
|
|
||||||
clutter-devel \
|
|
||||||
clutter-gtk-devel \
|
|
||||||
libappindicator-gtk3-devel \
|
|
||||||
libnotify-devel \
|
|
||||||
libupnp-devel \
|
|
||||||
qrencode-devel \
|
|
||||||
libargon2-devel \
|
|
||||||
libsndfile-devel \
|
|
||||||
libdrm \
|
|
||||||
gperf \
|
|
||||||
bison \
|
|
||||||
clang \
|
|
||||||
clang-devel \
|
|
||||||
llvm-devel \
|
|
||||||
nodejs \
|
|
||||||
flex \
|
|
||||||
gstreamer1 gstreamer1-devel \
|
|
||||||
gstreamer1-plugins-base-devel \
|
|
||||||
gstreamer1-plugins-good \
|
|
||||||
gstreamer1-plugins-bad-free-devel \
|
|
||||||
nss-devel \
|
|
||||||
libxcb* \
|
|
||||||
libxkb* \
|
|
||||||
libX11-devel \
|
|
||||||
vulkan-devel \
|
|
||||||
libXrender-devel \
|
|
||||||
xcb-util-* \
|
|
||||||
xz \
|
|
||||||
xkeyboard-config \
|
|
||||||
libnotify \
|
|
||||||
wget \
|
|
||||||
libstdc++-static \
|
|
||||||
sqlite-devel \
|
|
||||||
perl-generators \
|
|
||||||
perl-English \
|
|
||||||
libxshmfence-devel \
|
|
||||||
ninja-build \
|
|
||||||
clang \
|
|
||||||
cmake \
|
|
||||||
fmt-devel \
|
|
||||||
python3.10 \
|
|
||||||
cups-devel \
|
|
||||||
pipewire-devel
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
|
||||||
|
|
||||||
CMD ["/opt/build-package-rpm.sh"]
|
|
||||||
@ -94,10 +94,11 @@ RUN dnf install -y \
|
|||||||
ninja-build \
|
ninja-build \
|
||||||
cmake \
|
cmake \
|
||||||
fmt-devel \
|
fmt-devel \
|
||||||
python3.10 \
|
python3-html5lib \
|
||||||
cups-devel \
|
cups-devel \
|
||||||
pipewire-devel
|
pipewire-devel
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
||||||
|
|
||||||
CMD ["/opt/build-package-rpm.sh"]
|
CMD ["/opt/build-package-rpm.sh"]
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
FROM fedora:38
|
FROM fedora:42
|
||||||
|
|
||||||
RUN dnf clean all
|
RUN dnf clean all
|
||||||
RUN dnf update -y
|
RUN dnf update -y
|
||||||
@ -6,12 +6,10 @@ RUN dnf update -y
|
|||||||
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
|
||||||
dnf install -y mock
|
dnf install -y mock
|
||||||
|
|
||||||
RUN dnf groupinstall -y "X Software Development"
|
RUN dnf group install -y x-software-development
|
||||||
|
|
||||||
RUN dnf install -y \
|
RUN dnf install -y \
|
||||||
git \
|
git \
|
||||||
rpm-build \
|
|
||||||
tar \
|
|
||||||
make \
|
make \
|
||||||
autoconf \
|
autoconf \
|
||||||
automake \
|
automake \
|
||||||
@ -22,15 +20,11 @@ RUN dnf install -y \
|
|||||||
libcurl-devel \
|
libcurl-devel \
|
||||||
libtool \
|
libtool \
|
||||||
mesa-libgbm-devel \
|
mesa-libgbm-devel \
|
||||||
mesa-dri-drivers \
|
|
||||||
dbus-devel \
|
dbus-devel \
|
||||||
expat-devel \
|
expat-devel \
|
||||||
pcre-devel \
|
pcre-devel \
|
||||||
yaml-cpp-devel \
|
yaml-cpp-devel \
|
||||||
libXext-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
yasm \
|
yasm \
|
||||||
python2.7 \
|
|
||||||
speex-devel \
|
speex-devel \
|
||||||
gsm-devel \
|
gsm-devel \
|
||||||
chrpath \
|
chrpath \
|
||||||
@ -38,16 +32,15 @@ RUN dnf install -y \
|
|||||||
astyle \
|
astyle \
|
||||||
uuid-c++-devel \
|
uuid-c++-devel \
|
||||||
gettext-devel \
|
gettext-devel \
|
||||||
gcc-c++ \
|
gcc14 \
|
||||||
|
gcc14-c++ \
|
||||||
which \
|
which \
|
||||||
alsa-lib-devel \
|
alsa-lib-devel \
|
||||||
systemd-devel \
|
systemd-devel \
|
||||||
libuuid-devel \
|
|
||||||
uuid-devel \
|
uuid-devel \
|
||||||
gnutls-devel \
|
gnutls-devel \
|
||||||
nettle-devel \
|
nettle-devel \
|
||||||
opus-devel \
|
opus-devel \
|
||||||
patch \
|
|
||||||
jsoncpp-devel \
|
jsoncpp-devel \
|
||||||
libnatpmp-devel \
|
libnatpmp-devel \
|
||||||
webkitgtk4-devel \
|
webkitgtk4-devel \
|
||||||
@ -65,28 +58,20 @@ RUN dnf install -y \
|
|||||||
qrencode-devel \
|
qrencode-devel \
|
||||||
libargon2-devel \
|
libargon2-devel \
|
||||||
libsndfile-devel \
|
libsndfile-devel \
|
||||||
libdrm \
|
|
||||||
gperf \
|
gperf \
|
||||||
bison \
|
bison \
|
||||||
clang \
|
clang18-devel \
|
||||||
clang-devel \
|
llvm18-devel \
|
||||||
llvm-devel \
|
|
||||||
nodejs \
|
nodejs \
|
||||||
flex \
|
flex \
|
||||||
gstreamer1 gstreamer1-devel \
|
|
||||||
gstreamer1-plugins-base-devel \
|
gstreamer1-plugins-base-devel \
|
||||||
gstreamer1-plugins-good \
|
gstreamer1-plugins-good \
|
||||||
gstreamer1-plugins-bad-free-devel \
|
gstreamer1-plugins-bad-free-devel \
|
||||||
nss-devel \
|
nss-devel \
|
||||||
libxcb* \
|
libxcb* \
|
||||||
libxkb* \
|
libxkb* \
|
||||||
libX11-devel \
|
|
||||||
vulkan-devel \
|
vulkan-devel \
|
||||||
libXrender-devel \
|
|
||||||
xcb-util-* \
|
xcb-util-* \
|
||||||
xz \
|
|
||||||
xkeyboard-config \
|
|
||||||
libnotify \
|
|
||||||
wget \
|
wget \
|
||||||
libstdc++-static \
|
libstdc++-static \
|
||||||
sqlite-devel \
|
sqlite-devel \
|
||||||
@ -94,13 +79,13 @@ RUN dnf install -y \
|
|||||||
perl-English \
|
perl-English \
|
||||||
libxshmfence-devel \
|
libxshmfence-devel \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
clang \
|
|
||||||
cmake \
|
cmake \
|
||||||
fmt-devel \
|
fmt-devel \
|
||||||
python3-html5lib \
|
python3-html5lib \
|
||||||
cups-devel \
|
cups-devel \
|
||||||
pipewire-devel
|
pipewire-devel
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
||||||
|
|
||||||
CMD ["/opt/build-package-rpm.sh"]
|
CMD ["/opt/build-package-rpm.sh"]
|
||||||
@ -1,122 +0,0 @@
|
|||||||
FROM opensuse/leap:15.4
|
|
||||||
|
|
||||||
RUN zypper refresh
|
|
||||||
|
|
||||||
RUN zypper --non-interactive install -y \
|
|
||||||
dnf \
|
|
||||||
dnf-command\(builddep\) \
|
|
||||||
rpmdevtools \
|
|
||||||
Mesa-dri-devel Mesa-dri \
|
|
||||||
git \
|
|
||||||
gcc10 \
|
|
||||||
gcc10-c++ \
|
|
||||||
rpm-build \
|
|
||||||
tar \
|
|
||||||
make \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
nasm \
|
|
||||||
speexdsp-devel \
|
|
||||||
libpulse-devel \
|
|
||||||
libcanberra-devel \
|
|
||||||
libcurl-devel \
|
|
||||||
libtool \
|
|
||||||
pcre-devel \
|
|
||||||
yaml-cpp-devel \
|
|
||||||
libXext-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
yasm \
|
|
||||||
speex-devel \
|
|
||||||
libgsm-devel \
|
|
||||||
chrpath \
|
|
||||||
check \
|
|
||||||
astyle \
|
|
||||||
gettext-devel \
|
|
||||||
which \
|
|
||||||
alsa-lib-devel \
|
|
||||||
systemd-devel \
|
|
||||||
libuuid-devel \
|
|
||||||
uuid-devel \
|
|
||||||
libopus-devel \
|
|
||||||
patch \
|
|
||||||
jsoncpp-devel \
|
|
||||||
webkit2gtk3-devel \
|
|
||||||
libcryptopp-devel \
|
|
||||||
libva-devel \
|
|
||||||
libvdpau-devel \
|
|
||||||
msgpack-devel \
|
|
||||||
clutter-devel \
|
|
||||||
openssl-devel \
|
|
||||||
clutter-gtk-devel \
|
|
||||||
libnma-devel \
|
|
||||||
libcryptopp-devel \
|
|
||||||
libexpat-devel \
|
|
||||||
gnome-icon-theme-symbolic \
|
|
||||||
libgsm-devel \
|
|
||||||
gtk3-devel \
|
|
||||||
libappindicator-devel \
|
|
||||||
sqlite-devel \
|
|
||||||
ffmpeg-4-libavutil-devel \
|
|
||||||
gtk3-devel\
|
|
||||||
qrencode-devel \
|
|
||||||
python310 \
|
|
||||||
python3-python-dateutil \
|
|
||||||
python3-html5lib \
|
|
||||||
libsndfile-devel \
|
|
||||||
libdrm \
|
|
||||||
gperf \
|
|
||||||
bison \
|
|
||||||
flex \
|
|
||||||
ffmpeg ffmpeg-devel \
|
|
||||||
nodejs18 \
|
|
||||||
mozilla-nss-devel \
|
|
||||||
python-xml \
|
|
||||||
python3-six \
|
|
||||||
python3-importlib-metadata \
|
|
||||||
libxcb* \
|
|
||||||
libxkb* \
|
|
||||||
libX11-devel \
|
|
||||||
libXrender-devel \
|
|
||||||
libfreetype6 \
|
|
||||||
xcb-util-image-devel \
|
|
||||||
xcb-util-keysyms-devel \
|
|
||||||
xcb-util-renderutil-devel \
|
|
||||||
xcb-util-wm-devel \
|
|
||||||
xorg-x11-devel \
|
|
||||||
xz \
|
|
||||||
xkeyboard-config \
|
|
||||||
libnotify \
|
|
||||||
argon2-devel \
|
|
||||||
libxshmfence-devel \
|
|
||||||
xproto-devel \
|
|
||||||
xcb-proto-devel \
|
|
||||||
xcb-* \
|
|
||||||
xorg-* \
|
|
||||||
vulkan-devel \
|
|
||||||
ninja \
|
|
||||||
gstreamer-devel \
|
|
||||||
gstreamer-plugins-good \
|
|
||||||
gstreamer-plugins-bad-devel \
|
|
||||||
gstreamer-plugins-base-devel \
|
|
||||||
cmake \
|
|
||||||
wget \
|
|
||||||
pipewire-devel
|
|
||||||
|
|
||||||
# openSUSE Leap 15.4 comes with Python 3.6 by default,
|
|
||||||
# but we need at least 3.7 to compile Qt 6.6.1
|
|
||||||
RUN rm /usr/bin/python3 && ln -s /usr/bin/python3.10 /usr/bin/python3
|
|
||||||
|
|
||||||
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 50
|
|
||||||
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 50
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
|
||||||
|
|
||||||
ENV CC=gcc
|
|
||||||
ENV CXX=g++
|
|
||||||
|
|
||||||
# Setting this variable so that FFmpeg gets built without pipewiregrab
|
|
||||||
# (see daemon/contrib/bootstrap and daemon/contrib/src/ffmpeg/rules.mak)
|
|
||||||
# We rely on PipeWire for screen sharing on Wayland, but the version available on openSUSE Leap 15.4 is too old.
|
|
||||||
ENV DISABLE_PIPEWIRE=true
|
|
||||||
|
|
||||||
CMD ["/opt/build-package-rpm.sh"]
|
|
||||||
@ -1,10 +1,9 @@
|
|||||||
FROM opensuse/leap:15.5
|
FROM opensuse/leap:15.6
|
||||||
|
|
||||||
RUN zypper --gpg-auto-import-keys refresh
|
RUN zypper --gpg-auto-import-keys refresh
|
||||||
|
|
||||||
RUN zypper --non-interactive install -y \
|
RUN zypper --non-interactive install -y \
|
||||||
dnf \
|
dnf \
|
||||||
dnf-command\(builddep\) \
|
|
||||||
rpmdevtools \
|
rpmdevtools \
|
||||||
Mesa-dri-devel Mesa-dri \
|
Mesa-dri-devel Mesa-dri \
|
||||||
git \
|
git \
|
||||||
@ -29,11 +28,11 @@ RUN zypper --non-interactive install -y \
|
|||||||
speex-devel \
|
speex-devel \
|
||||||
libgsm-devel \
|
libgsm-devel \
|
||||||
chrpath \
|
chrpath \
|
||||||
check \
|
check-devel \
|
||||||
astyle \
|
astyle \
|
||||||
gettext-devel \
|
gettext-tools \
|
||||||
which \
|
which \
|
||||||
alsa-lib-devel \
|
alsa-devel \
|
||||||
systemd-devel \
|
systemd-devel \
|
||||||
libuuid-devel \
|
libuuid-devel \
|
||||||
uuid-devel \
|
uuid-devel \
|
||||||
@ -47,7 +46,7 @@ RUN zypper --non-interactive install -y \
|
|||||||
msgpack-c-devel \
|
msgpack-c-devel \
|
||||||
msgpack-cxx-devel \
|
msgpack-cxx-devel \
|
||||||
clutter-devel \
|
clutter-devel \
|
||||||
openssl-devel \
|
libopenssl-devel \
|
||||||
clutter-gtk-devel \
|
clutter-gtk-devel \
|
||||||
libnma-devel \
|
libnma-devel \
|
||||||
libcryptopp-devel \
|
libcryptopp-devel \
|
||||||
@ -56,24 +55,22 @@ RUN zypper --non-interactive install -y \
|
|||||||
libgsm-devel \
|
libgsm-devel \
|
||||||
gtk3-devel \
|
gtk3-devel \
|
||||||
libappindicator-devel \
|
libappindicator-devel \
|
||||||
sqlite-devel \
|
sqlite3-devel \
|
||||||
ffmpeg-4-libavutil-devel \
|
|
||||||
gtk3-devel\
|
gtk3-devel\
|
||||||
qrencode-devel \
|
qrencode-devel \
|
||||||
python310 \
|
python311 \
|
||||||
python3-python-dateutil \
|
python311-python-dateutil \
|
||||||
python3-html5lib \
|
python311-html5lib \
|
||||||
|
python311-six \
|
||||||
|
python311-importlib-metadata \
|
||||||
libsndfile-devel \
|
libsndfile-devel \
|
||||||
libdrm \
|
libdrm-devel \
|
||||||
gperf \
|
gperf \
|
||||||
bison \
|
bison \
|
||||||
flex \
|
flex \
|
||||||
ffmpeg ffmpeg-devel \
|
|
||||||
nodejs20 \
|
nodejs20 \
|
||||||
mozilla-nss-devel \
|
mozilla-nss-devel \
|
||||||
python-xml \
|
python-xml \
|
||||||
python3-six \
|
|
||||||
python3-importlib-metadata \
|
|
||||||
libxcb* \
|
libxcb* \
|
||||||
libxkb* \
|
libxkb* \
|
||||||
libX11-devel \
|
libX11-devel \
|
||||||
@ -86,7 +83,7 @@ RUN zypper --non-interactive install -y \
|
|||||||
xorg-x11-devel \
|
xorg-x11-devel \
|
||||||
xz \
|
xz \
|
||||||
xkeyboard-config \
|
xkeyboard-config \
|
||||||
libnotify \
|
libnotify-devel \
|
||||||
argon2-devel \
|
argon2-devel \
|
||||||
libxshmfence-devel \
|
libxshmfence-devel \
|
||||||
xproto-devel \
|
xproto-devel \
|
||||||
@ -103,13 +100,14 @@ RUN zypper --non-interactive install -y \
|
|||||||
wget \
|
wget \
|
||||||
pipewire-devel
|
pipewire-devel
|
||||||
|
|
||||||
# openSUSE Leap 15.5 comes with Python 3.6 by default,
|
# openSUSE Leap 15.6 comes with Python 3.6 by default,
|
||||||
# but we need at least 3.7 to compile Qt 6.6.1
|
# but we need at least 3.7 to compile Qt 6.8.3
|
||||||
RUN rm /usr/bin/python3 && ln -s /usr/bin/python3.10 /usr/bin/python3
|
RUN rm /usr/bin/python3 && ln -s /usr/bin/python3.11 /usr/bin/python3
|
||||||
|
|
||||||
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 50
|
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 50
|
||||||
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 50
|
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 50
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
|
||||||
|
|
||||||
ENV CC=gcc
|
ENV CC=gcc
|
||||||
@ -2,7 +2,7 @@
|
|||||||
# https://snapcraft.io/docs/build-on-docker
|
# https://snapcraft.io/docs/build-on-docker
|
||||||
# https://github.com/canonical/snapcraft/issues/5079#issuecomment-2414199613
|
# https://github.com/canonical/snapcraft/issues/5079#issuecomment-2414199613
|
||||||
|
|
||||||
ARG UBUNTU=focal
|
ARG UBUNTU=jammy
|
||||||
|
|
||||||
FROM ubuntu:$UBUNTU AS builder
|
FROM ubuntu:$UBUNTU AS builder
|
||||||
ARG UBUNTU
|
ARG UBUNTU
|
||||||
@ -21,11 +21,6 @@ RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/sna
|
|||||||
RUN mkdir -p /snap/core22
|
RUN mkdir -p /snap/core22
|
||||||
RUN unsquashfs -d /snap/core22/current core22.snap
|
RUN unsquashfs -d /snap/core22/current core22.snap
|
||||||
|
|
||||||
# Download and unpack the core20 snap
|
|
||||||
RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core20' | jq '.download_url' -r) --output core20.snap
|
|
||||||
RUN mkdir -p /snap/core20
|
|
||||||
RUN unsquashfs -d /snap/core20/current core20.snap
|
|
||||||
|
|
||||||
# Download and unpack the core24 snap
|
# Download and unpack the core24 snap
|
||||||
RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core24' | jq '.download_url' -r) --output core24.snap
|
RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core24' | jq '.download_url' -r) --output core24.snap
|
||||||
RUN mkdir -p /snap/core24
|
RUN mkdir -p /snap/core24
|
||||||
@ -36,12 +31,6 @@ RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/sna
|
|||||||
RUN mkdir -p /snap/snapcraft
|
RUN mkdir -p /snap/snapcraft
|
||||||
RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap
|
RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap
|
||||||
|
|
||||||
# Fix Python3 installation: Make sure we use the interpreter from
|
|
||||||
# the snapcraft snap:
|
|
||||||
RUN unlink /snap/snapcraft/current/usr/bin/python3
|
|
||||||
RUN ln -s /snap/snapcraft/current/usr/bin/python3.* /snap/snapcraft/current/usr/bin/python3
|
|
||||||
RUN echo /snap/snapcraft/current/lib/python3.*/site-packages >> /snap/snapcraft/current/usr/lib/python3/dist-packages/site-packages.pth
|
|
||||||
|
|
||||||
# Create a snapcraft runner
|
# Create a snapcraft runner
|
||||||
RUN mkdir -p /snap/bin
|
RUN mkdir -p /snap/bin
|
||||||
RUN echo "#!/bin/sh" > /snap/bin/snapcraft
|
RUN echo "#!/bin/sh" > /snap/bin/snapcraft
|
||||||
@ -54,7 +43,6 @@ RUN chmod +x /snap/bin/snapcraft
|
|||||||
# time so they can be cached.
|
# time so they can be cached.
|
||||||
FROM ubuntu:$UBUNTU
|
FROM ubuntu:$UBUNTU
|
||||||
|
|
||||||
COPY --from=builder /snap/core20 /snap/core20
|
|
||||||
COPY --from=builder /snap/core22 /snap/core22
|
COPY --from=builder /snap/core22 /snap/core22
|
||||||
COPY --from=builder /snap/core24 /snap/core24
|
COPY --from=builder /snap/core24 /snap/core24
|
||||||
COPY --from=builder /snap/snapcraft /snap/snapcraft
|
COPY --from=builder /snap/snapcraft /snap/snapcraft
|
||||||
@ -63,10 +51,6 @@ COPY --from=builder /snap/bin/snapcraft /snap/bin/snapcraft
|
|||||||
# Generate locale and install dependencies.
|
# Generate locale and install dependencies.
|
||||||
RUN apt-get update && apt-get dist-upgrade --yes && apt-get install --yes snapd sudo apt-transport-https locales wget && locale-gen en_US.UTF-8
|
RUN apt-get update && apt-get dist-upgrade --yes && apt-get install --yes snapd sudo apt-transport-https locales wget && locale-gen en_US.UTF-8
|
||||||
|
|
||||||
# Install CMake 3.21 for Qt 6
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
|
|
||||||
RUN /opt/install-cmake.sh
|
|
||||||
|
|
||||||
# Set the proper environment.
|
# Set the proper environment.
|
||||||
ENV LANG="en_US.UTF-8"
|
ENV LANG="en_US.UTF-8"
|
||||||
ENV LANGUAGE="en_US:en"
|
ENV LANGUAGE="en_US:en"
|
||||||
@ -75,6 +59,7 @@ ENV PATH="/snap/bin:/snap/snapcraft/current/usr/bin:/snap/snapcraft/current/libe
|
|||||||
ENV SNAP="/snap/snapcraft/current"
|
ENV SNAP="/snap/snapcraft/current"
|
||||||
ENV SNAP_NAME="snapcraft"
|
ENV SNAP_NAME="snapcraft"
|
||||||
ENV SNAP_ARCH="amd64"
|
ENV SNAP_ARCH="amd64"
|
||||||
|
ENV SNAPCRAFT_BUILD_ENVIRONMENT=host
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-snap.sh /opt/build-package-snap.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-snap.sh /opt/build-package-snap.sh
|
||||||
CMD ["/opt/build-package-snap.sh"]
|
CMD ["/opt/build-package-snap.sh"]
|
||||||
|
|||||||
@ -1,42 +0,0 @@
|
|||||||
FROM ubuntu:20.04
|
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
RUN apt-get clean
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y -o Acquire::Retries=10 \
|
|
||||||
devscripts \
|
|
||||||
equivs \
|
|
||||||
python-is-python3 \
|
|
||||||
wget \
|
|
||||||
curl
|
|
||||||
|
|
||||||
# Installing GCC 10 because GCC 9 (the default on Ubuntu 20.04) doesn't support
|
|
||||||
# the --std=gnu++20 option, which is used by one of Qt 6.6.1's dependencies
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/install-gcc-debian.sh /opt/install-gcc-debian.sh
|
|
||||||
RUN /opt/install-gcc-debian.sh 10
|
|
||||||
|
|
||||||
# nodejs
|
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_20.x | bash -
|
|
||||||
RUN apt install nodejs -y
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
|
||||||
|
|
||||||
COPY extras/packaging/gnu-linux/rules/debian-qt/control /tmp/builddeps/debian/control
|
|
||||||
RUN /opt/prebuild-package-debian.sh qt-deps
|
|
||||||
|
|
||||||
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
|
||||||
RUN /opt/prebuild-package-debian.sh jami-deps
|
|
||||||
|
|
||||||
# Install CMake 3.21 for Qt 6
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
|
|
||||||
RUN /opt/install-cmake.sh
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
|
||||||
|
|
||||||
# Setting this variable so that FFmpeg gets built without pipewiregrab
|
|
||||||
# (see daemon/contrib/bootstrap and daemon/contrib/src/ffmpeg/rules.mak)
|
|
||||||
# We rely on PipeWire for screen sharing on Wayland, but the version available on Ubuntu 20.04 is too old.
|
|
||||||
ENV DISABLE_PIPEWIRE=true
|
|
||||||
|
|
||||||
CMD ["/opt/build-package-debian.sh"]
|
|
||||||
@ -23,5 +23,6 @@ RUN /opt/prebuild-package-debian.sh qt-deps
|
|||||||
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
||||||
RUN /opt/prebuild-package-debian.sh jami-deps
|
RUN /opt/prebuild-package-debian.sh jami-deps
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||||
CMD ["/opt/build-package-debian.sh"]
|
CMD ["/opt/build-package-debian.sh"]
|
||||||
|
|||||||
@ -21,5 +21,6 @@ RUN /opt/prebuild-package-debian.sh qt-deps
|
|||||||
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
||||||
RUN /opt/prebuild-package-debian.sh jami-deps
|
RUN /opt/prebuild-package-debian.sh jami-deps
|
||||||
|
|
||||||
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||||
CMD ["/opt/build-package-debian.sh"]
|
CMD ["/opt/build-package-debian.sh"]
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
FROM ubuntu:24.10
|
FROM ubuntu:25.04
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
@ -18,12 +18,6 @@ RUN /opt/prebuild-package-debian.sh qt-deps
|
|||||||
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
||||||
RUN /opt/prebuild-package-debian.sh jami-deps
|
RUN /opt/prebuild-package-debian.sh jami-deps
|
||||||
|
|
||||||
# Remove the libre2-dev package in order to force Qt to build using the bundled
|
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||||
# version of the RE2 library. This is necessary because the system version of the
|
|
||||||
# library on Ubuntu 24.10 (libre2-11) is not compatible with the one used in
|
|
||||||
# Qt 6.6.1 due to an API change:
|
|
||||||
# https://codereview.qt-project.org/c/qt/qtwebengine/+/516094
|
|
||||||
RUN apt-get remove -y libre2-dev libre2-11
|
|
||||||
|
|
||||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||||
CMD ["/opt/build-package-debian.sh"]
|
CMD ["/opt/build-package-debian.sh"]
|
||||||
@ -24,7 +24,10 @@
|
|||||||
(list
|
(list
|
||||||
;; Minimal requirements of the daemon contrib build system.
|
;; Minimal requirements of the daemon contrib build system.
|
||||||
"coreutils"
|
"coreutils"
|
||||||
"gcc-toolchain"
|
;; When using GCC 15, Jami fails to link with errors like:
|
||||||
|
;; ld: CMakeFiles/jami.dir/src/app/main.cpp.o:(.rodata+0x0):
|
||||||
|
;; multiple definition of `QtPrivate::IsFloatType_v<_Float16>'
|
||||||
|
"gcc-toolchain@14"
|
||||||
"git-minimal"
|
"git-minimal"
|
||||||
"grep"
|
"grep"
|
||||||
"gzip"
|
"gzip"
|
||||||
@ -42,18 +45,12 @@
|
|||||||
"alsa-lib"
|
"alsa-lib"
|
||||||
"autoconf"
|
"autoconf"
|
||||||
"automake"
|
"automake"
|
||||||
|
"asio"
|
||||||
"bash"
|
"bash"
|
||||||
"bzip2"
|
"bzip2"
|
||||||
"cmake"
|
"cmake"
|
||||||
"dbus"
|
"dbus"
|
||||||
;; Bundled because broken with GCC 7 upstream (unmaintained). When
|
;;"dhtnet" ;bundled because tightly coupled
|
||||||
;; attempting to use it, it would cause confusing errors such as
|
|
||||||
;; "ld: ../src/.libs/libring.a(libupnpcontrol_la-upnp_context.o): in
|
|
||||||
;; function `jami::upnp::UPnPContext::updateMappingList(bool)':
|
|
||||||
;; upnp_context.cpp:(.text+0xa4be): undefined reference to
|
|
||||||
;; `std::__cxx11::basic_ostringstream<char, std::char_traits<char>,
|
|
||||||
;; std::allocator<char> >::basic_ostringstream()'
|
|
||||||
;;"dbus-c++" ;for dbusxx-xml2cpp
|
|
||||||
"diffutils"
|
"diffutils"
|
||||||
"doxygen"
|
"doxygen"
|
||||||
"eudev" ;udev library
|
"eudev" ;udev library
|
||||||
@ -67,6 +64,7 @@
|
|||||||
"gsm"
|
"gsm"
|
||||||
"gtk-doc"
|
"gtk-doc"
|
||||||
"http-parser"
|
"http-parser"
|
||||||
|
"jack@0"
|
||||||
"jsoncpp"
|
"jsoncpp"
|
||||||
"libarchive"
|
"libarchive"
|
||||||
"libgit2"
|
"libgit2"
|
||||||
@ -84,16 +82,24 @@
|
|||||||
"patch"
|
"patch"
|
||||||
"pcre"
|
"pcre"
|
||||||
"perl"
|
"perl"
|
||||||
|
"pipewire"
|
||||||
;;"pjproject" ;bundled because patched
|
;;"pjproject" ;bundled because patched
|
||||||
"pulseaudio"
|
"pulseaudio"
|
||||||
|
"sdbus-c++@1"
|
||||||
"speex"
|
"speex"
|
||||||
"speexdsp"
|
"speexdsp"
|
||||||
|
"webrtc-audio-processing@0"
|
||||||
"which"
|
"which"
|
||||||
"yaml-cpp"
|
"yaml-cpp"
|
||||||
"yasm"
|
"yasm"
|
||||||
|
|
||||||
;; For the Qt client.
|
;; For the Qt client.
|
||||||
|
"glib"
|
||||||
|
"hunspell"
|
||||||
|
"libnotify"
|
||||||
|
"libxcb"
|
||||||
"libxkbcommon"
|
"libxkbcommon"
|
||||||
|
"md4c"
|
||||||
"network-manager" ;libnm
|
"network-manager" ;libnm
|
||||||
"qrencode"
|
"qrencode"
|
||||||
"qtbase"
|
"qtbase"
|
||||||
@ -103,10 +109,13 @@
|
|||||||
"qtnetworkauth"
|
"qtnetworkauth"
|
||||||
"qtpositioning"
|
"qtpositioning"
|
||||||
"qtsvg"
|
"qtsvg"
|
||||||
|
"qwindowkit"
|
||||||
"qttools"
|
"qttools"
|
||||||
"qtwebchannel"
|
"qtwebchannel"
|
||||||
"qtwebengine"
|
"qtwebengine"
|
||||||
|
"tidy-html"
|
||||||
"vulkan-headers"
|
"vulkan-headers"
|
||||||
|
"zxing-cpp"
|
||||||
|
|
||||||
;; For tests and debugging.
|
;; For tests and debugging.
|
||||||
"file"
|
"file"
|
||||||
|
|||||||
@ -261,7 +261,7 @@ Build-Depends: debhelper (>= 9),
|
|||||||
gperf,
|
gperf,
|
||||||
khronos-api,
|
khronos-api,
|
||||||
# libasound2-dev [linux-any],
|
# libasound2-dev [linux-any],
|
||||||
libavcodec-dev (>= 7:3.4.8~),
|
libavcodec-dev (>= 7:3.4.8~) | libavcodec-extra-dev (>= 7:3.4.8~),
|
||||||
libavformat-dev (>= 7:3.4.8~),
|
libavformat-dev (>= 7:3.4.8~),
|
||||||
libavutil-dev (>= 7:3.4.8~),
|
libavutil-dev (>= 7:3.4.8~),
|
||||||
libcap-dev [linux-any],
|
libcap-dev [linux-any],
|
||||||
|
|||||||
@ -1,348 +0,0 @@
|
|||||||
From 24fb774485f719df1e84dda31605d3f69202d69f Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
|
||||||
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
|
||||||
Date: Thu, 8 Aug 2024 14:59:17 -0400
|
|
||||||
Subject: [PATCH] qtwebengine: enable building with Python 3.12
|
|
||||||
|
|
||||||
Replace the deprecated imp module by importlib:
|
|
||||||
https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/524014
|
|
||||||
https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/534568
|
|
||||||
|
|
||||||
Update six to fix html5lib import failure:
|
|
||||||
https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/535605
|
|
||||||
https://issues.chromium.org/issues/40286977
|
|
||||||
---
|
|
||||||
.../protobufs/binary_proto_generator.py | 8 ++++++--
|
|
||||||
.../mojo/public/tools/mojom/mojom/fileutil.py | 1 -
|
|
||||||
.../tools/mojom/mojom/fileutil_unittest.py | 5 +----
|
|
||||||
.../mojom/mojom/generate/generator_unittest.py | 7 ++-----
|
|
||||||
.../mojom/mojom/generate/translate_unittest.py | 4 ----
|
|
||||||
.../tools/mojom/mojom/parse/ast_unittest.py | 6 ------
|
|
||||||
.../mojom/parse/conditional_features_unittest.py | 8 ++------
|
|
||||||
.../mojo/public/tools/mojom/mojom/parse/lexer.py | 1 -
|
|
||||||
.../tools/mojom/mojom/parse/lexer_unittest.py | 7 ++-----
|
|
||||||
.../tools/mojom/mojom/parse/parser_unittest.py | 5 -----
|
|
||||||
.../third_party/catapult/third_party/six/six.py | 16 ++++++++++++++++
|
|
||||||
11 files changed, 29 insertions(+), 39 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/components/resources/protobufs/binary_proto_generator.py b/qtwebengine/src/3rdparty/chromium/components/resources/protobufs/binary_proto_generator.py
|
|
||||||
index 2a1802dccdc..8b9de65ed0b 100755
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/components/resources/protobufs/binary_proto_generator.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/components/resources/protobufs/binary_proto_generator.py
|
|
||||||
@@ -9,7 +9,7 @@
|
|
||||||
"""
|
|
||||||
from __future__ import print_function
|
|
||||||
import abc
|
|
||||||
-import imp
|
|
||||||
+from importlib import util as imp_util
|
|
||||||
import optparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
@@ -68,7 +68,11 @@ class GoogleProtobufModuleImporter:
|
|
||||||
raise ImportError(fullname)
|
|
||||||
|
|
||||||
filepath = self._fullname_to_filepath(fullname)
|
|
||||||
- return imp.load_source(fullname, filepath)
|
|
||||||
+ spec = imp_util.spec_from_file_location(fullname, filepath)
|
|
||||||
+ loaded = imp_util.module_from_spec(spec)
|
|
||||||
+ spec.loader.exec_module(loaded)
|
|
||||||
+
|
|
||||||
+ return loaded
|
|
||||||
|
|
||||||
class BinaryProtoGenerator:
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil.py
|
|
||||||
index 29daec367c5..124f12c134b 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil.py
|
|
||||||
@@ -3,7 +3,6 @@
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
import errno
|
|
||||||
-import imp
|
|
||||||
import os.path
|
|
||||||
import sys
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil_unittest.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil_unittest.py
|
|
||||||
index 48eaf4eca94..c93d22898d2 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil_unittest.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/fileutil_unittest.py
|
|
||||||
@@ -2,19 +2,16 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
import os.path
|
|
||||||
import shutil
|
|
||||||
-import sys
|
|
||||||
import tempfile
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
from mojom import fileutil
|
|
||||||
|
|
||||||
-
|
|
||||||
class FileUtilTest(unittest.TestCase):
|
|
||||||
def testEnsureDirectoryExists(self):
|
|
||||||
- """Test that EnsureDirectoryExists fuctions correctly."""
|
|
||||||
+ """Test that EnsureDirectoryExists functions correctly."""
|
|
||||||
|
|
||||||
temp_dir = tempfile.mkdtemp()
|
|
||||||
try:
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/generator_unittest.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
|
|
||||||
index 76cda3981f3..7143e07c4d7 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
|
|
||||||
@@ -2,12 +2,11 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
+import importlib.util
|
|
||||||
import os.path
|
|
||||||
import sys
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
-
|
|
||||||
def _GetDirAbove(dirname):
|
|
||||||
"""Returns the directory "above" this file containing |dirname| (which must
|
|
||||||
also be "above" this file)."""
|
|
||||||
@@ -20,12 +19,11 @@ def _GetDirAbove(dirname):
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
|
||||||
- imp.find_module("mojom")
|
|
||||||
+ importlib.util.find_spec("mojom")
|
|
||||||
except ImportError:
|
|
||||||
sys.path.append(os.path.join(_GetDirAbove("pylib"), "pylib"))
|
|
||||||
from mojom.generate import generator
|
|
||||||
|
|
||||||
-
|
|
||||||
class StringManipulationTest(unittest.TestCase):
|
|
||||||
"""generator contains some string utilities, this tests only those."""
|
|
||||||
|
|
||||||
@@ -69,6 +67,5 @@ class StringManipulationTest(unittest.TestCase):
|
|
||||||
self.assertEquals("SNAKE_D3D11_CASE",
|
|
||||||
generator.ToUpperSnakeCase("snakeD3d11Case"))
|
|
||||||
|
|
||||||
-
|
|
||||||
if __name__ == "__main__":
|
|
||||||
unittest.main()
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/translate_unittest.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
|
|
||||||
index 4259374513f..558e71e1193 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
|
|
||||||
@@ -2,16 +2,12 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
-import os.path
|
|
||||||
-import sys
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
from mojom.generate import module as mojom
|
|
||||||
from mojom.generate import translate
|
|
||||||
from mojom.parse import ast
|
|
||||||
|
|
||||||
-
|
|
||||||
class TranslateTest(unittest.TestCase):
|
|
||||||
"""Tests |parser.Parse()|."""
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/ast_unittest.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
|
|
||||||
index c36376712e7..b289f7b11f6 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
|
|
||||||
@@ -2,14 +2,10 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
-import os.path
|
|
||||||
-import sys
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
from mojom.parse import ast
|
|
||||||
|
|
||||||
-
|
|
||||||
class _TestNode(ast.NodeBase):
|
|
||||||
"""Node type for tests."""
|
|
||||||
|
|
||||||
@@ -20,13 +16,11 @@ class _TestNode(ast.NodeBase):
|
|
||||||
def __eq__(self, other):
|
|
||||||
return super().__eq__(other) and self.value == other.value
|
|
||||||
|
|
||||||
-
|
|
||||||
class _TestNodeList(ast.NodeListBase):
|
|
||||||
"""Node list type for tests."""
|
|
||||||
|
|
||||||
_list_item_type = _TestNode
|
|
||||||
|
|
||||||
-
|
|
||||||
class ASTTest(unittest.TestCase):
|
|
||||||
"""Tests various AST classes."""
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
|
|
||||||
index 5fc582025ee..2fa5d2be6ab 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
|
|
||||||
@@ -2,12 +2,11 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
+import importlib.util
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
-
|
|
||||||
def _GetDirAbove(dirname):
|
|
||||||
"""Returns the directory "above" this file containing |dirname| (which must
|
|
||||||
also be "above" this file)."""
|
|
||||||
@@ -18,9 +17,8 @@ def _GetDirAbove(dirname):
|
|
||||||
if tail == dirname:
|
|
||||||
return path
|
|
||||||
|
|
||||||
-
|
|
||||||
try:
|
|
||||||
- imp.find_module('mojom')
|
|
||||||
+ importlib.util.find_spec("mojom")
|
|
||||||
except ImportError:
|
|
||||||
sys.path.append(os.path.join(_GetDirAbove('pylib'), 'pylib'))
|
|
||||||
import mojom.parse.ast as ast
|
|
||||||
@@ -29,7 +27,6 @@ import mojom.parse.parser as parser
|
|
||||||
|
|
||||||
ENABLED_FEATURES = frozenset({'red', 'green', 'blue'})
|
|
||||||
|
|
||||||
-
|
|
||||||
class ConditionalFeaturesTest(unittest.TestCase):
|
|
||||||
"""Tests |mojom.parse.conditional_features|."""
|
|
||||||
|
|
||||||
@@ -356,6 +353,5 @@ class ConditionalFeaturesTest(unittest.TestCase):
|
|
||||||
conditional_features.RemoveDisabledDefinitions,
|
|
||||||
definition, ENABLED_FEATURES)
|
|
||||||
|
|
||||||
-
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer.py
|
|
||||||
index 73ca15df94c..1083a1af7bb 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer.py
|
|
||||||
@@ -2,7 +2,6 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
import os.path
|
|
||||||
import sys
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
|
|
||||||
index ce376da66e0..bc9f8354316 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
|
|
||||||
@@ -2,12 +2,11 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
+import importlib.util
|
|
||||||
import os.path
|
|
||||||
import sys
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
-
|
|
||||||
def _GetDirAbove(dirname):
|
|
||||||
"""Returns the directory "above" this file containing |dirname| (which must
|
|
||||||
also be "above" this file)."""
|
|
||||||
@@ -18,17 +17,15 @@ def _GetDirAbove(dirname):
|
|
||||||
if tail == dirname:
|
|
||||||
return path
|
|
||||||
|
|
||||||
-
|
|
||||||
sys.path.insert(1, os.path.join(_GetDirAbove("mojo"), "third_party"))
|
|
||||||
from ply import lex
|
|
||||||
|
|
||||||
try:
|
|
||||||
- imp.find_module("mojom")
|
|
||||||
+ importlib.util.find_spec("mojom")
|
|
||||||
except ImportError:
|
|
||||||
sys.path.append(os.path.join(_GetDirAbove("pylib"), "pylib"))
|
|
||||||
import mojom.parse.lexer
|
|
||||||
|
|
||||||
-
|
|
||||||
# This (monkey-patching LexToken to make comparison value-based) is evil, but
|
|
||||||
# we'll do it anyway. (I'm pretty sure ply's lexer never cares about comparing
|
|
||||||
# for object identity.)
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/parser_unittest.py b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
|
|
||||||
index 0513343ec7e..0a26307b1a3 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
|
|
||||||
@@ -2,16 +2,12 @@
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
-import imp
|
|
||||||
-import os.path
|
|
||||||
-import sys
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
from mojom.parse import ast
|
|
||||||
from mojom.parse import lexer
|
|
||||||
from mojom.parse import parser
|
|
||||||
|
|
||||||
-
|
|
||||||
class ParserTest(unittest.TestCase):
|
|
||||||
"""Tests |parser.Parse()|."""
|
|
||||||
|
|
||||||
@@ -1375,6 +1371,5 @@ class ParserTest(unittest.TestCase):
|
|
||||||
r" *associated\? MyInterface& a;$"):
|
|
||||||
parser.Parse(source3, "my_file.mojom")
|
|
||||||
|
|
||||||
-
|
|
||||||
if __name__ == "__main__":
|
|
||||||
unittest.main()
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/catapult/third_party/six/six.py b/qtwebengine/src/3rdparty/chromium/third_party/catapult/third_party/six/six.py
|
|
||||||
index 83f69783d1a..5e7f0ce4437 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/third_party/catapult/third_party/six/six.py
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/third_party/catapult/third_party/six/six.py
|
|
||||||
@@ -71,6 +71,11 @@ else:
|
|
||||||
MAXSIZE = int((1 << 63) - 1)
|
|
||||||
del X
|
|
||||||
|
|
||||||
+if PY34:
|
|
||||||
+ from importlib.util import spec_from_loader
|
|
||||||
+else:
|
|
||||||
+ spec_from_loader = None
|
|
||||||
+
|
|
||||||
|
|
||||||
def _add_doc(func, doc):
|
|
||||||
"""Add documentation to a function."""
|
|
||||||
@@ -186,6 +191,11 @@ class _SixMetaPathImporter(object):
|
|
||||||
return self
|
|
||||||
return None
|
|
||||||
|
|
||||||
+ def find_spec(self, fullname, path, target=None):
|
|
||||||
+ if fullname in self.known_modules:
|
|
||||||
+ return spec_from_loader(fullname, self)
|
|
||||||
+ return None
|
|
||||||
+
|
|
||||||
def __get_module(self, fullname):
|
|
||||||
try:
|
|
||||||
return self.known_modules[fullname]
|
|
||||||
@@ -223,6 +233,12 @@ class _SixMetaPathImporter(object):
|
|
||||||
return None
|
|
||||||
get_source = get_code # same as get_code
|
|
||||||
|
|
||||||
+ def create_module(self, spec):
|
|
||||||
+ return self.load_module(spec.name)
|
|
||||||
+
|
|
||||||
+ def exec_module(self, module):
|
|
||||||
+ pass
|
|
||||||
+
|
|
||||||
_importer = _SixMetaPathImporter(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
From 0d0856252b48895a8d6cad7bff66c904ccfc0725 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||||
|
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||||
|
Date: Wed, 16 Jul 2025 13:49:54 -0400
|
||||||
|
Subject: [PATCH] qtwebengine: fix build error due to missing chromium
|
||||||
|
dependency
|
||||||
|
|
||||||
|
Error:
|
||||||
|
|
||||||
|
In file included from ../../../3rdparty/chromium/ui/gl/gl_surface.h:30,
|
||||||
|
from ../../../3rdparty/chromium/tools/v8_context_snapshot/qt_overrides.cc:13:
|
||||||
|
../../../3rdparty/chromium/ui/gl/gl_implementation.h:18:10: fatal error: ui/gl/buildflags.h: No such file or directory
|
||||||
|
18 | #include "ui/gl/buildflags.h"
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~
|
||||||
|
compilation terminated.
|
||||||
|
|
||||||
|
Patch taken from: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/637889
|
||||||
|
---
|
||||||
|
.../src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn b/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn
|
||||||
|
index 812445d934..97cd46140d 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn
|
||||||
|
@@ -455,6 +455,10 @@ if (is_linux && !is_qtwebengine) {
|
||||||
|
output_name = "webenginedriver"
|
||||||
|
deps -= [ "//net/traffic_annotation:test_support" ]
|
||||||
|
|
||||||
|
+ if (is_linux || is_mac) {
|
||||||
|
+ deps += [ "//ui/gl:buildflags" ]
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (is_linux) {
|
||||||
|
sources += [
|
||||||
|
"//content/public/common/content_switches.cc",
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp b/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
|
|
||||||
index 3488120543..120e47a76f 100644
|
|
||||||
--- a/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
|
|
||||||
+++ b/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
|
|
||||||
@@ -472,7 +472,7 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length)
|
|
||||||
}
|
|
||||||
catch (const DeadlyImportError& e)
|
|
||||||
{
|
|
||||||
- if (!is64bits && (length > std::numeric_limits<std::uint32_t>::max())) {
|
|
||||||
+ if (!is64bits && (length > std::numeric_limits<uint32_t>::max())) {
|
|
||||||
throw DeadlyImportError("The FBX file is invalid. This may be because the content is too big for this older version (", ai_to_string(version), ") of the FBX format. (", e.what(), ")");
|
|
||||||
}
|
|
||||||
throw;
|
|
||||||
@ -0,0 +1,79 @@
|
|||||||
|
From 24dd03e131cd3edc89907a699369562e61d8aa86 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||||
|
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||||
|
Date: Mon, 21 Jul 2025 13:19:58 -0400
|
||||||
|
Subject: [PATCH] qtwebengine: fix ASSERT_TRIVIALLY_COPYABLE failure
|
||||||
|
|
||||||
|
Some compilers don't implement std::is_trivially_copyable correctly,
|
||||||
|
which can cause chromium's build to fail with the following error:
|
||||||
|
|
||||||
|
In file included from ../../../3rdparty/chromium/v8/src/base/bits.h:12,
|
||||||
|
from ../../../3rdparty/chromium/v8/src/base/small-vector.h:12,
|
||||||
|
from ../../../3rdparty/chromium/v8/src/compiler/turboshaft/graph.h:17,
|
||||||
|
from ../../../3rdparty/chromium/v8/src/compiler/turboshaft/analyzer-iterator.h:9,
|
||||||
|
from ./../../../3rdparty/chromium/v8/src/compiler/turboshaft/analyzer-iterator.cc:5,
|
||||||
|
from gen/v8/v8_turboshaft_jumbo_1.cc:5:
|
||||||
|
../../../3rdparty/chromium/v8/src/base/small-vector.h: In instantiation of 'class v8::base::SmallVector<std::pair<const v8::internal::compiler::turboshaft::PhiOp*, const v8::internal::compiler::turboshaft::OpIndex>, 16>':
|
||||||
|
../../../3rdparty/chromium/v8/src/compiler/turboshaft/loop-unrolling-reducer.h:433:11: required from here
|
||||||
|
../../../3rdparty/chromium/v8/src/base/macros.h:206:55: error: static assertion failed: T should be trivially copyable
|
||||||
|
206 | static_assert(::v8::base::is_trivially_copyable<T>::value, \
|
||||||
|
| ^~~~~
|
||||||
|
../../../3rdparty/chromium/v8/src/base/small-vector.h:25:3: note: in expansion of macro 'ASSERT_TRIVIALLY_COPYABLE'
|
||||||
|
25 | ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
../../../3rdparty/chromium/v8/src/base/macros.h:206:55: note: 'v8::base::is_trivially_copyable<std::pair<const v8::internal::compiler::turboshaft::PhiOp*, const v8::internal::compiler::turboshaft::OpIndex> >::value' evaluates to false
|
||||||
|
206 | static_assert(::v8::base::is_trivially_copyable<T>::value, \
|
||||||
|
| ^~~~~
|
||||||
|
../../../3rdparty/chromium/v8/src/base/small-vector.h:25:3: note: in expansion of macro 'ASSERT_TRIVIALLY_COPYABLE'
|
||||||
|
25 | ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
References:
|
||||||
|
https://chromium-review.googlesource.com/c/v8/v8/+/5679182
|
||||||
|
https://chromium-review.googlesource.com/c/v8/v8/+/5872655
|
||||||
|
https://github.com/rubyjs/libv8-node/pull/57
|
||||||
|
https://github.com/nodejs/node/issues/54576
|
||||||
|
---
|
||||||
|
qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h | 3 ++-
|
||||||
|
qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h | 4 ++--
|
||||||
|
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
|
||||||
|
index 93a99ec136..88c6555189 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
|
||||||
|
@@ -173,7 +173,8 @@ namespace base {
|
||||||
|
// base::is_trivially_copyable will differ for these cases.
|
||||||
|
template <typename T>
|
||||||
|
struct is_trivially_copyable {
|
||||||
|
-#if V8_CC_MSVC
|
||||||
|
+#if V8_CC_MSVC || (__GNUC__ == 12 && __GNUC_MINOR__ <= 2) || \
|
||||||
|
+ (defined(__clang__) && __clang_major__ <= 17)
|
||||||
|
// Unfortunately, MSVC 2015 is broken in that std::is_trivially_copyable can
|
||||||
|
// be false even though it should be true according to the standard.
|
||||||
|
// (status at 2018-02-26, observed on the msvc waterfall bot).
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h
|
||||||
|
index b1b5d64198..ce2e003fb9 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h
|
||||||
|
@@ -22,7 +22,7 @@ template <typename T, size_t kSize, typename Allocator = std::allocator<T>>
|
||||||
|
class SmallVector {
|
||||||
|
// Currently only support trivially copyable and trivially destructible data
|
||||||
|
// types, as it uses memcpy to copy elements and never calls destructors.
|
||||||
|
- ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
+ // ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
static_assert(std::is_trivially_destructible<T>::value);
|
||||||
|
|
||||||
|
public:
|
||||||
|
@@ -193,7 +193,7 @@ class SmallVector {
|
||||||
|
|
||||||
|
void resize_no_init(size_t new_size) {
|
||||||
|
// Resizing without initialization is safe if T is trivially copyable.
|
||||||
|
- ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
+ // ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
if (new_size > capacity()) Grow(new_size);
|
||||||
|
end_ = begin_ + new_size;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
From cf208d11dc8a9a02160a57283596ec8bab964a09 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sebastien Blin <sebastien.blin@savoirfairelinux.com>
|
|
||||||
Date: Mon, 27 May 2024 16:01:21 -0400
|
|
||||||
Subject: [PATCH] qtwayland: downgrade wl-seat to avoid high-resolution
|
|
||||||
scrolling events
|
|
||||||
|
|
||||||
---
|
|
||||||
qtwayland/src/client/qwaylandinputdevice.cpp | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/qtwayland/src/client/qwaylandinputdevice.cpp b/qtwayland/src/client/qwaylandinputdevice.cpp
|
|
||||||
index a4f8757e3c..ad0aa7941c 100644
|
|
||||||
--- a/qtwayland/src/client/qwaylandinputdevice.cpp
|
|
||||||
+++ b/qtwayland/src/client/qwaylandinputdevice.cpp
|
|
||||||
@@ -383,7 +383,7 @@ QWaylandInputDevice::Touch::~Touch()
|
|
||||||
}
|
|
||||||
|
|
||||||
QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display, int version, uint32_t id)
|
|
||||||
- : QtWayland::wl_seat(display->wl_registry(), id, qMin(version, 9))
|
|
||||||
+ : QtWayland::wl_seat(display->wl_registry(), id, qMin(version, 7))
|
|
||||||
, mQDisplay(display)
|
|
||||||
, mDisplay(display->wl_display())
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.45.0
|
|
||||||
|
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
From 5c247c7a084661932969acf2f7103096b8b0d6b4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||||
|
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||||
|
Date: Tue, 22 Jul 2025 13:40:55 -0400
|
||||||
|
Subject: [PATCH] qtwebengine: fix zygote_communication_linux dependency
|
||||||
|
|
||||||
|
Commit 42e09c7bea of qtwebengine-chromium added
|
||||||
|
content/public/browser/child_process_host.h to the list of header files
|
||||||
|
included in zygote_communication_linux.cc, which can cause the build to
|
||||||
|
fail with the following error:
|
||||||
|
|
||||||
|
In file included from ../../../3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc:21:
|
||||||
|
../../../3rdparty/chromium/content/public/browser/child_process_host.h:17:10: fatal error: content/common/buildflags.h: No such file or directory
|
||||||
|
17 | #include "content/common/buildflags.h"
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
---
|
||||||
|
.../content/common/zygote/zygote_communication_linux.cc | 9 ++++++---
|
||||||
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc b/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc
|
||||||
|
index 5bd9a53568..ff883d59e4 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc
|
||||||
|
@@ -18,7 +18,7 @@
|
||||||
|
#include "base/posix/eintr_wrapper.h"
|
||||||
|
#include "base/posix/unix_domain_socket.h"
|
||||||
|
#include "content/common/zygote/zygote_commands_linux.h"
|
||||||
|
-#include "content/public/browser/child_process_host.h"
|
||||||
|
+#include "content/public/common/content_paths.h"
|
||||||
|
#include "content/public/common/content_switches.h"
|
||||||
|
#include "content/public/common/result_codes.h"
|
||||||
|
#include "sandbox/policy/switches.h"
|
||||||
|
@@ -237,8 +237,11 @@ void ZygoteCommunication::Init(
|
||||||
|
base::OnceCallback<pid_t(base::CommandLine*, base::ScopedFD*)> launcher) {
|
||||||
|
CHECK(!init_);
|
||||||
|
|
||||||
|
- base::FilePath chrome_path = content::ChildProcessHost::GetChildPath(
|
||||||
|
- content::ChildProcessHost::CHILD_NORMAL);
|
||||||
|
+ base::FilePath chrome_path = base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
|
||||||
|
+ switches::kBrowserSubprocessPath);
|
||||||
|
+ if (chrome_path.empty()) {
|
||||||
|
+ base::PathService::Get(CHILD_PROCESS_EXE, &chrome_path);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
base::CommandLine cmd_line(chrome_path);
|
||||||
|
cmd_line.AppendSwitchASCII(switches::kProcessType, switches::kZygoteProcess);
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
From 420b3e5ac2e91b7a99488ac34577e2798a84a68c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
|
||||||
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
|
||||||
Date: Tue, 6 Aug 2024 17:35:56 -0400
|
|
||||||
Subject: [PATCH] qtbase: fix CMake error
|
|
||||||
|
|
||||||
For more information, see:
|
|
||||||
https://github.com/qt/qtbase/commit/3411f2984a5325a35e3bed1f961e5973d8a565b9
|
|
||||||
---
|
|
||||||
qtbase/configure.cmake | 1 +
|
|
||||||
qtbase/src/corelib/CMakeLists.txt | 1 -
|
|
||||||
2 files changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/qtbase/configure.cmake b/qtbase/configure.cmake
|
|
||||||
index 43de2aa026..37a82dcdb6 100644
|
|
||||||
--- a/qtbase/configure.cmake
|
|
||||||
+++ b/qtbase/configure.cmake
|
|
||||||
@@ -18,6 +18,7 @@ if(TARGET ZLIB::ZLIB)
|
|
||||||
set_property(TARGET ZLIB::ZLIB PROPERTY IMPORTED_GLOBAL TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
+qt_find_package(Threads PROVIDED_TARGETS Threads::Threads)
|
|
||||||
qt_find_package(WrapOpenSSLHeaders PROVIDED_TARGETS WrapOpenSSLHeaders::WrapOpenSSLHeaders MODULE_NAME core)
|
|
||||||
# openssl_headers
|
|
||||||
# OPENSSL_VERSION_MAJOR is not defined for OpenSSL 1.1.1
|
|
||||||
diff --git a/qtbase/src/corelib/CMakeLists.txt b/qtbase/src/corelib/CMakeLists.txt
|
|
||||||
index 31b81734e8..b62e2f763b 100644
|
|
||||||
--- a/qtbase/src/corelib/CMakeLists.txt
|
|
||||||
+++ b/qtbase/src/corelib/CMakeLists.txt
|
|
||||||
@@ -1,7 +1,6 @@
|
|
||||||
# Copyright (C) 2022 The Qt Company Ltd.
|
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
-qt_find_package(Threads PROVIDED_TARGETS Threads::Threads)
|
|
||||||
qt_find_package(WrapPCRE2 PROVIDED_TARGETS WrapPCRE2::WrapPCRE2)
|
|
||||||
qt_find_package(WrapZLIB PROVIDED_TARGETS WrapZLIB::WrapZLIB)
|
|
||||||
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
From 4c7360faeb0fb7f1dfd995619fb8c596b4e15606 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
|
||||||
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
|
||||||
Date: Thu, 8 Aug 2024 10:29:43 -0400
|
|
||||||
Subject: [PATCH] qtwebengine: add missing chromium dependencies
|
|
||||||
|
|
||||||
For more information, see:
|
|
||||||
https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/555586
|
|
||||||
---
|
|
||||||
chromium/content/public/browser/BUILD.gn | 1 +
|
|
||||||
chromium/extensions/browser/api/declarative_net_request/BUILD.gn | 1 +
|
|
||||||
2 files changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn b/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn
|
|
||||||
index b25bf5764e7..dfbfb2ec77b 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn
|
|
||||||
@@ -515,6 +515,7 @@ jumbo_source_set("browser_sources") {
|
|
||||||
"//cc",
|
|
||||||
"//components/services/storage/public/cpp",
|
|
||||||
"//components/viz/host",
|
|
||||||
+ "//components/spellcheck:buildflags",
|
|
||||||
"//content/browser", # Must not be public_deps!
|
|
||||||
"//device/fido",
|
|
||||||
"//gpu",
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn
|
|
||||||
index 1fc492f5a0c..13a266e22f1 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn
|
|
||||||
@@ -23,6 +23,7 @@ source_set("declarative_net_request") {
|
|
||||||
"//extensions/common",
|
|
||||||
"//extensions/common/api",
|
|
||||||
"//services/preferences/public/cpp",
|
|
||||||
+ "//components/web_cache/browser",
|
|
||||||
]
|
|
||||||
|
|
||||||
public_deps = [ "//extensions/browser:browser_sources" ]
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
From ab6d5bebaf68a9f4d00440b2adbaffe0e5b2ae6c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
|
||||||
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
|
||||||
Date: Thu, 8 Aug 2024 10:55:08 -0400
|
|
||||||
Subject: [PATCH] qtwebengine: fix libxml2 build error
|
|
||||||
|
|
||||||
Version 2.12 of libxml2 introduced a change that broke chromium's build,
|
|
||||||
see: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/523633
|
|
||||||
---
|
|
||||||
.../third_party/blink/renderer/core/xml/xslt_processor.h | 5 +++++
|
|
||||||
.../blink/renderer/core/xml/xslt_processor_libxslt.cc | 4 ++++
|
|
||||||
2 files changed, 9 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor.h b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor.h
|
|
||||||
index d53835e9675..72536e4fd7d 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor.h
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor.h
|
|
||||||
@@ -77,7 +77,12 @@ class XSLTProcessor final : public ScriptWrappable {
|
|
||||||
|
|
||||||
void reset();
|
|
||||||
|
|
||||||
+#if LIBXML_VERSION >= 21200
|
|
||||||
+ static void ParseErrorFunc(void* user_data, const xmlError*);
|
|
||||||
+#else
|
|
||||||
static void ParseErrorFunc(void* user_data, xmlError*);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
static void GenericErrorFunc(void* user_data, const char* msg, ...);
|
|
||||||
|
|
||||||
// Only for libXSLT callbacks
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc
|
|
||||||
index 133e0b3355d..e8e6a09f485 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/core/xml/xslt_processor_libxslt.cc
|
|
||||||
@@ -66,7 +66,11 @@ void XSLTProcessor::GenericErrorFunc(void*, const char*, ...) {
|
|
||||||
// It would be nice to do something with this error message.
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if LIBXML_VERSION >= 21200
|
|
||||||
+void XSLTProcessor::ParseErrorFunc(void* user_data, const xmlError* error) {
|
|
||||||
+#else
|
|
||||||
void XSLTProcessor::ParseErrorFunc(void* user_data, xmlError* error) {
|
|
||||||
+#endif
|
|
||||||
FrameConsole* console = static_cast<FrameConsole*>(user_data);
|
|
||||||
if (!console)
|
|
||||||
return;
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
From 6e0848a1c51c6494e3b7410c5fe38941d48fcb36 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
|
||||||
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
|
||||||
Date: Wed, 16 Oct 2024 22:32:12 -0400
|
|
||||||
Subject: [PATCH] qtwebengine: fix v8 build error
|
|
||||||
|
|
||||||
In file included from ../../../3rdparty/chromium/v8/src/heap/cppgc/sweeper.h:14,
|
|
||||||
from ./../../../3rdparty/chromium/v8/src/heap/cppgc/sweeper.cc:5,
|
|
||||||
from gen/v8/cppgc_base_jumbo_7.cc:5:
|
|
||||||
../../../3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h: In member function 'void cppgc::internal::StatsCollector::ForAllAllocationObservers(Callback)':
|
|
||||||
../../../3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h:401:48: error: cannot convert 'std::vector<cppgc::internal::StatsCollector::AllocationObserver*>::iterator' to 'const char*'
|
|
||||||
401 | std::remove(allocation_observers_.begin(), allocation_observers_.end(),
|
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
|
|
||||||
| |
|
|
||||||
| std::vector<cppgc::internal::StatsCollector::AllocationObserver*>::iterator
|
|
||||||
---
|
|
||||||
.../src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h b/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h
|
|
||||||
index 2cf728489d..d8414ae3c6 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h
|
|
||||||
@@ -8,6 +8,7 @@
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
+#include <algorithm>
|
|
||||||
#include <atomic>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
--
|
|
||||||
2.47.0
|
|
||||||
|
|
||||||
@ -1,7 +1,3 @@
|
|||||||
0001-qtwebengine-enable-building-with-Python-3.12.patch
|
0001-qtwebengine-fix-build-error-due-to-missing-chromium-dependency.patch
|
||||||
0002-fix-binary-tokenizer.patch
|
0002-qtwebengine-fix-ASSERT_TRIVIALLY_COPYABLE-failure.patch
|
||||||
0003-qtwayland-downgrade-wl-seat-to-avoid-high-resolution.patch
|
0003-qtwebengine-fix-zygote_communication_linux-dependency.patch
|
||||||
0004-qtbase-fix-CMake-error.patch
|
|
||||||
0005-qtwebengine-add-missing-chromium-dependencies.patch
|
|
||||||
0006-qtwebengine-fix-libxml2-build-error.patch
|
|
||||||
0007-qtwebengine-fix-v8-build-error.patch
|
|
||||||
@ -12,10 +12,14 @@ override_dh_auto_configure:
|
|||||||
-confirm-license \
|
-confirm-license \
|
||||||
-nomake examples \
|
-nomake examples \
|
||||||
-nomake tests \
|
-nomake tests \
|
||||||
-prefix "${QT_JAMI_PREFIX}"
|
-prefix "${QT_JAMI_PREFIX}" \
|
||||||
|
-- -DFFMPEG_DIR=/opt/libqt-jami-ffmpeg -DQT_DEPLOY_FFMPEG=ON
|
||||||
|
|
||||||
override_dh_auto_build:
|
override_dh_auto_build:
|
||||||
cmake --build . --parallel
|
cmake --build . --parallel
|
||||||
|
|
||||||
override_dh_auto_install:
|
override_dh_auto_install:
|
||||||
cmake --install . --prefix $(CURDIR)/debian/tmp/${QT_JAMI_PREFIX}
|
cmake --install . --prefix $(CURDIR)/debian/tmp/${QT_JAMI_PREFIX}
|
||||||
|
|
||||||
|
override_dh_shlibdeps:
|
||||||
|
dh_shlibdeps -v -l$(CURDIR)/debian/libqt-jami/usr/lib/libqt-jami/lib
|
||||||
|
|||||||
@ -30,7 +30,7 @@ Build-Depends: debhelper (>= 9),
|
|||||||
libspeex-dev,
|
libspeex-dev,
|
||||||
libspeexdsp-dev,
|
libspeexdsp-dev,
|
||||||
uuid-dev,
|
uuid-dev,
|
||||||
libavcodec-dev,
|
libavcodec-dev | libavcodec-extra-dev,
|
||||||
libavutil-dev,
|
libavutil-dev,
|
||||||
libavformat-dev,
|
libavformat-dev,
|
||||||
libswscale-dev,
|
libswscale-dev,
|
||||||
|
|||||||
@ -95,14 +95,12 @@ if [ -f /etc/os-release ]; then
|
|||||||
ENDTAG="debian_11"
|
ENDTAG="debian_11"
|
||||||
elif [ "${VERSION_CODENAME}" = "bookworm" ] || [ "${ID}_${VERSION_ID}" = "debian_12" ]; then
|
elif [ "${VERSION_CODENAME}" = "bookworm" ] || [ "${ID}_${VERSION_ID}" = "debian_12" ]; then
|
||||||
ENDTAG="debian_12"
|
ENDTAG="debian_12"
|
||||||
elif [ "${UBUNTU_CODENAME}" = "focal" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_20.04" ]; then
|
|
||||||
ENDTAG="ubuntu_20.04"
|
|
||||||
elif [ "${UBUNTU_CODENAME}" = "jammy" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_22.04" ]; then
|
elif [ "${UBUNTU_CODENAME}" = "jammy" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_22.04" ]; then
|
||||||
ENDTAG="ubuntu_22.04"
|
ENDTAG="ubuntu_22.04"
|
||||||
elif [ "${UBUNTU_CODENAME}" = "noble" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_24.04" ]; then
|
elif [ "${UBUNTU_CODENAME}" = "noble" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_24.04" ]; then
|
||||||
ENDTAG="ubuntu_24.04"
|
ENDTAG="ubuntu_24.04"
|
||||||
elif [ "${UBUNTU_CODENAME}" = "oracular" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_24.10" ]; then
|
elif [ "${UBUNTU_CODENAME}" = "plucky" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_25.04" ]; then
|
||||||
ENDTAG="ubuntu_24.10"
|
ENDTAG="ubuntu_25.04"
|
||||||
elif [ "${ID}" = "debian" ] && \
|
elif [ "${ID}" = "debian" ] && \
|
||||||
[ "$(command -v lsb_release)" ] && \
|
[ "$(command -v lsb_release)" ] && \
|
||||||
[ "$(lsb_release -rs)" = "testing" ]; then
|
[ "$(lsb_release -rs)" = "testing" ]; then
|
||||||
|
|||||||
@ -45,7 +45,7 @@ QT_JAMI_PREFIX := ${QT_JAMI_PREFIX}
|
|||||||
export PATH := $(QT_JAMI_PREFIX)/bin:${PATH}
|
export PATH := $(QT_JAMI_PREFIX)/bin:${PATH}
|
||||||
export LD_LIBRARY_PATH := $(QT_JAMI_PREFIX)/lib:${LD_LIBRARY_PATH}
|
export LD_LIBRARY_PATH := $(QT_JAMI_PREFIX)/lib:${LD_LIBRARY_PATH}
|
||||||
export PKG_CONFIG_PATH := $(QT_JAMI_PREFIX)/lib/pkgconfig:${PKG_CONFIG_PATH}
|
export PKG_CONFIG_PATH := $(QT_JAMI_PREFIX)/lib/pkgconfig:${PKG_CONFIG_PATH}
|
||||||
export CMAKE_PREFIX_PATH := $(QT_JAMI_PREFIX)/lib/cmake:${CMAKE_PREFIX_PATH}
|
export CMAKE_PREFIX_PATH := $(QT_JAMI_PREFIX):${CMAKE_PREFIX_PATH}
|
||||||
export CFLAGS := $(CFLAGS) -fno-lto
|
export CFLAGS := $(CFLAGS) -fno-lto
|
||||||
export CXXFLAGS := $(CXXFLAGS) -fno-lto
|
export CXXFLAGS := $(CXXFLAGS) -fno-lto
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ override_dh_auto_build:
|
|||||||
--disable-gsm \
|
--disable-gsm \
|
||||||
--disable-speexdsp \
|
--disable-speexdsp \
|
||||||
--disable-natpmp \
|
--disable-natpmp \
|
||||||
--enable-gnutls $(BUNDLED_PKGS) && \
|
$(BUNDLED_PKGS) && \
|
||||||
make list && \
|
make list && \
|
||||||
make -j$(NO_CPUS) V=1
|
make -j$(NO_CPUS) V=1
|
||||||
cd daemon && \
|
cd daemon && \
|
||||||
@ -91,11 +91,13 @@ override_dh_auto_build:
|
|||||||
mkdir build && \
|
mkdir build && \
|
||||||
cd build && \
|
cd build && \
|
||||||
cmake \
|
cmake \
|
||||||
|
-DBUILD_VERSION=$(BUILD_VERSION) \
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
-DLIBJAMI_BUILD_DIR=$(CURDIR)/daemon/src \
|
-DLIBJAMI_BUILD_DIR=$(CURDIR)/daemon/src \
|
||||||
-DENABLE_LIBWRAP=true \
|
-DENABLE_LIBWRAP=true \
|
||||||
|
-DBUILD_TESTING=Off \
|
||||||
$(CMAKE_OPTIONS) ..
|
$(CMAKE_OPTIONS) ..
|
||||||
make -C build -j$(NO_CPUS) V=1
|
make -C build -j$(NO_CPUS) VERBOSE=1
|
||||||
|
|
||||||
override_dh_auto_clean:
|
override_dh_auto_clean:
|
||||||
# Daemon clean
|
# Daemon clean
|
||||||
|
|||||||
@ -49,7 +49,7 @@ BuildRequires: libXfixes-devel
|
|||||||
BuildRequires: libuuid-devel
|
BuildRequires: libuuid-devel
|
||||||
BuildRequires: libva-devel
|
BuildRequires: libva-devel
|
||||||
BuildRequires: libvdpau-devel
|
BuildRequires: libvdpau-devel
|
||||||
BuildRequires: pcre-devel
|
BuildRequires: (pcre-devel or pcre2-devel)
|
||||||
BuildRequires: pipewire-devel
|
BuildRequires: pipewire-devel
|
||||||
BuildRequires: uuid-devel
|
BuildRequires: uuid-devel
|
||||||
BuildRequires: yaml-cpp-devel
|
BuildRequires: yaml-cpp-devel
|
||||||
@ -82,7 +82,6 @@ cd %{_builddir}/jami-%{version}/daemon/contrib/native && \
|
|||||||
make list && \
|
make list && \
|
||||||
make fetch && \
|
make fetch && \
|
||||||
make %{_smp_mflags} V=1 && \
|
make %{_smp_mflags} V=1 && \
|
||||||
make %{_smp_mflags} V=1 .ffmpeg
|
|
||||||
# Configure the daemon.
|
# Configure the daemon.
|
||||||
cd %{_builddir}/jami-%{version}/daemon && \
|
cd %{_builddir}/jami-%{version}/daemon && \
|
||||||
./autogen.sh && \
|
./autogen.sh && \
|
||||||
|
|||||||
@ -16,9 +16,9 @@
|
|||||||
%define computed_job_count_ %(echo $(( %available_memory / %memory_required_per_core / %max_parallel_builds )))
|
%define computed_job_count_ %(echo $(( %available_memory / %memory_required_per_core / %max_parallel_builds )))
|
||||||
%define computed_job_count %max %computed_job_count_ 1
|
%define computed_job_count %max %computed_job_count_ 1
|
||||||
%define job_count %min %cpu_count %computed_job_count
|
%define job_count %min %cpu_count %computed_job_count
|
||||||
# Exclude vendored Qt6 from dependency generator
|
# Exclude vendored Qt6 and FFmpeg libraries from dependency generator
|
||||||
%define __provides_exclude_from ^%{_libdir}/qt-jami/.*$
|
%define __provides_exclude_from ^%{_libdir}/qt-jami/.*$
|
||||||
%define __requires_exclude ^libQt6.*$
|
%define __requires_exclude ^(libQt6.*|libavcodec.*|libavformat.*|libavutil.*|libswresample.*|libswscale.*)$
|
||||||
|
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
Version: %{version}
|
Version: %{version}
|
||||||
@ -29,8 +29,9 @@ License: GPLv3+
|
|||||||
Vendor: Savoir-faire Linux Inc.
|
Vendor: Savoir-faire Linux Inc.
|
||||||
URL: https://jami.net/
|
URL: https://jami.net/
|
||||||
Source: jami-libqt-%{version}.tar.xz
|
Source: jami-libqt-%{version}.tar.xz
|
||||||
Patch0: 0001-fix-gcc14.patch
|
Patch0: 0001-qtwebengine-fix-build-error-due-to-missing-chromium-dependency.patch
|
||||||
Patch1: 0002-qtwebengine-add-missing-chromium-dependencies.patch
|
Patch1: 0002-qtwebengine-fix-ASSERT_TRIVIALLY_COPYABLE-failure.patch
|
||||||
|
Patch2: 0003-qtwebengine-fix-zygote_communication_linux-dependency.patch
|
||||||
|
|
||||||
%global gst 0.10
|
%global gst 0.10
|
||||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||||
@ -68,34 +69,10 @@ This package contains Qt libraries for Jami.
|
|||||||
%setup -n qt-everywhere-src-%{version}
|
%setup -n qt-everywhere-src-%{version}
|
||||||
%patch -P 0 -p1
|
%patch -P 0 -p1
|
||||||
%patch -P 1 -p1
|
%patch -P 1 -p1
|
||||||
|
%patch -P 2 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
echo "Building Qt using %{job_count} parallel jobs"
|
echo "Building Qt using %{job_count} parallel jobs"
|
||||||
# Qt 6.4 (https://wiki.linuxfromscratch.org/blfs/ticket/14729)
|
|
||||||
sed -i 's,default=False,default=True,g' qtwebengine/src/3rdparty/chromium/third_party/catapult/tracing/tracing_build/generate_about_tracing_contents.py
|
|
||||||
# Gcc 13
|
|
||||||
sed -i 's,std::uint32_t,uint32_t,g' qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
|
|
||||||
sed -i 's,std::uint32_t,uint32_t,g' qtquick3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
|
|
||||||
# https://bugs.gentoo.org/768261 (Qt 5.15)
|
|
||||||
sed -i 's,#include "absl/base/internal/spinlock.h"1,#include "absl/base/internal/spinlock.h"1\n#include <limits>,g' qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc
|
|
||||||
sed -i 's,#include <stdint.h>,#include <stdint.h>\n#include <limits>,g' qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/containers/string_pool.h
|
|
||||||
# else, break build for fedora 35
|
|
||||||
sed -i 's/static const unsigned kSigStackSize = std::max(16384, SIGSTKSZ);/static const size_t kSigStackSize = std::max(size_t(16384), size_t(SIGSTKSZ));/g' qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
|
|
||||||
# https://bugreports.qt.io/browse/QTBUG-93452 (Qt 5.15)
|
|
||||||
sed -i 's,# include <utility>,# include <utility>\n# include <limits>,g' qtbase/src/corelib/global/qglobal.h
|
|
||||||
sed -i 's,#include <string.h>,#include <string.h>\n#include <limits>,g' qtbase/src/corelib/global/qendian.h
|
|
||||||
cat qtbase/src/corelib/global/qendian.h
|
|
||||||
sed -i 's,#include <string.h>,#include <string.h>\n#include <limits>,g' qtbase/src/corelib/global/qfloat16.h
|
|
||||||
sed -i 's,#include <QtCore/qbytearray.h>,#include <QtCore/qbytearray.h>\n#include <limits>,g' qtbase/src/corelib/text/qbytearraymatcher.h
|
|
||||||
cat qtwebengine/configure.cmake
|
|
||||||
|
|
||||||
#https://bugreports.qt.io/browse/QTBUG-117979
|
|
||||||
if test -f "/usr/bin/python3.10"; then
|
|
||||||
/usr/bin/python3.10 -m venv env
|
|
||||||
source env/bin/activate
|
|
||||||
python -m pip install html5lib
|
|
||||||
python -m pip install six
|
|
||||||
fi
|
|
||||||
|
|
||||||
# recent gcc version do not like lto from qt
|
# recent gcc version do not like lto from qt
|
||||||
CXXFLAGS="${CXXFLAGS} -fno-lto" CFLAGS="${CFLAGS} -fno-lto" LDFLAGS="$(CFLAGS) ${LDFLAGS}" ./configure \
|
CXXFLAGS="${CXXFLAGS} -fno-lto" CFLAGS="${CFLAGS} -fno-lto" LDFLAGS="$(CFLAGS) ${LDFLAGS}" ./configure \
|
||||||
@ -103,8 +80,8 @@ CXXFLAGS="${CXXFLAGS} -fno-lto" CFLAGS="${CFLAGS} -fno-lto" LDFLAGS="$(CFLAGS) $
|
|||||||
-confirm-license \
|
-confirm-license \
|
||||||
-nomake examples \
|
-nomake examples \
|
||||||
-nomake tests \
|
-nomake tests \
|
||||||
-prefix "%{_libdir}/qt-jami"
|
-prefix "%{_libdir}/qt-jami" \
|
||||||
sed -i 's,bin/python,bin/env python3,g' qtbase/mkspecs/features/uikit/devices.py
|
-- -DFFMPEG_DIR=/opt/libqt-jami-ffmpeg -DQT_DEPLOY_FFMPEG=ON
|
||||||
# Chromium is built using Ninja, which doesn't honor MAKEFLAGS.
|
# Chromium is built using Ninja, which doesn't honor MAKEFLAGS.
|
||||||
cmake --build . --parallel
|
cmake --build . --parallel
|
||||||
|
|
||||||
|
|||||||
@ -1,16 +1,7 @@
|
|||||||
%define name jami
|
%define name jami
|
||||||
%define version RELEASE_VERSION
|
%define version RELEASE_VERSION
|
||||||
%define release 0
|
%define release 0
|
||||||
|
|
||||||
# The AppStream 1.0 spec says that the catalog file must be put in /usr/share/swcatalog/xml
|
|
||||||
# (see https://www.freedesktop.org/software/appstream/docs/chap-CatalogData.html).
|
|
||||||
#
|
|
||||||
# However, openSUSE Leap still uses the legacy path /usr/share/app-info/xmls as of version 15.5.
|
|
||||||
%if 0%{?sle_version} && 0%{?sle_version} <= 150500
|
|
||||||
%define appstream_catalog_dir /share/app-info/xmls
|
|
||||||
%else
|
|
||||||
%define appstream_catalog_dir /share/swcatalog/xml
|
%define appstream_catalog_dir /share/swcatalog/xml
|
||||||
%endif
|
|
||||||
|
|
||||||
# Exclude vendored Qt6 from dependency generator
|
# Exclude vendored Qt6 from dependency generator
|
||||||
%define __requires_exclude ^libQt6.*$
|
%define __requires_exclude ^libQt6.*$
|
||||||
@ -82,8 +73,11 @@ cd %{_builddir}/jami-%{version} && \
|
|||||||
-DAPPSTREAM_CATALOG_DIR=%{appstream_catalog_dir} \
|
-DAPPSTREAM_CATALOG_DIR=%{appstream_catalog_dir} \
|
||||||
-DWITH_DAEMON_SUBMODULE=true \
|
-DWITH_DAEMON_SUBMODULE=true \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DBUILD_VERSION=${BUILD_VERSION} \
|
||||||
|
-DCMAKE_PREFIX_PATH=%{QT_JAMI_PREFIX} \
|
||||||
|
-DBUILD_TESTING=Off \
|
||||||
..
|
..
|
||||||
make -C %{_builddir}/jami-%{version}/build %{_smp_mflags} V=2
|
make -C %{_builddir}/jami-%{version}/build %{_smp_mflags} VERBOSE=1
|
||||||
|
|
||||||
%install
|
%install
|
||||||
DESTDIR=%{buildroot} make -C %{_builddir}/jami-%{version}/build install V=2
|
DESTDIR=%{buildroot} make -C %{_builddir}/jami-%{version}/build install V=2
|
||||||
@ -93,7 +87,7 @@ DESTDIR=%{buildroot} make -C %{_builddir}/jami-%{version}/build install V=2
|
|||||||
%{_bindir}/jami
|
%{_bindir}/jami
|
||||||
%{_datadir}/applications/net.jami.Jami.desktop
|
%{_datadir}/applications/net.jami.Jami.desktop
|
||||||
%{_datadir}/jami/net.jami.Jami.desktop
|
%{_datadir}/jami/net.jami.Jami.desktop
|
||||||
%{_datadir}/icons/hicolor/scalable/apps/jami.svg
|
%{_datadir}/icons/hicolor/scalable/apps/net.jami.Jami.svg
|
||||||
%{_datadir}/icons/hicolor/48x48/apps/jami.png
|
%{_datadir}/icons/hicolor/48x48/apps/jami.png
|
||||||
%{_datadir}/pixmaps/jami.xpm
|
%{_datadir}/pixmaps/jami.xpm
|
||||||
%{_datadir}/metainfo/net.jami.Jami.metainfo.xml
|
%{_datadir}/metainfo/net.jami.Jami.metainfo.xml
|
||||||
|
|||||||
@ -1,26 +0,0 @@
|
|||||||
From 9721082687c9529fe6ae3c5304dcf079158e8a77 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sam James <sam@gentoo.org>
|
|
||||||
Date: Sun, 04 Jun 2023 04:15:16 +0100
|
|
||||||
Subject: [PATCH] heap: Add missing <algorithm> include for std::remove
|
|
||||||
|
|
||||||
GCC 14 changes some internal includes within libstdc++ so this transient
|
|
||||||
include gets lost. Include <algorithm> explicitly for std::remove.
|
|
||||||
|
|
||||||
Change-Id: Iab8a2c751a0f9c9dc6a770d6296ad6de724ef3bb
|
|
||||||
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4583222
|
|
||||||
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
|
|
||||||
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
|
|
||||||
Cr-Commit-Position: refs/heads/main@{#88037}
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h b/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h
|
|
||||||
index 2cf728489d..d8414ae3c6 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/heap/cppgc/stats-collector.h
|
|
||||||
@@ -8,6 +8,7 @@
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
+#include <algorithm>
|
|
||||||
#include <atomic>
|
|
||||||
#include <vector>
|
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
From 0d0856252b48895a8d6cad7bff66c904ccfc0725 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||||
|
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||||
|
Date: Wed, 16 Jul 2025 13:49:54 -0400
|
||||||
|
Subject: [PATCH] qtwebengine: fix build error due to missing chromium
|
||||||
|
dependency
|
||||||
|
|
||||||
|
Error:
|
||||||
|
|
||||||
|
In file included from ../../../3rdparty/chromium/ui/gl/gl_surface.h:30,
|
||||||
|
from ../../../3rdparty/chromium/tools/v8_context_snapshot/qt_overrides.cc:13:
|
||||||
|
../../../3rdparty/chromium/ui/gl/gl_implementation.h:18:10: fatal error: ui/gl/buildflags.h: No such file or directory
|
||||||
|
18 | #include "ui/gl/buildflags.h"
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~
|
||||||
|
compilation terminated.
|
||||||
|
|
||||||
|
Patch taken from: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/637889
|
||||||
|
---
|
||||||
|
.../src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn b/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn
|
||||||
|
index 812445d934..97cd46140d 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/chrome/test/chromedriver/BUILD.gn
|
||||||
|
@@ -455,6 +455,10 @@ if (is_linux && !is_qtwebengine) {
|
||||||
|
output_name = "webenginedriver"
|
||||||
|
deps -= [ "//net/traffic_annotation:test_support" ]
|
||||||
|
|
||||||
|
+ if (is_linux || is_mac) {
|
||||||
|
+ deps += [ "//ui/gl:buildflags" ]
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (is_linux) {
|
||||||
|
sources += [
|
||||||
|
"//content/public/common/content_switches.cc",
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
From 04778c7f54c8a1a0e7fced75c5ef39ced82cece1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
|
||||||
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
|
||||||
Date: Sat, 12 Oct 2024 16:21:35 -0400
|
|
||||||
Subject: [PATCH] qtwebengine: add missing chromium dependencies
|
|
||||||
|
|
||||||
For more information, see:
|
|
||||||
https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/555586
|
|
||||||
---
|
|
||||||
chromium/content/public/browser/BUILD.gn | 1 +
|
|
||||||
chromium/extensions/browser/api/declarative_net_request/BUILD.gn | 1 +
|
|
||||||
2 files changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn b/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn
|
|
||||||
index b25bf5764e7..dfbfb2ec77b 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/content/public/browser/BUILD.gn
|
|
||||||
@@ -515,6 +515,7 @@ jumbo_source_set("browser_sources") {
|
|
||||||
"//cc",
|
|
||||||
"//components/services/storage/public/cpp",
|
|
||||||
"//components/viz/host",
|
|
||||||
+ "//components/spellcheck:buildflags",
|
|
||||||
"//content/browser", # Must not be public_deps!
|
|
||||||
"//device/fido",
|
|
||||||
"//gpu",
|
|
||||||
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn
|
|
||||||
index 1fc492f5a0c..13a266e22f1 100644
|
|
||||||
--- a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn
|
|
||||||
+++ b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/declarative_net_request/BUILD.gn
|
|
||||||
@@ -23,6 +23,7 @@ source_set("declarative_net_request") {
|
|
||||||
"//extensions/common",
|
|
||||||
"//extensions/common/api",
|
|
||||||
"//services/preferences/public/cpp",
|
|
||||||
+ "//components/web_cache/browser",
|
|
||||||
]
|
|
||||||
|
|
||||||
public_deps = [ "//extensions/browser:browser_sources" ]
|
|
||||||
--
|
|
||||||
2.47.0
|
|
||||||
|
|
||||||
@ -0,0 +1,79 @@
|
|||||||
|
From 24dd03e131cd3edc89907a699369562e61d8aa86 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||||
|
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||||
|
Date: Mon, 21 Jul 2025 13:19:58 -0400
|
||||||
|
Subject: [PATCH] qtwebengine: fix ASSERT_TRIVIALLY_COPYABLE failure
|
||||||
|
|
||||||
|
Some compilers don't implement std::is_trivially_copyable correctly,
|
||||||
|
which can cause chromium's build to fail with the following error:
|
||||||
|
|
||||||
|
In file included from ../../../3rdparty/chromium/v8/src/base/bits.h:12,
|
||||||
|
from ../../../3rdparty/chromium/v8/src/base/small-vector.h:12,
|
||||||
|
from ../../../3rdparty/chromium/v8/src/compiler/turboshaft/graph.h:17,
|
||||||
|
from ../../../3rdparty/chromium/v8/src/compiler/turboshaft/analyzer-iterator.h:9,
|
||||||
|
from ./../../../3rdparty/chromium/v8/src/compiler/turboshaft/analyzer-iterator.cc:5,
|
||||||
|
from gen/v8/v8_turboshaft_jumbo_1.cc:5:
|
||||||
|
../../../3rdparty/chromium/v8/src/base/small-vector.h: In instantiation of 'class v8::base::SmallVector<std::pair<const v8::internal::compiler::turboshaft::PhiOp*, const v8::internal::compiler::turboshaft::OpIndex>, 16>':
|
||||||
|
../../../3rdparty/chromium/v8/src/compiler/turboshaft/loop-unrolling-reducer.h:433:11: required from here
|
||||||
|
../../../3rdparty/chromium/v8/src/base/macros.h:206:55: error: static assertion failed: T should be trivially copyable
|
||||||
|
206 | static_assert(::v8::base::is_trivially_copyable<T>::value, \
|
||||||
|
| ^~~~~
|
||||||
|
../../../3rdparty/chromium/v8/src/base/small-vector.h:25:3: note: in expansion of macro 'ASSERT_TRIVIALLY_COPYABLE'
|
||||||
|
25 | ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
../../../3rdparty/chromium/v8/src/base/macros.h:206:55: note: 'v8::base::is_trivially_copyable<std::pair<const v8::internal::compiler::turboshaft::PhiOp*, const v8::internal::compiler::turboshaft::OpIndex> >::value' evaluates to false
|
||||||
|
206 | static_assert(::v8::base::is_trivially_copyable<T>::value, \
|
||||||
|
| ^~~~~
|
||||||
|
../../../3rdparty/chromium/v8/src/base/small-vector.h:25:3: note: in expansion of macro 'ASSERT_TRIVIALLY_COPYABLE'
|
||||||
|
25 | ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
References:
|
||||||
|
https://chromium-review.googlesource.com/c/v8/v8/+/5679182
|
||||||
|
https://chromium-review.googlesource.com/c/v8/v8/+/5872655
|
||||||
|
https://github.com/rubyjs/libv8-node/pull/57
|
||||||
|
https://github.com/nodejs/node/issues/54576
|
||||||
|
---
|
||||||
|
qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h | 3 ++-
|
||||||
|
qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h | 4 ++--
|
||||||
|
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
|
||||||
|
index 93a99ec136..88c6555189 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
|
||||||
|
@@ -173,7 +173,8 @@ namespace base {
|
||||||
|
// base::is_trivially_copyable will differ for these cases.
|
||||||
|
template <typename T>
|
||||||
|
struct is_trivially_copyable {
|
||||||
|
-#if V8_CC_MSVC
|
||||||
|
+#if V8_CC_MSVC || (__GNUC__ == 12 && __GNUC_MINOR__ <= 2) || \
|
||||||
|
+ (defined(__clang__) && __clang_major__ <= 17)
|
||||||
|
// Unfortunately, MSVC 2015 is broken in that std::is_trivially_copyable can
|
||||||
|
// be false even though it should be true according to the standard.
|
||||||
|
// (status at 2018-02-26, observed on the msvc waterfall bot).
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h
|
||||||
|
index b1b5d64198..ce2e003fb9 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/small-vector.h
|
||||||
|
@@ -22,7 +22,7 @@ template <typename T, size_t kSize, typename Allocator = std::allocator<T>>
|
||||||
|
class SmallVector {
|
||||||
|
// Currently only support trivially copyable and trivially destructible data
|
||||||
|
// types, as it uses memcpy to copy elements and never calls destructors.
|
||||||
|
- ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
+ // ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
static_assert(std::is_trivially_destructible<T>::value);
|
||||||
|
|
||||||
|
public:
|
||||||
|
@@ -193,7 +193,7 @@ class SmallVector {
|
||||||
|
|
||||||
|
void resize_no_init(size_t new_size) {
|
||||||
|
// Resizing without initialization is safe if T is trivially copyable.
|
||||||
|
- ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
+ // ASSERT_TRIVIALLY_COPYABLE(T);
|
||||||
|
if (new_size > capacity()) Grow(new_size);
|
||||||
|
end_ = begin_ + new_size;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
From 5c247c7a084661932969acf2f7103096b8b0d6b4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||||
|
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||||
|
Date: Tue, 22 Jul 2025 13:40:55 -0400
|
||||||
|
Subject: [PATCH] qtwebengine: fix zygote_communication_linux dependency
|
||||||
|
|
||||||
|
Commit 42e09c7bea of qtwebengine-chromium added
|
||||||
|
content/public/browser/child_process_host.h to the list of header files
|
||||||
|
included in zygote_communication_linux.cc, which can cause the build to
|
||||||
|
fail with the following error:
|
||||||
|
|
||||||
|
In file included from ../../../3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc:21:
|
||||||
|
../../../3rdparty/chromium/content/public/browser/child_process_host.h:17:10: fatal error: content/common/buildflags.h: No such file or directory
|
||||||
|
17 | #include "content/common/buildflags.h"
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
---
|
||||||
|
.../content/common/zygote/zygote_communication_linux.cc | 9 ++++++---
|
||||||
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc b/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc
|
||||||
|
index 5bd9a53568..ff883d59e4 100644
|
||||||
|
--- a/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc
|
||||||
|
+++ b/qtwebengine/src/3rdparty/chromium/content/common/zygote/zygote_communication_linux.cc
|
||||||
|
@@ -18,7 +18,7 @@
|
||||||
|
#include "base/posix/eintr_wrapper.h"
|
||||||
|
#include "base/posix/unix_domain_socket.h"
|
||||||
|
#include "content/common/zygote/zygote_commands_linux.h"
|
||||||
|
-#include "content/public/browser/child_process_host.h"
|
||||||
|
+#include "content/public/common/content_paths.h"
|
||||||
|
#include "content/public/common/content_switches.h"
|
||||||
|
#include "content/public/common/result_codes.h"
|
||||||
|
#include "sandbox/policy/switches.h"
|
||||||
|
@@ -237,8 +237,11 @@ void ZygoteCommunication::Init(
|
||||||
|
base::OnceCallback<pid_t(base::CommandLine*, base::ScopedFD*)> launcher) {
|
||||||
|
CHECK(!init_);
|
||||||
|
|
||||||
|
- base::FilePath chrome_path = content::ChildProcessHost::GetChildPath(
|
||||||
|
- content::ChildProcessHost::CHILD_NORMAL);
|
||||||
|
+ base::FilePath chrome_path = base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
|
||||||
|
+ switches::kBrowserSubprocessPath);
|
||||||
|
+ if (chrome_path.empty()) {
|
||||||
|
+ base::PathService::Get(CHILD_PROCESS_EXE, &chrome_path);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
base::CommandLine cmd_line(chrome_path);
|
||||||
|
cmd_line.AppendSwitchASCII(switches::kProcessType, switches::kZygoteProcess);
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -98,13 +98,13 @@ description: |
|
|||||||
|
|
||||||
confinement: strict
|
confinement: strict
|
||||||
grade: stable
|
grade: stable
|
||||||
base: core20
|
base: core22
|
||||||
|
|
||||||
plugs:
|
plugs:
|
||||||
gnome-3-38-2004:
|
gnome-42-2204:
|
||||||
interface: content
|
interface: content
|
||||||
target: $SNAP/gnome-platform
|
target: $SNAP/gnome-platform
|
||||||
default-provider: gnome-3-38-2004:gnome-3-38-2004
|
default-provider: gnome-42-2204
|
||||||
gtk-3-themes:
|
gtk-3-themes:
|
||||||
interface: content
|
interface: content
|
||||||
target: $SNAP/data-dir/themes
|
target: $SNAP/data-dir/themes
|
||||||
@ -129,8 +129,8 @@ slots:
|
|||||||
name: cx.ring.Ring
|
name: cx.ring.Ring
|
||||||
|
|
||||||
layout:
|
layout:
|
||||||
/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/alsa-lib:
|
/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib:
|
||||||
bind: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/alsa-lib
|
bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib
|
||||||
/usr/share/alsa:
|
/usr/share/alsa:
|
||||||
bind: $SNAP/usr/share/alsa
|
bind: $SNAP/usr/share/alsa
|
||||||
/usr/share/X11/xkb:
|
/usr/share/X11/xkb:
|
||||||
@ -139,7 +139,7 @@ layout:
|
|||||||
environment:
|
environment:
|
||||||
XDG_CURRENT_DESKTOP: Unity
|
XDG_CURRENT_DESKTOP: Unity
|
||||||
QT_BASE_DIR: "/usr/lib/libqt-jami"
|
QT_BASE_DIR: "/usr/lib/libqt-jami"
|
||||||
LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:$SNAP$QT_BASE_DIR/lib"
|
LD_LIBRARY_PATH: "${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$SNAP$QT_BASE_DIR/lib:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pulseaudio"
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
jami:
|
jami:
|
||||||
@ -153,8 +153,8 @@ apps:
|
|||||||
desktop: usr/share/applications/net.jami.Jami.desktop
|
desktop: usr/share/applications/net.jami.Jami.desktop
|
||||||
environment:
|
environment:
|
||||||
PIPEWIRE_CONFIG_NAME: "$SNAP/usr/share/pipewire/pipewire.conf"
|
PIPEWIRE_CONFIG_NAME: "$SNAP/usr/share/pipewire/pipewire.conf"
|
||||||
PIPEWIRE_MODULE_DIR: "$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/pipewire-0.3"
|
PIPEWIRE_MODULE_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pipewire-0.3"
|
||||||
SPA_PLUGIN_DIR: "$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/spa-0.2"
|
SPA_PLUGIN_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/spa-0.2"
|
||||||
slots:
|
slots:
|
||||||
- dbus-jami
|
- dbus-jami
|
||||||
- dbus-ring
|
- dbus-ring
|
||||||
@ -185,7 +185,7 @@ package-repositories:
|
|||||||
components: [main]
|
components: [main]
|
||||||
suites: [jami]
|
suites: [jami]
|
||||||
key-id: A295D773307D25A33AE72F2F64CD5FA175348F84
|
key-id: A295D773307D25A33AE72F2F64CD5FA175348F84
|
||||||
url: https://dl.jami.net/internal/ubuntu_20.04/
|
url: https://dl.jami.net/internal/ubuntu_22.04/
|
||||||
|
|
||||||
parts:
|
parts:
|
||||||
desktop-launch:
|
desktop-launch:
|
||||||
@ -201,14 +201,14 @@ parts:
|
|||||||
- devscripts
|
- devscripts
|
||||||
- equivs
|
- equivs
|
||||||
override-pull: |
|
override-pull: |
|
||||||
snapcraftctl pull
|
craftctl default
|
||||||
sed -i -E 's|\. \$SNAP/flavor-select|USE_gtk3=true|' gtk/launcher-specific
|
sed -i -E 's|\. \$SNAP/flavor-select|USE_gtk3=true|' gtk/launcher-specific
|
||||||
sed -i -E 's|\. \$SNAP/flavor-select|USE_qt5=true|' qt/launcher-specific
|
sed -i -E 's|\. \$SNAP/flavor-select|USE_qt5=true|' qt/launcher-specific
|
||||||
sed -i -E 's|(append_dir GTK_PATH \$RUNTIME/usr/lib/\$ARCH/gtk-2.0)|#\1|' qt/launcher-specific
|
sed -i -E 's|(append_dir GTK_PATH \$RUNTIME/usr/lib/\$ARCH/gtk-2.0)|#\1|' qt/launcher-specific
|
||||||
sed -i -E 's|\$RUNTIME|$SNAP|g' qt/launcher-specific
|
sed -i -E 's|\$RUNTIME|$SNAP|g' qt/launcher-specific
|
||||||
sed -i -E 's|\$WITH_RUNTIME|no|g' qt/launcher-specific
|
sed -i -E 's|\$WITH_RUNTIME|no|g' qt/launcher-specific
|
||||||
override-build: |
|
override-build: |
|
||||||
snapcraftctl build
|
craftctl default
|
||||||
gcc -Wall -O2 -o bindtextdomain.so -fPIC -shared src/bindtextdomain.c -ldl
|
gcc -Wall -O2 -o bindtextdomain.so -fPIC -shared src/bindtextdomain.c -ldl
|
||||||
|
|
||||||
echo "#!/bin/bash" > desktop-launch
|
echo "#!/bin/bash" > desktop-launch
|
||||||
@ -224,10 +224,10 @@ parts:
|
|||||||
|
|
||||||
cat common/mark-and-exec >> desktop-launch
|
cat common/mark-and-exec >> desktop-launch
|
||||||
|
|
||||||
install -D -m755 desktop-launch $SNAPCRAFT_PART_INSTALL/bin/desktop-launch
|
install -D -m755 desktop-launch $CRAFT_PART_INSTALL/bin/desktop-launch
|
||||||
install -D -m644 bindtextdomain.so $SNAPCRAFT_PART_INSTALL/lib/bindtextdomain.so
|
install -D -m644 bindtextdomain.so $CRAFT_PART_INSTALL/lib/bindtextdomain.so
|
||||||
|
|
||||||
mkdir -pv $SNAPCRAFT_PART_INSTALL/gnome-platform
|
mkdir -pv $CRAFT_PART_INSTALL/gnome-platform
|
||||||
|
|
||||||
scripts:
|
scripts:
|
||||||
plugin: dump
|
plugin: dump
|
||||||
@ -264,44 +264,48 @@ parts:
|
|||||||
build-environment:
|
build-environment:
|
||||||
- QT_BASE_DIR: "/usr/lib/libqt-jami"
|
- QT_BASE_DIR: "/usr/lib/libqt-jami"
|
||||||
- PATH: "$QT_BASE_DIR/bin:$PATH"
|
- PATH: "$QT_BASE_DIR/bin:$PATH"
|
||||||
- LD_LIBRARY_PATH: "$QT_BASE_DIR/lib:$LD_LIBRARY_PATH"
|
- LD_LIBRARY_PATH: "$QT_BASE_DIR/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||||
- PKG_CONFIG_PATH: "$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH"
|
- PKG_CONFIG_PATH: "$QT_BASE_DIR/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
|
||||||
override-pull: |
|
override-pull: |
|
||||||
ls
|
ls
|
||||||
snapcraftctl pull
|
craftctl default
|
||||||
sed -i -E 's|(tmpName) << (PACKAGE_NAME << "_shm_")|\1 << "snap.jami." << \2|' ./daemon/src/media/video/sinkclient.cpp
|
sed -i -E 's|(tmpName) << (PACKAGE_NAME << "_shm_")|\1 << "snap.jami." << \2|' ./daemon/src/media/video/sinkclient.cpp
|
||||||
sed -i -E 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/jami.svg|' extras/data/net.jami.Jami.desktop
|
sed -i -E 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/net.jami.Jami.svg|' extras/data/net.jami.Jami.desktop
|
||||||
override-build: |
|
override-build: |
|
||||||
$SNAPCRAFT_PART_BUILD/extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh
|
$CRAFT_PART_BUILD/extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh
|
||||||
|
|
||||||
cd $SNAPCRAFT_PART_BUILD/daemon/contrib
|
cd $CRAFT_PART_BUILD/daemon/contrib
|
||||||
mkdir -p native
|
mkdir -p native
|
||||||
cd native
|
cd native
|
||||||
../bootstrap
|
../bootstrap
|
||||||
make .ffmpeg
|
make .ffmpeg
|
||||||
make
|
make
|
||||||
|
|
||||||
cd $SNAPCRAFT_PART_BUILD/daemon
|
cd $CRAFT_PART_BUILD/daemon
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
./configure --prefix=/usr --without-dbus
|
./configure --prefix=/usr --without-dbus
|
||||||
make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT
|
make -j$CRAFT_PARALLEL_BUILD_COUNT
|
||||||
DESTDIR=$SNAPCRAFT_PART_INSTALL make install
|
DESTDIR=$CRAFT_PART_INSTALL make install
|
||||||
|
|
||||||
cd $SNAPCRAFT_PART_BUILD/
|
cd $CRAFT_PART_BUILD/
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake .. -DENABLE_LIBWRAP=true \
|
cmake .. -DENABLE_LIBWRAP=true \
|
||||||
-DLIBJAMI_BUILD_DIR=$SNAPCRAFT_PART_BUILD/daemon/src \
|
-DLIBJAMI_BUILD_DIR=$CRAFT_PART_BUILD/daemon/src \
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT
|
-DCMAKE_PREFIX_PATH=$QT_BASE_DIR \
|
||||||
DESTDIR=$SNAPCRAFT_PART_INSTALL make install
|
-DBUILD_VERSION=BUILD_VERSION_PLACEHOLDER \
|
||||||
|
-DBUILD_TESTING=Off
|
||||||
|
make -j$CRAFT_PARALLEL_BUILD_COUNT
|
||||||
|
DESTDIR=$CRAFT_PART_INSTALL make install
|
||||||
build-packages:
|
build-packages:
|
||||||
- autoconf
|
- autoconf
|
||||||
- autoconf-archive
|
- autoconf-archive
|
||||||
- automake
|
- automake
|
||||||
- autopoint
|
- autopoint
|
||||||
- bzip2
|
- bzip2
|
||||||
|
- cmake
|
||||||
- curl
|
- curl
|
||||||
- gcc
|
- gcc
|
||||||
- g++
|
- g++
|
||||||
@ -339,6 +343,7 @@ parts:
|
|||||||
- gnutls-bin
|
- gnutls-bin
|
||||||
- libssl-dev
|
- libssl-dev
|
||||||
- git # PipeWire build dependencies
|
- git # PipeWire build dependencies
|
||||||
|
- meson #
|
||||||
- libasound2-dev #
|
- libasound2-dev #
|
||||||
- libdbus-1-dev # These packages are needed by the
|
- libdbus-1-dev # These packages are needed by the
|
||||||
- libglib2.0-dev # install-pipewire-from-source.sh
|
- libglib2.0-dev # install-pipewire-from-source.sh
|
||||||
@ -351,7 +356,7 @@ parts:
|
|||||||
- libegl1
|
- libegl1
|
||||||
- libgbm1
|
- libgbm1
|
||||||
- libgudev-1.0-0
|
- libgudev-1.0-0
|
||||||
- libjsoncpp1
|
- libjsoncpp25
|
||||||
- libllvm12
|
- libllvm12
|
||||||
- libminizip1
|
- libminizip1
|
||||||
- libnm0
|
- libnm0
|
||||||
@ -384,6 +389,6 @@ parts:
|
|||||||
- -usr/lib/libqt-jami/bin/
|
- -usr/lib/libqt-jami/bin/
|
||||||
- -usr/lib/libqt-jami/docs/
|
- -usr/lib/libqt-jami/docs/
|
||||||
- -usr/lib/libqt-jami/examples/
|
- -usr/lib/libqt-jami/examples/
|
||||||
- -usr/lib/$SNAPCRAFT_ARCH_TRIPLET/libLLVM-*.so*
|
- -usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libLLVM-*.so*
|
||||||
- -usr/lib/$SNAPCRAFT_ARCH_TRIPLET/libclang-*.so*
|
- -usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libclang-*.so*
|
||||||
- -usr/lib/$SNAPCRAFT_ARCH_TRIPLET/libflite*.so*
|
- -usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libflite*.so*
|
||||||
|
|||||||
@ -44,26 +44,12 @@ QUILT_REFRESH_ARGS="-p 1"
|
|||||||
|
|
||||||
if [ ! -f "${qt_deb_path}" ] || [ "${FORCE_REBUILD_QT}" = "true" ]; then
|
if [ ! -f "${qt_deb_path}" ] || [ "${FORCE_REBUILD_QT}" = "true" ]; then
|
||||||
(
|
(
|
||||||
|
|
||||||
# HACK: For now on ubuntu 24.04 there is no python3.10 package
|
|
||||||
# So create a PyEnv environment to install the required packages
|
|
||||||
if cat /etc/os-release | grep -Eq "24.04"; then
|
|
||||||
apt-get install git gcc make python3-pip libssl-dev curl libreadline-dev -y
|
|
||||||
curl https://pyenv.run | bash
|
|
||||||
export PYENV_ROOT="$HOME/.pyenv"
|
|
||||||
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
|
|
||||||
eval "$(pyenv init -)"
|
|
||||||
pyenv install 3.10.0
|
|
||||||
pyenv local 3.10.0
|
|
||||||
|
|
||||||
python -m pip install html5lib
|
|
||||||
python -m pip install six
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
flock 9 # block until the lock file is gone
|
flock 9 # block until the lock file is gone
|
||||||
test -f "${qt_deb_path}" && exit 0 # check again
|
test -f "${qt_deb_path}" && exit 0 # check again
|
||||||
|
|
||||||
|
# Build and install the correct version of FFmpeg.
|
||||||
|
/opt/install-ffmpeg-for-qt.sh
|
||||||
|
|
||||||
# Build Qt.
|
# Build Qt.
|
||||||
mkdir /opt/libqt-jami-build
|
mkdir /opt/libqt-jami-build
|
||||||
cd /opt/libqt-jami-build
|
cd /opt/libqt-jami-build
|
||||||
|
|||||||
@ -38,9 +38,9 @@ QT_JAMI_PREFIX="/usr/lib64/qt-jami"
|
|||||||
PATH="${QT_JAMI_PREFIX}/bin:${PATH}"
|
PATH="${QT_JAMI_PREFIX}/bin:${PATH}"
|
||||||
LD_LIBRARY_PATH="${QT_JAMI_PREFIX}/lib:${LD_LIBRARY_PATH}"
|
LD_LIBRARY_PATH="${QT_JAMI_PREFIX}/lib:${LD_LIBRARY_PATH}"
|
||||||
PKG_CONFIG_PATH="${QT_JAMI_PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
PKG_CONFIG_PATH="${QT_JAMI_PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
||||||
CMAKE_PREFIX_PATH="${QT_JAMI_PREFIX}/lib/cmake:${CMAKE_PREFIX_PATH}"
|
CMAKE_PREFIX_PATH="${QT_JAMI_PREFIX}:${CMAKE_PREFIX_PATH}"
|
||||||
QT_MAJOR=6
|
QT_MAJOR=6
|
||||||
QT_MINOR=6
|
QT_MINOR=8
|
||||||
QT_PATCH=3
|
QT_PATCH=3
|
||||||
QT_RELEASE_PATCH=0
|
QT_RELEASE_PATCH=0
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ QT_MAJOR_MINOR_PATCH=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}
|
|||||||
QT_TARBALL_URL=https://download.qt.io/archive/qt/$QT_MAJOR_MINOR/\
|
QT_TARBALL_URL=https://download.qt.io/archive/qt/$QT_MAJOR_MINOR/\
|
||||||
$QT_MAJOR_MINOR_PATCH/single/qt-everywhere-src-$QT_MAJOR_MINOR_PATCH.tar.xz
|
$QT_MAJOR_MINOR_PATCH/single/qt-everywhere-src-$QT_MAJOR_MINOR_PATCH.tar.xz
|
||||||
|
|
||||||
QT_TARBALL_SHA256="69d0348fef415da98aa890a34651e9cfb232f1bffcee289b7b4e21386bf36104"
|
QT_TARBALL_SHA256="cdd3a69967208276bb01af7ace7dba0ba53e679f886a4cbe624225c60fb73f2c"
|
||||||
QT_TARBALL_FILE_NAME=$(basename "$QT_TARBALL_URL")
|
QT_TARBALL_FILE_NAME=$(basename "$QT_TARBALL_URL")
|
||||||
CACHED_QT_TARBALL=$TARBALLS/$QT_TARBALL_FILE_NAME
|
CACHED_QT_TARBALL=$TARBALLS/$QT_TARBALL_FILE_NAME
|
||||||
|
|
||||||
@ -67,6 +67,10 @@ if [ ! -f "${RPM_PATH}" ]; then
|
|||||||
flock 9 # block until the lock is available
|
flock 9 # block until the lock is available
|
||||||
test -f "$RPM_PATH" && exit 0 # check again
|
test -f "$RPM_PATH" && exit 0 # check again
|
||||||
|
|
||||||
|
# Build and install the correct version of FFmpeg.
|
||||||
|
/opt/install-ffmpeg-for-qt.sh
|
||||||
|
|
||||||
|
# Build Qt.
|
||||||
mkdir /opt/qt-jami-build
|
mkdir /opt/qt-jami-build
|
||||||
cd /opt/qt-jami-build
|
cd /opt/qt-jami-build
|
||||||
tar xf "/src/$RELEASE_TARBALL_FILENAME" \
|
tar xf "/src/$RELEASE_TARBALL_FILENAME" \
|
||||||
@ -101,20 +105,14 @@ if [ ! -f "${RPM_PATH}" ]; then
|
|||||||
# Cache the built Qt RPM package.
|
# Cache the built Qt RPM package.
|
||||||
if [[ "${DISTRIBUTION:0:4}" == "rhel" ]]; then
|
if [[ "${DISTRIBUTION:0:4}" == "rhel" ]]; then
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el8.x86_64.rpm "${RPM_PATH}"
|
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el8.x86_64.rpm "${RPM_PATH}"
|
||||||
elif [[ "${DISTRIBUTION}" == "fedora_36" ]]; then
|
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc36.x86_64.rpm "${RPM_PATH}"
|
|
||||||
elif [[ "${DISTRIBUTION}" == "fedora_37" ]]; then
|
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc37.x86_64.rpm "${RPM_PATH}"
|
|
||||||
elif [[ "${DISTRIBUTION}" == "fedora_38" ]]; then
|
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc38.x86_64.rpm "${RPM_PATH}"
|
|
||||||
elif [[ "${DISTRIBUTION}" == "fedora_39" ]]; then
|
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc39.x86_64.rpm "${RPM_PATH}"
|
|
||||||
elif [[ "${DISTRIBUTION}" == "fedora_40" ]]; then
|
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc40.x86_64.rpm "${RPM_PATH}"
|
|
||||||
elif [[ "${DISTRIBUTION}" == "fedora_41" ]]; then
|
elif [[ "${DISTRIBUTION}" == "fedora_41" ]]; then
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc41.x86_64.rpm "${RPM_PATH}"
|
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc41.x86_64.rpm "${RPM_PATH}"
|
||||||
|
elif [[ "${DISTRIBUTION}" == "fedora_42" ]]; then
|
||||||
|
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc42.x86_64.rpm "${RPM_PATH}"
|
||||||
elif [[ "${DISTRIBUTION}" == "alma_9" ]]; then
|
elif [[ "${DISTRIBUTION}" == "alma_9" ]]; then
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el9.x86_64.rpm "${RPM_PATH}"
|
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el9.x86_64.rpm "${RPM_PATH}"
|
||||||
|
elif [[ "${DISTRIBUTION}" == "alma_10" ]]; then
|
||||||
|
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el10.x86_64.rpm "${RPM_PATH}"
|
||||||
else
|
else
|
||||||
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-*.rpm "${RPM_PATH}"
|
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-*.rpm "${RPM_PATH}"
|
||||||
fi
|
fi
|
||||||
@ -138,7 +136,10 @@ rpmbuild --define "debug_package %{nil}" -ba jami-libclient.spec
|
|||||||
rpmbuild --define "debug_package %{nil}" -ba jami-qt.spec
|
rpmbuild --define "debug_package %{nil}" -ba jami-qt.spec
|
||||||
|
|
||||||
# Build the Qt client.
|
# Build the Qt client.
|
||||||
rpmbuild --define "debug_package %{nil}" -ba jami.spec
|
rpmbuild --define "debug_package %{nil}" \
|
||||||
|
--define "BUILD_VERSION ${BUILD_VERSION}" \
|
||||||
|
--define "QT_JAMI_PREFIX ${QT_JAMI_PREFIX}" \
|
||||||
|
-ba jami.spec
|
||||||
|
|
||||||
# Move the built packages to the output directory.
|
# Move the built packages to the output directory.
|
||||||
mv /root/rpmbuild/RPMS/*/* /opt/output
|
mv /root/rpmbuild/RPMS/*/* /opt/output
|
||||||
|
|||||||
@ -29,6 +29,9 @@ cp -r extras/packaging/gnu-linux/rules/snap/${SNAP_PKG_NAME}/snapcraft.yaml .
|
|||||||
# set the version and tarball filename
|
# set the version and tarball filename
|
||||||
sed -i "s/RELEASE_VERSION/${RELEASE_VERSION}/g" snapcraft.yaml
|
sed -i "s/RELEASE_VERSION/${RELEASE_VERSION}/g" snapcraft.yaml
|
||||||
|
|
||||||
|
# set the build version of the app
|
||||||
|
sed -i "s/BUILD_VERSION_PLACEHOLDER/${BUILD_VERSION}/g" snapcraft.yaml
|
||||||
|
|
||||||
snapcraft # requires snapcraft >= 4.8
|
snapcraft # requires snapcraft >= 4.8
|
||||||
|
|
||||||
# move the built snap to output
|
# move the built snap to output
|
||||||
|
|||||||
@ -80,9 +80,6 @@ EOF
|
|||||||
find ./extras/packaging/gnu-linux/packages -type f -name '*.ddeb' -print0 | xargs -0 -I{} mv {} {}.deb
|
find ./extras/packaging/gnu-linux/packages -type f -name '*.ddeb' -print0 | xargs -0 -I{} mv {} {}.deb
|
||||||
|
|
||||||
for package in ./extras/packaging/gnu-linux/packages/${DISTRIBUTION}*/*.deb; do
|
for package in ./extras/packaging/gnu-linux/packages/${DISTRIBUTION}*/*.deb; do
|
||||||
echo "## signing: ${package} ##"
|
|
||||||
dpkg-sig -k ${KEYID} --sign builder ${package}
|
|
||||||
|
|
||||||
echo "## including ${package} ##"
|
echo "## including ${package} ##"
|
||||||
package_name=$(dpkg -I ${package} | grep -m 1 Package: | awk '{print $2}')
|
package_name=$(dpkg -I ${package} | grep -m 1 Package: | awk '{print $2}')
|
||||||
package_arch=$(dpkg -I ${package} | grep -m 1 Architecture: | awk '{print $2}')
|
package_arch=$(dpkg -I ${package} | grep -m 1 Architecture: | awk '{print $2}')
|
||||||
|
|||||||
28
extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Building Qt Multimedia requires the FFmpeg headers and libraries to be installed:
|
||||||
|
# https://doc.qt.io/qt-6.8/qtmultimedia-building-from-source.html
|
||||||
|
# For Qt 6.8.3, the recommended FFmpeg version is 7.1:
|
||||||
|
# https://doc.qt.io/qt-6.8/qtmultimedia-index.html#target-platform-and-backend-notes
|
||||||
|
# This script is based on the instructions at:
|
||||||
|
# https://doc.qt.io/qt-6.8/qtmultimedia-building-ffmpeg-linux.html
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
INSTALL_DIR=/opt/libqt-jami-ffmpeg
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
git clone --branch n11.1.5.2 https://github.com/FFmpeg/nv-codec-headers.git nv-codec-headers
|
||||||
|
cd nv-codec-headers
|
||||||
|
make -j install
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
git clone --branch n7.1.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
|
||||||
|
cd ffmpeg
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
../configure --prefix=${INSTALL_DIR} --disable-doc --enable-network --enable-shared
|
||||||
|
make -j install
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
rm -rf nv-codec-headers ffmpeg
|
||||||
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# The purpose of this script is to build PipeWire from source in a snap based on core20 / Ubuntu 20.04
|
# The purpose of this script is to build PipeWire from source in a snap based on core22 / Ubuntu 22.04
|
||||||
# It must be called in the "override-build" section of the relevant part in snapcraft.yaml
|
# It must be called in the "override-build" section of the relevant part in snapcraft.yaml
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
@ -8,28 +8,23 @@ set -e
|
|||||||
OLD_WD=$(pwd)
|
OLD_WD=$(pwd)
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
# Get a version of Meson that's recent enough to build PipeWire 1.0.5 (the one available via apt is too old)
|
|
||||||
wget -q https://github.com/mesonbuild/meson/releases/download/0.61.1/meson-0.61.1.tar.gz
|
|
||||||
echo "feb2cefb325b437dbf36146df7c6b87688ddff0b0205caa31dc64055c6da410c meson-0.61.1.tar.gz" | sha256sum --check
|
|
||||||
tar xzf meson-0.61.1.tar.gz
|
|
||||||
|
|
||||||
# Build PipeWire 1.0.5 and install it in the /usr directory of the build environment
|
# Build PipeWire 1.0.5 and install it in the /usr directory of the build environment
|
||||||
wget -q https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/1.0.5/pipewire-1.0.5.tar.gz
|
wget -q https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/1.0.5/pipewire-1.0.5.tar.gz
|
||||||
echo "c5a5de26d684a1a84060ad7b6131654fb2835e03fccad85059be92f8e3ffe993 pipewire-1.0.5.tar.gz" | sha256sum --check
|
echo "c5a5de26d684a1a84060ad7b6131654fb2835e03fccad85059be92f8e3ffe993 pipewire-1.0.5.tar.gz" | sha256sum --check
|
||||||
tar xzf pipewire-1.0.5.tar.gz
|
tar xzf pipewire-1.0.5.tar.gz
|
||||||
cd pipewire-1.0.5
|
cd pipewire-1.0.5
|
||||||
../meson-0.61.1/meson.py setup builddir -Dsession-managers=media-session -Dalsa=disabled -Dprefix=/usr
|
meson setup builddir -Dsession-managers=media-session -Dalsa=disabled -Dprefix=/usr
|
||||||
../meson-0.61.1/meson.py compile -C builddir
|
meson compile -C builddir
|
||||||
../meson-0.61.1/meson.py install -C builddir
|
meson install -C builddir
|
||||||
|
|
||||||
# The files installed by the previous command are only for the "Build" step of the snap
|
# The files installed by the previous command are only for the "Build" step of the snap
|
||||||
# creation process (https://snapcraft.io/docs/how-snapcraft-builds). In order to ensure
|
# creation process (https://snapcraft.io/docs/how-snapcraft-builds). In order to ensure
|
||||||
# that PipeWire is installed in the final snap archive, we also need to copy all the
|
# that PipeWire is installed in the final snap archive, we also need to copy all the
|
||||||
# required files under the $SNAPCRAFT_PART_INSTALL directory.
|
# required files under the $CRAFT_PART_INSTALL directory.
|
||||||
../meson-0.61.1/meson.py configure builddir -Dprefix=$SNAPCRAFT_PART_INSTALL/usr/
|
meson configure builddir -Dprefix=$CRAFT_PART_INSTALL/usr/
|
||||||
../meson-0.61.1/meson.py install -C builddir
|
meson install -C builddir
|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
cd /tmp
|
cd /tmp
|
||||||
rm -rf meson-0.61.1 meson-0.61.1.tar.gz pipewire-1.0.5 pipewire-1.0.5.tar.gz
|
rm -rf pipewire-1.0.5 pipewire-1.0.5.tar.gz
|
||||||
cd $OLD_WD
|
cd $OLD_WD
|
||||||
@ -34,7 +34,7 @@ cat << EOFILE > ${REPO_FOLDER}/${SPARKLE_FILE}
|
|||||||
<pubDate>$DATE_RFC2822</pubDate>
|
<pubDate>$DATE_RFC2822</pubDate>
|
||||||
<sparkle:version>${BUILD}</sparkle:version>
|
<sparkle:version>${BUILD}</sparkle:version>
|
||||||
<sparkle:shortVersionString>${VERSION}</sparkle:shortVersionString>
|
<sparkle:shortVersionString>${VERSION}</sparkle:shortVersionString>
|
||||||
<sparkle:minimumSystemVersion>11.0</sparkle:minimumSystemVersion>
|
<sparkle:minimumSystemVersion>12.0</sparkle:minimumSystemVersion>
|
||||||
<enclosure url="${REPO_URL}/$(basename ${PACKAGE})" type="application/octet-stream" $(./sign_update ${PACKAGE}) />
|
<enclosure url="${REPO_URL}/$(basename ${PACKAGE})" type="application/octet-stream" $(./sign_update ${PACKAGE}) />
|
||||||
</item>
|
</item>
|
||||||
$(echo -e "${ITEMS}")
|
$(echo -e "${ITEMS}")
|
||||||
|
|||||||
@ -1,25 +0,0 @@
|
|||||||
From 161d28abb6784115ad71fcb6977e112e9d5756d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
|
||||||
Date: Tue, 23 Jan 2024 15:38:34 -0500
|
|
||||||
Subject: [PATCH] fix-fedora-fc-build
|
|
||||||
|
|
||||||
---
|
|
||||||
CMakeLists.txt | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
index 0fb89c8..3a6ad6d 100644
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ b/CMakeLists.txt
|
|
||||||
@@ -65,7 +65,7 @@ if(NOT TARGET qmsetup::library)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Find package again
|
|
||||||
- find_package(qmsetup REQUIRED PATHS ${_package_path})
|
|
||||||
+ find_package(qmsetup REQUIRED PATHS ${_package_path} ${qmsetup_cmake_path})
|
|
||||||
|
|
||||||
# Update import path
|
|
||||||
set(qmsetup_DIR ${_package_path} CACHE PATH "" FORCE)
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
32
extras/patches/0001-fix-qm_install_package-function.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From 56830725e641705e0113a068ee58df7029202439 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
|
||||||
|
<francois-simon.fauteux-chapleau@savoirfairelinux.com>
|
||||||
|
Date: Wed, 2 Apr 2025 20:54:02 -0400
|
||||||
|
Subject: [PATCH] fix qm_install_package function
|
||||||
|
|
||||||
|
---
|
||||||
|
cmake/modules/private/InstallPackage.cmake | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/qmsetup/cmake/modules/private/InstallPackage.cmake b/qmsetup/cmake/modules/private/InstallPackage.cmake
|
||||||
|
index 70174bc..f067de5 100644
|
||||||
|
--- a/qmsetup/cmake/modules/private/InstallPackage.cmake
|
||||||
|
+++ b/qmsetup/cmake/modules/private/InstallPackage.cmake
|
||||||
|
@@ -101,6 +101,7 @@ function(qm_install_package _name)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} -S ${_src_dir} -B ${_build_dir}
|
||||||
|
${_extra_args} ${_build_type}
|
||||||
|
+ "-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}"
|
||||||
|
"-DCMAKE_INSTALL_PREFIX=${_install_dir}" ${FUNC_CONFIGURE_ARGS}
|
||||||
|
OUTPUT_FILE ${_log_file}
|
||||||
|
ERROR_FILE ${_log_file}
|
||||||
|
@@ -150,4 +151,4 @@ function(qm_install_package _name)
|
||||||
|
if(FUNC_RESULT_PATH)
|
||||||
|
set(${FUNC_RESULT_PATH} ${_install_cmake_dir} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
-endfunction()
|
||||||
|
\ No newline at end of file
|
||||||
|
+endfunction()
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -212,6 +212,7 @@ def init_submodules():
|
|||||||
"3rdparty/md4c",
|
"3rdparty/md4c",
|
||||||
"3rdparty/tidy-html5",
|
"3rdparty/tidy-html5",
|
||||||
"3rdparty/zxing-cpp",
|
"3rdparty/zxing-cpp",
|
||||||
|
"3rdparty/hunspell",
|
||||||
]
|
]
|
||||||
if execute_cmd(["git", "submodule", "update", "--init" ] + submodules,
|
if execute_cmd(["git", "submodule", "update", "--init" ] + submodules,
|
||||||
False):
|
False):
|
||||||
@ -262,7 +263,7 @@ def cmake_build(config_str, env_vars, cmake_build_dir):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def build(config_str, qt_dir, tests, enable_crash_reports, crash_report_url=None):
|
def build(config_str, qt_dir, tests, build_version, enable_crash_reports, crash_report_url=None):
|
||||||
"""Use cmake to build the project."""
|
"""Use cmake to build the project."""
|
||||||
print("Building with Qt at " + qt_dir)
|
print("Building with Qt at " + qt_dir)
|
||||||
|
|
||||||
@ -293,6 +294,9 @@ def build(config_str, qt_dir, tests, enable_crash_reports, crash_report_url=None
|
|||||||
else:
|
else:
|
||||||
cmake_options.append("-DENABLE_CRASHREPORTS=OFF")
|
cmake_options.append("-DENABLE_CRASHREPORTS=OFF")
|
||||||
|
|
||||||
|
if build_version:
|
||||||
|
cmake_options.append("-DBUILD_VERSION=" + build_version)
|
||||||
|
|
||||||
# Make sure the build directory exists.
|
# Make sure the build directory exists.
|
||||||
if not os.path.exists(build_dir):
|
if not os.path.exists(build_dir):
|
||||||
os.makedirs(build_dir)
|
os.makedirs(build_dir)
|
||||||
@ -306,11 +310,11 @@ def build(config_str, qt_dir, tests, enable_crash_reports, crash_report_url=None
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def deploy_runtimes(config_str, qt_dir):
|
def deploy_runtimes(qt_dir):
|
||||||
"""Deploy the dependencies to the runtime directory."""
|
"""Deploy the dependencies to the runtime directory."""
|
||||||
print("Deploying runtime dependencies")
|
print("Deploying runtime dependencies")
|
||||||
|
|
||||||
runtime_dir = os.path.join(repo_root_dir, "x64", config_str)
|
runtime_dir = os.path.join(repo_root_dir, "x64", "Release")
|
||||||
stamp_file = os.path.join(runtime_dir, ".deploy.stamp")
|
stamp_file = os.path.join(runtime_dir, ".deploy.stamp")
|
||||||
if os.path.exists(stamp_file):
|
if os.path.exists(stamp_file):
|
||||||
return
|
return
|
||||||
@ -469,6 +473,8 @@ def parse_args():
|
|||||||
help='Sets the Qt root path')
|
help='Sets the Qt root path')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-a", "--arch", default="x64", help="Sets the build architecture")
|
"-a", "--arch", default="x64", help="Sets the build architecture")
|
||||||
|
parser.add_argument(
|
||||||
|
"--build-version", help="Sets the build version string used for defining app build version")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-t", "--tests", action="store_true", help="Build and run tests")
|
"-t", "--tests", action="store_true", help="Build and run tests")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@ -551,10 +557,11 @@ def main():
|
|||||||
def do_build(do_tests):
|
def do_build(do_tests):
|
||||||
if not parsed_args.skip_build:
|
if not parsed_args.skip_build:
|
||||||
build(config_str, parsed_args.qt, do_tests,
|
build(config_str, parsed_args.qt, do_tests,
|
||||||
|
parsed_args.build_version,
|
||||||
parsed_args.enable_crash_reports,
|
parsed_args.enable_crash_reports,
|
||||||
parsed_args.crash_report_url)
|
parsed_args.crash_report_url)
|
||||||
if not parsed_args.skip_deploy:
|
if not parsed_args.skip_deploy:
|
||||||
deploy_runtimes(config_str, parsed_args.qt)
|
deploy_runtimes(parsed_args.qt)
|
||||||
|
|
||||||
if parsed_args.subcommand == "pack":
|
if parsed_args.subcommand == "pack":
|
||||||
do_build(False)
|
do_build(False)
|
||||||
|
|||||||
@ -32,6 +32,7 @@ export OSTYPE
|
|||||||
# -A: enable AddressSanitizer
|
# -A: enable AddressSanitizer
|
||||||
# -D: extra CMake flags for the client
|
# -D: extra CMake flags for the client
|
||||||
# -C: enable crash reporting
|
# -C: enable crash reporting
|
||||||
|
# -i: ignore system libraries and build everything regardless of system detection
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
@ -51,8 +52,9 @@ extra_cmake_flags=''
|
|||||||
arch=''
|
arch=''
|
||||||
enable_testing=false
|
enable_testing=false
|
||||||
enable_crashreports=false
|
enable_crashreports=false
|
||||||
|
ignore_system_libs=false
|
||||||
|
|
||||||
while getopts gsc:dQ:P:p:uWwa:AtD:C OPT; do
|
while getopts gsc:dQ:P:p:uWwa:AtD:Ci OPT; do
|
||||||
case "$OPT" in
|
case "$OPT" in
|
||||||
g)
|
g)
|
||||||
global='true'
|
global='true'
|
||||||
@ -96,6 +98,9 @@ while getopts gsc:dQ:P:p:uWwa:AtD:C OPT; do
|
|||||||
C)
|
C)
|
||||||
enable_crashreports='true'
|
enable_crashreports='true'
|
||||||
;;
|
;;
|
||||||
|
i)
|
||||||
|
ignore_system_libs='true'
|
||||||
|
;;
|
||||||
\?)
|
\?)
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
@ -124,79 +129,86 @@ else
|
|||||||
BUILD_DIR="build"
|
BUILD_DIR="build"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# jamid
|
BUILD_TYPE="Release"
|
||||||
DAEMON="${TOP}/daemon"
|
if [ "${debug}" = "true" ]; then
|
||||||
|
BUILD_TYPE="Debug"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
sh "${TOP}"/extras/scripts/build_daemon_macos.sh -a "$arch" -d "$debug"
|
#detect arch for macos
|
||||||
else
|
CMAKE_OSX_ARCHITECTURES="arm64"
|
||||||
cd "$DAEMON"
|
if [[ "$arch" == 'unified' ]]; then
|
||||||
|
CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
|
||||||
# Build the contribs.
|
elif [[ "$arch" != '' ]]; then
|
||||||
mkdir -p contrib/native
|
CMAKE_OSX_ARCHITECTURES="$arch"
|
||||||
(
|
|
||||||
cd contrib/native
|
|
||||||
../bootstrap ${prefix:+"--prefix=$prefix"} ${asan:+"--enable-asan"}
|
|
||||||
make -j"${proc}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if [[ "${enable_libwrap}" != "true" ]]; then
|
|
||||||
# Disable shared if requested
|
|
||||||
if [[ "$OSTYPE" != "darwin"* ]]; then
|
|
||||||
CONFIGURE_FLAGS+=" --disable-shared"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
CONFIGURE_FLAGS+="--without-dbus"
|
|
||||||
fi
|
|
||||||
|
|
||||||
BUILD_TYPE="Release"
|
|
||||||
if [ "${debug}" = "true" ]; then
|
|
||||||
BUILD_TYPE="Debug"
|
|
||||||
CONFIGURE_FLAGS+=" --enable-debug"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${asan}" = "true" ]; then
|
|
||||||
CONFIGURE_FLAGS+=" --enable-asan"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build the daemon itself.
|
|
||||||
test -f configure || ./autogen.sh
|
|
||||||
|
|
||||||
if [ "${global}" = "true" ]; then
|
|
||||||
./configure ${CONFIGURE_FLAGS} ${prefix:+"--prefix=$prefix"}
|
|
||||||
else
|
|
||||||
./configure ${CONFIGURE_FLAGS} --prefix="${INSTALL_DIR}"
|
|
||||||
fi
|
|
||||||
make -j"${proc}" V=1
|
|
||||||
make_install "${global}" "${priv_install}"
|
|
||||||
|
|
||||||
# Verify system's version if no path provided.
|
|
||||||
if [ -z "$qtpath" ]; then
|
|
||||||
sys_qtver=""
|
|
||||||
if command -v qmake6 &> /dev/null; then
|
|
||||||
sys_qtver=$(qmake6 -v)
|
|
||||||
elif command -v qmake-qt6 &> /dev/null; then
|
|
||||||
sys_qtver=$(qmake-qt6 -v) # Fedora
|
|
||||||
elif command -v qmake &> /dev/null; then
|
|
||||||
sys_qtver=$(qmake -v)
|
|
||||||
else
|
|
||||||
echo "No valid Qt found"; exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
sys_qtver=${sys_qtver#*Qt version}
|
|
||||||
sys_qtver=${sys_qtver%\ in\ *}
|
|
||||||
|
|
||||||
installed_qtver=$(echo "$sys_qtver" | cut -d'.' -f 2)
|
|
||||||
required_qtver=$(echo $QT_MIN_VER | cut -d'.' -f 2)
|
|
||||||
|
|
||||||
if [[ $installed_qtver -ge $required_qtver ]] ; then
|
|
||||||
# Set qtpath to empty in order to use system's Qt.
|
|
||||||
qtpath=""
|
|
||||||
else
|
|
||||||
echo "No valid Qt found"; exit 1;
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# jamid
|
||||||
|
DAEMON="${TOP}/daemon"
|
||||||
|
cd "$DAEMON"
|
||||||
|
|
||||||
|
mkdir -p "${BUILD_DIR}"
|
||||||
|
cd "${BUILD_DIR}"
|
||||||
|
daemon_cmake_flags=(-DCMAKE_BUILD_TYPE="${BUILD_TYPE}")
|
||||||
|
if [ "${asan}" = "true" ]; then
|
||||||
|
daemon_cmake_flags+=(-DENABLE_ASAN=On)
|
||||||
|
fi
|
||||||
|
if [ "${ignore_system_libs}" = "true" ]; then
|
||||||
|
daemon_cmake_flags+=(-DIGNORE_SYSTEM_LIBS=On)
|
||||||
|
fi
|
||||||
|
if [ "${enable_libwrap}" = "false" ]; then
|
||||||
|
daemon_cmake_flags+=(-DJAMI_DBUS=On)
|
||||||
|
else
|
||||||
|
daemon_cmake_flags+=(-DJAMI_DBUS=Off)
|
||||||
|
fi
|
||||||
|
if [ "${enable_testing}" = "true" ]; then
|
||||||
|
daemon_cmake_flags+=(-DBUILD_TESTING=On)
|
||||||
|
else
|
||||||
|
daemon_cmake_flags+=(-DBUILD_TESTING=Off)
|
||||||
|
fi
|
||||||
|
if [ "${global}" = "true" ]; then
|
||||||
|
daemon_cmake_flags+=(${prefix:+"-DCMAKE_INSTALL_PREFIX=$prefix"})
|
||||||
|
else
|
||||||
|
daemon_cmake_flags+=(-DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
daemon_cmake_flags+=(-DCMAKE_OSX_ARCHITECTURES="${CMAKE_OSX_ARCHITECTURES}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmake .. "${daemon_cmake_flags[@]}"
|
||||||
|
make -j"${proc}" V=1
|
||||||
|
make_install "${global}" "${priv_install}"
|
||||||
|
|
||||||
|
# Verify system's version if no path provided.
|
||||||
|
if [ -z "$qtpath" ]; then
|
||||||
|
sys_qtver=""
|
||||||
|
if command -v qmake6 &> /dev/null; then
|
||||||
|
sys_qtver=$(qmake6 -v)
|
||||||
|
elif command -v qmake-qt6 &> /dev/null; then
|
||||||
|
sys_qtver=$(qmake-qt6 -v) # Fedora
|
||||||
|
elif command -v qmake &> /dev/null; then
|
||||||
|
sys_qtver=$(qmake -v)
|
||||||
|
else
|
||||||
|
echo "No valid Qt found"; exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
sys_qtver=${sys_qtver#*Qt version}
|
||||||
|
sys_qtver=${sys_qtver%\ in\ *}
|
||||||
|
|
||||||
|
installed_qtver=$(echo "$sys_qtver" | cut -d'.' -f 2)
|
||||||
|
required_qtver=$(echo $QT_MIN_VER | cut -d'.' -f 2)
|
||||||
|
|
||||||
|
if [[ $installed_qtver -ge $required_qtver ]] ; then
|
||||||
|
# Set qtpath to empty in order to use system's Qt.
|
||||||
|
qtpath=""
|
||||||
|
else
|
||||||
|
echo "No valid Qt found"; exit 1;
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# fi
|
||||||
|
|
||||||
# client
|
# client
|
||||||
cd "${TOP}"
|
cd "${TOP}"
|
||||||
mkdir -p "${BUILD_DIR}"
|
mkdir -p "${BUILD_DIR}"
|
||||||
@ -217,6 +229,10 @@ else
|
|||||||
client_cmake_flags+=(-DBUILD_TESTING=Off)
|
client_cmake_flags+=(-DBUILD_TESTING=Off)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "${ignore_system_libs}" = "true" ]; then
|
||||||
|
client_cmake_flags+=(-DIGNORE_SYSTEM_LIBS=On)
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "${enable_crashreports}" = "true" ]; then
|
if [ "${enable_crashreports}" = "true" ]; then
|
||||||
client_cmake_flags+=(-DENABLE_CRASHREPORTS=ON)
|
client_cmake_flags+=(-DENABLE_CRASHREPORTS=ON)
|
||||||
else
|
else
|
||||||
@ -224,13 +240,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
#detect arch for macos
|
|
||||||
CMAKE_OSX_ARCHITECTURES="arm64"
|
|
||||||
if [[ "$arch" == 'unified' ]]; then
|
|
||||||
CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
|
|
||||||
elif [[ "$arch" != '' ]]; then
|
|
||||||
CMAKE_OSX_ARCHITECTURES="$arch"
|
|
||||||
fi
|
|
||||||
client_cmake_flags+=(-DCMAKE_OSX_ARCHITECTURES="${CMAKE_OSX_ARCHITECTURES}")
|
client_cmake_flags+=(-DCMAKE_OSX_ARCHITECTURES="${CMAKE_OSX_ARCHITECTURES}")
|
||||||
# build qrencode
|
# build qrencode
|
||||||
(
|
(
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
|
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>11.0</string>
|
<string>12.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
|
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
|
||||||
<key>LSApplicationCategoryType</key>
|
<key>LSApplicationCategoryType</key>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 522 KiB After Width: | Height: | Size: 298 KiB |
|
Before Width: | Height: | Size: 528 KiB After Width: | Height: | Size: 410 KiB |
382
resources/misc/available_dictionaries.json
Normal file
@ -0,0 +1,382 @@
|
|||||||
|
{
|
||||||
|
"af_ZA": {
|
||||||
|
"nativeName": "Afrikaans (Suid-Afrika)",
|
||||||
|
"path": "af_ZA/af_ZA"
|
||||||
|
},
|
||||||
|
"an_ES": {
|
||||||
|
"nativeName": "aragonés (España)",
|
||||||
|
"path": "an_ES/an_ES"
|
||||||
|
},
|
||||||
|
"ar": {
|
||||||
|
"nativeName": "العربية",
|
||||||
|
"path": "ar/ar"
|
||||||
|
},
|
||||||
|
"as_IN": {
|
||||||
|
"nativeName": "অসমীয়া (भारत)",
|
||||||
|
"path": "as_IN/as_IN"
|
||||||
|
},
|
||||||
|
"be-official": {
|
||||||
|
"nativeName": "беларуская",
|
||||||
|
"path": "be_BY/be-official"
|
||||||
|
},
|
||||||
|
"bg_BG": {
|
||||||
|
"nativeName": "български",
|
||||||
|
"path": "bg_BG/bg_BG"
|
||||||
|
},
|
||||||
|
"bn_BD": {
|
||||||
|
"nativeName": "বাঙ্গালি (বাংলাদেশ)",
|
||||||
|
"path": "bn_BD/bn_BD"
|
||||||
|
},
|
||||||
|
"bn_IN": {
|
||||||
|
"nativeName": "বাঙ্গালি (ভারত)",
|
||||||
|
"path": "bn_BD/bn_IN"
|
||||||
|
},
|
||||||
|
"bo": {
|
||||||
|
"nativeName": "བོད་སྐད་",
|
||||||
|
"path": "bo/bo"
|
||||||
|
},
|
||||||
|
"br_FR": {
|
||||||
|
"nativeName": "breton (France)",
|
||||||
|
"path": "br_FR/br_FR"
|
||||||
|
},
|
||||||
|
"bs_BA": {
|
||||||
|
"nativeName": "bosanski",
|
||||||
|
"path": "bs_BA/bs_BA"
|
||||||
|
},
|
||||||
|
"cs_CZ": {
|
||||||
|
"nativeName": "čeština",
|
||||||
|
"path": "cs_CZ/cs_CZ"
|
||||||
|
},
|
||||||
|
"da_DK": {
|
||||||
|
"nativeName": "dansk",
|
||||||
|
"path": "da_DK/da_DK"
|
||||||
|
},
|
||||||
|
"de_AT_frami": {
|
||||||
|
"nativeName": "Deutsch (Österreich)",
|
||||||
|
"path": "de/de_AT_frami"
|
||||||
|
},
|
||||||
|
"de_CH_frami": {
|
||||||
|
"nativeName": "Deutsch (Schweiz)",
|
||||||
|
"path": "de/de_CH_frami"
|
||||||
|
},
|
||||||
|
"de_DE_frami": {
|
||||||
|
"nativeName": "Deutsch (Deutschland)",
|
||||||
|
"path": "de/de_DE_frami"
|
||||||
|
},
|
||||||
|
"el_GR": {
|
||||||
|
"nativeName": "Ελληνικά",
|
||||||
|
"path": "el_GR/el_GR"
|
||||||
|
},
|
||||||
|
"en_AU": {
|
||||||
|
"nativeName": "English (Australia)",
|
||||||
|
"path": "en/en_AU"
|
||||||
|
},
|
||||||
|
"en_CA": {
|
||||||
|
"nativeName": "English (Canada)",
|
||||||
|
"path": "en/en_CA"
|
||||||
|
},
|
||||||
|
"en_GB": {
|
||||||
|
"nativeName": "English (British)",
|
||||||
|
"path": "en/en_GB"
|
||||||
|
},
|
||||||
|
"en_US": {
|
||||||
|
"nativeName": "English (American)",
|
||||||
|
"path": "en/en_US"
|
||||||
|
},
|
||||||
|
"en_ZA": {
|
||||||
|
"nativeName": "English (Suid-Afrika)",
|
||||||
|
"path": "en/en_ZA"
|
||||||
|
},
|
||||||
|
"eo": {
|
||||||
|
"nativeName": "esperanto",
|
||||||
|
"path": "eo/eo"
|
||||||
|
},
|
||||||
|
"es_AR": {
|
||||||
|
"nativeName": "español (Argentina)",
|
||||||
|
"path": "es/es_AR"
|
||||||
|
},
|
||||||
|
"es_BO": {
|
||||||
|
"nativeName": "español (Bolivia)",
|
||||||
|
"path": "es/es_BO"
|
||||||
|
},
|
||||||
|
"es_CL": {
|
||||||
|
"nativeName": "español (Chile)",
|
||||||
|
"path": "es/es_CL"
|
||||||
|
},
|
||||||
|
"es_CO": {
|
||||||
|
"nativeName": "español (Colombia)",
|
||||||
|
"path": "es/es_CO"
|
||||||
|
},
|
||||||
|
"es_CR": {
|
||||||
|
"nativeName": "español (Costa Rica)",
|
||||||
|
"path": "es/es_CR"
|
||||||
|
},
|
||||||
|
"es_CU": {
|
||||||
|
"nativeName": "español (Cuba)",
|
||||||
|
"path": "es/es_CU"
|
||||||
|
},
|
||||||
|
"es_DO": {
|
||||||
|
"nativeName": "español (República Dominicana)",
|
||||||
|
"path": "es/es_DO"
|
||||||
|
},
|
||||||
|
"es_EC": {
|
||||||
|
"nativeName": "español (Ecuador)",
|
||||||
|
"path": "es/es_EC"
|
||||||
|
},
|
||||||
|
"es_ES": {
|
||||||
|
"nativeName": "español (España)",
|
||||||
|
"path": "es/es_ES"
|
||||||
|
},
|
||||||
|
"es_GQ": {
|
||||||
|
"nativeName": "español (Guinea Ecuatorial)",
|
||||||
|
"path": "es/es_GQ"
|
||||||
|
},
|
||||||
|
"es_GT": {
|
||||||
|
"nativeName": "español (Guatemala)",
|
||||||
|
"path": "es/es_GT"
|
||||||
|
},
|
||||||
|
"es_HN": {
|
||||||
|
"nativeName": "español (Honduras)",
|
||||||
|
"path": "es/es_HN"
|
||||||
|
},
|
||||||
|
"es_MX": {
|
||||||
|
"nativeName": "español (México)",
|
||||||
|
"path": "es/es_MX"
|
||||||
|
},
|
||||||
|
"es_NI": {
|
||||||
|
"nativeName": "español (Nicaragua)",
|
||||||
|
"path": "es/es_NI"
|
||||||
|
},
|
||||||
|
"es_PA": {
|
||||||
|
"nativeName": "español (Panamá)",
|
||||||
|
"path": "es/es_PA"
|
||||||
|
},
|
||||||
|
"es_PE": {
|
||||||
|
"nativeName": "español (Perú)",
|
||||||
|
"path": "es/es_PE"
|
||||||
|
},
|
||||||
|
"es_PH": {
|
||||||
|
"nativeName": "español (Pilipinas)",
|
||||||
|
"path": "es/es_PH"
|
||||||
|
},
|
||||||
|
"es_PR": {
|
||||||
|
"nativeName": "español (Puerto Rico)",
|
||||||
|
"path": "es/es_PR"
|
||||||
|
},
|
||||||
|
"es_PY": {
|
||||||
|
"nativeName": "español (Paraguai)",
|
||||||
|
"path": "es/es_PY"
|
||||||
|
},
|
||||||
|
"es_SV": {
|
||||||
|
"nativeName": "español (El Salvador)",
|
||||||
|
"path": "es/es_SV"
|
||||||
|
},
|
||||||
|
"es_US": {
|
||||||
|
"nativeName": "español (United States)",
|
||||||
|
"path": "es/es_US"
|
||||||
|
},
|
||||||
|
"es_UY": {
|
||||||
|
"nativeName": "español (Uruguay)",
|
||||||
|
"path": "es/es_UY"
|
||||||
|
},
|
||||||
|
"es_VE": {
|
||||||
|
"nativeName": "español (Venezuela)",
|
||||||
|
"path": "es/es_VE"
|
||||||
|
},
|
||||||
|
"et_EE": {
|
||||||
|
"nativeName": "eesti",
|
||||||
|
"path": "et_EE/et_EE"
|
||||||
|
},
|
||||||
|
"fa-IR": {
|
||||||
|
"nativeName": "فارسی",
|
||||||
|
"path": "fa_IR/fa-IR"
|
||||||
|
},
|
||||||
|
"fr": {
|
||||||
|
"nativeName": "français",
|
||||||
|
"path": "fr_FR/fr"
|
||||||
|
},
|
||||||
|
"gd_GB": {
|
||||||
|
"nativeName": "Gàidhlig",
|
||||||
|
"path": "gd_GB/gd_GB"
|
||||||
|
},
|
||||||
|
"gl_ES": {
|
||||||
|
"nativeName": "galego",
|
||||||
|
"path": "gl/gl_ES"
|
||||||
|
},
|
||||||
|
"gu_IN": {
|
||||||
|
"nativeName": "ગુજરાતી",
|
||||||
|
"path": "gu_IN/gu_IN"
|
||||||
|
},
|
||||||
|
"he_IL": {
|
||||||
|
"nativeName": "עברית",
|
||||||
|
"path": "he_IL/he_IL"
|
||||||
|
},
|
||||||
|
"hi_IN": {
|
||||||
|
"nativeName": "हिन्दी",
|
||||||
|
"path": "hi_IN/hi_IN"
|
||||||
|
},
|
||||||
|
"hr_HR": {
|
||||||
|
"nativeName": "hrvatski",
|
||||||
|
"path": "hr_HR/hr_HR"
|
||||||
|
},
|
||||||
|
"hu_HU": {
|
||||||
|
"nativeName": "magyar",
|
||||||
|
"path": "hu_HU/hu_HU"
|
||||||
|
},
|
||||||
|
"id_ID": {
|
||||||
|
"nativeName": "Indonesian",
|
||||||
|
"path": "id/id_ID"
|
||||||
|
},
|
||||||
|
"is": {
|
||||||
|
"nativeName": "íslenska",
|
||||||
|
"path": "is/is"
|
||||||
|
},
|
||||||
|
"it_IT": {
|
||||||
|
"nativeName": "italiano",
|
||||||
|
"path": "it_IT/it_IT"
|
||||||
|
},
|
||||||
|
"kmr_Latn": {
|
||||||
|
"nativeName": "Northern Kurdish",
|
||||||
|
"path": "kmr_Latn/kmr_Latn"
|
||||||
|
},
|
||||||
|
"kn_IN": {
|
||||||
|
"nativeName": "ಕನ್ನಡ",
|
||||||
|
"path": "kn_IN/kn_IN"
|
||||||
|
},
|
||||||
|
"ko_KR": {
|
||||||
|
"nativeName": "한국어",
|
||||||
|
"path": "ko_KR/ko_KR"
|
||||||
|
},
|
||||||
|
"lo_LA": {
|
||||||
|
"nativeName": "ລາວ",
|
||||||
|
"path": "lo_LA/lo_LA"
|
||||||
|
},
|
||||||
|
"lt": {
|
||||||
|
"nativeName": "lietuvių",
|
||||||
|
"path": "lt_LT/lt"
|
||||||
|
},
|
||||||
|
"lv_LV": {
|
||||||
|
"nativeName": "latviešu",
|
||||||
|
"path": "lv_LV/lv_LV"
|
||||||
|
},
|
||||||
|
"mn_MN": {
|
||||||
|
"nativeName": "монгол",
|
||||||
|
"path": "mn_MN/mn_MN"
|
||||||
|
},
|
||||||
|
"mr_IN": {
|
||||||
|
"nativeName": "मराठी",
|
||||||
|
"path": "mr_IN/mr_IN"
|
||||||
|
},
|
||||||
|
"nb_NO": {
|
||||||
|
"nativeName": "norsk bokmål",
|
||||||
|
"path": "no/nb_NO"
|
||||||
|
},
|
||||||
|
"ne_NP": {
|
||||||
|
"nativeName": "नेपाली",
|
||||||
|
"path": "ne_NP/ne_NP"
|
||||||
|
},
|
||||||
|
"nl_NL": {
|
||||||
|
"nativeName": "Nederlands",
|
||||||
|
"path": "nl_NL/nl_NL"
|
||||||
|
},
|
||||||
|
"nn_NO": {
|
||||||
|
"nativeName": "norsk nynorsk",
|
||||||
|
"path": "no/nn_NO"
|
||||||
|
},
|
||||||
|
"oc_FR": {
|
||||||
|
"nativeName": "occitan",
|
||||||
|
"path": "oc_FR/oc_FR"
|
||||||
|
},
|
||||||
|
"or_IN": {
|
||||||
|
"nativeName": "ଓଡ଼ିଆ",
|
||||||
|
"path": "or_IN/or_IN"
|
||||||
|
},
|
||||||
|
"pa_IN": {
|
||||||
|
"nativeName": "ਪੰਜਾਬੀ",
|
||||||
|
"path": "pa_IN/pa_IN"
|
||||||
|
},
|
||||||
|
"pl_PL": {
|
||||||
|
"nativeName": "polski",
|
||||||
|
"path": "pl_PL/pl_PL"
|
||||||
|
},
|
||||||
|
"pt_BR": {
|
||||||
|
"nativeName": "português (Brasil)",
|
||||||
|
"path": "pt_BR/pt_BR"
|
||||||
|
},
|
||||||
|
"pt_PT": {
|
||||||
|
"nativeName": "português europeu (Portugal)",
|
||||||
|
"path": "pt_PT/pt_PT"
|
||||||
|
},
|
||||||
|
"ro_RO": {
|
||||||
|
"nativeName": "română",
|
||||||
|
"path": "ro/ro_RO"
|
||||||
|
},
|
||||||
|
"ru_RU": {
|
||||||
|
"nativeName": "русский",
|
||||||
|
"path": "ru_RU/ru_RU"
|
||||||
|
},
|
||||||
|
"sa_IN": {
|
||||||
|
"nativeName": "संस्कृत भाषा",
|
||||||
|
"path": "sa_IN/sa_IN"
|
||||||
|
},
|
||||||
|
"si_LK": {
|
||||||
|
"nativeName": "සිංහල",
|
||||||
|
"path": "si_LK/si_LK"
|
||||||
|
},
|
||||||
|
"sk_SK": {
|
||||||
|
"nativeName": "slovenčina",
|
||||||
|
"path": "sk_SK/sk_SK"
|
||||||
|
},
|
||||||
|
"sl_SI": {
|
||||||
|
"nativeName": "slovenščina",
|
||||||
|
"path": "sl_SI/sl_SI"
|
||||||
|
},
|
||||||
|
"sq_AL": {
|
||||||
|
"nativeName": "shqip",
|
||||||
|
"path": "sq_AL/sq_AL"
|
||||||
|
},
|
||||||
|
"sr": {
|
||||||
|
"nativeName": "српски",
|
||||||
|
"path": "sr/sr"
|
||||||
|
},
|
||||||
|
"sr-Latn": {
|
||||||
|
"nativeName": "srpski",
|
||||||
|
"path": "sr/sr-Latn"
|
||||||
|
},
|
||||||
|
"sv_FI": {
|
||||||
|
"nativeName": "svenska (Finland)",
|
||||||
|
"path": "sv_SE/sv_FI"
|
||||||
|
},
|
||||||
|
"sv_SE": {
|
||||||
|
"nativeName": "svenska (Sverige)",
|
||||||
|
"path": "sv_SE/sv_SE"
|
||||||
|
},
|
||||||
|
"sw_TZ": {
|
||||||
|
"nativeName": "Kiswahili",
|
||||||
|
"path": "sw_TZ/sw_TZ"
|
||||||
|
},
|
||||||
|
"ta_IN": {
|
||||||
|
"nativeName": "தமிழ்",
|
||||||
|
"path": "ta_IN/ta_IN"
|
||||||
|
},
|
||||||
|
"te_IN": {
|
||||||
|
"nativeName": "తెలుగు",
|
||||||
|
"path": "te_IN/te_IN"
|
||||||
|
},
|
||||||
|
"th_TH": {
|
||||||
|
"nativeName": "ไทย",
|
||||||
|
"path": "th_TH/th_TH"
|
||||||
|
},
|
||||||
|
"tr_TR": {
|
||||||
|
"nativeName": "Türkçe",
|
||||||
|
"path": "tr_TR/tr_TR"
|
||||||
|
},
|
||||||
|
"uk_UA": {
|
||||||
|
"nativeName": "українська",
|
||||||
|
"path": "uk_UA/uk_UA"
|
||||||
|
},
|
||||||
|
"vi_VN": {
|
||||||
|
"nativeName": "Tiếng Việt",
|
||||||
|
"path": "vi/vi_VN"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -37,9 +37,12 @@ QtObject {
|
|||||||
readonly property bool isHidden: visibility === Window.Hidden ||
|
readonly property bool isHidden: visibility === Window.Hidden ||
|
||||||
visibility === Window.Minimized
|
visibility === Window.Minimized
|
||||||
|
|
||||||
// Used to store if a OngoingCallPage component is fullscreened.
|
// Used to store if a CallStackView component is fullscreened.
|
||||||
property bool isCallFullscreen: false
|
property bool isCallFullscreen: false
|
||||||
|
|
||||||
|
// Used to store if a WebEngineView component is fullscreened.
|
||||||
|
property bool isWebFullscreen: false
|
||||||
|
|
||||||
// QWK: Provide spacing for widgets that may be occluded by the system buttons.
|
// QWK: Provide spacing for widgets that may be occluded by the system buttons.
|
||||||
property QtObject qwkSystemButtonSpacing: QtObject {
|
property QtObject qwkSystemButtonSpacing: QtObject {
|
||||||
id: qwkSystemButtonSpacing
|
id: qwkSystemButtonSpacing
|
||||||
@ -150,9 +153,8 @@ QtObject {
|
|||||||
// Adds an item to the fullscreen item stack. Automatically puts
|
// Adds an item to the fullscreen item stack. Automatically puts
|
||||||
// the main window in fullscreen mode if needed. Callbacks should be used
|
// the main window in fullscreen mode if needed. Callbacks should be used
|
||||||
// to perform component-specific tasks upon successful transitions.
|
// to perform component-specific tasks upon successful transitions.
|
||||||
function pushFullScreenItem(item, prevParent, pushedCb, removedCb) {
|
function pushFullScreenItem(item, removedCb=undefined) {
|
||||||
if (item === null || item === undefined
|
if (!item || priv.fullScreenItems.length >= 3) {
|
||||||
|| priv.fullScreenItems.length >= 3) {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,15 +164,13 @@ QtObject {
|
|||||||
// Add the item to our list and reparent it to appContainer.
|
// Add the item to our list and reparent it to appContainer.
|
||||||
priv.fullScreenItems.push({
|
priv.fullScreenItems.push({
|
||||||
"item": item,
|
"item": item,
|
||||||
"prevParent": prevParent,
|
"prevParent": item.parent,
|
||||||
"prevAnchorsFill": item.anchors.fill,
|
"prevAnchorsFill": item.anchors.fill,
|
||||||
"removedCb": removedCb
|
"removedCb": removedCb
|
||||||
})
|
})
|
||||||
|
|
||||||
item.parent = appContainer
|
item.parent = appContainer
|
||||||
item.anchors.fill = item.parent
|
item.anchors.fill = appContainer
|
||||||
if (pushedCb) {
|
|
||||||
pushedCb()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reevaluate isCallFullscreen.
|
// Reevaluate isCallFullscreen.
|
||||||
priv.fullScreenItemsChanged()
|
priv.fullScreenItemsChanged()
|
||||||
@ -178,34 +178,37 @@ QtObject {
|
|||||||
|
|
||||||
// Remove an item if specified, or by default, the top item. Automatically
|
// Remove an item if specified, or by default, the top item. Automatically
|
||||||
// resets the main window to windowed mode if no items remain in the stack.
|
// resets the main window to windowed mode if no items remain in the stack.
|
||||||
function popFullScreenItem(obj=null) {
|
function popFullScreenItem(obj = undefined) {
|
||||||
// Remove the item and reparent it to its original parent.
|
// Remove the item and reparent it to its original parent.
|
||||||
if (obj === null) {
|
if (obj === undefined) {
|
||||||
obj = priv.fullScreenItems.pop()
|
obj = priv.fullScreenItems.pop();
|
||||||
} else {
|
} else {
|
||||||
const index = priv.fullScreenItems.indexOf(obj);
|
const index = priv.fullScreenItems.indexOf(obj);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
priv.fullScreenItems.splice(index, 1);
|
priv.fullScreenItems.splice(index, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (obj !== undefined) {
|
if (obj && typeof obj === 'object') {
|
||||||
if (obj.item !== appWindow) {
|
if (obj.item !== appWindow) {
|
||||||
obj.item.anchors.fill = obj.prevAnchorsFill
|
// Clear anchors first, then set parent, then reset anchors.
|
||||||
obj.item.parent = obj.prevParent
|
obj.item.anchors.fill = undefined;
|
||||||
if (obj.removedCb) {
|
obj.item.parent = obj.prevParent;
|
||||||
obj.removedCb()
|
obj.item.anchors.fill = obj.prevAnchorsFill;
|
||||||
|
|
||||||
|
// Call removed callback if it's a function.
|
||||||
|
if (typeof obj.removedCb === 'function') {
|
||||||
|
obj.removedCb();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reevaluate isCallFullscreen.
|
// Reevaluate isCallFullscreen.
|
||||||
priv.fullScreenItemsChanged()
|
priv.fullScreenItemsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only leave fullscreen mode if our window isn't in fullscreen
|
// Only leave fullscreen mode if our window isn't in fullscreen mode already.
|
||||||
// mode already.
|
|
||||||
if (priv.fullScreenItems.length === 0 && priv.windowedVisibility !== Window.Hidden) {
|
if (priv.fullScreenItems.length === 0 && priv.windowedVisibility !== Window.Hidden) {
|
||||||
// Simply recall the last visibility state.
|
// Simply recall the last visibility state.
|
||||||
visibility = priv.windowedVisibility
|
visibility = priv.windowedVisibility;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,8 +250,17 @@ QtObject {
|
|||||||
// When fullScreenItems is changed, we can recompute isCallFullscreen.
|
// When fullScreenItems is changed, we can recompute isCallFullscreen.
|
||||||
onFullScreenItemsChanged: {
|
onFullScreenItemsChanged: {
|
||||||
isCallFullscreen = fullScreenItems
|
isCallFullscreen = fullScreenItems
|
||||||
.filter(o => o.item instanceof OngoingCallPage)
|
.filter(o => o.item.objectName === "callViewLoader")
|
||||||
.length
|
.length
|
||||||
|
isWebFullscreen = WITH_WEBENGINE ? fullScreenItems
|
||||||
|
.filter(o => o.item && (
|
||||||
|
o.item.objectName === JamiQmlUtils.webEngineNames.mediaPreview ||
|
||||||
|
o.item.objectName === JamiQmlUtils.webEngineNames.videoPreview ||
|
||||||
|
o.item.objectName === JamiQmlUtils.webEngineNames.map ||
|
||||||
|
o.item.objectName === JamiQmlUtils.webEngineNames.general ||
|
||||||
|
o.item.objectName === JamiQmlUtils.webEngineNames.emojiPicker
|
||||||
|
))
|
||||||
|
.length : 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listen for a hangup combined with a fullscreen call state and
|
// Listen for a hangup combined with a fullscreen call state and
|
||||||
@ -258,7 +270,7 @@ QtObject {
|
|||||||
function onHasCallChanged() {
|
function onHasCallChanged() {
|
||||||
if (!CallAdapter.hasCall && isCallFullscreen) {
|
if (!CallAdapter.hasCall && isCallFullscreen) {
|
||||||
priv.fullScreenItems.forEach(o => {
|
priv.fullScreenItems.forEach(o => {
|
||||||
if (o.item instanceof OngoingCallPage) {
|
if (o.item.objectName === "callViewLoader") {
|
||||||
popFullScreenItem(o)
|
popFullScreenItem(o)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,18 +37,24 @@ ApplicationWindow {
|
|||||||
property bool isRTL: UtilsAdapter.isRTL
|
property bool isRTL: UtilsAdapter.isRTL
|
||||||
LayoutMirroring.enabled: isRTL
|
LayoutMirroring.enabled: isRTL
|
||||||
LayoutMirroring.childrenInherit: isRTL
|
LayoutMirroring.childrenInherit: isRTL
|
||||||
|
property var raiseWhenCalled: AppSettingsManager.getValue(Settings.RaiseWhenCalled)
|
||||||
|
|
||||||
onActiveFocusItemChanged: {
|
onActiveFocusItemChanged: {
|
||||||
focusOverlay.margin = -5;
|
focusOverlay.margin = -5;
|
||||||
if (activeFocusItem && ((activeFocusItem.focusReason === Qt.TabFocusReason) || (activeFocusItem.focusReason === Qt.BacktabFocusReason))) {
|
if (activeFocusItem) {
|
||||||
if (activeFocusItem.focusOnChild) {
|
const goodReasonToChangeFocus = activeFocusItem instanceof ItemDelegate || ((activeFocusItem.focusReason === Qt.TabFocusReason) || (activeFocusItem.focusReason === Qt.BacktabFocusReason));
|
||||||
focusOverlay.parent = activeFocusItem.parent;
|
if (goodReasonToChangeFocus) {
|
||||||
} else if (activeFocusItem.dontShowFocusState) {
|
if (activeFocusItem.focusOnChild) {
|
||||||
focusOverlay.parent = null;
|
focusOverlay.parent = activeFocusItem.parent;
|
||||||
|
} else if (activeFocusItem.dontShowFocusState) {
|
||||||
|
focusOverlay.parent = null;
|
||||||
|
} else {
|
||||||
|
if (activeFocusItem.showFocusMargin)
|
||||||
|
focusOverlay.margin = 0;
|
||||||
|
focusOverlay.parent = activeFocusItem;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (activeFocusItem.showFocusMargin)
|
focusOverlay.parent = null;
|
||||||
focusOverlay.margin = 0;
|
|
||||||
focusOverlay.parent = activeFocusItem;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
focusOverlay.parent = null;
|
focusOverlay.parent = null;
|
||||||
@ -291,6 +297,26 @@ ApplicationWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: UtilsAdapter
|
||||||
|
function onRaiseWhenCalledChanged() {
|
||||||
|
raiseWhenCalled = AppSettingsManager.getValue(Settings.RaiseWhenCalled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: CallAdapter
|
||||||
|
|
||||||
|
function onCallStatusChanged(index, accountId, convUid) {
|
||||||
|
//If we are starting a call with raiseWhenCalled activated
|
||||||
|
if (raiseWhenCalled && index === Call.Status.INCOMING_RINGING) {
|
||||||
|
appWindow.raise();
|
||||||
|
appWindow.requestActivate();
|
||||||
|
layoutManager.restoreApp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: MainApplication
|
target: MainApplication
|
||||||
|
|
||||||
|
|||||||
@ -171,7 +171,6 @@ AccountAdapter::createJamiAccount(const QVariantMap& settings)
|
|||||||
settings["alias"].toString(),
|
settings["alias"].toString(),
|
||||||
settings["archivePath"].toString(),
|
settings["archivePath"].toString(),
|
||||||
settings["password"].toString(),
|
settings["password"].toString(),
|
||||||
settings["archivePin"].toString(),
|
|
||||||
"");
|
"");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -219,7 +218,6 @@ AccountAdapter::createSIPAccount(const QVariantMap& settings)
|
|||||||
settings["alias"].toString(),
|
settings["alias"].toString(),
|
||||||
settings["archivePath"].toString(),
|
settings["archivePath"].toString(),
|
||||||
"",
|
"",
|
||||||
"",
|
|
||||||
settings["username"].toString());
|
settings["username"].toString());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,8 +34,12 @@ AppSettingsManager::AppSettingsManager(QObject* parent)
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < static_cast<int>(Settings::Key::COUNT__); ++i) {
|
for (int i = 0; i < static_cast<int>(Settings::Key::COUNT__); ++i) {
|
||||||
auto key = static_cast<Settings::Key>(i);
|
auto key = static_cast<Settings::Key>(i);
|
||||||
if (!settings_->contains(Settings::toString(key)))
|
auto strKey= Settings::toString(key);
|
||||||
setValue(key, Settings::defaultValue(key));
|
// If the setting is written in the settings file and is equal to the default value,
|
||||||
|
// remove it from the settings file.
|
||||||
|
// This allow us to change default values without risking to remove user settings
|
||||||
|
if ((settings_->contains(strKey)) && (settings_->value(strKey) == Settings::defaultValue(key)))
|
||||||
|
settings_->remove(strKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -63,6 +63,8 @@ extern const QString defaultDownloadPath;
|
|||||||
X(WindowState, QWindow::AutomaticVisibility) \
|
X(WindowState, QWindow::AutomaticVisibility) \
|
||||||
X(EnableExperimentalSwarm, false) \
|
X(EnableExperimentalSwarm, false) \
|
||||||
X(LANG, "SYSTEM") \
|
X(LANG, "SYSTEM") \
|
||||||
|
X(SpellLang, {}) \
|
||||||
|
X(EnableSpellCheck, true) \
|
||||||
X(PluginStoreEndpoint, "https://plugins.jami.net") \
|
X(PluginStoreEndpoint, "https://plugins.jami.net") \
|
||||||
X(PositionShareDuration, 15) \
|
X(PositionShareDuration, 15) \
|
||||||
X(PositionShareLimit, true) \
|
X(PositionShareLimit, true) \
|
||||||
@ -74,16 +76,17 @@ extern const QString defaultDownloadPath;
|
|||||||
X(PttKeys, 32) \
|
X(PttKeys, 32) \
|
||||||
X(UseFramelessWindow, USE_FRAMELESS_WINDOW_DEFAULT) \
|
X(UseFramelessWindow, USE_FRAMELESS_WINDOW_DEFAULT) \
|
||||||
X(EnableCrashReporting, true) \
|
X(EnableCrashReporting, true) \
|
||||||
X(EnableAutomaticCrashReporting, false)
|
X(EnableAutomaticCrashReporting, false) \
|
||||||
|
X(RaiseWhenCalled, false)
|
||||||
#if APPSTORE
|
#if APPSTORE
|
||||||
#define KEYS COMMON_KEYS
|
#define KEYS COMMON_KEYS
|
||||||
#else
|
#else
|
||||||
// Additional key-value pairs for non-APPSTORE builds including donation
|
// Additional key-value pairs for non-APPSTORE builds including donation
|
||||||
// related settings.
|
// related settings.
|
||||||
#define KEYS COMMON_KEYS \
|
#define KEYS COMMON_KEYS \
|
||||||
X(Donation2023VisibleDate, "2023-11-27 05:00") \
|
X(Donation2025StartDate, "2025-09-15 00:00") \
|
||||||
X(IsDonationVisible, true) \
|
X(IsDonationVisible, true) \
|
||||||
X(Donation2023EndDate2, "2024-04-01 00:00")
|
X(Donation2025EndDate, "2025-11-16 00:00")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
#include "appversionmanager.h"
|
#include "appversionmanager.h"
|
||||||
|
|
||||||
#include "lrcinstance.h"
|
#include "lrcinstance.h"
|
||||||
#include "version.h"
|
#include "version_info.h"
|
||||||
|
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
@ -73,7 +73,7 @@ struct AppVersionManager::Impl : public QObject
|
|||||||
Q_EMIT parent_.updateCheckReplyReceived(false);
|
Q_EMIT parent_.updateCheckReplyReceived(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto currentVersion = QString(VERSION_STRING).toULongLong();
|
auto currentVersion = BUILD_VERSION_STRING.toULongLong();
|
||||||
auto latestVersion = latestVersionString.toULongLong();
|
auto latestVersion = latestVersionString.toULongLong();
|
||||||
const QString channelStr = isBeta ? "beta" : "stable";
|
const QString channelStr = isBeta ? "beta" : "stable";
|
||||||
const auto newVersionFound = latestVersion > currentVersion;
|
const auto newVersionFound = latestVersion > currentVersion;
|
||||||
|
|||||||
@ -345,9 +345,11 @@ AvAdapter::shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned heig
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AvAdapter::shareWindow(const QString& windowProcessId, const QString& windowId)
|
AvAdapter::shareWindow(const QString& windowProcessId, const QString& windowId, const int fps)
|
||||||
{
|
{
|
||||||
auto resource = lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId, windowId);
|
auto resource = lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId,
|
||||||
|
windowId,
|
||||||
|
fps);
|
||||||
auto callId = lrcInstance_->getCurrentCallId();
|
auto callId = lrcInstance_->getCurrentCallId();
|
||||||
|
|
||||||
muteCamera_ = !isCapturing();
|
muteCamera_ = !isCapturing();
|
||||||
@ -356,7 +358,10 @@ AvAdapter::shareWindow(const QString& windowProcessId, const QString& windowId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString
|
||||||
AvAdapter::getSharingResource(int screenId, const QString& windowProcessId, const QString& windowId)
|
AvAdapter::getSharingResource(int screenId,
|
||||||
|
const QString& windowProcessId,
|
||||||
|
const QString& windowId,
|
||||||
|
const int fps)
|
||||||
{
|
{
|
||||||
if (screenId == -1) {
|
if (screenId == -1) {
|
||||||
const auto arrangementRect = getAllScreensBoundingRect();
|
const auto arrangementRect = getAllScreensBoundingRect();
|
||||||
@ -387,7 +392,7 @@ AvAdapter::getSharingResource(int screenId, const QString& windowProcessId, cons
|
|||||||
rect.height()
|
rect.height()
|
||||||
* screen->devicePixelRatio());
|
* screen->devicePixelRatio());
|
||||||
} else if (!windowId.isEmpty()) {
|
} else if (!windowId.isEmpty()) {
|
||||||
return lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId, windowId);
|
return lrcInstance_->getCurrentCallModel()->getDisplay(windowProcessId, windowId, fps);
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@ -96,7 +96,9 @@ protected:
|
|||||||
Q_INVOKABLE void shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned height);
|
Q_INVOKABLE void shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned height);
|
||||||
|
|
||||||
// Select window to display (all platforms except Wayland).
|
// Select window to display (all platforms except Wayland).
|
||||||
Q_INVOKABLE void shareWindow(const QString& windowProcessId, const QString& windowId);
|
Q_INVOKABLE void shareWindow(const QString& windowProcessId,
|
||||||
|
const QString& windowId,
|
||||||
|
const int fps = -1);
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
// Share a window on Wayland.
|
// Share a window on Wayland.
|
||||||
@ -110,7 +112,8 @@ protected:
|
|||||||
// Returns the screensharing resource
|
// Returns the screensharing resource
|
||||||
Q_INVOKABLE QString getSharingResource(int screenId = -2,
|
Q_INVOKABLE QString getSharingResource(int screenId = -2,
|
||||||
const QString& windowProcessId = "",
|
const QString& windowProcessId = "",
|
||||||
const QString& key = "");
|
const QString& key = "",
|
||||||
|
const int fps = -1);
|
||||||
|
|
||||||
Q_INVOKABLE void getListWindows();
|
Q_INVOKABLE void getListWindows();
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,7 @@ CallAdapter::CallAdapter(AppSettingsManager* settingsManager,
|
|||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
// notification responses (gnu/linux currently)
|
// notification responses (gnu/linux currently)
|
||||||
connect(systemTray_,
|
connect(systemTray_,
|
||||||
&SystemTray::answerCallActivated,
|
&SystemTray::acceptCallActivated,
|
||||||
this,
|
this,
|
||||||
[this](const QString& accountId, const QString& convUid) {
|
[this](const QString& accountId, const QString& convUid) {
|
||||||
acceptACall(accountId, convUid);
|
acceptACall(accountId, convUid);
|
||||||
@ -249,7 +249,7 @@ CallAdapter::onCallEnded(const QString& callId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CallAdapter::onCallStatusChanged(const QString& callId, int code)
|
CallAdapter::onCallStatusChanged(const QString& accountId, const QString& callId, int code)
|
||||||
{
|
{
|
||||||
Q_UNUSED(code)
|
Q_UNUSED(code)
|
||||||
|
|
||||||
@ -468,11 +468,14 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
|
|||||||
showNotification(accountId, convInfo.uid);
|
showNotification(accountId, convInfo.uid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!accountProperties.denySecondCall) {
|
||||||
|
lrcInstance_->selectConversation(convInfo.uid, accountId);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// finally, in this case, the conversation isn't selected yet
|
||||||
|
// and there are no other special conditions, so just select the conversation
|
||||||
|
lrcInstance_->selectConversation(convInfo.uid, accountId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// finally, in this case, the conversation isn't selected yet
|
|
||||||
// and there are no other special conditions, so just select the conversation
|
|
||||||
lrcInstance_->selectConversation(convInfo.uid, accountId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -563,7 +566,7 @@ CallAdapter::connectCallModel(const QString& accountId)
|
|||||||
connect(accInfo.callModel.get(),
|
connect(accInfo.callModel.get(),
|
||||||
&CallModel::callStatusChanged,
|
&CallModel::callStatusChanged,
|
||||||
this,
|
this,
|
||||||
QOverload<const QString&, int>::of(&CallAdapter::onCallStatusChanged),
|
QOverload<const QString&, const QString&, int>::of(&CallAdapter::onCallStatusChanged),
|
||||||
Qt::UniqueConnection);
|
Qt::UniqueConnection);
|
||||||
|
|
||||||
connect(accInfo.callModel.get(),
|
connect(accInfo.callModel.get(),
|
||||||
|
|||||||
@ -118,7 +118,7 @@ public Q_SLOTS:
|
|||||||
void onShowCallView(const QString& accountId, const QString& convUid);
|
void onShowCallView(const QString& accountId, const QString& convUid);
|
||||||
void onAccountChanged();
|
void onAccountChanged();
|
||||||
void onCallStatusChanged(const QString& accountId, const QString& callId);
|
void onCallStatusChanged(const QString& accountId, const QString& callId);
|
||||||
void onCallStatusChanged(const QString& callId, int code);
|
void onCallStatusChanged(const QString& accountId, const QString& callId, int code);
|
||||||
void onCallAddedToConference(const QString& callId, const QString& conversationId, const QString& confId);
|
void onCallAddedToConference(const QString& callId, const QString& conversationId, const QString& confId);
|
||||||
void onCallStarted(const QString& callId);
|
void onCallStarted(const QString& callId);
|
||||||
void onCallEnded(const QString& callId);
|
void onCallEnded(const QString& callId);
|
||||||
|
|||||||
@ -135,7 +135,7 @@ PendingConferenceesListModel::connectSignals()
|
|||||||
callsStatusChanged_ = connect(currentCallModel,
|
callsStatusChanged_ = connect(currentCallModel,
|
||||||
&CallModel::callStatusChanged,
|
&CallModel::callStatusChanged,
|
||||||
this,
|
this,
|
||||||
[this](const QString&, int) {
|
[this](const QString&, const QString&, int) {
|
||||||
Q_EMIT dataChanged(index(0, 0),
|
Q_EMIT dataChanged(index(0, 0),
|
||||||
index(rowCount() - 1),
|
index(rowCount() - 1),
|
||||||
{Role::CallStatus});
|
{Role::CallStatus});
|
||||||
@ -401,6 +401,16 @@ CallOverlayModel::eventFilter(QObject* object, QEvent* event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Tab or BackTab key events should trigger a signal that we can use to
|
||||||
|
// prevent the overlay from fading and to allow the user to navigate
|
||||||
|
// through the controls.
|
||||||
|
if (event->type() == QEvent::KeyPress && (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Tab)
|
||||||
|
|| (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Backtab)) {
|
||||||
|
Q_EMIT focusKeyPressed();
|
||||||
|
// Don't absorb the event so that the focus can be changed
|
||||||
|
// to the next or previous control.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
#ifndef HAVE_GLOBAL_PTT
|
#ifndef HAVE_GLOBAL_PTT
|
||||||
else if (event->type() == QEvent::KeyPress && listener_->getPttState()) {
|
else if (event->type() == QEvent::KeyPress && listener_->getPttState()) {
|
||||||
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
|
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
|
||||||
|
|||||||
@ -140,6 +140,7 @@ public:
|
|||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void mouseMoved(QQuickItem* item);
|
void mouseMoved(QQuickItem* item);
|
||||||
|
void focusKeyPressed();
|
||||||
void pttKeyPressed();
|
void pttKeyPressed();
|
||||||
void pttKeyReleased();
|
void pttKeyReleased();
|
||||||
|
|
||||||
|
|||||||
@ -78,8 +78,10 @@ Popup {
|
|||||||
contentItem: ColumnLayout {
|
contentItem: ColumnLayout {
|
||||||
id: contentLayout
|
id: contentLayout
|
||||||
|
|
||||||
JamiPushButton {
|
JamiPushButton { QWKSetParentHitTestVisible {}
|
||||||
id: closeButton
|
id: closeButton
|
||||||
|
Accessible.role: Accessible.Button
|
||||||
|
Accessible.name: JamiStrings.close
|
||||||
|
|
||||||
visible: closeButtonVisible
|
visible: closeButtonVisible
|
||||||
|
|
||||||
@ -100,6 +102,7 @@ Popup {
|
|||||||
id: titleText
|
id: titleText
|
||||||
|
|
||||||
Layout.leftMargin: popupMargins
|
Layout.leftMargin: popupMargins
|
||||||
|
Layout.rightMargin: popupMargins
|
||||||
Layout.bottomMargin: 20
|
Layout.bottomMargin: 20
|
||||||
Layout.topMargin: closeButtonVisible ? 0 : 30
|
Layout.topMargin: closeButtonVisible ? 0 : 30
|
||||||
Layout.alignment: Qt.AlignLeft
|
Layout.alignment: Qt.AlignLeft
|
||||||
@ -116,7 +119,7 @@ Popup {
|
|||||||
|
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.preferredHeight: Math.min(contentHeight, root.height)
|
Layout.preferredHeight: Math.min(contentHeight, root.height)
|
||||||
Layout.preferredWidth: contentItem.childrenRect.width
|
Layout.preferredWidth: contentItem.childrenRect.width + ScrollBar.vertical.width
|
||||||
Layout.leftMargin: popupMargins
|
Layout.leftMargin: popupMargins
|
||||||
Layout.rightMargin: popupMargins
|
Layout.rightMargin: popupMargins
|
||||||
Layout.alignment: Qt.AlignCenter
|
Layout.alignment: Qt.AlignCenter
|
||||||
|
|||||||
@ -23,12 +23,12 @@ import net.jami.Adapters 1.1
|
|||||||
import net.jami.Constants 1.1
|
import net.jami.Constants 1.1
|
||||||
|
|
||||||
SBSMessageBase {
|
SBSMessageBase {
|
||||||
id: root
|
id: rootDelegate
|
||||||
|
|
||||||
property var confId: ConfId
|
property var confId: ConfId
|
||||||
property var currentCallId: CurrentCall.id
|
property var currentCallId: CurrentCall.id
|
||||||
component JoinCallButton: MaterialButton {
|
component JoinCallButton: MaterialButton {
|
||||||
visible: root.isActive && root.currentCallId !== root.confId
|
visible: rootDelegate.isActive && rootDelegate.currentCallId !== rootDelegate.confId
|
||||||
toolTipText: JamiStrings.joinCall
|
toolTipText: JamiStrings.joinCall
|
||||||
color: JamiTheme.blackColor
|
color: JamiTheme.blackColor
|
||||||
background.opacity: hovered ? 0.2 : 0.1
|
background.opacity: hovered ? 0.2 : 0.1
|
||||||
@ -40,6 +40,20 @@ SBSMessageBase {
|
|||||||
textRightPadding: 9
|
textRightPadding: 9
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Accessible.role: Accessible.StaticText
|
||||||
|
Accessible.name: {
|
||||||
|
let name = isOutgoing ? JamiStrings.inReplyToYou : UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author);
|
||||||
|
return name + ": " + callLabel.text + " " + formattedDay;
|
||||||
|
}
|
||||||
|
Accessible.description: {
|
||||||
|
let status = "";
|
||||||
|
if (bubble.isEdited)
|
||||||
|
status += JamiStrings.edited + " ";
|
||||||
|
return status + (readers.length > 0 ? JamiStrings.readBy + " " + readers.map(function (uri) {
|
||||||
|
return UtilsAdapter.getBestNameForUri(CurrentAccount.id, uri);
|
||||||
|
}).join(", ") : "");
|
||||||
|
}
|
||||||
|
|
||||||
property bool isRemoteImage
|
property bool isRemoteImage
|
||||||
|
|
||||||
isOutgoing: Author === CurrentAccount.uri
|
isOutgoing: Author === CurrentAccount.uri
|
||||||
@ -48,17 +62,17 @@ SBSMessageBase {
|
|||||||
formattedTime: MessagesAdapter.getFormattedTime(Timestamp)
|
formattedTime: MessagesAdapter.getFormattedTime(Timestamp)
|
||||||
|
|
||||||
bubble.border.color: CurrentConversation.color
|
bubble.border.color: CurrentConversation.color
|
||||||
bubble.border.width: root.isActive ? 1.5 : 0
|
bubble.border.width: rootDelegate.isActive ? 1.5 : 0
|
||||||
bubble.color: JamiTheme.messageInBgColor
|
bubble.color: JamiTheme.messageInBgColor
|
||||||
bubble.opacity: 1
|
bubble.opacity: 1
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: CurrentConversation
|
target: CurrentConversation
|
||||||
enabled: root.isActive
|
enabled: rootDelegate.isActive
|
||||||
|
|
||||||
function onActiveCallsChanged() {
|
function onActiveCallsChanged() {
|
||||||
root.isActive = LRCInstance.indexOfActiveCall(root.confId, ActionUri, DeviceId) !== -1;
|
rootDelegate.isActive = LRCInstance.indexOfActiveCall(rootDelegate.confId, ActionUri, DeviceId) !== -1;
|
||||||
if (root.isActive) {
|
if (rootDelegate.isActive) {
|
||||||
bubble.mask.border.color = CurrentConversation.color;
|
bubble.mask.border.color = CurrentConversation.color;
|
||||||
bubble.mask.border.width = 1.5;
|
bubble.mask.border.width = 1.5;
|
||||||
bubble.mask.z = -2;
|
bubble.mask.z = -2;
|
||||||
@ -66,8 +80,8 @@ SBSMessageBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
property bool isActive: LRCInstance.indexOfActiveCall(root.confId, ActionUri, DeviceId) !== -1
|
property bool isActive: LRCInstance.indexOfActiveCall(rootDelegate.confId, ActionUri, DeviceId) !== -1
|
||||||
visible: isActive || root.confId === "" || Duration > 0
|
visible: isActive || rootDelegate.confId === "" || Duration > 0
|
||||||
|
|
||||||
property var baseColor: JamiTheme.messageInBgColor
|
property var baseColor: JamiTheme.messageInBgColor
|
||||||
|
|
||||||
@ -76,7 +90,7 @@ SBSMessageBase {
|
|||||||
id: msg
|
id: msg
|
||||||
anchors.right: isOutgoing ? parent.right : undefined
|
anchors.right: isOutgoing ? parent.right : undefined
|
||||||
spacing: 10
|
spacing: 10
|
||||||
visible: root.visible
|
visible: rootDelegate.visible
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: statusIcon
|
id: statusIcon
|
||||||
@ -84,10 +98,10 @@ SBSMessageBase {
|
|||||||
width: 10
|
width: 10
|
||||||
height: 10
|
height: 10
|
||||||
verticalAlignment: Qt.AlignVCenter
|
verticalAlignment: Qt.AlignVCenter
|
||||||
visible: !root.isActive
|
visible: !rootDelegate.isActive
|
||||||
|
|
||||||
source: {
|
source: {
|
||||||
if (root.isOutgoing) {
|
if (rootDelegate.isOutgoing) {
|
||||||
if (Duration > 0)
|
if (Duration > 0)
|
||||||
return "qrc:/icons/outgoing-call.svg";
|
return "qrc:/icons/outgoing-call.svg";
|
||||||
else
|
else
|
||||||
@ -104,12 +118,11 @@ SBSMessageBase {
|
|||||||
effect: ColorOverlay {
|
effect: ColorOverlay {
|
||||||
color: {
|
color: {
|
||||||
if (Duration > 0)
|
if (Duration > 0)
|
||||||
return UtilsAdapter.luma(root.baseColor) ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark
|
return UtilsAdapter.luma(rootDelegate.baseColor) ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark;
|
||||||
return JamiTheme.redColor
|
return JamiTheme.redColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
@ -120,11 +133,11 @@ SBSMessageBase {
|
|||||||
bottomPadding: 8
|
bottomPadding: 8
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.rightMargin: root.isActive && root.currentCallId !== root.confId ? 0 : root.timeWidth + 16
|
Layout.rightMargin: rootDelegate.isActive && rootDelegate.currentCallId !== rootDelegate.confId ? 0 : rootDelegate.timeWidth + 16
|
||||||
Layout.leftMargin: root.isActive ? 10 : -5 /* spacing is 10 and we want 5px with icon */
|
Layout.leftMargin: rootDelegate.isActive ? 10 : -5 /* spacing is 10 and we want 5px with icon */
|
||||||
|
|
||||||
text: {
|
text: {
|
||||||
if (root.isActive)
|
if (rootDelegate.isActive)
|
||||||
return JamiStrings.startedACall;
|
return JamiStrings.startedACall;
|
||||||
return Body;
|
return Body;
|
||||||
}
|
}
|
||||||
@ -136,7 +149,7 @@ SBSMessageBase {
|
|||||||
renderType: Text.NativeRendering
|
renderType: Text.NativeRendering
|
||||||
textFormat: Text.MarkdownText
|
textFormat: Text.MarkdownText
|
||||||
|
|
||||||
color: UtilsAdapter.luma(root.baseColor) ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark
|
color: UtilsAdapter.luma(rootDelegate.baseColor) ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark
|
||||||
}
|
}
|
||||||
|
|
||||||
JoinCallButton {
|
JoinCallButton {
|
||||||
@ -146,7 +159,7 @@ SBSMessageBase {
|
|||||||
Layout.bottomMargin: 4
|
Layout.bottomMargin: 4
|
||||||
|
|
||||||
text: JamiStrings.joinWithAudio
|
text: JamiStrings.joinWithAudio
|
||||||
onClicked: MessagesAdapter.joinCall(ActionUri, DeviceId, root.confId, true)
|
onClicked: MessagesAdapter.joinCall(ActionUri, DeviceId, rootDelegate.confId, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
JoinCallButton {
|
JoinCallButton {
|
||||||
@ -156,20 +169,20 @@ SBSMessageBase {
|
|||||||
Layout.topMargin: 4
|
Layout.topMargin: 4
|
||||||
Layout.bottomMargin: 4
|
Layout.bottomMargin: 4
|
||||||
|
|
||||||
onClicked: MessagesAdapter.joinCall(ActionUri, DeviceId, root.confId)
|
onClicked: MessagesAdapter.joinCall(ActionUri, DeviceId, rootDelegate.confId)
|
||||||
Layout.rightMargin: 4
|
Layout.rightMargin: 4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
opacity: 0
|
opacity: 0
|
||||||
Behavior on opacity {
|
Behavior on opacity {
|
||||||
NumberAnimation {
|
NumberAnimation {
|
||||||
duration: 100
|
duration: 100
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
bubble.timestampItem.visible = !root.isActive || root.currentCallId === root.confId;
|
bubble.timestampItem.visible = !rootDelegate.isActive || rootDelegate.currentCallId === rootDelegate.confId;
|
||||||
opacity = 1;
|
opacity = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,8 +21,8 @@ import net.jami.Models 1.1
|
|||||||
import net.jami.Adapters 1.1
|
import net.jami.Adapters 1.1
|
||||||
import net.jami.Constants 1.1
|
import net.jami.Constants 1.1
|
||||||
|
|
||||||
Column {
|
Control {
|
||||||
id: root
|
id: rootDelegate
|
||||||
|
|
||||||
property bool showTime: false
|
property bool showTime: false
|
||||||
property bool showDay: false
|
property bool showDay: false
|
||||||
@ -36,21 +36,41 @@ Column {
|
|||||||
height: timestampItem.height + textLabel.height
|
height: timestampItem.height + textLabel.height
|
||||||
spacing: 0
|
spacing: 0
|
||||||
|
|
||||||
Item {
|
Accessible.name: {
|
||||||
|
let name = UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author);
|
||||||
|
return name + ": " + Body + " " + formattedTime + " " + formattedDay;
|
||||||
|
}
|
||||||
|
Accessible.description: {
|
||||||
|
let status = "";
|
||||||
|
if (IsLastSent)
|
||||||
|
status += JamiStrings.sent + " ";
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
background: Rectangle {
|
||||||
|
id: focusIndicator
|
||||||
|
visible: rootDelegate.activeFocus
|
||||||
|
border.color: JamiTheme.tintedBlue
|
||||||
|
border.width: 2
|
||||||
|
radius: 10
|
||||||
|
color: "transparent"
|
||||||
|
z: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
contentItem: Item {
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
height: timestampItem.height + textLabel.height
|
height: timestampItem.height + textLabel.height
|
||||||
|
|
||||||
TimestampInfo {
|
TimestampInfo {
|
||||||
id: timestampItem
|
id: timestampItem
|
||||||
|
|
||||||
showDay: root.showDay
|
showDay: rootDelegate.showDay
|
||||||
showTime: root.showTime
|
showTime: rootDelegate.showTime
|
||||||
formattedTime: root.formattedTime
|
formattedTime: rootDelegate.formattedTime
|
||||||
formattedDay: root.formattedDay
|
formattedDay: rootDelegate.formattedDay
|
||||||
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
@ -67,7 +87,7 @@ Column {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
opacity: 0
|
opacity: 0
|
||||||
Behavior on opacity {
|
Behavior on opacity {
|
||||||
NumberAnimation {
|
NumberAnimation {
|
||||||
duration: 100
|
duration: 100
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,20 +24,32 @@ import net.jami.Constants 1.1
|
|||||||
import net.jami.Adapters 1.1
|
import net.jami.Adapters 1.1
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
id: root
|
id: rootDelegate
|
||||||
|
|
||||||
property var mediaInfo
|
property var mediaInfo
|
||||||
property bool showTime
|
property bool showTime
|
||||||
property bool showDay
|
property bool showDay
|
||||||
property int timestamp: Timestamp
|
property int timestamp: Timestamp
|
||||||
property string formattedTime: MessagesAdapter.getFormattedTime(root.timestamp)
|
property string formattedTime: MessagesAdapter.getFormattedTime(rootDelegate.timestamp)
|
||||||
property string formattedDay: MessagesAdapter.getFormattedDay(root.timestamp)
|
property string formattedDay: MessagesAdapter.getFormattedDay(rootDelegate.timestamp)
|
||||||
|
|
||||||
property int seq: MsgSeq.single
|
property int seq: MsgSeq.single
|
||||||
property string author: Author
|
property string author: Author
|
||||||
property string body: Body
|
property string body: Body
|
||||||
property var tid: TID
|
property var tid: TID
|
||||||
property int transferStatus: TransferStatus
|
property int transferStatus: TransferStatus
|
||||||
|
|
||||||
|
Accessible.name: {
|
||||||
|
let name = UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author);
|
||||||
|
return JamiStrings.dataTransfer + name + ": " + JamiStrings.status + TransferStatus + Body + " " + formattedTime + " " + formattedDay;
|
||||||
|
}
|
||||||
|
Accessible.description: {
|
||||||
|
let status = "";
|
||||||
|
if (IsLastSent)
|
||||||
|
status += JamiStrings.sent + " ";
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
onTidChanged: {
|
onTidChanged: {
|
||||||
if (tid === "") {
|
if (tid === "") {
|
||||||
sourceComponent = deletedMsgComp;
|
sourceComponent = deletedMsgComp;
|
||||||
@ -48,7 +60,7 @@ Loader {
|
|||||||
sourceComponent = deletedMsgComp;
|
sourceComponent = deletedMsgComp;
|
||||||
return;
|
return;
|
||||||
} else if (transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED) {
|
} else if (transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED) {
|
||||||
mediaInfo = MessagesAdapter.getMediaInfo(root.body);
|
mediaInfo = MessagesAdapter.getMediaInfo(rootDelegate.body);
|
||||||
if (Object.keys(mediaInfo).length !== 0 && WITH_WEBENGINE) {
|
if (Object.keys(mediaInfo).length !== 0 && WITH_WEBENGINE) {
|
||||||
sourceComponent = localMediaMsgComp;
|
sourceComponent = localMediaMsgComp;
|
||||||
return;
|
return;
|
||||||
@ -74,13 +86,13 @@ Loader {
|
|||||||
id: deletedItem
|
id: deletedItem
|
||||||
|
|
||||||
isOutgoing: Author === CurrentAccount.uri
|
isOutgoing: Author === CurrentAccount.uri
|
||||||
showTime: root.showTime
|
showTime: rootDelegate.showTime
|
||||||
seq: root.seq
|
seq: rootDelegate.seq
|
||||||
author: Author
|
author: Author
|
||||||
readers: Readers
|
readers: Readers
|
||||||
timestamp: root.timestamp
|
timestamp: rootDelegate.timestamp
|
||||||
formattedTime: root.formattedTime
|
formattedTime: rootDelegate.formattedTime
|
||||||
formattedDay: root.formattedTime
|
formattedDay: rootDelegate.formattedTime
|
||||||
extraHeight: 0
|
extraHeight: 0
|
||||||
textContentWidth: textEditId.width
|
textContentWidth: textEditId.width
|
||||||
textContentHeight: textEditId.height
|
textContentHeight: textEditId.height
|
||||||
@ -122,34 +134,34 @@ Loader {
|
|||||||
id: dataTransferItem
|
id: dataTransferItem
|
||||||
|
|
||||||
transferId: Id
|
transferId: Id
|
||||||
property var transferStats: MessagesAdapter.getTransferStats(transferId, root.transferStatus)
|
property var transferStats: MessagesAdapter.getTransferStats(transferId, rootDelegate.transferStatus)
|
||||||
property bool canOpen: root.transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED || isOutgoing
|
property bool canOpen: rootDelegate.transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED || isOutgoing
|
||||||
property real maxMsgWidth: root.width - senderMargin - 2 * hPadding - avatarBlockWidth - buttonsLoader.width - 24 - 6 - 24
|
property real maxMsgWidth: rootDelegate.width - senderMargin - 2 * hPadding - avatarBlockWidth - buttonsLoader.width - 24 - 6 - 24
|
||||||
|
|
||||||
// Timer to update the translation bar
|
// Timer to update the translation bar
|
||||||
Loader {
|
Loader {
|
||||||
id: timerLoader
|
id: timerLoader
|
||||||
active: root.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING
|
active: rootDelegate.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING
|
||||||
sourceComponent: Timer {
|
sourceComponent: Timer {
|
||||||
interval: 1000 // Update every second
|
interval: 1000 // Update every second
|
||||||
running: true
|
running: true
|
||||||
repeat: true
|
repeat: true
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
transferStats = MessagesAdapter.getTransferStats(transferId, root.transferStatus);
|
transferStats = MessagesAdapter.getTransferStats(transferId, rootDelegate.transferStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isOutgoing: Author === CurrentAccount.uri
|
isOutgoing: Author === CurrentAccount.uri
|
||||||
showTime: root.showTime
|
showTime: rootDelegate.showTime
|
||||||
seq: root.seq
|
seq: rootDelegate.seq
|
||||||
author: Author
|
author: Author
|
||||||
location: Body
|
location: Body
|
||||||
transferName: TransferName
|
transferName: TransferName
|
||||||
readers: Readers
|
readers: Readers
|
||||||
timestamp: root.timestamp
|
timestamp: rootDelegate.timestamp
|
||||||
formattedTime: root.formattedTime
|
formattedTime: rootDelegate.formattedTime
|
||||||
formattedDay: root.formattedTime
|
formattedDay: rootDelegate.formattedTime
|
||||||
extraHeight: progressBar.visible ? 25 : 0
|
extraHeight: progressBar.visible ? 25 : 0
|
||||||
|
|
||||||
innerContent.children: [
|
innerContent.children: [
|
||||||
@ -178,7 +190,7 @@ Loader {
|
|||||||
Layout.margins: 8
|
Layout.margins: 8
|
||||||
|
|
||||||
sourceComponent: {
|
sourceComponent: {
|
||||||
switch (root.transferStatus) {
|
switch (rootDelegate.transferStatus) {
|
||||||
case Interaction.TransferStatus.TRANSFER_CREATED:
|
case Interaction.TransferStatus.TRANSFER_CREATED:
|
||||||
case Interaction.TransferStatus.TRANSFER_FINISHED:
|
case Interaction.TransferStatus.TRANSFER_FINISHED:
|
||||||
iconSource = JamiResources.link_black_24dp_svg;
|
iconSource = JamiResources.link_black_24dp_svg;
|
||||||
@ -225,7 +237,7 @@ Loader {
|
|||||||
normalColor: JamiTheme.chatviewBgColor
|
normalColor: JamiTheme.chatviewBgColor
|
||||||
imageColor: JamiTheme.chatviewButtonColor
|
imageColor: JamiTheme.chatviewButtonColor
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (root.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING) {
|
if (rootDelegate.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING) {
|
||||||
MessagesAdapter.cancelFile(transferId);
|
MessagesAdapter.cancelFile(transferId);
|
||||||
} else {
|
} else {
|
||||||
buttonsLoader.iconSource = JamiResources.connecting_black_24dp_svg;
|
buttonsLoader.iconSource = JamiResources.connecting_black_24dp_svg;
|
||||||
@ -287,7 +299,7 @@ Loader {
|
|||||||
ProgressBar {
|
ProgressBar {
|
||||||
id: progressBar
|
id: progressBar
|
||||||
|
|
||||||
visible: root.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING
|
visible: rootDelegate.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING
|
||||||
height: visible * implicitHeight
|
height: visible * implicitHeight
|
||||||
value: transferStats.progress / transferStats.totalSize
|
value: transferStats.progress / transferStats.totalSize
|
||||||
width: transferItem.width
|
width: transferItem.width
|
||||||
@ -305,15 +317,15 @@ Loader {
|
|||||||
|
|
||||||
isOutgoing: Author === CurrentAccount.uri
|
isOutgoing: Author === CurrentAccount.uri
|
||||||
transferId: Id
|
transferId: Id
|
||||||
property var transferStats: MessagesAdapter.getTransferStats(transferId, root.transferStatus)
|
property var transferStats: MessagesAdapter.getTransferStats(transferId, rootDelegate.transferStatus)
|
||||||
showTime: root.showTime
|
showTime: rootDelegate.showTime
|
||||||
seq: root.seq
|
seq: rootDelegate.seq
|
||||||
author: Author
|
author: Author
|
||||||
location: Body
|
location: Body
|
||||||
transferName: TransferName
|
transferName: TransferName
|
||||||
readers: Readers
|
readers: Readers
|
||||||
formattedTime: MessagesAdapter.getFormattedTime(root.timestamp)
|
formattedTime: MessagesAdapter.getFormattedTime(rootDelegate.timestamp)
|
||||||
formattedDay: MessagesAdapter.getFormattedDay(root.timestamp)
|
formattedDay: MessagesAdapter.getFormattedDay(rootDelegate.timestamp)
|
||||||
|
|
||||||
property real contentWidth
|
property real contentWidth
|
||||||
|
|
||||||
|
|||||||
370
src/app/commoncomponents/DictionaryInstallView.qml
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2025 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* 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 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 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import Qt5Compat.GraphicalEffects
|
||||||
|
import net.jami.Models 1.1
|
||||||
|
import net.jami.Adapters 1.1
|
||||||
|
import net.jami.Constants 1.1
|
||||||
|
import "../mainview/components"
|
||||||
|
import "../settingsview/components"
|
||||||
|
import SortFilterProxyModel 0.2
|
||||||
|
|
||||||
|
// Search bar for filtering dictionaries
|
||||||
|
ColumnLayout {
|
||||||
|
id: root
|
||||||
|
spacing: 0
|
||||||
|
property int checkBoxWidth: 24
|
||||||
|
|
||||||
|
Component.onCompleted: Qt.callLater(dictionarySearchBar.setTextAreaFocus)
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: headerLayout
|
||||||
|
width: parent.width
|
||||||
|
Layout.preferredHeight: childrenRect.height
|
||||||
|
|
||||||
|
// Header title
|
||||||
|
Searchbar {
|
||||||
|
id: dictionarySearchBar
|
||||||
|
|
||||||
|
focus: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: 55
|
||||||
|
|
||||||
|
placeHolderText: JamiStrings.searchTextLanguages
|
||||||
|
Accessible.name: JamiStrings.searchTextLanguages
|
||||||
|
Accessible.role: Accessible.EditableText
|
||||||
|
Accessible.description: JamiStrings.searchAvailableTextLanguages
|
||||||
|
|
||||||
|
onSearchBarTextChanged: function (text) {
|
||||||
|
dictionaryProxyModel.combinedFilterPattern = text;
|
||||||
|
dictionaryProxyModel.invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Label {
|
||||||
|
text: JamiStrings.showInstalledDictionaries
|
||||||
|
color: JamiTheme.faddedLastInteractionFontColor
|
||||||
|
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||||
|
Layout.rightMargin: 0
|
||||||
|
Layout.preferredHeight: 16
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checkbox to filter installed dictionaries
|
||||||
|
CheckBox {
|
||||||
|
id: showInstalledOnlyCheckbox
|
||||||
|
Accessible.name: JamiStrings.showInstalledDictionaries
|
||||||
|
Accessible.role: Accessible.CheckBox
|
||||||
|
Accessible.description: JamiStrings.showInstalledDictionariesDescription
|
||||||
|
checked: false
|
||||||
|
indicator: Image {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
layer {
|
||||||
|
enabled: true
|
||||||
|
effect: ColorOverlay {
|
||||||
|
color: JamiTheme.tintedBlue
|
||||||
|
}
|
||||||
|
mipmap: false
|
||||||
|
smooth: true
|
||||||
|
}
|
||||||
|
width: checkBoxWidth
|
||||||
|
height: checkBoxWidth
|
||||||
|
source: showInstalledOnlyCheckbox.checked ? JamiResources.check_box_24dp_svg : JamiResources.check_box_outline_blank_24dp_svg
|
||||||
|
}
|
||||||
|
|
||||||
|
Layout.preferredWidth: 55
|
||||||
|
Layout.preferredHeight: 55
|
||||||
|
Layout.rightMargin: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to listen for download failure and pop a simple dialog to inform the user
|
||||||
|
Connections {
|
||||||
|
target: SpellCheckAdapter
|
||||||
|
function onDownloadFailed(locale) {
|
||||||
|
viewCoordinator.presentDialog(appWindow, "commoncomponents/SimpleMessageDialog.qml", {
|
||||||
|
"title": JamiStrings.error,
|
||||||
|
"infoText": JamiStrings.spellCheckDownloadFailed.arg(locale),
|
||||||
|
"buttonTitles": [JamiStrings.optionOk],
|
||||||
|
"buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue],
|
||||||
|
"buttonRoles": [DialogButtonBox.AcceptRole]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JamiListView {
|
||||||
|
id: spellCheckDictionaryListView
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
Layout.fillHeight: true
|
||||||
|
|
||||||
|
model: SortFilterProxyModel {
|
||||||
|
id: dictionaryProxyModel
|
||||||
|
sourceModel: SpellCheckAdapter.getDictionaryListModel()
|
||||||
|
|
||||||
|
property string combinedFilterPattern
|
||||||
|
|
||||||
|
filters: AllOf {
|
||||||
|
AnyOf {
|
||||||
|
// Filter by dictionary name
|
||||||
|
RegExpFilter {
|
||||||
|
roleName: "Locale"
|
||||||
|
pattern: dictionaryProxyModel.combinedFilterPattern
|
||||||
|
caseSensitivity: Qt.CaseInsensitive
|
||||||
|
}
|
||||||
|
// Filter by native name
|
||||||
|
RegExpFilter {
|
||||||
|
roleName: "NativeName"
|
||||||
|
pattern: dictionaryProxyModel.combinedFilterPattern
|
||||||
|
caseSensitivity: Qt.CaseInsensitive
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ValueFilter {
|
||||||
|
roleName: "Installed"
|
||||||
|
value: true
|
||||||
|
enabled: showInstalledOnlyCheckbox.checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sorters: [
|
||||||
|
// Sort by locale alphabetically
|
||||||
|
RoleSorter {
|
||||||
|
roleName: "Locale"
|
||||||
|
sortOrder: Qt.AscendingOrder
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly property int itemMargins: 20
|
||||||
|
topMargin: itemMargins / 2
|
||||||
|
bottomMargin: itemMargins / 2
|
||||||
|
|
||||||
|
spacing: 8
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
delegate: ItemDelegate {
|
||||||
|
id: dictionaryDelegate
|
||||||
|
width: spellCheckDictionaryListView.width
|
||||||
|
height: Math.max(JamiTheme.preferredFieldHeight, contentLayout.implicitHeight + 32)
|
||||||
|
|
||||||
|
background: Rectangle {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
width: parent.width - spellCheckDictionaryListView.itemMargins
|
||||||
|
height: parent.height
|
||||||
|
color: JamiTheme.backgroundColor
|
||||||
|
radius: JamiTheme.primaryRadius
|
||||||
|
border.color: "transparent"
|
||||||
|
border.width: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: contentLayout
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: 16
|
||||||
|
spacing: 16
|
||||||
|
|
||||||
|
// Dictionary info
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
Layout.leftMargin: 16
|
||||||
|
spacing: 2
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: dictionaryName
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: model.NativeName || ""
|
||||||
|
color: JamiTheme.textColor
|
||||||
|
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||||
|
font.weight: Font.Medium
|
||||||
|
elide: Text.ElideRight
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: dictionaryLocale
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: model.Locale || ""
|
||||||
|
color: JamiTheme.faddedLastInteractionFontColor
|
||||||
|
font.pixelSize: JamiTheme.settingsDescriptionPixelSize - 2
|
||||||
|
elide: Text.ElideRight
|
||||||
|
visible: text !== ""
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Installation status and action
|
||||||
|
Item {
|
||||||
|
Layout.preferredWidth: 100
|
||||||
|
Layout.preferredHeight: 32
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
Layout.rightMargin: 16
|
||||||
|
|
||||||
|
// Install button for available dictionaries
|
||||||
|
MaterialButton {
|
||||||
|
id: installButton
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 100
|
||||||
|
height: 32
|
||||||
|
Accessible.name: dictionaryName.text + " " + JamiStrings.install
|
||||||
|
Accessible.role: Accessible.Button
|
||||||
|
|
||||||
|
text: JamiStrings.install
|
||||||
|
|
||||||
|
font.pixelSize: JamiTheme.settingsDescriptionPixelSize - 1
|
||||||
|
font.weight: Font.Medium
|
||||||
|
|
||||||
|
focusPolicy: Qt.StrongFocus
|
||||||
|
KeyNavigation.tab: {
|
||||||
|
try {
|
||||||
|
if (model.index < dictionaryProxyModel.count - 1) {
|
||||||
|
var nextItem = spellCheckDictionaryListView.itemAtIndex(model.index + 1);
|
||||||
|
if (nextItem) {
|
||||||
|
var nextButton = nextItem.findChild("installButton") || nextItem.findChild("uninstallButton");
|
||||||
|
return nextButton || null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.debug("KeyNavigation error handled:", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
onFocusChanged: {
|
||||||
|
if (focus) {
|
||||||
|
spellCheckDictionaryListView.positionViewAtIndex(model.index, ListView.Contain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
if (model.Locale) {
|
||||||
|
SpellCheckAdapter.installDictionary(model.Locale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
visible: !model.Downloading && !model.Installed && model.Locale !== undefined && model.Locale !== ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uninstall button for installed dictionaries (not system dictionaries)
|
||||||
|
MaterialButton {
|
||||||
|
id: uninstallButton
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 100
|
||||||
|
height: 32
|
||||||
|
|
||||||
|
Accessible.name: dictionaryName.text + " " + JamiStrings.uninstall
|
||||||
|
Accessible.role: Accessible.Button
|
||||||
|
|
||||||
|
text: JamiStrings.uninstall
|
||||||
|
color: "#ff6666"
|
||||||
|
hoveredColor: "#ff9999"
|
||||||
|
|
||||||
|
font.pixelSize: JamiTheme.settingsDescriptionPixelSize - 1
|
||||||
|
font.weight: Font.Medium
|
||||||
|
|
||||||
|
focusPolicy: Qt.StrongFocus
|
||||||
|
KeyNavigation.tab: {
|
||||||
|
try {
|
||||||
|
if (model.index < dictionaryProxyModel.count - 1) {
|
||||||
|
var nextItem = spellCheckDictionaryListView.itemAtIndex(model.index + 1);
|
||||||
|
if (nextItem) {
|
||||||
|
var nextButton = nextItem.findChild("installButton") || nextItem.findChild("uninstallButton");
|
||||||
|
return nextButton || null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.debug("KeyNavigation error handled:", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
onFocusChanged: {
|
||||||
|
if (focus) {
|
||||||
|
spellCheckDictionaryListView.positionViewAtIndex(model.index, ListView.Contain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
if (model.Locale) {
|
||||||
|
SpellCheckAdapter.uninstallDictionary(model.Locale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
visible: !model.Downloading && model.Installed && !model.IsSystem && model.Locale !== undefined && model.Locale !== ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// System dictionary indicator
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: JamiStrings.systemDictionary
|
||||||
|
color: JamiTheme.faddedLastInteractionFontColor
|
||||||
|
font.pixelSize: JamiTheme.settingsDescriptionPixelSize - 2
|
||||||
|
visible: model.IsSystem
|
||||||
|
}
|
||||||
|
|
||||||
|
// Downloading status indicator
|
||||||
|
BusyIndicator {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
visible: model.Downloading
|
||||||
|
running: model.Downloading
|
||||||
|
width: 24
|
||||||
|
height: 24
|
||||||
|
|
||||||
|
// Use a custom animation for better UX
|
||||||
|
Behavior on running {
|
||||||
|
NumberAnimation {
|
||||||
|
duration: 300
|
||||||
|
easing.type: Easing.InOutQuad
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Empty state for when no dictionaries are found
|
||||||
|
Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
visible: dictionaryProxyModel.count === 0
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
spacing: 16
|
||||||
|
width: parent.width * 0.8
|
||||||
|
|
||||||
|
// Big books emoji
|
||||||
|
Text {
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
text: "📚"
|
||||||
|
font.pixelSize: 48
|
||||||
|
opacity: 0.3
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: dictionarySearchBar.textContent.length > 0 ? JamiStrings.noDictionariesFoundFor.arg(dictionarySearchBar.textContent) : JamiStrings.noDictionariesAvailable
|
||||||
|
color: JamiTheme.faddedLastInteractionFontColor
|
||||||
|
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
src/app/commoncomponents/DictionaryManagerDialog.qml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2025 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* 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 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 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import net.jami.Models 1.1
|
||||||
|
import net.jami.Adapters 1.1
|
||||||
|
import net.jami.Constants 1.1
|
||||||
|
import "../commoncomponents/contextmenu"
|
||||||
|
|
||||||
|
BaseModalDialog {
|
||||||
|
id: root
|
||||||
|
objectName: "dictionaryManagerDialog"
|
||||||
|
|
||||||
|
title: JamiStrings.dictionaryManager
|
||||||
|
|
||||||
|
popupContent: DictionaryInstallView {
|
||||||
|
Accessible.name: JamiStrings.dictionaryManager
|
||||||
|
Accessible.role: Accessible.PopupMenu
|
||||||
|
width: 400
|
||||||
|
height: 500
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -21,7 +21,7 @@ import net.jami.Adapters 1.1
|
|||||||
import net.jami.Constants 1.1
|
import net.jami.Constants 1.1
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: root
|
id: rootDelegate
|
||||||
|
|
||||||
property bool showTime: false
|
property bool showTime: false
|
||||||
property bool showDay: false
|
property bool showDay: false
|
||||||
@ -34,6 +34,18 @@ Column {
|
|||||||
spacing: 2
|
spacing: 2
|
||||||
topPadding: 12
|
topPadding: 12
|
||||||
bottomPadding: 12
|
bottomPadding: 12
|
||||||
|
|
||||||
|
Accessible.name: {
|
||||||
|
let name = UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author);
|
||||||
|
return name + ": " + Body + " " + formattedTime + " " + formattedDay;
|
||||||
|
}
|
||||||
|
Accessible.description: {
|
||||||
|
let status = "";
|
||||||
|
if (IsLastSent)
|
||||||
|
status += JamiStrings.sent + " ";
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
@ -42,10 +54,10 @@ Column {
|
|||||||
TimestampInfo {
|
TimestampInfo {
|
||||||
id: timestampItem
|
id: timestampItem
|
||||||
|
|
||||||
showDay: root.showDay
|
showDay: rootDelegate.showDay
|
||||||
showTime: root.showTime
|
showTime: rootDelegate.showTime
|
||||||
formattedTime: root.formattedTime
|
formattedTime: rootDelegate.formattedTime
|
||||||
formattedDay: root.formattedDay
|
formattedDay: rootDelegate.formattedDay
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +72,7 @@ Column {
|
|||||||
}
|
}
|
||||||
|
|
||||||
opacity: 0
|
opacity: 0
|
||||||
Behavior on opacity {
|
Behavior on opacity {
|
||||||
NumberAnimation {
|
NumberAnimation {
|
||||||
duration: 100
|
duration: 100
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,10 @@ Control {
|
|||||||
property string title: ""
|
property string title: ""
|
||||||
property string description: ""
|
property string description: ""
|
||||||
|
|
||||||
|
Accessible.role: Accessible.StaticText
|
||||||
|
Accessible.name: title
|
||||||
|
Accessible.description: description
|
||||||
|
|
||||||
width: 190
|
width: 190
|
||||||
height: infos.implicitHeight
|
height: infos.implicitHeight
|
||||||
|
|
||||||
|
|||||||
72
src/app/commoncomponents/JamiRadioButton.qml
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2025 Savoir-faire Linux Inc.
|
||||||
|
*
|
||||||
|
* 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 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 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls.impl
|
||||||
|
import QtQuick.Templates as T
|
||||||
|
import net.jami.Constants 1.1
|
||||||
|
|
||||||
|
T.RadioButton {
|
||||||
|
id: control
|
||||||
|
|
||||||
|
property bool showText: false
|
||||||
|
|
||||||
|
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
|
||||||
|
implicitContentWidth + leftPadding + rightPadding)
|
||||||
|
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
|
||||||
|
implicitContentHeight + topPadding + bottomPadding,
|
||||||
|
implicitIndicatorHeight + topPadding + bottomPadding)
|
||||||
|
|
||||||
|
padding: 6
|
||||||
|
spacing: 6
|
||||||
|
|
||||||
|
indicator: Rectangle {
|
||||||
|
id: outerCircle
|
||||||
|
|
||||||
|
implicitWidth: 20
|
||||||
|
implicitHeight: 20
|
||||||
|
|
||||||
|
x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
|
||||||
|
y: control.topPadding + (control.availableHeight - height) / 2
|
||||||
|
|
||||||
|
radius: width / 2
|
||||||
|
color: control.enabled ? JamiTheme.transparentColor : JamiTheme.darkGreyColorOpacity
|
||||||
|
border.color: control.enabled ? JamiTheme.radioBorderColor : JamiTheme.darkGreyColorOpacity
|
||||||
|
border.width: control.visualFocus ? 2 : 1
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: innerCircle
|
||||||
|
x: (parent.width - width) / 2
|
||||||
|
y: (parent.height - height) / 2
|
||||||
|
|
||||||
|
width: 12
|
||||||
|
height: 12
|
||||||
|
radius: width / 2
|
||||||
|
color: JamiTheme.radioCheckedColor
|
||||||
|
visible: control.checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contentItem: CheckLabel {
|
||||||
|
leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
|
||||||
|
rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
|
||||||
|
|
||||||
|
text: control.text
|
||||||
|
font: control.font
|
||||||
|
color: JamiTheme.textColor
|
||||||
|
visible: control.showText
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -15,8 +15,13 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import net.jami.Adapters 1.1
|
||||||
import net.jami.Constants 1.1
|
import net.jami.Constants 1.1
|
||||||
|
import net.jami.Enums 1.1
|
||||||
|
import net.jami.Models 1.1
|
||||||
import "contextmenu"
|
import "contextmenu"
|
||||||
|
import "../mainview"
|
||||||
|
import "../mainview/components"
|
||||||
|
|
||||||
ContextMenuAutoLoader {
|
ContextMenuAutoLoader {
|
||||||
id: root
|
id: root
|
||||||
@ -27,21 +32,18 @@ ContextMenuAutoLoader {
|
|||||||
property var selectionEnd
|
property var selectionEnd
|
||||||
property bool customizePaste: false
|
property bool customizePaste: false
|
||||||
property bool selectOnly: false
|
property bool selectOnly: false
|
||||||
|
property var suggestionList
|
||||||
|
property var menuItemsLength
|
||||||
|
property var language
|
||||||
|
|
||||||
signal contextMenuRequirePaste
|
signal contextMenuRequirePaste
|
||||||
|
|
||||||
property list<GeneralMenuItem> menuItems: [
|
SpellLanguageContextMenu {
|
||||||
GeneralMenuItem {
|
id: spellLanguageContextMenu
|
||||||
id: copy
|
active: isSpellCheckActive()
|
||||||
|
}
|
||||||
|
|
||||||
canTrigger: true
|
property list<GeneralMenuItem> menuItems: [
|
||||||
isActif: lineEditObj.selectedText.length
|
|
||||||
itemName: JamiStrings.copy
|
|
||||||
hasIcon: false
|
|
||||||
onClicked: {
|
|
||||||
lineEditObj.copy();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
GeneralMenuItem {
|
GeneralMenuItem {
|
||||||
id: cut
|
id: cut
|
||||||
|
|
||||||
@ -49,9 +51,16 @@ ContextMenuAutoLoader {
|
|||||||
isActif: lineEditObj.selectedText.length && !selectOnly
|
isActif: lineEditObj.selectedText.length && !selectOnly
|
||||||
itemName: JamiStrings.cut
|
itemName: JamiStrings.cut
|
||||||
hasIcon: false
|
hasIcon: false
|
||||||
onClicked: {
|
onClicked: lineEditObj.cut()
|
||||||
lineEditObj.cut();
|
},
|
||||||
}
|
GeneralMenuItem {
|
||||||
|
id: copy
|
||||||
|
|
||||||
|
canTrigger: true
|
||||||
|
isActif: lineEditObj.selectedText.length
|
||||||
|
itemName: JamiStrings.copy
|
||||||
|
hasIcon: false
|
||||||
|
onClicked: lineEditObj.copy()
|
||||||
},
|
},
|
||||||
GeneralMenuItem {
|
GeneralMenuItem {
|
||||||
id: paste
|
id: paste
|
||||||
@ -65,9 +74,77 @@ ContextMenuAutoLoader {
|
|||||||
else
|
else
|
||||||
lineEditObj.paste();
|
lineEditObj.paste();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
GeneralMenuItem {
|
||||||
|
id: textLanguage
|
||||||
|
canTrigger: isSpellCheckActive() && SpellCheckAdapter.installedDictionaryCount > 0
|
||||||
|
itemName: JamiStrings.textLanguage
|
||||||
|
hasIcon: false
|
||||||
|
onClicked: {
|
||||||
|
spellLanguageContextMenu.openMenu();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
GeneralMenuItem {
|
||||||
|
id: manageLanguages
|
||||||
|
itemName: JamiStrings.dictionaryManager
|
||||||
|
canTrigger: isSpellCheckActive()
|
||||||
|
hasIcon: false
|
||||||
|
onClicked: {
|
||||||
|
viewCoordinator.presentDialog(appWindow, "commoncomponents/DictionaryManagerDialog.qml");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
model: ListModel {
|
||||||
|
id: suggestionListModel
|
||||||
|
}
|
||||||
|
|
||||||
|
Instantiator {
|
||||||
|
model: suggestionListModel
|
||||||
|
delegate: GeneralMenuItem {
|
||||||
|
id: suggestion
|
||||||
|
|
||||||
|
canTrigger: true
|
||||||
|
isActif: true
|
||||||
|
itemName: model.name
|
||||||
|
bold: true
|
||||||
|
hasIcon: false
|
||||||
|
onClicked: {
|
||||||
|
replaceWord(model.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onObjectAdded: {
|
||||||
|
menuItems.push(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
onObjectRemoved: {
|
||||||
|
menuItems.splice(menuItemsLength, suggestionList.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeItems() {
|
||||||
|
suggestionListModel.clear();
|
||||||
|
suggestionList.length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addMenuItem(wordList) {
|
||||||
|
menuItemsLength = menuItems.length; // Keep initial number of items for easier removal
|
||||||
|
suggestionList = wordList;
|
||||||
|
for (var i = 0; i < suggestionList.length; ++i) {
|
||||||
|
suggestionListModel.append({
|
||||||
|
"name": suggestionList[i]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceWord(word) {
|
||||||
|
lineEditObj.remove(selectionStart, selectionEnd);
|
||||||
|
lineEditObj.insert(lineEditObj.cursorPosition, word);
|
||||||
|
}
|
||||||
|
|
||||||
function openMenuAt(mouseEvent) {
|
function openMenuAt(mouseEvent) {
|
||||||
if (lineEditObj.selectedText.length === 0 && selectOnly)
|
if (lineEditObj.selectedText.length === 0 && selectOnly)
|
||||||
return;
|
return;
|
||||||
@ -85,6 +162,30 @@ ContextMenuAutoLoader {
|
|||||||
function onOpened() {
|
function onOpened() {
|
||||||
lineEditObj.select(selectionStart, selectionEnd);
|
lineEditObj.select(selectionStart, selectionEnd);
|
||||||
}
|
}
|
||||||
|
function onClosed() {
|
||||||
|
if (!suggestionList || suggestionList.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
removeItems();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isSpellCheckActive() {
|
||||||
|
return AppSettingsManager.getValue(Settings.EnableSpellCheck) && AppSettingsManager.getValue(Settings.SpellLang);
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: UtilsAdapter
|
||||||
|
|
||||||
|
function onEnableSpellCheckChanged() {
|
||||||
|
textLanguage.canTrigger = isSpellCheckActive() && SpellCheckAdapter.installedDictionaryCount > 0;
|
||||||
|
manageLanguages.canTrigger = isSpellCheckActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSpellLanguageChanged() {
|
||||||
|
textLanguage.canTrigger = isSpellCheckActive() && SpellCheckAdapter.installedDictionaryCount > 0;
|
||||||
|
manageLanguages.canTrigger = isSpellCheckActive();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: menuItemsToLoad = menuItems
|
Component.onCompleted: menuItemsToLoad = menuItems
|
||||||
|
|||||||
@ -20,14 +20,11 @@ import QtQuick.Layouts
|
|||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import Qt.labs.platform
|
import Qt.labs.platform
|
||||||
import Qt5Compat.GraphicalEffects
|
import Qt5Compat.GraphicalEffects
|
||||||
|
|
||||||
import net.jami.Models 1.1
|
import net.jami.Models 1.1
|
||||||
import net.jami.Adapters 1.1
|
import net.jami.Adapters 1.1
|
||||||
import net.jami.Constants 1.1
|
import net.jami.Constants 1.1
|
||||||
|
|
||||||
import "../mainview/components"
|
import "../mainview/components"
|
||||||
|
|
||||||
|
|
||||||
BaseModalDialog {
|
BaseModalDialog {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
@ -36,26 +33,27 @@ BaseModalDialog {
|
|||||||
property real buttonSize: 36
|
property real buttonSize: 36
|
||||||
property real imageSize: 25
|
property real imageSize: 25
|
||||||
|
|
||||||
|
|
||||||
signal focusOnPreviousItem
|
signal focusOnPreviousItem
|
||||||
signal focusOnNextItem
|
signal focusOnNextItem
|
||||||
signal imageValidated
|
signal imageValidated
|
||||||
|
signal imageTemporaryValidated
|
||||||
signal imageRemoved
|
signal imageRemoved
|
||||||
|
signal imageTemporaryRemoved
|
||||||
|
|
||||||
function startBooth() {
|
function startBooth() {
|
||||||
recordBox.openRecorder(true)
|
recordBox.openRecorder(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function stopBooth(){
|
function stopBooth() {
|
||||||
recordBox.closeRecorder()
|
recordBox.closeRecorder();
|
||||||
}
|
}
|
||||||
|
|
||||||
function focusOnNextPhotoBoothItem () {
|
function focusOnNextPhotoBoothItem() {
|
||||||
takePhotoButton.forceActiveFocus()
|
takePhotoButton.forceActiveFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
function focusOnPreviousPhotoBoothItem () {
|
function focusOnPreviousPhotoBoothItem() {
|
||||||
importButton.forceActiveFocus()
|
importButton.forceActiveFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
title: JamiStrings.selectImage
|
title: JamiStrings.selectImage
|
||||||
@ -69,171 +67,165 @@ BaseModalDialog {
|
|||||||
isPhoto: true
|
isPhoto: true
|
||||||
visible: false
|
visible: false
|
||||||
|
|
||||||
onValidatePhoto: function(photo) {
|
onValidatePhoto: function (photo) {
|
||||||
if (!root.newItem)
|
if (!root.newItem) {
|
||||||
AccountAdapter.setCurrentAccountAvatarBase64(photo)
|
AccountAdapter.setCurrentAccountAvatarBase64(photo);
|
||||||
else{
|
imageTemporaryValidated();
|
||||||
|
} else {
|
||||||
UtilsAdapter.setTempCreationImageFromString(photo, imageId);
|
UtilsAdapter.setTempCreationImageFromString(photo, imageId);
|
||||||
imageValidated();
|
imageValidated();
|
||||||
}
|
}
|
||||||
root.close()
|
root.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
popupContent: RowLayout {
|
popupContent: RowLayout {
|
||||||
id: buttonsRowLayout
|
id: buttonsRowLayout
|
||||||
|
|
||||||
spacing: 18
|
spacing: 18
|
||||||
|
|
||||||
JamiPushButton {
|
JamiPushButton {
|
||||||
id: takePhotoButton
|
id: takePhotoButton
|
||||||
|
Accessible.name: objectName
|
||||||
|
|
||||||
objectName: "takePhotoButton"
|
objectName: "takePhotoButton"
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
|
||||||
height: buttonSize
|
height: buttonSize
|
||||||
width: buttonSize
|
width: buttonSize
|
||||||
|
|
||||||
enabled: VideoDevices.listSize !== 0
|
enabled: VideoDevices.listSize !== 0
|
||||||
hoverEnabled: enabled
|
hoverEnabled: enabled
|
||||||
|
|
||||||
normalColor: "transparent"
|
normalColor: "transparent"
|
||||||
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
|
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
|
||||||
toolTipText: JamiStrings.takePhoto
|
toolTipText: JamiStrings.takePhoto
|
||||||
source: JamiResources.add_a_photo_black_24dp_svg
|
source: JamiResources.add_a_photo_black_24dp_svg
|
||||||
|
|
||||||
Keys.onPressed: function (keyEvent) {
|
Keys.onPressed: function (keyEvent) {
|
||||||
if (keyEvent.key === Qt.Key_Enter ||
|
if (keyEvent.key === Qt.Key_Enter || keyEvent.key === Qt.Key_Return) {
|
||||||
keyEvent.key === Qt.Key_Return) {
|
clicked();
|
||||||
clicked()
|
keyEvent.accepted = true;
|
||||||
keyEvent.accepted = true
|
} else if (keyEvent.key === Qt.Key_Up) {
|
||||||
} else if (keyEvent.key === Qt.Key_Up) {
|
root.focusOnPreviousItem();
|
||||||
root.focusOnPreviousItem()
|
keyEvent.accepted = true;
|
||||||
keyEvent.accepted = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyNavigation.tab: {
|
|
||||||
if (clearButton.visible)
|
|
||||||
return clearButton
|
|
||||||
return importButton
|
|
||||||
}
|
|
||||||
KeyNavigation.down: KeyNavigation.tab
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
recordBox.parent = buttonsRowLayout
|
|
||||||
startBooth()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JamiPushButton {
|
KeyNavigation.tab: {
|
||||||
id: importButton
|
if (clearButton.visible)
|
||||||
|
return clearButton;
|
||||||
|
return importButton;
|
||||||
|
}
|
||||||
|
KeyNavigation.down: KeyNavigation.tab
|
||||||
|
|
||||||
objectName: "photoboothViewImportButton"
|
onClicked: {
|
||||||
|
recordBox.parent = buttonsRowLayout;
|
||||||
|
startBooth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
JamiPushButton {
|
||||||
visible: parent.visible
|
id: importButton
|
||||||
|
|
||||||
height: buttonSize
|
objectName: "photoboothViewImportButton"
|
||||||
width: buttonSize
|
|
||||||
|
|
||||||
normalColor: "transparent"
|
Layout.alignment: Qt.AlignHCenter
|
||||||
source: JamiResources.add_photo_alternate_black_24dp_svg
|
visible: parent.visible
|
||||||
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
|
|
||||||
toolTipText: JamiStrings.importFromFile
|
|
||||||
|
|
||||||
Keys.onPressed: function (keyEvent) {
|
height: buttonSize
|
||||||
if (keyEvent.key === Qt.Key_Enter ||
|
width: buttonSize
|
||||||
keyEvent.key === Qt.Key_Return) {
|
|
||||||
clicked()
|
Accessible.name: objectName
|
||||||
keyEvent.accepted = true
|
|
||||||
} else if (keyEvent.key === Qt.Key_Down ||
|
normalColor: "transparent"
|
||||||
keyEvent.key === Qt.Key_Tab) {
|
source: JamiResources.add_photo_alternate_black_24dp_svg
|
||||||
clearButton.forceActiveFocus()
|
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
|
||||||
keyEvent.accepted = true
|
toolTipText: JamiStrings.importFromFile
|
||||||
}
|
|
||||||
|
Keys.onPressed: function (keyEvent) {
|
||||||
|
if (keyEvent.key === Qt.Key_Enter || keyEvent.key === Qt.Key_Return) {
|
||||||
|
clicked();
|
||||||
|
keyEvent.accepted = true;
|
||||||
|
} else if (keyEvent.key === Qt.Key_Down || keyEvent.key === Qt.Key_Tab) {
|
||||||
|
clearButton.forceActiveFocus();
|
||||||
|
keyEvent.accepted = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
KeyNavigation.up: takePhotoButton
|
KeyNavigation.up: takePhotoButton
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
stopBooth()
|
stopBooth();
|
||||||
var dlg = viewCoordinator.presentDialog(
|
var dlg = viewCoordinator.presentDialog(appWindow, "commoncomponents/JamiFileDialog.qml", {
|
||||||
appWindow,
|
title: JamiStrings.selectProfilePicture,
|
||||||
"commoncomponents/JamiFileDialog.qml",
|
fileMode: JamiFileDialog.OpenFile,
|
||||||
{
|
folder: StandardPaths.writableLocation(StandardPaths.PicturesLocation),
|
||||||
title: JamiStrings.selectProfilePicture,
|
nameFilters: [JamiStrings.imageFiles, JamiStrings.allFiles]
|
||||||
fileMode: JamiFileDialog.OpenFile,
|
});
|
||||||
folder: StandardPaths.writableLocation(
|
dlg.fileAccepted.connect(function (file) {
|
||||||
StandardPaths.PicturesLocation),
|
var filePath = UtilsAdapter.getAbsPath(file);
|
||||||
nameFilters: [JamiStrings.imageFiles,
|
|
||||||
JamiStrings.allFiles]
|
|
||||||
})
|
|
||||||
dlg.fileAccepted.connect(function(file) {
|
|
||||||
var filePath = UtilsAdapter.getAbsPath(file)
|
|
||||||
if (!root.newItem) {
|
if (!root.newItem) {
|
||||||
AccountAdapter.setCurrentAccountAvatarFile(filePath)
|
AccountAdapter.setCurrentAccountAvatarFile(filePath);
|
||||||
|
imageTemporaryValidated();
|
||||||
} else {
|
} else {
|
||||||
UtilsAdapter.setTempCreationImageFromFile(filePath, root.imageId);
|
UtilsAdapter.setTempCreationImageFromFile(filePath, root.imageId);
|
||||||
imageValidated();
|
imageValidated();
|
||||||
}
|
}
|
||||||
root.close()
|
root.close();
|
||||||
})
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JamiPushButton {
|
||||||
|
id: clearButton
|
||||||
|
|
||||||
|
objectName: "photoboothViewClearButton"
|
||||||
|
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
|
||||||
|
height: buttonSize
|
||||||
|
width: buttonSize
|
||||||
|
|
||||||
|
normalColor: "transparent"
|
||||||
|
source: JamiResources.remove_circle_outline_black_24dp_svg
|
||||||
|
toolTipText: JamiStrings.removeImage
|
||||||
|
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
|
||||||
|
|
||||||
|
visible: {
|
||||||
|
if (!newItem && LRCInstance.currentAccountAvatarSet)
|
||||||
|
return true;
|
||||||
|
if (newItem && UtilsAdapter.tempCreationImage(imageId).length !== 0)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyNavigation.up: importButton
|
||||||
|
|
||||||
|
Keys.onPressed: function (keyEvent) {
|
||||||
|
if (keyEvent.key === Qt.Key_Enter || keyEvent.key === Qt.Key_Return) {
|
||||||
|
clicked();
|
||||||
|
importButton.forceActiveFocus();
|
||||||
|
keyEvent.accepted = true;
|
||||||
|
} else if (keyEvent.key === Qt.Key_Down || keyEvent.key === Qt.Key_Tab) {
|
||||||
|
btnCancel.forceActiveFocus();
|
||||||
|
keyEvent.accepted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JamiPushButton {
|
onClicked: {
|
||||||
id: clearButton
|
if (!root.newItem) {
|
||||||
|
AccountAdapter.setCurrentAccountAvatarBase64();
|
||||||
objectName: "photoboothViewClearButton"
|
imageTemporaryRemoved();
|
||||||
|
} else {
|
||||||
Layout.alignment: Qt.AlignHCenter
|
UtilsAdapter.setTempCreationImageFromString("", imageId);
|
||||||
|
imageRemoved();
|
||||||
height: buttonSize
|
|
||||||
width: buttonSize
|
|
||||||
|
|
||||||
normalColor: "transparent"
|
|
||||||
source: JamiResources.remove_circle_outline_black_24dp_svg
|
|
||||||
toolTipText: JamiStrings.removeImage
|
|
||||||
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
|
|
||||||
|
|
||||||
visible: {
|
|
||||||
if (!newItem && LRCInstance.currentAccountAvatarSet)
|
|
||||||
return true
|
|
||||||
if (newItem && UtilsAdapter.tempCreationImage(imageId).length !== 0)
|
|
||||||
return true
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyNavigation.up: importButton
|
|
||||||
|
|
||||||
Keys.onPressed: function (keyEvent) {
|
|
||||||
if (keyEvent.key === Qt.Key_Enter ||
|
|
||||||
keyEvent.key === Qt.Key_Return) {
|
|
||||||
clicked()
|
|
||||||
importButton.forceActiveFocus()
|
|
||||||
keyEvent.accepted = true
|
|
||||||
} else if (keyEvent.key === Qt.Key_Down ||
|
|
||||||
keyEvent.key === Qt.Key_Tab) {
|
|
||||||
btnCancel.forceActiveFocus()
|
|
||||||
keyEvent.accepted = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
if (!root.newItem)
|
|
||||||
AccountAdapter.setCurrentAccountAvatarBase64()
|
|
||||||
else {
|
|
||||||
UtilsAdapter.setTempCreationImageFromString("", imageId);
|
|
||||||
imageRemoved();
|
|
||||||
}
|
|
||||||
visible = false
|
|
||||||
stopBooth()
|
|
||||||
root.close()
|
|
||||||
}
|
}
|
||||||
|
visible = false;
|
||||||
|
stopBooth();
|
||||||
|
root.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||