Merge branch 'feature/simplify_build_configuration_v3'

This commit is contained in:
Julien Wadel 2020-03-26 20:01:51 +01:00
commit fc8935db79
744 changed files with 1377 additions and 1627 deletions

2
.gitignore vendored
View file

@ -16,7 +16,7 @@ CMakeLists.txt.user
build-*-Debug
build-*-Default
prepare.conf.user
build-desktop/*
build/*
# Tags -------------------------------------------------------------------------

View file

@ -1,51 +0,0 @@
#################################################
# Makefile
#################################################
job-archlinux-latest-makefile-gcc:
tags: [ "docker-archlinux-latest" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: gcc
CXX: g++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .scheduled-job-linux-desktop
job-archlinux-latest-makefile-clang:
tags: [ "docker-archlinux-latest" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: clang
CXX: clang++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .scheduled-job-linux-desktop
#################################################
# Ninja
#################################################
job-archlinux-latest-ninja-gcc:
tags: [ "docker-archlinux-latest" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
variables:
CMAKE_GENERATOR: Ninja
CC: gcc
CXX: g++
extends: .job-linux-desktop
job-archlinux-latest-ninja-clang:
tags: [ "docker-archlinux-latest" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-archlinux:latest
variables:
CMAKE_GENERATOR: Ninja
CC: clang
CXX: clang++
extends: .job-linux-desktop

View file

@ -1,79 +0,0 @@
#################################################
# Makefile
#################################################
job-centos7-makefile-gcc:
tags: [ "docker-centos7" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: gcc
CXX: g++
ADDITIONAL_BUILD_OPTIONS: -j1
extends: .job-linux-desktop
job-centos7-makefile-clang:
tags: [ "docker-centos7" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: clang
CXX: clang++
ADDITIONAL_BUILD_OPTIONS: -j1
extends: .job-linux-desktop
#################################################
# Ninja
#################################################
#job-centos7-ninja-gcc:
#
# tags: [ "docker-centos7" ]
# image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
# variables:
# CMAKE_GENERATOR: Ninja
# CC: gcc
# CXX: g++
# extends: .job-linux-desktop
#job-centos7-ninja-clang:
#
# tags: [ "docker-centos7" ]
# image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
# variables:
# CMAKE_GENERATOR: Ninja
# CC: clang
# CXX: clang++
# extends: .job-linux-desktop
#################################################
# RPM
#################################################
job-centos7-rpm:
tags: [ "docker-centos7" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-centos:7
extends: .job-linux-rpm
#################################################
# Deploy
#################################################
job-centos7-rpm-deploy:
stage: deploy
tags: [ "deploy-linux" ]
only:
- schedules
dependencies:
- job-centos7-rpm
script:
- cd WORK/desktop-rpm/rpmbuild/RPMS/x86_64/ && rsync -pr . $DEPLOY_SERVER:$CENTOS7_DEPLOY_DIRECTORY
- ssh $DEPLOY_SERVER "chmod a+r $CENTOS7_DEPLOY_DIRECTORY/*.rpm && createrepo_c --update $CENTOS7_DEPLOY_DIRECTORY/."

View file

@ -1,51 +0,0 @@
#################################################
# Makefile
#################################################
job-debian8-makefile-gcc:
tags: [ "docker-debian8" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: gcc
CXX: g++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .job-linux-desktop
job-debian8-makefile-clang:
tags: [ "docker-debian8" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: clang
CXX: clang++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .job-linux-desktop
#################################################
# Ninja
#################################################
#job-debian8-ninja-gcc:
#
# tags: [ "docker-debian8" ]
# image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
# variables:
# CMAKE_GENERATOR: Ninja
# CC: gcc
# CXX: g++
# extends: .job-linux-desktop
#job-debian8-ninja-clang:
#
# tags: [ "docker-debian8" ]
# image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:8
# variables:
# CMAKE_GENERATOR: Ninja
# CC: clang
# CXX: clang++
# extends: .job-linux-desktop

View file

@ -1,51 +0,0 @@
#################################################
# Makefile
#################################################
job-debian9-makefile-gcc:
tags: [ "docker-debian9" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: gcc
CXX: g++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .scheduled-job-linux-desktop
job-debian9-makefile-clang:
tags: [ "docker-debian9" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: clang
CXX: clang++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .scheduled-job-linux-desktop
#################################################
# Ninja
#################################################
job-debian9-ninja-gcc:
tags: [ "docker-debian9" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
variables:
CMAKE_GENERATOR: Ninja
CC: gcc
CXX: g++
extends: .job-linux-desktop
job-debian9-ninja-clang:
tags: [ "docker-debian9" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-debian:9
variables:
CMAKE_GENERATOR: Ninja
CC: clang
CXX: clang++
extends: .job-linux-desktop

View file

@ -11,26 +11,18 @@
- cmake --version
- export CC=$CC
- export CXX=$CXX
- mkdir -p build-desktop/OUTPUT
- mkdir -p build/OUTPUT
- echo $CMAKE_GENERATOR
- echo $DEFAULT_LINUX_CMAKE_OPTIONS
- echo $CMAKE_OPTIONS
- echo $CMAKE_SANITIZER_OPTIONS
# SDK Building
- cd build-desktop
- cd build
- cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS
- cmake --build . --target sdk $LBC_NODEBUG_OPTIONS
# Minizip install to OUTPUT folder
- cmake ..
- cmake --build . --target minizip $LBC_NODEBUG_OPTIONS
- cmake --build . --target install $LBC_NODEBUG_OPTIONS
# Update CMake installation
- cmake .. -G "$CMAKE_GENERATOR" $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS
- cmake --build . --target linphone-qt $LBC_NODEBUG_OPTIONS
- cmake --build . --target install
- cmake --build . --target all $LBC_NODEBUG_OPTIONS
artifacts:
paths:
- build-desktop/OUTPUT
- build/OUTPUT
expire_in: 1 week

View file

@ -1,51 +0,0 @@
#################################################
# Makefile
#################################################
job-ubuntu-rolling-makefile-gcc:
tags: [ "docker-ubuntu-rolling" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: gcc
CXX: g++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .scheduled-job-linux-desktop
job-ubuntu-rolling-makefile-clang:
tags: [ "docker-ubuntu-rolling" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
variables:
CMAKE_GENERATOR: Unix Makefiles
CC: clang
CXX: clang++
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .scheduled-job-linux-desktop
#################################################
# Ninja
#################################################
job-ubuntu-rolling-ninja-gcc:
tags: [ "docker-ubuntu-rolling" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
variables:
CMAKE_GENERATOR: Ninja
CC: gcc
CXX: g++
extends: .job-linux-desktop
job-ubuntu-rolling-ninja-clang:
tags: [ "docker-ubuntu-rolling" ]
image: gitlab.linphone.org:4567/bc/public/linphone-sdk/bc-dev-ubuntu:rolling
variables:
CMAKE_GENERATOR: Ninja
CC: clang
CXX: clang++
extends: .job-linux-desktop

View file

@ -1,66 +0,0 @@
#################################################
# Ccache
#################################################
.linux-ccache:
cache:
key: $CI_JOB_NAME
paths:
- ccache/
before_script:
- mkdir -p ccache
- echo "max_size = $CCACHE_SIZE" > ccache/ccache.conf
- export CCACHE_BASEDIR=${PWD}
- export CCACHE_DIR=${PWD}/ccache
- ccache -s
after_script:
- export CCACHE_DIR=${PWD}/ccache
- ccache -s
#################################################
# Job
#################################################
.job-linux-desktop:
stage: build
extends: .linux-ccache
script:
- export CC=$CC
- export CXX=$CXX
- ./prepare.py -G "$CMAKE_GENERATOR" -cc $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS
- cmake --build WORK/desktop/cmake -- $ADDITIONAL_BUILD_OPTIONS
#################################################
# RPM
#################################################
.job-linux-rpm:
stage: package
script:
- sudo rpm -i --replacepkgs /linphone-qt-*
- ./prepare.py desktop-rpm $DEFAULT_CMAKE_OPTIONS $CMAKE_OPTIONS
- make
artifacts:
paths:
- WORK/desktop-rpm/rpmbuild/RPMS/x86_64/*.rpm
when: always
expire_in: 1 week
#################################################
# Schedule
#################################################
.scheduled-job-linux-desktop:
extends: .job-linux-desktop
only:
- schedules

View file

@ -7,24 +7,16 @@
ccache -s
export Qt5_DIR=/usr/local/opt/qt/lib/cmake
export PATH=$PATH:/usr/local/opt/qt/bin
if [ -d "build-desktop" ]; then rm -rf build-desktop; fi;
mkdir -p build-desktop/OUTPUT
cd build-desktop
if [ -d "build" ]; then rm -rf build; fi;
mkdir -p build/OUTPUT
cd build
#SDK Building
echo $CMAKE_GENERATOR
echo $DEFAULT_MACOS_CMAKE_OPTIONS
echo $CMAKE_OPTIONS
echo $ADDITIONAL_BUILD_OPTIONS
cmake .. -G "$CMAKE_GENERATOR" -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS
cmake --build . --target sdk $LBC_NODEBUG_OPTIONS -- $ADDITIONAL_BUILD_OPTIONS
# Minizip install to OUTPUT folder
cmake ..
cmake --build . --target minizip
cmake --build . --target install
# Update CMake installation
cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 $DEFAULT_MACOS_CMAKE_OPTIONS $XCODE_OPTIONS $CMAKE_OPTIONS
cmake --build . --target linphone-qt -- $ADDITIONAL_BUILD_OPTIONS
cmake --build . --target install -- $ADDITIONAL_BUILD_OPTIONS
cmake --build . --target all $LBC_NODEBUG_OPTIONS -- $ADDITIONAL_BUILD_OPTIONS
ccache -s
.job-macosx-desktop:
@ -34,7 +26,7 @@
- *build_all_script
artifacts:
paths:
- build-desktop/OUTPUT
- build/OUTPUT
expire_in: 1 week
#################################################
@ -91,14 +83,15 @@ job-macosx-makefile-package:
only:
variables:
- $NIGHTLY_MASTER
variables:
CMAKE_OPTIONS: -DENABLE_PACKAGING=YES
extends: job-macosx-makefile
script:
- *build_all_script
- cmake --build . --target package -- $ADDITIONAL_BUILD_OPTIONS
- codesign --verbose -s "$MACOS_SIGNING_IDENTITY" CPackBuild/Linphone*.dmg
- codesign --verbose -s "$MACOS_SIGNING_IDENTITY" OUTPUT/Packages/Linphone*.dmg
artifacts:
paths:
- build-desktop/CPackBuild/Linphone*.dmg
- build/OUTPUT/Packages/Linphone*.dmg
expire_in: 1 week
#################################################
@ -114,4 +107,4 @@ job-macosx-makefile-deploy:
variables:
- $NIGHTLY_MASTER
script:
- scp build-desktop/CPackBuild/Linphone*.dmg $DEPLOY_SERVER:$MACOSX_UPLOAD_DIRECTORY/app/
- scp build/OUTPUT/Packages/Linphone*.dmg $DEPLOY_SERVER:$MACOSX_UPLOAD_DIRECTORY/app/

View file

@ -1,91 +0,0 @@
.job-macosx:
stage: build
tags: [ "macosx" ]
script:
- ccache -s
- export Qt5_DIR=/usr/local/opt/qt/lib/cmake
- export PATH=$PATH:/usr/local/opt/qt/bin
- python prepare.py -G "$CMAKE_GENERATOR" -cc --package -DLINPHONE_BUILDER_SIGNING_IDENTITY="$MACOS_SIGNING_IDENTITY" $DEFAULT_MACOS_CMAKE_OPTIONS $CMAKE_OPTIONS
- cmake --build WORK/desktop/cmake -- $ADDITIONAL_BUILD_OPTIONS
- codesign --verbose -s "$MACOS_SIGNING_IDENTITY" WORK/desktop/Build/linphone_package/Linphone-*.dmg
- ccache -s
artifacts:
paths:
- WORK/desktop/Build/linphone_package/$PACKAGE_NAME-*.dmg
- WORK/desktop/Build/linphone_package/linphone-sdk-*-mac.zip
when: always
expire_in: 1 week
.scheduled-job-macosx:
extends: .job-macosx
only:
- schedules
#################################################
# Makefile
#################################################
job-macosx-makefile:
variables:
CMAKE_GENERATOR: Unix Makefiles
ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS
extends: .scheduled-job-macosx
#################################################
# Ninja
#################################################
job-macosx-ninja:
variables:
CMAKE_GENERATOR: Ninja
extends: .job-macosx
#################################################
# Xcode
#################################################
job-macosx-xcode:
stage: build
tags: [ "macosx" ]
only:
- schedules
script:
- export Qt5_DIR=/usr/local/opt/qt/lib/cmake
- export PATH=$PATH:/usr/local/opt/qt/bin
- python prepare.py -G Xcode -cc --package $DEFAULT_MACOS_CMAKE_OPTIONS $CMAKE_OPTIONS
- cmake --build WORK/desktop/cmake -- -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=`sysctl -n hw.ncpu`
artifacts:
paths:
- WORK/desktop/Build/linphone_package/$PACKAGE_NAME-*.dmg
- WORK/desktop/Build/linphone_package/linphone-sdk-*-mac.zip
when: always
expire_in: 1 week
#################################################
# Deploy
#################################################
job-macosx-deploy:
stage: deploy
tags: [ "deploy" ]
dependencies:
- job-macosx-ninja
script:
- scp WORK/desktop/Build/linphone_package/$PACKAGE_NAME-*-mac.dmg $DEPLOY_SERVER:$MACOSX_UPLOAD_DIRECTORY/

View file

@ -54,9 +54,9 @@
script:
- SET Qt5_DIR=C:\Qt\5.12.6\msvc2017\lib\cmake
- SET PATH=%PATH%;C:\Qt\5.12.6\msvc2017\bin
- IF EXIST build-desktop RMDIR /S /Q build-desktop
- mkdir build-desktop
- cd build-desktop
- IF EXIST build RMDIR /S /Q build
- mkdir build
- cd build
- mkdir OUTPUT
#SDK Building
#we launch the msvc-cl wrapper located in python scripts folder
@ -65,19 +65,11 @@
- C:\PROGRA~1\Python37\Scripts\cl -s
- cmake .. -G "Visual Studio 15 2017" -DLINPHONESDK_PLATFORM=Desktop -DENABLE_CSHARP_WRAPPER=YES -DCMAKE_BUILD_TYPE=Release %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
- cmake --build . --target ALL_BUILD --config Release %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
# Minizip install to OUTPUT folder
- cmake ..
- cmake --build . --target minizip
- cmake --build . --target install --config Release %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
# Update CMake installation
- cmake .. -G "Visual Studio 15 2017" -DCMAKE_BUILD_TYPE=Release %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
- cmake --build . --target linphone-qt --config Release -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
- cmake --build . --target install --config Release -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
- C:\PROGRA~1\Python37\Scripts\cl -s
artifacts:
paths:
- build-desktop\OUTPUT
- build\OUTPUT
expire_in: 2 days
.job-windows-vs2017-scheduled:
@ -124,28 +116,21 @@ job-windows-vs2017-package:
script:
- SET Qt5_DIR=C:\Qt\5.12.6\msvc2017\lib\cmake
- SET PATH=%PATH%;C:\Qt\5.12.6\msvc2017\bin
- IF EXIST build-desktop RMDIR /S /Q build-desktop
- mkdir build-desktop
- cd build-desktop
- IF EXIST build RMDIR /S /Q build
- mkdir build
- cd build
- mkdir OUTPUT
#SDK Building
#we launch the msvc-cl wrapper located in python scripts folder
#this wrapper relays only needed calls to the real compiler
#cache stats display
- C:\PROGRA~1\Python37\Scripts\cl -s
- cmake .. -G "Visual Studio 15 2017" -DLINPHONESDK_PLATFORM=Desktop -DENABLE_CSHARP_WRAPPER=YES -DCMAKE_BUILD_TYPE=Release %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
- cmake .. -G "Visual Studio 15 2017" -DLINPHONESDK_PLATFORM=Desktop -DENABLE_CSHARP_WRAPPER=YES -DCMAKE_BUILD_TYPE=Release -DENABLE_PACKAGING=YES %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
- cmake --build . --target ALL_BUILD --config Release %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
# Minizip install to OUTPUT folder
- cmake ..
- cmake --build . --target minizip
- cmake --build . --target install --config Release %LBC_NODEBUG_OPTIONS% -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
# Update CMake installation
- cmake .. -G "Visual Studio 15 2017" -DCMAKE_BUILD_TYPE=Release %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
- cmake --build . --target linphone-qt --config Release -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
- cmake --build . --target package --config Release -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
- C:\PROGRA~1\Python37\Scripts\cl -s
- mkdir "%CI_PROJECT_DIR%/results"
- cd CPackBuild
- cd OUTPUT
- cd Packages
- copy /B *.exe "%CI_PROJECT_DIR%/results"
artifacts:

View file

@ -1,36 +0,0 @@
#################################################
# Visual Studio 2015
#################################################
job-windows-vs2015:
stage: build
tags: [ "windows" ]
script:
- echo %Qt5_DIR%
- echo %PATH%
- if DEFINED WINDOWS_SIGNING_DIRECTORY ( xcopy /I /Y "%WINDOWS_SIGNING_DIRECTORY%" "cmake_builder\\linphone_package\\sign" )
- python prepare.py -G "Visual Studio 14 2015" --package %DEFAULT_WINDOWS_CMAKE_OPTIONS% %CMAKE_OPTIONS%
- cmake --build WORK/desktop/cmake --config Release -- /maxcpucount
artifacts:
paths:
- WORK/desktop/Build/linphone_package/%PACKAGE_NAME%-*-win32.exe
expire_in: 1 week
#################################################
# Deploy
#################################################
job-windows-deploy:
stage: deploy
tags: [ "deploy" ]
dependencies:
- job-windows-vs2015
script:
- scp WORK/desktop/Build/linphone_package/$PACKAGE_NAME-*-win32.exe $DEPLOY_SERVER:$WINDOWS_UPLOAD_DIRECTORY/

View file

@ -22,7 +22,7 @@
- Add caller/callee on saved files.
- Supports totally french, english, portuguese, russian, turkish, ukrainian.
- App Nap avoiding for MacOs
- Simplify building process
### Fixes

View file

@ -20,30 +20,37 @@
#
################################################################################
# First building command:
# cmake .. && cmake --build . --target all --parallel 10 && cmake --build . --target install && cmake ..
# Logic : Prepare first building of the SDK and Minizip. Install binaries and prepare for application building.
# Next, we can build the application with cmake --build . --target all --parallel 10 && cmake --build . --target install
cmake_minimum_required(VERSION 3.1)
get_cmake_property(vars CACHE_VARIABLES)
foreach(var ${vars})
get_property(currentHelpString CACHE "${var}" PROPERTY HELPSTRING)
if("${currentHelpString}" MATCHES "No help, variable specified on the command line." OR "${currentHelpString}" STREQUAL "")
#message("${var} = [${${var}}] -- ${currentHelpString}") # uncomment to see the variables being processed
list(APPEND USER_ARGS "-D${var}=${${var}}")
if( "${var}" STREQUAL "CMAKE_PREFIX_PATH")
set(PREFIX_PATH ";${${var}}")
endif()
endif()
endforeach()
project(linphoneqt VERSION 4.1.1)
include(GNUInstallDirs)
include(CheckCXXCompilerFlag)
# Prepare gobal CMAKE configuration specific to the current project
set(SDK_BUILD_DIR "${CMAKE_BINARY_DIR}/WORK") # SDK build in WORK. Keep all in it.
set(LINPHONE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/linphone-sdk/desktop") #This is fixed by the SDK
set(LINPHONE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/linphone-sdk/desktop")
set(MINIZIP_BUILD_DIR "${CMAKE_BINARY_DIR}/minizip_BUILD")
set(MINIZIP_OUTPUT_DIR "${CMAKE_BINARY_DIR}/minizip_OUTPUT")
set(APPLICATION_OUTPUT_DIR "${CMAKE_BINARY_DIR}/OUTPUT")
message("minizip=${MINIZIP_OUTPUT_DIR} sdk=${LINPHONE_OUTPUT_DIR}")
list(APPEND CMAKE_PREFIX_PATH "${LINPHONE_OUTPUT_DIR};${MINIZIP_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR}")
set(CMAKE_PREFIX_PATH "${LINPHONE_OUTPUT_DIR};${MINIZIP_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}")
string(REPLACE ";" "|" PREFIX_PATH "${CMAKE_PREFIX_PATH}")
#set(PREFIX_PATH "${LINPHONE_OUTPUT_DIR}|${MINIZIP_OUTPUT_DIR}|${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}")
if(UNIX AND NOT APPLE)
set(CMAKE_INSTALL_RPATH "$ORIGIN;$ORIGIN/lib64;$ORIGIN/../lib64;$ORIGIN/lib;$ORIGIN/../lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# Avoid cmake warning if CMP0071 is not set.
if (POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
@ -52,18 +59,21 @@ endif ()
#------------------------------------------------------------------------------
set(APP_LIBRARY app-library)
include(application_info.cmake)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified")
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo" FORCE)
# Set the available build type values for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo")
endif()
# ------------------------------------------------------------------------------
set(TARGET_NAME linphone-qt)
set(CMAKE_CXX_STANDARD 11)
#-------------------------------------------------------------------------------
# SET OPTIONS
#-------------------------------------------------------------------------------
option(ENABLE_APP_PACKAGING "Enable packaging" NO)
option(ENABLE_UPDATE_CHECK "Enable update check." NO)
option(ENABLE_UNIT_TESTS "Enable unit test of SDK." NO )
option(ENABLE_TESTS "Build with testing binaries of SDK" NO )
@ -72,7 +82,6 @@ option(ENABLE_TOOLS "Enable tools of SDK" NO)
option(ENABLE_STRICT "Build with strict compilator flags e.g. -Wall -Werror" NO)
option(ENABLE_FFMPEG "Build mediastreamer2 with ffmpeg video support." YES)
option(ENABLE_OPUS "Build mediastreamer2 with the OPUS codec." YES)
if(WIN32 OR APPLE)
else()
@ -81,443 +90,100 @@ endif()
option(ENABLE_RELATIVE_PREFIX "Set Internal packages relative to the binary" YES)
include(GNUInstallDirs)
include(CheckCXXCompilerFlag)
set(APP_OPTIONS "-DENABLE_UPDATE_CHECK=${ENABLE_UPDATE_CHECK}")
list(APPEND APP_OPTIONS "-DENABLE_APP_PACKAGING=${ENABLE_APP_PACKAGING}")
list(APPEND APP_OPTIONS "-DENABLE_UNIT_TESTS=${ENABLE_UNIT_TESTS}")
list(APPEND APP_OPTIONS "-DENABLE_TESTS=${ENABLE_TESTS}")
list(APPEND APP_OPTIONS "-DENABLE_TESTS_COMPONENTS=${ENABLE_TESTS_COMPONENTS}")
list(APPEND APP_OPTIONS "-DENABLE_TOOLS=${ENABLE_TOOLS}")
list(APPEND APP_OPTIONS "-DENABLE_STRICT=${ENABLE_STRICT}")
list(APPEND APP_OPTIONS "-DENABLE_FFMPEG=${ENABLE_FFMPEG}")
if(ENABLE_V4L)
list(APPEND APP_OPTIONS "-DENABLE_V4L=${ENABLE_V4L}")
endif()
list(APPEND APP_OPTIONS "-DENABLE_RELATIVE_PREFIX=${ENABLE_RELATIVE_PREFIX}")
list(APPEND APP_OPTIONS "-DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR}")
include(ExternalProject)
set(PROJECT_BUILD_COMMAND "")
if(CMAKE_BUILD_PARALLEL_LEVEL)
list(APPEND APP_OPTIONS "-DCMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL}")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0") #CMAKE_BUILD_PARALLEL_LEVEL will not always work for External projects
list(APPEND PROJECT_BUILD_COMMAND "--parallel" "${CMAKE_BUILD_PARALLEL_LEVEL}")
endif()
endif()
if(CMAKE_VERBOSE_MAKEFILE)
list(APPEND APP_OPTIONS "-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE}")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14.0")
list(APPEND PROJECT_BUILD_COMMAND "--verbose")
endif()
endif()
message("User Args : ${USER_ARGS}")
ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk"
INSTALL_DIR "${LINPHONE_OUTPUT_DIR}"
STAMP_DIR "${SDK_BUILD_DIR}/stamp"
BINARY_DIR "${SDK_BUILD_DIR}"
STEP_TARGETS build
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
INSTALL_COMMAND cmake -E echo "Skipping install step."
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
#BUILD_ALWAYS NO #${DO_BUILD}
)
ExternalProject_Add_Step(sdk force_build
COMMENT "Forcing build for 'desktop'"
DEPENDEES configure
DEPENDERS build
ALWAYS 1
)
#Don't use minizip as target name because it can be a conflict with link libraries names
ExternalProject_Add(miniziplib PREFIX "${CMAKE_BINARY_DIR}/minizip"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/submodules/externals/minizip"
INSTALL_DIR "${MINIZIP_OUTPUT_DIR}"
BUILD_ALWAYS ON
DEPENDS sdk
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
)
include(FindPkgConfig)
find_package(LinphoneCxx CONFIG)
find_package(Linphone CONFIG)
find_package(bctoolbox CONFIG)
find_package(belcard CONFIG)
find_package(Mediastreamer2 CONFIG)
find_package(ortp CONFIG)
pkg_search_module(MINIZIP minizip)
if( NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR NOT (belcard_FOUND) OR NOT (Mediastreamer2_FOUND) OR NOT (ortp_FOUND))
message("Linphone packages are not installed. Build and install it in order to build Minizip and then Desktop Application.")
set(CMAKE_INSTALL_PREFIX "${LINPHONE_OUTPUT_DIR}")
add_subdirectory("linphone-sdk" "${SDK_BUILD_DIR}")
elseif( APP_FORCE_SDK_BUILD )
set(CMAKE_INSTALL_PREFIX "${LINPHONE_OUTPUT_DIR}")
add_subdirectory("linphone-sdk" "${SDK_BUILD_DIR}")
if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR NOT (belcard_FOUND) OR NOT (Mediastreamer2_FOUND) OR NOT (ortp_FOUND) OR NOT(MINIZIP_FOUND) )
message("Projects are set as External projects. You can start building them by using for example : cmake --build . --target all")
ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
DEPENDS miniziplib sdk
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
# ${APP_OPTIONS}
BUILD_ALWAYS ON
)
set(AUTO_REGENERATION auto_regeneration)
add_custom_target(${AUTO_REGENERATION} ALL
COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS linphone-qt)
else()
# Linphone SDK has been builded
message("LINPHONECXX : ${LINPHONECXX_INCLUDE_DIRS} => ${LINPHONECXX_LIBRARIES}")
find_package(Minizip)
if( NOT(Minizip_FOUND))
message("Minizip are not installed. Build and install it in order to build Desktop Application.")
set(CMAKE_INSTALL_PREFIX "${MINIZIP_OUTPUT_DIR}")
add_subdirectory(submodules/externals/minizip "submodules/externals/minizip/build-minizip")
else()
set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
if(WIN32)
set(EXECUTABLE_OUTPUT_DIR "${CMAKE_BINARY_DIR}")
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${EXECUTABLE_OUTPUT_DIR}")
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${EXECUTABLE_OUTPUT_DIR}")
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${EXECUTABLE_OUTPUT_DIR}")
endif()
message("MINIZIP : ${MINIZIP_INCLUDE_DIRS} => ${MINIZIP_LIBRARIES}")
message("INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} FRAMEWORK_PATH=${CMAKE_FRAMEWORK_PATH}")
message("LINPHONE : ${LINPHONE_INCLUDE_DIRS} => ${LINPHONE_LIBRARIES}")
message("LINPHONECXX : ${LINPHONECXX_INCLUDE_DIRS} => ${LINPHONECXX_LIBRARIES}")
# Build configuration
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -DQT_NO_DEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG")
if( WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WINSOCKAPI_")#remove error from windows headers order
endif()
set(CMAKE_INCLUDE_CURRENT_DIR ON)#useful for config.h
set(QT5_PACKAGES Core Gui Quick Widgets QuickControls2 Svg LinguistTools Concurrent Network)
if (UNIX AND NOT APPLE)
list(APPEND QT5_PACKAGES DBus)
endif ()
set(QT5_PACKAGES_OPTIONAL TextToSpeech)
set(CMAKE_AUTOMOC ON)
#-------------------------------------------------
set(ASSETS_DIR "assets")
set(SOURCES
src/app/App.cpp
src/app/AppController.cpp
src/app/cli/Cli.cpp
src/app/logger/Logger.cpp
src/app/paths/Paths.cpp
src/app/providers/AvatarProvider.cpp
src/app/providers/ImageProvider.cpp
src/app/providers/ThumbnailProvider.cpp
src/app/translator/DefaultTranslator.cpp
src/components/assistant/AssistantModel.cpp
src/components/authentication/AuthenticationNotifier.cpp
src/components/call/CallModel.cpp
src/components/calls/CallsListModel.cpp
src/components/calls/CallsListProxyModel.cpp
src/components/camera/Camera.cpp
src/components/camera/CameraPreview.cpp
src/components/camera/MSFunctions.cpp
src/components/chat/ChatModel.cpp
src/components/chat/ChatProxyModel.cpp
src/components/codecs/AbstractCodecsModel.cpp
src/components/codecs/AudioCodecsModel.cpp
src/components/codecs/VideoCodecsModel.cpp
src/components/conference/ConferenceAddModel.cpp
src/components/conference/ConferenceHelperModel.cpp
src/components/conference/ConferenceModel.cpp
src/components/contact/ContactModel.cpp
src/components/contact/VcardModel.cpp
src/components/contacts/ContactsListModel.cpp
src/components/contacts/ContactsListProxyModel.cpp
src/components/core/CoreHandlers.cpp
src/components/core/CoreManager.cpp
src/components/core/event-count-notifier/AbstractEventCountNotifier.cpp
src/components/file/FileDownloader.cpp
src/components/file/FileExtractor.cpp
src/components/notifier/Notifier.cpp
src/components/other/clipboard/Clipboard.cpp
src/components/other/colors/Colors.cpp
src/components/other/text-to-speech/TextToSpeech.cpp
src/components/other/units/Units.cpp
src/components/presence/OwnPresenceModel.cpp
src/components/presence/Presence.cpp
src/components/settings/AccountSettingsModel.cpp
src/components/settings/SettingsModel.cpp
src/components/sip-addresses/SipAddressesModel.cpp
src/components/sip-addresses/SipAddressesProxyModel.cpp
src/components/sip-addresses/SipAddressObserver.cpp
src/components/sound-player/SoundPlayer.cpp
src/components/telephone-numbers/TelephoneNumbersModel.cpp
src/components/timeline/TimelineModel.cpp
src/components/url-handlers/UrlHandlers.cpp
src/utils/LinphoneUtils.cpp
src/utils/MediastreamerUtils.cpp
src/utils/QExifImageHeader.cpp
src/utils/Utils.cpp
)
set(HEADERS
src/app/App.hpp
src/app/AppController.hpp
src/app/cli/Cli.hpp
src/app/logger/Logger.hpp
src/app/paths/Paths.hpp
src/app/providers/AvatarProvider.hpp
src/app/providers/ImageProvider.hpp
src/app/providers/ThumbnailProvider.hpp
src/app/single-application/SingleApplication.hpp
src/app/translator/DefaultTranslator.hpp
src/components/assistant/AssistantModel.hpp
src/components/authentication/AuthenticationNotifier.hpp
src/components/call/CallModel.hpp
src/components/calls/CallsListModel.hpp
src/components/calls/CallsListProxyModel.hpp
src/components/camera/Camera.hpp
src/components/camera/CameraPreview.hpp
src/components/camera/MSFunctions.hpp
src/components/chat/ChatModel.hpp
src/components/chat/ChatProxyModel.hpp
src/components/codecs/AbstractCodecsModel.hpp
src/components/codecs/AudioCodecsModel.hpp
src/components/codecs/VideoCodecsModel.hpp
src/components/Components.hpp
src/components/conference/ConferenceAddModel.hpp
src/components/conference/ConferenceHelperModel.hpp
src/components/conference/ConferenceModel.hpp
src/components/contact/ContactModel.hpp
src/components/contact/VcardModel.hpp
src/components/contacts/ContactsListModel.hpp
src/components/contacts/ContactsListProxyModel.hpp
src/components/core/CoreHandlers.hpp
src/components/core/CoreManager.hpp
src/components/core/event-count-notifier/AbstractEventCountNotifier.hpp
src/components/file/FileDownloader.hpp
src/components/file/FileExtractor.hpp
src/components/notifier/Notifier.hpp
src/components/other/clipboard/Clipboard.hpp
src/components/other/colors/Colors.hpp
src/components/other/desktop-tools/DesktopTools.hpp
src/components/other/text-to-speech/TextToSpeech.hpp
src/components/other/units/Units.hpp
src/components/presence/OwnPresenceModel.hpp
src/components/presence/Presence.hpp
src/components/settings/AccountSettingsModel.hpp
src/components/settings/SettingsModel.hpp
src/components/sip-addresses/SipAddressesModel.hpp
src/components/sip-addresses/SipAddressesProxyModel.hpp
src/components/sip-addresses/SipAddressObserver.hpp
src/components/sound-player/SoundPlayer.hpp
src/components/telephone-numbers/TelephoneNumbersModel.hpp
src/components/timeline/TimelineModel.hpp
src/components/url-handlers/UrlHandlers.hpp
src/utils/LinphoneUtils.hpp
src/utils/MediastreamerUtils.hpp
src/utils/QExifImageHeader.hpp
src/utils/Utils.hpp
)
set(MAIN_FILE src/app/main.cpp)
if (APPLE)
list(APPEND SOURCES
src/app/single-application/SingleApplication.cpp
src/components/core/event-count-notifier/EventCountNotifierMacOs.m
src/components/other/desktop-tools/DesktopToolsMacOs.cpp
src/components/other/desktop-tools/screen-saver/ScreenSaverMacOs.m
src/components/other/desktop-tools/state-process/StateProcessMacOs.mm
)
list(APPEND HEADERS
src/app/single-application/SingleApplicationPrivate.hpp
src/components/core/event-count-notifier/EventCountNotifierMacOs.hpp
src/components/other/desktop-tools/DesktopToolsMacOs.hpp
)
elseif (WIN32)
list(APPEND SOURCES
src/app/single-application/SingleApplication.cpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.cpp
src/components/other/desktop-tools/DesktopToolsWindows.cpp
)
list(APPEND HEADERS
src/app/single-application/SingleApplicationPrivate.hpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.hpp
src/components/other/desktop-tools/DesktopToolsWindows.hpp
)
else ()
list(APPEND SOURCES
src/app/single-application/SingleApplicationDBus.cpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.cpp
src/components/other/desktop-tools/DesktopToolsLinux.cpp
src/components/other/desktop-tools/screen-saver/ScreenSaverDBus.cpp
src/components/other/desktop-tools/screen-saver/ScreenSaverXdg.cpp
)
list(APPEND HEADERS
src/app/single-application/SingleApplicationDBusPrivate.hpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.hpp
src/components/other/desktop-tools/DesktopToolsLinux.hpp
src/components/other/desktop-tools/screen-saver/ScreenSaverDBus.hpp
src/components/other/desktop-tools/screen-saver/ScreenSaverXdg.hpp
)
endif ()
set(QRC_RESOURCES resources.qrc)
set(LANGUAGES_DIRECTORY "${ASSETS_DIR}/languages")
set(I18N_FILENAME i18n.qrc)
set(LANGUAGES de en fr_FR ja lt ru sv tr pt_BR)
# ------------------------------------------------------------------------------
function (PREPEND list prefix)
set(new_list "")
foreach (elem ${${list}})
list(APPEND new_list "${prefix}${elem}")
endforeach ()
set(${list} ${new_list} PARENT_SCOPE)
endfunction ()
# Force absolute paths.
PREPEND(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/")
PREPEND(HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/")
# ------------------------------------------------------------------------------
# Compute QML files list.
# ------------------------------------------------------------------------------
set(QML_SOURCES)
file(STRINGS ${QRC_RESOURCES} QRC_RESOURCES_CONTENT)
foreach (line ${QRC_RESOURCES_CONTENT})
set(result)
string(REGEX REPLACE
"^[ \t]*<[ \t]*file[ \t]*>[ \t]*(.+\\.[a-z]+)[ \t]*<[ \t]*/[ \t]*file[ \t]*>[ \t]*$"
"\\1"
result
"${line}"
)
string(REGEX MATCH "\\.[a-z]+$" is_ui ${result})
if (NOT ${is_ui} STREQUAL "")
list(APPEND QML_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${result}")
endif ()
endforeach ()
# ------------------------------------------------------------------------------
# Init git hooks.
# ------------------------------------------------------------------------------
if (NOT WIN32)
add_custom_target(
check_qml DEPENDS ${QML_SOURCES}
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/check_qml_syntax"
)
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/tools/private/pre-commit"
"${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks/pre-commit"
)
set(_QML_IMPORT_PATHS "")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/modules")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/dev-modules")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/scripts")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/views")
set(QML_IMPORT_PATH ${_QML_IMPORT_PATHS} CACHE STRING "Path used to locate CMake modules by Qt Creator" FORCE)
if(APPLE)
if(MS2_PLUGINS_LOCATION)
set(MSPLUGINS_DIR ${MS2_PLUGINS_LOCATION})
else()
set(MSPLUGINS_DIR "Frameworks/mediastreamer2.framework/Versions/A/Libraries")
endif()
else()
set(MSPLUGINS_DIR "${CMAKE_INSTALL_LIBDIR}/mediastreamer/plugins")
endif()
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h")
# ------------------------------------------------------------------------------
# Build.
# ------------------------------------------------------------------------------
include_directories(src/)
find_package(Qt5 COMPONENTS ${QT5_PACKAGES} REQUIRED)
find_package(Qt5 COMPONENTS ${QT5_PACKAGES_OPTIONAL} QUIET)
if (CMAKE_INSTALL_RPATH)
#Retrieve lib path from a know QT executable
get_target_property(LUPDATE_PATH Qt5::lupdate LOCATION)
get_filename_component(LUPDATE_PATH "${LUPDATE_PATH}" DIRECTORY)
get_filename_component(QT_PATH "${LUPDATE_PATH}/../lib" ABSOLUTE)
list(APPEND CMAKE_INSTALL_RPATH "${QT_PATH}")
endif ()
# Add languages support.
add_subdirectory(${LANGUAGES_DIRECTORY})
list(APPEND SOURCES "${CMAKE_CURRENT_BINARY_DIR}/${LANGUAGES_DIRECTORY}/${I18N_FILENAME}")
# Build.
#add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${RESOURCES} ${QML_SOURCES})
add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES} ${QRC_RESOURCES})
set_property(TARGET ${APP_LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE ON)
#Turn on automatic resources compilation by cmake
#Instead of excplicitely calling qt5_add_resources
set_property(TARGET ${APP_LIBRARY} PROPERTY AUTORCC ON)
bc_git_version(${TARGET_NAME} ${PROJECT_VERSION})
add_dependencies(${APP_LIBRARY} ${TARGET_NAME}-git-version)
add_dependencies(${APP_LIBRARY} update_translations)
if (WIN32)
add_executable(${TARGET_NAME} WIN32 $<TARGET_OBJECTS:${APP_LIBRARY}> ${ASSETS_DIR}/app-icon.rc ${MAIN_FILE})
else ()
add_executable(${TARGET_NAME} $<TARGET_OBJECTS:${APP_LIBRARY}> ${MAIN_FILE})
endif ()
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}")
set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" "${LINPHONE_INCLUDE_DIRS}" "${BELCARD_INCLUDE_DIRS}" "${BCTOOLBOX_INCLUDE_DIRS}" "${MEDIASTREAMER2_INCLUDE_DIRS}" "${MINIZIP_INCLUDE_DIRS}")
set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES})
if(WIN32)
list(APPEND LIBRARIES ${MINIZIP_LIBRARIES})
endif()
foreach (package ${QT5_PACKAGES})
list(APPEND INCLUDED_DIRECTORIES "${Qt5${package}_INCLUDE_DIRS}")
# `qt5_create_translation` is provided from `LinguistTools` package.
# But the `Qt5::LinguistTools` lib does not exist. Remove it.
if (NOT (${package} STREQUAL LinguistTools))
list(APPEND LIBRARIES ${Qt5${package}_LIBRARIES})
endif ()
endforeach ()
foreach (package ${QT5_PACKAGES_OPTIONAL})
if ("${Qt5${package}_FOUND}")
message("Optional package ${package} found.")
list(APPEND INCLUDED_DIRECTORIES "${Qt5${package}_INCLUDE_DIRS}")
list(APPEND LIBRARIES ${Qt5${package}_LIBRARIES})
string(TOUPPER "${package}" INCLUDE_NAME)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${INCLUDE_NAME}_ENABLED")
else ()
message("Optional package ${package} not found.")
endif ()
endforeach ()
if (APPLE)
list(APPEND LIBRARIES "-framework Cocoa -framework IOKit")
# -framework linphone") #This doesn't work yet
endif ()
target_include_directories(${APP_LIBRARY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_link_libraries(${TARGET_NAME} ${LIBRARIES})
if(WIN32)
target_link_libraries(${TARGET_NAME} wsock32 ws2_32)
endif()
foreach (target ${TARGET_NAME})
message("Available target : ${target}")
# install(TARGETS ${target}
# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
# LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
# ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
# PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
# )
endforeach ()
if (UNIX AND NOT APPLE)
# Install desktop/icon files.
configure_file("${ASSETS_DIR}/linphone.desktop.cmake" "${EXECUTABLE_NAME}.desktop" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE_NAME}.desktop"
DESTINATION "${CMAKE_INSTALL_DATADIR}/applications"
)
install(FILES "${ASSETS_DIR}/images/linphone_logo.svg"
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps/"
RENAME "${EXECUTABLE_NAME}.svg"
)
set(ICON_DIRS 16x16 22x22 24x24 32x32 64x64 128x128 256x256)
foreach (DIR ${ICON_DIRS})
install(FILES "${ASSETS_DIR}/icons/hicolor/${DIR}/apps/icon.png"
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/${DIR}/apps/"
RENAME "${EXECUTABLE_NAME}.png"
)
endforeach ()
endif ()
# ------------------------------------------------------------------------------
# CPack settings & RPM.
# ------------------------------------------------------------------------------
set(LINPHONE_DESKTOP_DIR "${CMAKE_SOURCE_DIR}")
set(LINPHONE_SDK_DIR "${CMAKE_BINARY_DIR}/linphone-sdk")
set(TOOLS_DIR "${CMAKE_BINARY_DIR}/programs")
set(LINPHONE_SOURCE_DIR ${EP_linphone_SOURCE_DIR})
set(LINPHONE_BUILDER_SIGNING_IDENTITY ${LINPHONE_BUILDER_SIGNING_IDENTITY})
set(LINPHONE_SDK_TMP "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-tmp")
add_subdirectory(build)
add_subdirectory(cmake_builder/linphone_package)
# ------------------------------------------------------------------------------
# To start better integration into IDE.
# ------------------------------------------------------------------------------
source_group(
"Qml" REGULAR_EXPRESSION ".+\.qml$"
)
source_group(
"Js" REGULAR_EXPRESSION ".+\.js$"
)
source_group(
"Svg" REGULAR_EXPRESSION ".+\.svg$"
)
# ------------------------------
# Installation
# ------------------------------
if(APPLE)
target_link_libraries(${TARGET_NAME} "${MINIZIP_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/libminizip.dylib")
execute_process(COMMAND install_name_tool -id "@executable_path/../Frameworks/libminizip.dylib" "${MINIZIP_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/libminizip.dylib")
elseif(NOT WIN32)
target_link_libraries(${TARGET_NAME} "${MINIZIP_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/libminizip.so")
endif()
endif()#If (LinphoneCxx_FOUND AND Minizip_FOUND)
endif()#If (LinphoneCxx_FOUND)
message("Adding Linphone Desktop in an IDE-friendly state")
set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
endif()
ExternalProject_Add(linphoneqt-only PREFIX "${CMAKE_BINARY_DIR}/linphoneqt"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
EXCLUDE_FROM_ALL ON
)

View file

@ -61,27 +61,23 @@ Note: If you have `qtchooser` set in your `PATH`, the best use is :
### Building
The build is done in 3 steps. First, you need to build the SDK, then the submodule Minizip and finally, the application.
The build is done by building the SDK, the submodule Minizip and the application. Their targets are `sdk`, `minizip` and `linphone-qt`.
1. Create your build folder at the root of the project : `mkdir build-desktop`
Go to this new folder and begin the build process : `cd build-desktop`
2. Prepare your options : `cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo` By default, it will try compile all dependencies. You can remove some by adding `-DENABLE_<COMPONENT>=NO` to the command. You can use `cmake-gui ..` if you want to have a better access to them.
2. Prepare your options : `cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo`. By default, it will try compile all needed dependencies. You can remove some by adding `-DENABLE_<COMPONENT>=NO` to the command. You can use `cmake-gui ..` if you want to have a better access to them. You can add `-DCMAKE_BUILD_PARALLEL_LEVEL=10` to do 10 parallel builds for speeding up the process. If it doesn't seem to work then it will be better to use CMake >= 3.12
3. Build the SDK : `cmake --build . --target sdk --config RelWithDebInfo`. You can add `--parallel 10` if you have CMake>3.12 to speedup the process.
3. Build and install the whole project : `cmake --build . --target all` or `cmake --build . --target ALL_BUILD` on Windows.
4. Build The submodule. `cmake ..` and `cmake --build . --target install --config RelWithDebInfo`
If the target install doesn't exist, it is because you had issues on the first step or the project generation could be done when calling `cmake ..`.
5. Finish the process with a new `cmake ..` and `cmake --build . --target install --config RelWithDebInfo`.
It is important to set the config in the process or you can have a bad configuration for your binary that could lead to some corruption : on Windows, this issue is spotted when trying to start the application and an empty file with a random name is created. So, you are working on an IDE (like Qt Creator), you may override the build command.
It is important to set the config in the process or you can have a bad configuration for your binary that could lead to some corruption : on Windows, this issue is spotted when trying to start the application and an empty file with a random name is created. So, if you are working on an IDE (like Qt Creator), you may override the build command.
When all are over, the files will be in the OUTPUT folder in the build directory.
You can find a script file for each supported platform to achieve the first building. They only exist for convenience.
There are called `build_all_linux.sh`, `build_all_macos.sh` and `build_all_win.bat`.
4. When doing some modifications in the SDK, you can rebuild only the sdk with the target `sdk`
5. In order to get packages, you can use `cmake .. -DENABLE_APP_PACKAGING=YES`. The files will be in `OUTPUT/packages` folder.
#### General Troubleshooting

View file

@ -1,56 +0,0 @@
#!/bin/bash
##
## Copyright (c) 2010-2020 Belledonne Communications SARL.
##
## This file is part of linphone-desktop
## (see https://www.linphone.org).
##
## 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 <http://www.gnu.org/licenses/>.
##
################################################################################
# Linux First building script
#-------------------------------------------------------------------------------
#Stop at error
set -e
if [[ -z ${Qt5_DIR} ]]; then
eval "$(qtchooser -print-env)"
export Qt5_DIR=${QTLIBDIR}/cmake/Qt5
export PATH=${QTTOOLDIR}:$PATH
fi
#Creation of folders
rm -rf build-desktop
mkdir -p build-desktop
#Opus crash on Linux. The version for 4.3 is old. We have to use a switch in configuration to select the newest version for desktop.
#SDK building
cd build-desktop
#cmake .. -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_VPX=YES -DENABLE_GPL_THIRD_PARTIES=YES -DENABLE_NON_FREE_CODECS=YES -DENABLE_AMRNB=YES -DENABLE_AMRWB=YES -DENABLE_G729=YES -DENABLE_GSM=YES -DENABLE_ILBC=YES -DENABLE_ISAC=YES -DENABLE_SILK=YES -DENABLE_SPEEX=YES -DENABLE_H263=YES -DENABLE_H263P=YES -DENABLE_MPEG4=YES -DENABLE_OPENH264=YES -DENABLE_FFMPEG=YES -DENABLE_VIDEO=YES -DENABLE_GL=YES -DENABLE_OPUS=NO
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_OPUS=NO
cmake --build . --target sdk --config RelWithDebInfo --parallel 10
#MiniZip Building
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build . --target minizip --config RelWithDebInfo --parallel 10
cmake --build . --target install
#Desktop Building
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build . --target all --config RelWithDebInfo --parallel 10
cmake --build . --target install

View file

@ -1,55 +0,0 @@
#!/bin/sh
##
## Copyright (c) 2010-2020 Belledonne Communications SARL.
##
## This file is part of linphone-desktop
## (see https://www.linphone.org).
##
## 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 <http://www.gnu.org/licenses/>.
##
################################################################################
#-------------------------------------------------------------------------------
# MAC OSX First building script
#-------------------------------------------------------------------------------
#Stop at error
set -e
if [[ -z ${Qt5_DIR} ]]; then
export Qt5_DIR=/usr/opt/qt/lib/cmake
export PATH=$PATH:/usr/local/opt/qt/bin
fi
#Creation of folders
rm -rf build-desktop
mkdir -p build-desktop
cd build-desktop
#SDK building
#LINPHONESDK_DOXYGEN_PROGRAM is set just to be sure to get the version of the Application folder
cmake .. -DLINPHONESDK_DOXYGEN_PROGRAM=/Applications/Doxygen.app/Contents/Resources/doxygen -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build . --target all --config RelWithDebInfo --parallel 10
#MiniZip Building
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build . --target all --config RelWithDebInfo --parallel 10
cmake --build . --target install
#Desktop Building
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build . --target all --config RelWithDebInfo
cmake --build . --target install

View file

@ -1,22 +0,0 @@
:: Preparing folders
IF NOT EXIST build-desktop mkdir build-desktop
:: SDK Building
cd build-desktop
:: Default config
cmake .. -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=RelWithDebInfo -A Win32
:: Mini config
::cmake .. -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_VPX=NO -DENABLE_OPUS=NO -A Win32 -DENABLE_VIDEO=YES -DENABLE_GL=YES
if %errorlevel% neq 0 exit /b %errorlevel%
cmake --build . --target sdk --config RelWithDebInfo --parallel 10 -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
if %errorlevel% neq 0 exit /b %errorlevel%
:: Minizip Submodule Building
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -A Win32
cmake --build . --target install --config RelWithDebInfo --parallel 10 -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false
:: Desktop Building
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -A Win32
if %errorlevel% neq 0 exit /b %errorlevel%
cmake --build . --target install --config RelWithDebInfo --parallel 10 -- /maxcpucount /nodeReuse:true /p:TrackFileAccess=false

View file

@ -1,28 +0,0 @@
############################################################################
# CMakeLists.txt
# Copyright (C) 2017-2020 Belledonne Communications, Grenoble France
#
############################################################################
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
############################################################################
lcb_define_targets("linphoneqt" "linphone" "ms2plugins")
#if (NOT WIN32 AND NOT APPLE)
# lcb_blacklist_dependencies("turbojpeg") # turbo-jpeg is already provided by Qt5 so do not build it.
#endif ()

View file

@ -1,31 +0,0 @@
############################################################################
# packaging.cmake
# Copyright (C) 2017-2018 Belledonne Communications, Grenoble France
#
############################################################################
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
############################################################################
if (NOT "${CMAKE_INSTALL_PREFIX}" MATCHES .*/_CPack_Packages/.*)
execute_process(
COMMAND ${CMAKE_CPACK_COMMAND} -G DragNDrop
RESULT_VARIABLE CPACK_COMMAND_RESULT
)
if(CPACK_COMMAND_RESULT)
message(FATAL_ERROR "Failed to create dmg package!")
endif()
endif ()

View file

@ -1,41 +0,0 @@
############################################################################
# packaging.cmake
# Copyright (C) 2014-2018 Belledonne Communications, Grenoble France
#
############################################################################
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
############################################################################
if (NOT "${CMAKE_INSTALL_PREFIX}" MATCHES .*/_CPack_Packages/.*)
execute_process(
COMMAND ${CMAKE_CPACK_COMMAND} -G @CPACK_GENERATOR@
RESULT_VARIABLE CPACK_COMMAND_RESULT
)
if(CPACK_COMMAND_RESULT)
message(FATAL_ERROR "Failed to generate package!")
endif()
if (@PERFORM_SIGNING@)
execute_process(
COMMAND @SIGNTOOL_COMMAND@ @CMAKE_CURRENT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.@PACKAGE_EXT@
RESULT_VARIABLE SIGNING_RESULT
)
if(SIGNING_RESULT)
message(FATAL_ERROR "Failed to sign the package!")
endif()
endif ()
endif ()

509
linphone-app/CMakeLists.txt Normal file
View file

@ -0,0 +1,509 @@
################################################################################
#
# Copyright (c) 2017-2020 Belledonne Communications SARL.
#
# This file is part of linphone-desktop
# (see https://www.linphone.org).
#
# 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 <http://www.gnu.org/licenses/>.
#
################################################################################
cmake_minimum_required(VERSION 3.1)
project(linphoneqt VERSION 4.1.1)
#message("CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}")
message("Options : ${ENABLE_UPDATE_CHECK}, ${ENABLE_UNIT_TESTS}, ${ENABLE_TESTS}, ${ENABLE_TESTS_COMPONENTS}, ${ENABLE_TOOLS}, ${ENABLE_STRICT}, ${ENABLE_FFMPEG}, ${ENABLE_OPUS}")
include(GNUInstallDirs)
include(CheckCXXCompilerFlag)
set(TARGET_NAME linphone-qt)
if( NOT("${CMAKE_GENERATOR}" MATCHES "Ninja"))
# set(TARGET_NAME_ONLY linphone-qt-only)
# set(APP_LIBRARY_ONLY app-library-only)
endif()
set(CMAKE_CXX_STANDARD 11)
if(UNIX AND NOT APPLE)
set(CMAKE_INSTALL_RPATH "$ORIGIN;$ORIGIN/lib64;$ORIGIN/../lib64;$ORIGIN/lib;$ORIGIN/../lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake")
set(APP_LIBRARY app-library)
include(application_info.cmake)
if(WIN32)
set(EXECUTABLE_OUTPUT_DIR "${CMAKE_BINARY_DIR}")
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${EXECUTABLE_OUTPUT_DIR}")
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${EXECUTABLE_OUTPUT_DIR}")
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${EXECUTABLE_OUTPUT_DIR}")
endif()
find_package(LinphoneCxx CONFIG)
find_package(Linphone CONFIG)
find_package(bctoolbox CONFIG)
find_package(belcard CONFIG)
find_package(Mediastreamer2 CONFIG)
find_package(ortp CONFIG)
#find_package(minizip)
include(FindPkgConfig)
pkg_search_module(MINIZIP minizip)
set(MINIZIP_INCLUDE_DIRS "${MINIZIP_PREFIX}/${MINIZIP_INCLUDE_DIRS}")
message("MINIZIP : ${MINIZIP_INCLUDE_DIRS} => ${MINIZIP_LIBRARIES}")
message("INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} FRAMEWORK_PATH=${CMAKE_FRAMEWORK_PATH}")
message("LINPHONE : ${LINPHONE_INCLUDE_DIRS} => ${LINPHONE_LIBRARIES}")
message("LINPHONECXX : ${LINPHONECXX_INCLUDE_DIRS} => ${LINPHONECXX_LIBRARIES}")
# Build configuration
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -DQT_NO_DEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG" )
if( WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WINSOCKAPI_")#remove error from windows headers order
endif()
set(CMAKE_INCLUDE_CURRENT_DIR ON)#useful for config.h
set(QT5_PACKAGES Core Gui Quick Widgets QuickControls2 Svg LinguistTools Concurrent Network)
if (UNIX AND NOT APPLE)
list(APPEND QT5_PACKAGES DBus)
endif ()
set(QT5_PACKAGES_OPTIONAL TextToSpeech)
set(CMAKE_AUTOMOC ON)
#-------------------------------------------------
set(ASSETS_DIR "assets")
set(SOURCES
src/app/App.cpp
src/app/AppController.cpp
src/app/cli/Cli.cpp
src/app/logger/Logger.cpp
src/app/paths/Paths.cpp
src/app/providers/AvatarProvider.cpp
src/app/providers/ImageProvider.cpp
src/app/providers/ThumbnailProvider.cpp
src/app/translator/DefaultTranslator.cpp
src/components/assistant/AssistantModel.cpp
src/components/authentication/AuthenticationNotifier.cpp
src/components/call/CallModel.cpp
src/components/calls/CallsListModel.cpp
src/components/calls/CallsListProxyModel.cpp
src/components/camera/Camera.cpp
src/components/camera/CameraPreview.cpp
src/components/camera/MSFunctions.cpp
src/components/chat/ChatModel.cpp
src/components/chat/ChatProxyModel.cpp
src/components/codecs/AbstractCodecsModel.cpp
src/components/codecs/AudioCodecsModel.cpp
src/components/codecs/VideoCodecsModel.cpp
src/components/conference/ConferenceAddModel.cpp
src/components/conference/ConferenceHelperModel.cpp
src/components/conference/ConferenceModel.cpp
src/components/contact/ContactModel.cpp
src/components/contact/VcardModel.cpp
src/components/contacts/ContactsListModel.cpp
src/components/contacts/ContactsListProxyModel.cpp
src/components/core/CoreHandlers.cpp
src/components/core/CoreManager.cpp
src/components/core/event-count-notifier/AbstractEventCountNotifier.cpp
src/components/file/FileDownloader.cpp
src/components/file/FileExtractor.cpp
src/components/notifier/Notifier.cpp
src/components/other/clipboard/Clipboard.cpp
src/components/other/colors/Colors.cpp
src/components/other/text-to-speech/TextToSpeech.cpp
src/components/other/units/Units.cpp
src/components/presence/OwnPresenceModel.cpp
src/components/presence/Presence.cpp
src/components/settings/AccountSettingsModel.cpp
src/components/settings/SettingsModel.cpp
src/components/sip-addresses/SipAddressesModel.cpp
src/components/sip-addresses/SipAddressesProxyModel.cpp
src/components/sip-addresses/SipAddressObserver.cpp
src/components/sound-player/SoundPlayer.cpp
src/components/telephone-numbers/TelephoneNumbersModel.cpp
src/components/timeline/TimelineModel.cpp
src/components/url-handlers/UrlHandlers.cpp
src/utils/LinphoneUtils.cpp
src/utils/MediastreamerUtils.cpp
src/utils/QExifImageHeader.cpp
src/utils/Utils.cpp
)
set(HEADERS
src/app/App.hpp
src/app/AppController.hpp
src/app/cli/Cli.hpp
src/app/logger/Logger.hpp
src/app/paths/Paths.hpp
src/app/providers/AvatarProvider.hpp
src/app/providers/ImageProvider.hpp
src/app/providers/ThumbnailProvider.hpp
src/app/single-application/SingleApplication.hpp
src/app/translator/DefaultTranslator.hpp
src/components/assistant/AssistantModel.hpp
src/components/authentication/AuthenticationNotifier.hpp
src/components/call/CallModel.hpp
src/components/calls/CallsListModel.hpp
src/components/calls/CallsListProxyModel.hpp
src/components/camera/Camera.hpp
src/components/camera/CameraPreview.hpp
src/components/camera/MSFunctions.hpp
src/components/chat/ChatModel.hpp
src/components/chat/ChatProxyModel.hpp
src/components/codecs/AbstractCodecsModel.hpp
src/components/codecs/AudioCodecsModel.hpp
src/components/codecs/VideoCodecsModel.hpp
src/components/Components.hpp
src/components/conference/ConferenceAddModel.hpp
src/components/conference/ConferenceHelperModel.hpp
src/components/conference/ConferenceModel.hpp
src/components/contact/ContactModel.hpp
src/components/contact/VcardModel.hpp
src/components/contacts/ContactsListModel.hpp
src/components/contacts/ContactsListProxyModel.hpp
src/components/core/CoreHandlers.hpp
src/components/core/CoreManager.hpp
src/components/core/event-count-notifier/AbstractEventCountNotifier.hpp
src/components/file/FileDownloader.hpp
src/components/file/FileExtractor.hpp
src/components/notifier/Notifier.hpp
src/components/other/clipboard/Clipboard.hpp
src/components/other/colors/Colors.hpp
src/components/other/desktop-tools/DesktopTools.hpp
src/components/other/text-to-speech/TextToSpeech.hpp
src/components/other/units/Units.hpp
src/components/presence/OwnPresenceModel.hpp
src/components/presence/Presence.hpp
src/components/settings/AccountSettingsModel.hpp
src/components/settings/SettingsModel.hpp
src/components/sip-addresses/SipAddressesModel.hpp
src/components/sip-addresses/SipAddressesProxyModel.hpp
src/components/sip-addresses/SipAddressObserver.hpp
src/components/sound-player/SoundPlayer.hpp
src/components/telephone-numbers/TelephoneNumbersModel.hpp
src/components/timeline/TimelineModel.hpp
src/components/url-handlers/UrlHandlers.hpp
src/utils/LinphoneUtils.hpp
src/utils/MediastreamerUtils.hpp
src/utils/QExifImageHeader.hpp
src/utils/Utils.hpp
)
set(MAIN_FILE src/app/main.cpp)
if (APPLE)
list(APPEND SOURCES
src/app/single-application/SingleApplication.cpp
src/components/core/event-count-notifier/EventCountNotifierMacOs.m
src/components/other/desktop-tools/DesktopToolsMacOs.cpp
src/components/other/desktop-tools/screen-saver/ScreenSaverMacOs.m
src/components/other/desktop-tools/state-process/StateProcessMacOs.mm
)
list(APPEND HEADERS
src/app/single-application/SingleApplicationPrivate.hpp
src/components/core/event-count-notifier/EventCountNotifierMacOs.hpp
src/components/other/desktop-tools/DesktopToolsMacOs.hpp
)
elseif (WIN32)
list(APPEND SOURCES
src/app/single-application/SingleApplication.cpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.cpp
src/components/other/desktop-tools/DesktopToolsWindows.cpp
)
list(APPEND HEADERS
src/app/single-application/SingleApplicationPrivate.hpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.hpp
src/components/other/desktop-tools/DesktopToolsWindows.hpp
)
else ()
list(APPEND SOURCES
src/app/single-application/SingleApplicationDBus.cpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.cpp
src/components/other/desktop-tools/DesktopToolsLinux.cpp
src/components/other/desktop-tools/screen-saver/ScreenSaverDBus.cpp
src/components/other/desktop-tools/screen-saver/ScreenSaverXdg.cpp
)
list(APPEND HEADERS
src/app/single-application/SingleApplicationDBusPrivate.hpp
src/components/core/event-count-notifier/EventCountNotifierSystemTrayIcon.hpp
src/components/other/desktop-tools/DesktopToolsLinux.hpp
src/components/other/desktop-tools/screen-saver/ScreenSaverDBus.hpp
src/components/other/desktop-tools/screen-saver/ScreenSaverXdg.hpp
)
endif ()
set(QRC_RESOURCES resources.qrc)
set(LANGUAGES_DIRECTORY "${ASSETS_DIR}/languages")
set(I18N_FILENAME i18n.qrc)
set(LANGUAGES de en fr_FR ja lt ru sv tr pt_BR)
# ------------------------------------------------------------------------------
function (PREPEND list prefix)
set(new_list "")
foreach (elem ${${list}})
list(APPEND new_list "${prefix}${elem}")
endforeach ()
set(${list} ${new_list} PARENT_SCOPE)
endfunction ()
# Force absolute paths.
PREPEND(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/")
PREPEND(HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/")
# ------------------------------------------------------------------------------
# Compute QML files list.
# ------------------------------------------------------------------------------
set(QML_SOURCES)
file(STRINGS ${QRC_RESOURCES} QRC_RESOURCES_CONTENT)
foreach (line ${QRC_RESOURCES_CONTENT})
set(result)
string(REGEX REPLACE
"^[ \t]*<[ \t]*file[ \t]*>[ \t]*(.+\\.[a-z]+)[ \t]*<[ \t]*/[ \t]*file[ \t]*>[ \t]*$"
"\\1"
result
"${line}"
)
string(REGEX MATCH "\\.[a-z]+$" is_ui ${result})
if (NOT ${is_ui} STREQUAL "")
list(APPEND QML_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${result}")
endif ()
endforeach ()
# ------------------------------------------------------------------------------
# Init git hooks.
# ------------------------------------------------------------------------------
if (NOT WIN32)
add_custom_target(
check_qml DEPENDS ${QML_SOURCES}
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/../tools/check_qml_syntax"
)
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/../tools/private/pre-commit"
"${CMAKE_CURRENT_SOURCE_DIR}/../.git/hooks/pre-commit"
)
set(_QML_IMPORT_PATHS "")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/modules")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/dev-modules")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/scripts")
list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/views")
set(QML_IMPORT_PATH ${_QML_IMPORT_PATHS} CACHE STRING "Path used to locate CMake modules by Qt Creator" FORCE)
if(APPLE)
if(MS2_PLUGINS_LOCATION)
set(MSPLUGINS_DIR ${MS2_PLUGINS_LOCATION})
else()
set(MSPLUGINS_DIR "Frameworks/mediastreamer2.framework/Versions/A/Libraries")
endif()
else()
set(MSPLUGINS_DIR "${CMAKE_INSTALL_LIBDIR}/mediastreamer/plugins")
endif()
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/config.h")
# ------------------------------------------------------------------------------
# Build.
# ------------------------------------------------------------------------------
include_directories(src/)
find_package(Qt5 COMPONENTS ${QT5_PACKAGES} REQUIRED)
find_package(Qt5 COMPONENTS ${QT5_PACKAGES_OPTIONAL} QUIET)
if (CMAKE_INSTALL_RPATH)
#Retrieve lib path from a know QT executable
get_target_property(LUPDATE_PATH Qt5::lupdate LOCATION)
get_filename_component(LUPDATE_PATH "${LUPDATE_PATH}" DIRECTORY)
get_filename_component(QT_PATH "${LUPDATE_PATH}/lib" ABSOLUTE)
list(APPEND CMAKE_INSTALL_RPATH "${QT_PATH}")
endif ()
# Add languages support.
add_subdirectory("${LANGUAGES_DIRECTORY}" "assets/languages")
list(APPEND SOURCES "${CMAKE_CURRENT_BINARY_DIR}/${LANGUAGES_DIRECTORY}/${I18N_FILENAME}")
# Build and dependencies
link_directories("${MINIZIP_PREFIX}/${MINIZIP_LIBRARY_DIRS}")
#link_directories("${MINIZIP_PREFIX}/${MINIZIP_LIBRARY_DIRS}")
#add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${RESOURCES} ${QML_SOURCES})
add_library(${APP_LIBRARY} OBJECT ${SOURCES} ${HEADERS} ${QML_SOURCES} ${QRC_RESOURCES})
if(TARGET_NAME_ONLY)
add_library(${APP_LIBRARY_ONLY} OBJECT EXCLUDE_FROM_ALL ${SOURCES} ${HEADERS} ${QML_SOURCES} ${QRC_RESOURCES})
endif()
if (WIN32)
add_executable(${TARGET_NAME} WIN32 $<TARGET_OBJECTS:${APP_LIBRARY}> ${ASSETS_DIR}/app-icon.rc ${MAIN_FILE})
if(TARGET_NAME_ONLY)
add_executable(${TARGET_NAME_ONLY} WIN32 EXCLUDE_FROM_ALL $<TARGET_OBJECTS:${APP_LIBRARY_ONLY}> ${ASSETS_DIR}/app-icon.rc ${MAIN_FILE})
endif()
else ()
add_executable(${TARGET_NAME} $<TARGET_OBJECTS:${APP_LIBRARY}> ${MAIN_FILE})
if(TARGET_NAME_ONLY)
add_executable(${TARGET_NAME_ONLY} EXCLUDE_FROM_ALL $<TARGET_OBJECTS:${APP_LIBRARY_ONLY}> ${MAIN_FILE})
endif()
endif ()
if(TARGET_NAME_ONLY)
target_compile_options(${TARGET_NAME_ONLY} PRIVATE -fPIC)
set_source_files_properties( ${APP_LIBRARY_ONLY} PROPERTIES EXTERNAL_OBJECT true GENERATED true )
set_property(TARGET ${APP_LIBRARY_ONLY} PROPERTY POSITION_INDEPENDENT_CODE ON) #Need by Qt
set_property(TARGET ${APP_LIBRARY_ONLY} PROPERTY AUTORCC ON)
set_target_properties(${TARGET_NAME_ONLY} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}")
endif()
set_source_files_properties( ${APP_LIBRARY} PROPERTIES EXTERNAL_OBJECT true GENERATED true )
set_property(TARGET ${APP_LIBRARY} PROPERTY POSITION_INDEPENDENT_CODE ON) #Need by Qt
#Turn on automatic resources compilation by cmake
#Instead of excplicitely calling qt5_add_resources
set_property(TARGET ${APP_LIBRARY} PROPERTY AUTORCC ON)
bc_git_version(${TARGET_NAME} ${PROJECT_VERSION})
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME "${EXECUTABLE_NAME}")
#ExternalProject_Get_Property(project_a install_dir)
#include_directories(${install_dir}/include)
#add_dependencies(project_b_exe project_a)
#target_link_libraries(project_b_exe ${install_dir}/lib/alib.lib)
set(INCLUDED_DIRECTORIES "${LINPHONECXX_INCLUDE_DIRS}" "${MINIZIP_INCLUDE_DIRS}")
set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES} ${MINIZIP_LIBRARIES})
#set(LIBRARIES ${BCTOOLBOX_CORE_LIBRARIES} ${BELCARD_LIBRARIES} ${LINPHONE_LIBRARIES} ${LINPHONECXX_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${ORTP_LIBRARIES} ${OPUS_LIBRARIES} "minizip")
message("LIBRARIES : ${LIBRARIES}")
foreach (package ${QT5_PACKAGES})
list(APPEND INCLUDED_DIRECTORIES "${Qt5${package}_INCLUDE_DIRS}")
# `qt5_create_translation` is provided from `LinguistTools` package.
# But the `Qt5::LinguistTools` lib does not exist. Remove it.
if (NOT (${package} STREQUAL LinguistTools))
list(APPEND LIBRARIES ${Qt5${package}_LIBRARIES})
endif ()
endforeach ()
foreach (package ${QT5_PACKAGES_OPTIONAL})
if ("${Qt5${package}_FOUND}")
message("Optional package ${package} found.")
list(APPEND INCLUDED_DIRECTORIES "${Qt5${package}_INCLUDE_DIRS}")
list(APPEND LIBRARIES ${Qt5${package}_LIBRARIES})
string(TOUPPER "${package}" INCLUDE_NAME)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${INCLUDE_NAME}_ENABLED")
else ()
message("Optional package ${package} not found.")
endif ()
endforeach ()
if (APPLE)
list(APPEND LIBRARIES "-framework Cocoa -framework IOKit")
# -framework linphone") #This doesn't work yet
endif ()
target_include_directories(${APP_LIBRARY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
if(TARGET_NAME_ONLY)
target_include_directories(${APP_LIBRARY_ONLY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_include_directories(${TARGET_NAME_ONLY} SYSTEM PRIVATE ${INCLUDED_DIRECTORIES})
target_link_libraries(${TARGET_NAME_ONLY} ${LIBRARIES})
add_dependencies(${APP_LIBRARY_ONLY} update_translations ${TARGET_NAME}-git-version)
add_dependencies(${TARGET_NAME_ONLY} update_translations )
endif()
#target_link_libraries(${APP_LIBRARY} ${LIBRARIES})
target_link_libraries(${TARGET_NAME} ${LIBRARIES})
if(WIN32)
target_link_libraries(${TARGET_NAME} wsock32 ws2_32)
endif()
add_dependencies(${APP_LIBRARY} update_translations ${TARGET_NAME}-git-version)
add_dependencies(${TARGET_NAME} ${APP_LIBRARY})
if (UNIX AND NOT APPLE)
# Install desktop/icon files.
configure_file("${ASSETS_DIR}/linphone.desktop.cmake" "${EXECUTABLE_NAME}.desktop" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE_NAME}.desktop"
DESTINATION "${CMAKE_INSTALL_DATADIR}/applications"
)
install(FILES "${ASSETS_DIR}/images/linphone_logo.svg"
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps/"
RENAME "${EXECUTABLE_NAME}.svg"
)
set(ICON_DIRS 16x16 22x22 24x24 32x32 64x64 128x128 256x256)
foreach (DIR ${ICON_DIRS})
install(FILES "${ASSETS_DIR}/icons/hicolor/${DIR}/apps/icon.png"
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/${DIR}/apps/"
RENAME "${EXECUTABLE_NAME}.png"
)
endforeach ()
endif ()
# ------------------------------------------------------------------------------
# CPack settings & RPM.
# ------------------------------------------------------------------------------
set(LINPHONE_DESKTOP_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(LINPHONE_SDK_DIR "${CMAKE_BINARY_DIR}/linphone-sdk")
set(TOOLS_DIR "${CMAKE_BINARY_DIR}/programs")
set(LINPHONE_SOURCE_DIR ${EP_linphone_SOURCE_DIR})
set(LINPHONE_BUILDER_SIGNING_IDENTITY ${LINPHONE_BUILDER_SIGNING_IDENTITY})
set(LINPHONE_SDK_TMP "${CMAKE_CURRENT_BINARY_DIR}/${EXECUTABLE_NAME}-sdk-tmp")
message("LINPHONE_DESKTOP_DIR = ${LINPHONE_DESKTOP_DIR}")
add_subdirectory(build)
add_subdirectory(cmake_builder/linphone_package)
# ------------------------------------------------------------------------------
# To start better integration into IDE.
# ------------------------------------------------------------------------------
source_group(
"Qml" REGULAR_EXPRESSION ".+\.qml$"
)
source_group(
"Js" REGULAR_EXPRESSION ".+\.js$"
)
source_group(
"Svg" REGULAR_EXPRESSION ".+\.svg$"
)
# ------------------------------
# Installation
# ------------------------------
if(APPLE)
target_link_libraries(${TARGET_NAME} "${MINIZIP_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libminizip.dylib")
execute_process(COMMAND install_name_tool -id "@executable_path/../Frameworks/libminizip.dylib" "${MINIZIP_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libminizip.dylib")
elseif(NOT WIN32)
# target_link_libraries(${TARGET_NAME} "${MINIZIP_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/libminizip.so")
endif()

View file

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View file

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

Before

Width:  |  Height:  |  Size: 402 B

After

Width:  |  Height:  |  Size: 402 B

View file

Before

Width:  |  Height:  |  Size: 623 B

After

Width:  |  Height:  |  Size: 623 B

View file

Before

Width:  |  Height:  |  Size: 659 B

After

Width:  |  Height:  |  Size: 659 B

View file

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

Before

Width:  |  Height:  |  Size: 954 B

After

Width:  |  Height:  |  Size: 954 B

View file

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1 KiB

View file

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1 KiB

View file

Before

Width:  |  Height:  |  Size: 1,023 B

After

Width:  |  Height:  |  Size: 1,023 B

View file

Before

Width:  |  Height:  |  Size: 1,016 B

After

Width:  |  Height:  |  Size: 1,016 B

View file

Before

Width:  |  Height:  |  Size: 748 B

After

Width:  |  Height:  |  Size: 748 B

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

Before

Width:  |  Height:  |  Size: 938 B

After

Width:  |  Height:  |  Size: 938 B

View file

Before

Width:  |  Height:  |  Size: 937 B

After

Width:  |  Height:  |  Size: 937 B

View file

Before

Width:  |  Height:  |  Size: 968 B

After

Width:  |  Height:  |  Size: 968 B

View file

Before

Width:  |  Height:  |  Size: 937 B

After

Width:  |  Height:  |  Size: 937 B

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Some files were not shown because too many files have changed in this diff Show more