Skip to content

Commit

Permalink
Merge pull request #82939 from jluttine/linphone-4.1.1
Browse files Browse the repository at this point in the history
linphone: 3.12.0 -> unstable-2020-03-06
  • Loading branch information
7c6f434c committed Mar 28, 2020
2 parents 1c8b75a + 86a012b commit 05f0934
Show file tree
Hide file tree
Showing 18 changed files with 758 additions and 170 deletions.
250 changes: 214 additions & 36 deletions pkgs/applications/networking/instant-messengers/linphone/default.nix
@@ -1,61 +1,239 @@
{ stdenv, intltool, pkgconfig, readline, openldap, cyrus_sasl, libupnp
, zlib, libxml2, gtk2, libnotify, speex, ffmpeg, libX11, libsoup, udev
, ortp, mediastreamer, sqlite, belle-sip, libosip, libexosip, bzrtp
, mediastreamer-openh264, bctoolbox, makeWrapper, fetchFromGitHub, cmake
, libmatroska, bcunit, doxygen, gdk-pixbuf, glib, cairo, pango, mbedtls
, python, graphviz, belcard, bcg729
, withGui ? true
{ bcg729
, bctoolbox
, bcunit
, belcard
, belle-sip
, belr
, bzrtp
, cairo
, cmake
, cyrus_sasl
, fetchFromGitLab
, fetchurl
, ffmpeg
, gdk-pixbuf
, glib
, gnused
, graphviz
, gtk2
, intltool
, lib
, libexosip
, liblinphone
, libmatroska
, libnotify
, libosip
, libsoup
, libupnp
, libX11
, libxml2
, makeWrapper
, mbedtls
, mediastreamer
, mediastreamer-openh264
, mkDerivation
, openldap
, ortp
, pango
, pkgconfig
, python
, qtbase
, qtgraphicaleffects
, qtquickcontrols2
, qttranslations
, readline
, speex
, sqlite
, stdenv
, udev
, zlib
# For Minizip 2.2.7:
, fetchFromGitHub
, libbsd
}:
let
# Linphone Desktop requires Minizip 2.2.7. Nixpkgs contains a very old version
# from the time when it was part of zlib. The most recent release of Minizip
# is currently 2.9.2 but Linphone Desktop didn't work with that. So, even if
# we added most recent Minizip version to nixpkgs, probably Minizip 2.2.7 is
# only needed here and we shouldn't add this semi-old version to
# all-packages.nix. Therefore, just define it here locally.
minizip2 = stdenv.mkDerivation rec {
pname = "minizip";
version = "2.2.7";

stdenv.mkDerivation rec {
pname = "linphone";
version = "3.12.0";
disabled = stdenv.isAarch32;

src = fetchFromGitHub {
owner = "BelledonneCommunications";
src = fetchFromGitHub {
owner = "nmoinvaz";
repo = pname;
rev = version;
sha256 = "1a88v1gjlflsd17mlrgxh420rpa38q0d17yh9q8j1zzqfrd1azch";
};

nativeBuildInputs = [ cmake pkgconfig ];

cmakeFlags = [
"-DBUILD_SHARED_LIBS=YES"
];

buildInputs = [
zlib
libbsd # required in 2.2.7 but not in 2.9.2?
];

meta = with stdenv.lib; {
description = "Compression library implementing the deflate compression method found in gzip and PKZIP";
homepage = "https://github.com/nmoinvaz/minizip";
license = licenses.zlib;
platforms = platforms.unix;
};
};
in
mkDerivation rec {
pname = "linphone-desktop";
# Latest release is 4.1.1 old and doesn't build with the latest releases of
# some of the dependencies so let's use the latest commit.
version = "unstable-2020-03-06";

src = fetchFromGitLab {
domain = "gitlab.linphone.org";
owner = "public";
group = "BC";
repo = pname;
rev = version;
sha256 = "0az2ywrpx11sqfb4s4r2v726avcjf4k15bvrqj7xvhz7hdndmh0j";
rev = "971997e162558d37051f89c9c34bbc240135f704";
sha256 = "02ji4r8bpcm2kyisn9d3054m026l33g2574i1ag1cmb2dz2p8i1c";
};

cmakeFlags = stdenv.lib.optional withGui [ "-DENABLE_GTK_UI=ON" ];
# Without this patch, the build fails with:
#
# No rule to make target
# 'minizip_OUTPUT/nix/store/...linphone-desktop.../lib/libminizip.so',
#
# So, the makefile tries to use a full absolute path to the library but does
# it incorrectly. As we have installed Minizip properly, it's sufficient to
# just use "minizip" and the library is found automatically. If this patched
# target_link_libraries line was removed entirely, the build would fail at the
# very end when linking minizip.
patches = [
./fix_minizip_linking.patch
];

# See: https://gitlab.linphone.org/BC/public/linphone-desktop/issues/21
postPatch = ''
touch coreapi/liblinphone_gitversion.h
substituteInPlace src/app/AppController.cpp \
--replace "LINPHONE_QT_GIT_VERSION" "\"${version}\""
'';

# TODO: After linphone-desktop and liblinphone split into separate packages,
# there might be some build inputs here that aren't needed for
# linphone-desktop.
buildInputs = [
readline openldap cyrus_sasl libupnp zlib libxml2 gtk2 libnotify speex ffmpeg libX11
mbedtls libsoup udev ortp mediastreamer sqlite belle-sip libosip libexosip
bctoolbox libmatroska gdk-pixbuf glib cairo pango bzrtp belcard bcg729
bcg729
bctoolbox
belcard
belle-sip
belr
bzrtp
cairo
cyrus_sasl
ffmpeg
gdk-pixbuf
glib
gtk2
libX11
libexosip
liblinphone
libmatroska
libnotify
libosip
libsoup
libupnp
libxml2
mbedtls
mediastreamer
mediastreamer-openh264
minizip2
openldap
ortp
pango
qtbase
qtgraphicaleffects
qtquickcontrols2
qttranslations
readline
speex
sqlite
udev
zlib
];

nativeBuildInputs = [
intltool pkgconfig makeWrapper cmake bcunit doxygen graphviz
(python.withPackages (ps: [ ps.pystache ps.six ]))
bcunit
cmake
gnused
graphviz
intltool
makeWrapper
pkgconfig
];

NIX_CFLAGS_COMPILE = [
"-Wno-error"
"-I${glib.dev}/include/glib-2.0"
"-I${glib.out}/lib/glib-2.0/include"
"-I${gtk2.dev}/include/gtk-2.0/"
"-I${cairo.dev}/include/cairo"
"-I${pango.dev}/include/pango-1.0"
"-I${gtk2}/lib/gtk-2.0/include"
"-DLIBLINPHONE_GIT_VERSION=\"v${version}\""
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
"-DMINIZIP_INCLUDE_DIRS=${minizip2}/include"
"-DMINIZIP_LIBRARIES=minizip"
];

postInstall = ''
for i in $(cd $out/bin && ls); do
wrapProgram $out/bin/$i --set MEDIASTREAMER_PLUGINS_DIR ${mediastreamer-openh264}/lib/mediastreamer/plugins
done
# The default install phase fails because the paths are somehow messed up in
# the makefiles. The errors were like:
#
# CMake Error at cmake_builder/linphone_package/cmake_install.cmake:49 (file):
# file INSTALL cannot find
# "/build/linphone-desktop-.../build/linphone-sdk/desktop//nix/store/.../bin":
# No such file or directory.
#
# If someone is able to figure out how to fix that, great. For now, just
# trying to pick all the relevant files to the output.
#
# Also, the exec path in linphone.desktop file remains invalid, pointing to
# the build directory, after the whole nix build process. So, let's use sed to
# manually fix that path.
#
# In order to find mediastreamer plugins, mediastreamer package was patched to
# support an environment variable pointing to the plugin directory. Set that
# environment variable by wrapping the Linphone executable.
#
# Also, some grammar files needed to be copied too from some dependencies. I
# suppose if one define a dependency in such a way that its share directory is
# found, then this copying would be unnecessary. These missing grammar files
# were discovered when linphone crashed at startup and it was run with
# --verbose flag. Instead of actually copying these files, create symlinks.
#
# It is quite likely that there are some other files still missing and
# Linphone will randomly crash when it tries to access those files. Then,
# those just need to be copied manually below.
installPhase = ''
mkdir -p $out/bin
cp linphone $out/bin/
wrapProgram $out/bin/linphone \
--set MEDIASTREAMER_PLUGINS_DIR \
${mediastreamer-openh264}/lib/mediastreamer/plugins
mkdir -p $out/share/applications
sed -i "s@/build/.*/OUTPUT/bin@$out/bin@" linphone.desktop
cp linphone.desktop $out/share/applications/
cp -r ../assets/icons $out/share/
mkdir -p $out/share/belr/grammars
ln -s ${belcard}/share/belr/grammars/* $out/share/belr/grammars/
ln -s ${liblinphone}/share/belr/grammars/* $out/share/belr/grammars/
mkdir -p $out/share/linphone
ln -s ${liblinphone}/share/linphone/* $out/share/linphone/
'';

meta = with stdenv.lib; {
meta = with lib; {
homepage = https://www.linphone.org/;
description = "Open source SIP phone for voice/video calls and instant messaging";
license = licenses.gpl2Plus;
license = licenses.gpl3;
platforms = platforms.linux;
maintainers = with maintainers; [ jluttine ];
};
}
@@ -0,0 +1,13 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3ee77441..18ea5c27 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -517,7 +517,7 @@ else()
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")
+ target_link_libraries(${TARGET_NAME} "minizip")
endif()
endif()#If (LinphoneCxx_FOUND AND Minizip_FOUND)
endif()#If (LinphoneCxx_FOUND)
32 changes: 22 additions & 10 deletions pkgs/development/libraries/bctoolbox/default.nix
@@ -1,27 +1,39 @@
{ stdenv, fetchFromGitHub, cmake, bcunit, mbedtls }:
{ bcunit
, cmake
, fetchFromGitLab
, mbedtls
, stdenv
}:

stdenv.mkDerivation rec {
pname = "bctoolbox";
version = "0.6.0";
version = "4.3.1";

nativeBuildInputs = [ cmake bcunit ];
buildInputs = [ mbedtls ];

src = fetchFromGitHub {
owner = "BelledonneCommunications";
src = fetchFromGitLab {
domain = "gitlab.linphone.org";
owner = "public";
group = "BC";
repo = pname;
rev = version;
sha256 = "1cxx243wyzkd4xnvpyqf97n0rjhfckpvw1vhwnbwshq3q6fra909";
sha256 = "1y91jcrma4kjqpm6w5ahlygjsyvx7l8zjrjvq7g2n39jmw175cvs";
};

# Do not build static libraries
cmakeFlags = [ "-DENABLE_STATIC=NO" ];

NIX_CFLAGS_COMPILE = [ "-Wno-error=stringop-truncation" ];

meta = {
meta = with stdenv.lib; {
inherit version;
description = "Utilities library for Linphone";
homepage = "https://github.com/BelledonneCommunications/bctoolbox";
license = stdenv.lib.licenses.gpl2Plus ;
maintainers = [stdenv.lib.maintainers.raskin];
platforms = stdenv.lib.platforms.linux;
homepage = "https://gitlab.linphone.org/BC/public/bctoolbox";
# Still using GPLv2 but as the rest of the Linphone projects have switched
# to GPLv3, this might too, so check this when bumping the version number.
license = licenses.gpl2Plus;
maintainers = with maintainers; [ raskin jluttine ];
platforms = platforms.linux;
};
}
32 changes: 21 additions & 11 deletions pkgs/development/libraries/belcard/default.nix
@@ -1,24 +1,34 @@
{ stdenv, cmake, fetchFromGitHub, bctoolbox, belr }:
{ bctoolbox
, belr
, cmake
, fetchFromGitLab
, stdenv
}:

stdenv.mkDerivation rec {
baseName = "belcard";
version = "1.0.2";
name = "${baseName}-${version}";
pname = "belcard";
version = "4.3.1";

src = fetchFromGitHub {
owner = "BelledonneCommunications";
repo = baseName;
src = fetchFromGitLab {
domain = "gitlab.linphone.org";
owner = "public";
group = "BC";
repo = pname;
rev = version;
sha256 = "1pwji83vpsdrfma24rnj3rz1x0a0g6zk3v4xjnip7zf2ys3zcnlk";
sha256 = "1w6rbp53cwxr00clp957458x27cgc2y9ylwa5mp812qva7zadmfw";
};

buildInputs = [ bctoolbox belr ];
nativeBuildInputs = [ cmake ];

meta = with stdenv.lib;{
description = "Belcard is a C++ library to manipulate VCard standard format";
homepage = https://github.com/BelledonneCommunications/belcard;
# Do not build static libraries
cmakeFlags = [ "-DENABLE_STATIC=NO" ];

meta = with stdenv.lib; {
description = "C++ library to manipulate VCard standard format";
homepage = "https://gitlab.linphone.org/BC/public/belcard";
license = licenses.lgpl21;
platforms = platforms.all;
maintainers = with maintainers; [ jluttine ];
};
}

0 comments on commit 05f0934

Please sign in to comment.