From ef9b6b9cd0c63313651b3f905b8abe26967b5006 Mon Sep 17 00:00:00 2001 From: linsui Date: Sun, 24 Oct 2021 22:30:04 +0800 Subject: [PATCH 1/2] ring-daemon: remove --- .../ring-daemon/default.nix | 150 ------------------ .../ring-daemon/notestsapps.patch | 106 ------------- .../ring-daemon/restbed.nix | 38 ----- pkgs/top-level/all-packages.nix | 2 - 4 files changed, 296 deletions(-) delete mode 100644 pkgs/applications/networking/instant-messengers/ring-daemon/default.nix delete mode 100644 pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch delete mode 100644 pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix diff --git a/pkgs/applications/networking/instant-messengers/ring-daemon/default.nix b/pkgs/applications/networking/instant-messengers/ring-daemon/default.nix deleted file mode 100644 index 94e0dc9c8c2f..000000000000 --- a/pkgs/applications/networking/instant-messengers/ring-daemon/default.nix +++ /dev/null @@ -1,150 +0,0 @@ -{ lib, stdenv -, fetchgit -, which -, autoreconfHook -, pkg-config -, automake -, libtool -, pjsip -, libyamlcpp -, alsa-lib -, libpulseaudio -, libsamplerate -, libsndfile -, dbus -, dbus_cplusplus -, ffmpeg_3 -, udev -, pcre -, gsm -, speex -, boost -, opendht -, msgpack -, gnutls -, zlib -, jsoncpp -, xorg -, libargon2 -, cryptopp -, openssl -, perl -, python3 -, libupnp -, speexdsp -, fetchFromGitHub -, cmake -, asio -}: - -let - myPython = python3.withPackages (ps: with ps; [ - pygobject3 - dbus-python - ]); - - src = fetchgit { - url = "https://gitlab.savoirfairelinux.com/ring/ring-daemon.git"; - rev = "006b8dc7be08fe9beb68709af71004e7bc1ceb5c"; - sha256 = "0ih9g0rismrhx6nqcy3jqfbcs166grg0shnfmrnmykl9h0xy8z47"; - }; - - patchdir = "${src}/contrib/src"; - - restbed = import ./restbed.nix { - inherit stdenv lib fetchFromGitHub cmake asio openssl; - patches = [ - "${patchdir}/restbed/CMakeLists.patch" - "${patchdir}/restbed/strand.patch" - "${patchdir}/restbed/uri_cpp.patch" - "${patchdir}/restbed/dns-resolution-error.patch" - "${patchdir}/restbed/string.patch" - ]; - }; - - pjsip' = lib.overrideDerivation pjsip (old: { - patches = [ - "${patchdir}/pjproject/gnutls.patch" - ./notestsapps.patch # this one had to be modified - "${patchdir}/pjproject/fix_base64.patch" - "${patchdir}/pjproject/ipv6.patch" - "${patchdir}/pjproject/ice_config.patch" - "${patchdir}/pjproject/multiple_listeners.patch" - "${patchdir}/pjproject/pj_ice_sess.patch" - "${patchdir}/pjproject/fix_turn_fallback.patch" - "${patchdir}/pjproject/fix_ioqueue_ipv6_sendto.patch" - "${patchdir}/pjproject/add_dtls_transport.patch" - ]; - CFLAGS = "-g -DPJ_ICE_MAX_CAND=256 -DPJ_ICE_MAX_CHECKS=150 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000"; - }); -in -stdenv.mkDerivation { - pname = "ring-daemon"; - version = "2017-07-11"; - - inherit src; - - nativeBuildInputs = [ - which - autoreconfHook - automake - libtool - pkg-config - ]; - - buildInputs = [ - pjsip' - libyamlcpp - alsa-lib - libpulseaudio - libsamplerate - libsndfile - dbus - dbus_cplusplus - ffmpeg_3 - udev - pcre - gsm - speex - boost - opendht - msgpack - gnutls - zlib - jsoncpp - restbed - xorg.libX11 - libargon2 - cryptopp - openssl - perl - libupnp - speexdsp - ]; - - postInstall = '' - mkdir $out/bin - ln -s $out/lib/ring/dring $out/bin/dring - cp -R ./tools/dringctrl/ $out/ - substitute ./tools/dringctrl/dringctrl.py $out/dringctrl/dringctrl.py \ - --replace '#!/usr/bin/env python3' "#!${myPython}/bin/python3" - chmod +x $out/dringctrl/dringctrl.py - ln -s $out/dringctrl/dringctrl.py $out/bin/dringctrl.py - ''; - - meta = with lib; { - description = "A Voice-over-IP software phone"; - longDescription = '' - As the SIP/audio daemon and the user interface are separate processes, it - is easy to provide different user interfaces. GNU Ring comes with various - graphical user interfaces and even scripts to control the daemon from the - shell. - ''; - homepage = "https://ring.cx"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ taeer olynch ]; - platforms = platforms.linux; - # pjsip' fails to compile with the supplied patch set, see: https://hydra.nixos.org/build/68667921/nixlog/4 - broken = true; - }; -} diff --git a/pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch b/pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch deleted file mode 100644 index 842060935b04..000000000000 --- a/pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch +++ /dev/null @@ -1,106 +0,0 @@ -/* diff --git a/Makefile b/Makefile */ -/* index 33a4e6b..a486eb7 100644 */ -/* --- a/Makefile */ -/* +++ b/Makefile */ -/* @@ -4,7 +4,7 @@ include build/host-$(HOST_NAME).mak */ -/* include version.mak */ - -/* LIB_DIRS = pjlib/build pjlib-util/build pjnath/build third_party/build pjmedia/build pjsip/build */ -/* -DIRS = $(LIB_DIRS) pjsip-apps/build $(EXTRA_DIRS) */ -/* +DIRS = $(LIB_DIRS) $(EXTRA_DIRS) */ - -/* ifdef MINSIZE */ -/* MAKE_FLAGS := MINSIZE=1 */ -diff --git a/pjlib-util/build/Makefile b/pjlib-util/build/Makefile -index cb601cb..862a78a 100644 ---- a/pjlib-util/build/Makefile -+++ b/pjlib-util/build/Makefile -@@ -54,7 +54,6 @@ export UTIL_TEST_OBJS += xml.o encryption.o stun.o resolver_test.o test.o \ - export UTIL_TEST_CFLAGS += $(_CFLAGS) - export UTIL_TEST_CXXFLAGS += $(_CXXFLAGS) - export UTIL_TEST_LDFLAGS += $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS) --export UTIL_TEST_EXE:=pjlib-util-test-$(TARGET_NAME)$(HOST_EXE) - - - export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT -diff --git a/pjlib/build/Makefile b/pjlib/build/Makefile -index 1e64950..a75fa65 100644 ---- a/pjlib/build/Makefile -+++ b/pjlib/build/Makefile -@@ -56,7 +56,6 @@ export TEST_OBJS += activesock.o atomic.o echo_clt.o errno.o exception.o \ - export TEST_CFLAGS += $(_CFLAGS) - export TEST_CXXFLAGS += $(_CXXFLAGS) - export TEST_LDFLAGS += $(PJLIB_LDLIB) $(_LDFLAGS) --export TEST_EXE := pjlib-test-$(TARGET_NAME)$(HOST_EXE) - - - export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT -diff --git a/pjmedia/build/Makefile b/pjmedia/build/Makefile -index 8012cb7..2ca283a 100644 ---- a/pjmedia/build/Makefile -+++ b/pjmedia/build/Makefile -@@ -165,7 +165,6 @@ export PJMEDIA_TEST_LDFLAGS += $(PJMEDIA_CODEC_LDLIB) \ - $(PJLIB_UTIL_LDLIB) \ - $(PJNATH_LDLIB) \ - $(_LDFLAGS) --export PJMEDIA_TEST_EXE:=pjmedia-test-$(TARGET_NAME)$(HOST_EXE) - - - export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT -diff --git a/pjnath/build/Makefile b/pjnath/build/Makefile -index 1bc08b5..109f79b 100644 ---- a/pjnath/build/Makefile -+++ b/pjnath/build/Makefile -@@ -54,7 +54,6 @@ export PJNATH_TEST_OBJS += ice_test.o stun.o sess_auth.o server.o concur_test.o - export PJNATH_TEST_CFLAGS += $(_CFLAGS) - export PJNATH_TEST_CXXFLAGS += $(_CXXFLAGS) - export PJNATH_TEST_LDFLAGS += $(PJNATH_LDLIB) $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS) --export PJNATH_TEST_EXE:=pjnath-test-$(TARGET_NAME)$(HOST_EXE) - - - ############################################################################### -@@ -65,7 +64,6 @@ export PJTURN_CLIENT_OBJS += client_main.o - export PJTURN_CLIENT_CFLAGS += $(_CFLAGS) - export PJTURN_CLIENT_CXXFLAGS += $(_CXXFLAGS) - export PJTURN_CLIENT_LDFLAGS += $(PJNATH_LDLIB) $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS) --export PJTURN_CLIENT_EXE:=pjturn-client-$(TARGET_NAME)$(HOST_EXE) - - ############################################################################### - # Defines for building TURN server application -@@ -76,7 +74,6 @@ export PJTURN_SRV_OBJS += allocation.o auth.o listener_udp.o \ - export PJTURN_SRV_CFLAGS += $(_CFLAGS) - export PJTURN_SRV_CXXFLAGS += $(_CXXFLAGS) - export PJTURN_SRV_LDFLAGS += $(PJNATH_LDLIB) $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS) --export PJTURN_SRV_EXE:=pjturn-srv-$(TARGET_NAME)$(HOST_EXE) - - - -diff --git a/pjsip/build/Makefile b/pjsip/build/Makefile -index d2a5c2a..7e2ec60 100644 ---- a/pjsip/build/Makefile -+++ b/pjsip/build/Makefile -@@ -140,7 +140,7 @@ export PJSUA2_LIB_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \ - account.o endpoint.o json.o persistent.o types.o \ - siptypes.o call.o presence.o media.o - export PJSUA2_LIB_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS) --export PJSUA2_LIB_CXXFLAGS = $(PJSUA2_LIB_CFLAGS) -+export PJSUA2_LIB_CXXFLAGS = $(_CXXFLAGS) $(PJ_VIDEO_CFLAGS) - export PJSUA2_LIB_LDFLAGS += $(PJSUA_LIB_LDLIB) \ - $(PJSIP_UA_LDLIB) \ - $(PJSIP_SIMPLE_LDLIB) \ -@@ -165,7 +165,6 @@ export PJSUA2_TEST_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \ - export PJSUA2_TEST_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS) - export PJSUA2_TEST_CXXFLAGS = $(PJSUA2_LIB_CFLAGS) - export PJSUA2_TEST_LDFLAGS += $(PJ_LDXXFLAGS) $(PJ_LDXXLIBS) $(LDFLAGS) --export PJSUA2_TEST_EXE := pjsua2-test-$(TARGET_NAME)$(HOST_EXE) - - export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT - -@@ -195,7 +194,6 @@ export TEST_LDFLAGS += $(PJSIP_LDLIB) \ - $(PJLIB_UTIL_LDLIB) \ - $(PJNATH_LDLIB) \ - $(_LDFLAGS) --export TEST_EXE := pjsip-test-$(TARGET_NAME)$(HOST_EXE) - - - export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT diff --git a/pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix b/pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix deleted file mode 100644 index e2cdb1f05b0e..000000000000 --- a/pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ lib, stdenv -, fetchFromGitHub -, cmake -, asio -, openssl -, patches -}: - -stdenv.mkDerivation { - pname = "restbed"; - version = "2016-09-15"; - - src = fetchFromGitHub { - owner = "Corvusoft"; - repo = "restbed"; - rev = "34187502642144ab9f749ab40f5cdbd8cb17a54a"; - sha256 = "1jb38331fcicyiisqdprhq6zwfc6g518fm3l4qw9aiv5k9nqim22"; - }; - - inherit patches; - - nativeBuildInputs = [ cmake ]; - buildInputs = [ asio openssl ]; - - meta = with lib; { - description = "HTTP framework for building networked applications"; - longDescription = '' - HTTP framework for building networked applications that require seamless - and secure communication, with the flexability to model a range of - business processes. Targeting mobile, tablet, desktop, and embedded - production environments. - ''; - homepage = "https://corvusoft.co.uk/"; - license = licenses.agpl3; - maintainers = with maintainers; [ taeer ]; - platforms = platforms.linux; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6bd2c55fc7e3..f8d9d3c12ccd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3477,8 +3477,6 @@ with pkgs; replay-sorcery = callPackage ../tools/video/replay-sorcery { }; - ring-daemon = callPackage ../applications/networking/instant-messengers/ring-daemon { }; - ripasso-cursive = callPackage ../tools/security/ripasso/cursive.nix { inherit (darwin.apple_sdk.frameworks) AppKit Security; }; From 6c7a6bf895f86eb2ef263a42b0ef99ff6482098c Mon Sep 17 00:00:00 2001 From: linsui Date: Mon, 25 Oct 2021 00:25:19 +0800 Subject: [PATCH 2/2] jami: init 20211005.2.251ac7d Co-authored-by: doronbehar --- .../instant-messengers/jami/client-gnome.nix | 60 ++++++++ .../instant-messengers/jami/client-qt.nix | 59 ++++++++ .../jami/config/ffmpeg_args_common | 142 ++++++++++++++++++ .../jami/config/ffmpeg_args_linux | 18 +++ .../jami/config/ffmpeg_args_x86 | 10 ++ .../jami/config/ffmpeg_patches | 5 + .../jami/config/pjsip_patches | 20 +++ .../instant-messengers/jami/daemon.nix | 123 +++++++++++++++ .../instant-messengers/jami/default.nix | 41 +++++ .../jami/libclient-include-path.patch | 13 ++ .../instant-messengers/jami/libclient.nix | 48 ++++++ .../instant-messengers/jami/update.sh | 42 ++++++ pkgs/top-level/all-packages.nix | 7 + 13 files changed, 588 insertions(+) create mode 100644 pkgs/applications/networking/instant-messengers/jami/client-gnome.nix create mode 100644 pkgs/applications/networking/instant-messengers/jami/client-qt.nix create mode 100644 pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common create mode 100644 pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_linux create mode 100644 pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_x86 create mode 100644 pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches create mode 100644 pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches create mode 100644 pkgs/applications/networking/instant-messengers/jami/daemon.nix create mode 100644 pkgs/applications/networking/instant-messengers/jami/default.nix create mode 100644 pkgs/applications/networking/instant-messengers/jami/libclient-include-path.patch create mode 100644 pkgs/applications/networking/instant-messengers/jami/libclient.nix create mode 100755 pkgs/applications/networking/instant-messengers/jami/update.sh diff --git a/pkgs/applications/networking/instant-messengers/jami/client-gnome.nix b/pkgs/applications/networking/instant-messengers/jami/client-gnome.nix new file mode 100644 index 000000000000..019ffb468d27 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/client-gnome.nix @@ -0,0 +1,60 @@ +{ version +, src +, jami-meta +, stdenv +, lib +, pkg-config +, cmake +, wrapQtAppsHook +, wrapGAppsHook +, gtk3-x11 +, networkmanager # for libnm +, libayatana-appindicator +, libnotify +, clutter-gtk +, libcanberra-gtk3 +, webkitgtk +, qrencode +, jami-libclient +, qttools +}: + +stdenv.mkDerivation { + pname = "jami-client-gnome"; + inherit version src; + + sourceRoot = "source/client-gnome"; + + preConfigure = '' + echo ${version} > version.txt + ''; + + nativeBuildInputs = [ + pkg-config + cmake + wrapGAppsHook + wrapQtAppsHook + ]; + # To spare double wrapping + dontWrapGApps = true; + preFixup = '' + qtWrapperArgs+=("''${gappsWrapperArgs[@]}") + ''; + + buildInputs = [ + qttools + jami-libclient + gtk3-x11 + networkmanager + libayatana-appindicator + libnotify + clutter-gtk + libcanberra-gtk3 + webkitgtk + qrencode + ]; + + meta = jami-meta // { + description = "The client based on GTK" + jami-meta.description; + }; +} diff --git a/pkgs/applications/networking/instant-messengers/jami/client-qt.nix b/pkgs/applications/networking/instant-messengers/jami/client-qt.nix new file mode 100644 index 000000000000..0c952fd1ecad --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/client-qt.nix @@ -0,0 +1,59 @@ +{ version +, src +, jami-meta +, mkDerivation +, lib +, pkg-config +, cmake +, networkmanager # for libnm +, python3 +, qttools # for translations +, wrapQtAppsHook +, libnotify +, qrencode +, qtwebengine +, qtdeclarative +, qtquickcontrols2 +, qtmultimedia +, qtsvg +, qtwebchannel +, qtgraphicaleffects # no gui without this +, jami-libclient +}: + +mkDerivation { + pname = "jami-client-qt"; + inherit version src; + + sourceRoot = "source/client-qt"; + + preConfigure = '' + python gen-resources.py + echo 'const char VERSION_STRING[] = "${version}";' > src/version.h + ''; + + nativeBuildInputs = [ + pkg-config + cmake + python3 + qttools + ]; + + buildInputs = [ + jami-libclient + networkmanager + libnotify + qrencode + qtwebengine + qtdeclarative + qtquickcontrols2 + qtmultimedia + qtsvg + qtwebchannel + qtgraphicaleffects + ]; + + meta = jami-meta // { + description = "The client based on QT" + jami-meta.description; + }; +} diff --git a/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common new file mode 100644 index 000000000000..b611885a6117 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common @@ -0,0 +1,142 @@ +--disable-everything +--enable-zlib +--enable-gpl +--enable-swscale +--enable-bsfs +--disable-filters +--disable-programs +--disable-postproc +--disable-protocols +--enable-protocol=crypto +--enable-protocol=file +--enable-protocol=rtp +--enable-protocol=srtp +--enable-protocol=tcp +--enable-protocol=udp +--enable-protocol=unix +--enable-protocol=pipe +--disable-demuxers +--disable-muxers +--enable-muxer=rtp +--enable-muxer=g722 +--enable-muxer=h263 +--enable-muxer=h264 +--enable-muxer=hevc +--enable-muxer=webm +--enable-muxer=ogg +--enable-muxer=pcm_s16be +--enable-muxer=pcm_s16le +--enable-demuxer=rtp +--enable-demuxer=mjpeg +--enable-demuxer=mjpeg_2000 +--enable-demuxer=mpegvideo +--enable-demuxer=gif +--enable-demuxer=image_jpeg_pipe +--enable-demuxer=image_png_pipe +--enable-demuxer=image_webp_pipe +--enable-demuxer=matroska +--enable-demuxer=m4v +--enable-demuxer=mp3 +--enable-demuxer=ogg +--enable-demuxer=flac +--enable-demuxer=wav +--enable-demuxer=ac3 +--enable-demuxer=g722 +--enable-demuxer=pcm_mulaw +--enable-demuxer=pcm_alaw +--enable-demuxer=pcm_s16be +--enable-demuxer=pcm_s16le +--enable-demuxer=h263 +--enable-demuxer=h264 +--enable-demuxer=hevc +--enable-parser=h263 +--enable-parser=h264 +--enable-parser=hevc +--enable-parser=mpeg4video +--enable-parser=vp8 +--enable-parser=vp9 +--enable-parser=opus +--enable-encoder=adpcm_g722 +--enable-decoder=adpcm_g722 +--enable-encoder=rawvideo +--enable-decoder=rawvideo +--enable-encoder=libx264 +--enable-decoder=h264 +--enable-encoder=pcm_alaw +--enable-decoder=pcm_alaw +--enable-encoder=pcm_mulaw +--enable-decoder=pcm_mulaw +--enable-encoder=mpeg4 +--enable-decoder=mpeg4 +--enable-encoder=libvpx_vp8 +--enable-decoder=vp8 +--enable-decoder=vp9 +--enable-encoder=h263 +--enable-encoder=h263p +--enable-decoder=h263 +--enable-encoder=mjpeg +--enable-decoder=mjpeg +--enable-decoder=mjpegb +--enable-libspeex +--enable-libopus +--enable-libvpx +--enable-libx264 +--enable-encoder=libspeex +--enable-decoder=libspeex +--enable-encoder=libopus +--enable-decoder=libopus +--enable-decoder=flac +--enable-decoder=vorbis +--enable-decoder=aac +--enable-decoder=ac3 +--enable-decoder=eac3 +--enable-decoder=mp3 +--enable-decoder=pcm_u24be +--enable-decoder=pcm_u24le +--enable-decoder=pcm_u32be +--enable-decoder=pcm_u32le +--enable-decoder=pcm_u8 +--enable-decoder=pcm_f16le +--enable-decoder=pcm_f24le +--enable-decoder=pcm_f32be +--enable-decoder=pcm_f32le +--enable-decoder=pcm_f64be +--enable-decoder=pcm_f64le +--enable-decoder=pcm_s16be +--enable-decoder=pcm_s16be_planar +--enable-decoder=pcm_s16le +--enable-decoder=pcm_s16le_planar +--enable-decoder=pcm_s24be +--enable-decoder=pcm_s24le +--enable-decoder=pcm_s24le_planar +--enable-decoder=pcm_s32be +--enable-decoder=pcm_s32le +--enable-decoder=pcm_s32le_planar +--enable-decoder=pcm_s64be +--enable-decoder=pcm_s64le +--enable-decoder=pcm_s8 +--enable-decoder=pcm_s8_planar +--enable-decoder=pcm_u16be +--enable-decoder=pcm_u16le +--enable-encoder=gif +--enable-decoder=gif +--enable-encoder=jpegls +--enable-decoder=jpegls +--enable-encoder=ljpeg +--enable-decoder=jpeg2000 +--enable-encoder=png +--enable-decoder=png +--enable-encoder=bmp +--enable-decoder=bmp +--enable-encoder=tiff +--enable-decoder=tiff +--enable-filter=scale +--enable-filter=overlay +--enable-filter=amix +--enable-filter=amerge +--enable-filter=aresample +--enable-filter=format +--enable-filter=aformat +--enable-filter=fps +--enable-filter=transpose +--enable-filter=pad diff --git a/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_linux b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_linux new file mode 100644 index 000000000000..6c40e8d2ea99 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_linux @@ -0,0 +1,18 @@ +--enable-pic +--target-os=linux +--enable-indev=v4l2 +--enable-indev=xcbgrab +--enable-vdpau +--enable-hwaccel=h264_vdpau +--enable-hwaccel=mpeg4_vdpau +--enable-vaapi +--enable-hwaccel=h264_vaapi +--enable-hwaccel=mpeg4_vaapi +--enable-hwaccel=h263_vaapi +--enable-hwaccel=vp8_vaapi +--enable-hwaccel=mjpeg_vaapi +--enable-hwaccel=hevc_vaapi +--enable-encoder=h264_vaapi +--enable-encoder=vp8_vaapi +--enable-encoder=mjpeg_vaapi +--enable-encoder=hevc_vaapi diff --git a/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_x86 b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_x86 new file mode 100644 index 000000000000..2043aa3ee2d3 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_x86 @@ -0,0 +1,10 @@ +--enable-cuvid +--enable-ffnvcodec +--enable-nvdec +--enable-nvenc +--enable-hwaccel=h264_nvdec +--enable-hwaccel=hevc_nvdec +--enable-hwaccel=vp8_nvdec +--enable-hwaccel=mjpeg_nvdec +--enable-encoder=h264_nvenc +--enable-encoder=hevc_nvenc diff --git a/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches new file mode 100644 index 000000000000..127e5b18f776 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches @@ -0,0 +1,5 @@ +remove-mjpeg-log.patch +change-RTCP-ratio.patch +rtp_ext_abs_send_time.patch +libopusdec-enable-FEC.patch +libopusenc-enable-FEC.patch diff --git a/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches b/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches new file mode 100644 index 000000000000..2e106289a962 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches @@ -0,0 +1,20 @@ +0001-rfc6544.patch +0002-rfc2466.patch +0003-add-tcp-keep-alive.patch +0004-multiple_listeners.patch +0005-fix_ebusy_turn.patch +0006-ignore_ipv6_on_transport_check.patch +0007-upnp-srflx-nat-assisted-cand.patch +0008-fix_ioqueue_ipv6_sendto.patch +0009-add-config-site.patch +0010-fix-tcp-death-detection.patch +0011-fix-turn-shutdown-crash.patch +0012-ignore-down-interfaces.patch +0013-ignore-addresses-for-RFC7335.patch +0014-fix-socket-leak.patch +0015-fix-socktype-and-duplicate-checking.patch +0016-use-larger-Ta-interval.patch +0017-auto-register-thread.patch +0018-fix-ioqueue-lock-acquire.patch +0019-resort-check-list-after-adding-prflx.patch +0020-avoid-immediate-nominating-triggered-check.patch diff --git a/pkgs/applications/networking/instant-messengers/jami/daemon.nix b/pkgs/applications/networking/instant-messengers/jami/daemon.nix new file mode 100644 index 000000000000..456ca85ed12c --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/daemon.nix @@ -0,0 +1,123 @@ +{ src +, version +, jami-meta +, stdenv +, lib +, autoreconfHook +, pkg-config +, perl # for pod2man +, ffmpeg +, pjsip +, alsa-lib +, asio +, dbus +, dbus_cplusplus +, fmt +, gmp +, libarchive +, libgit2 +, libnatpmp +, secp256k1 +, openssl +, opendht +, speex +, webrtc-audio-processing +, jsoncpp +, gnutls +, zlib +, libyamlcpp +, libpulseaudio +, jack +, udev +, libupnp +, msgpack +, restinio +, http-parser +}: + +let + readLinesToList = with builtins; file: filter (s: isString s && stringLength s > 0) (split "\n" (readFile file)); + + ffmpeg-jami = ffmpeg.overrideAttrs (old: + let + patch-src = src + "/daemon/contrib/src/ffmpeg/"; + in + { + patches = old.patches ++ (map (x: patch-src + x) (readLinesToList ./config/ffmpeg_patches)); + configureFlags = old.configureFlags + ++ (readLinesToList ./config/ffmpeg_args_common) + ++ lib.optionals stdenv.isLinux (readLinesToList ./config/ffmpeg_args_linux) + ++ lib.optionals (stdenv.isx86_32 || stdenv.isx86_64) (readLinesToList ./config/ffmpeg_args_x86); + outputs = [ "out" "doc" ]; + }); + + pjsip-jami = pjsip.overrideAttrs (old: + let + patch-src = src + "/daemon/contrib/src/pjproject/"; + in + { + patches = old.patches ++ (map (x: patch-src + x) (readLinesToList ./config/pjsip_patches)); + }); + + opendht-jami = opendht.override { + enableProxyServerAndClient = true; + enablePushNotifications = true; + }; + +in stdenv.mkDerivation { + pname = "jami-daemon"; + inherit src version; + sourceRoot = "source/daemon"; + + nativeBuildInputs = [ + autoreconfHook + pkg-config + perl + ]; + + buildInputs = [ + alsa-lib + asio + dbus + dbus_cplusplus + fmt + ffmpeg-jami + gmp + gnutls + libarchive + libgit2 + libnatpmp + opendht-jami + pjsip-jami + secp256k1 + openssl + speex + webrtc-audio-processing + zlib + libyamlcpp + jsoncpp + libpulseaudio + jack + opendht + libupnp + udev + msgpack + restinio + http-parser + ]; + + doCheck = false; # The tests fail to compile due to missing headers. + + enableParallelBuilding = true; + + passthru = { + updateScript = ./update.sh; + ffmpeg = ffmpeg-jami; + pjsip = pjsip-jami; + opendht = opendht-jami; + }; + + meta = jami-meta // { + description = "The daemon" + jami-meta.description; + }; +} diff --git a/pkgs/applications/networking/instant-messengers/jami/default.nix b/pkgs/applications/networking/instant-messengers/jami/default.nix new file mode 100644 index 000000000000..ee9762a8f032 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/default.nix @@ -0,0 +1,41 @@ +{ stdenv +, lib +, callPackage +, fetchzip +, jack +, udev +, libsForQt5 +}: + +rec { + version = "20211005.2.251ac7d"; + + src = fetchzip { + url = "https://dl.jami.net/release/tarballs/jami_${version}.tar.gz"; + sha256 = "12ppbwhnk5zajb73szd04sz80bp17q577bkb9j8p45apvq201db3"; + + stripRoot = false; + extraPostFetch = '' + cd $out + mv ring-project/* ./ + rm -r ring-project.rst ring-project client-android client-ios client-macosx client-uwp + rm daemon/contrib/tarballs/* + ''; + }; + + jami-meta = with lib; { + homepage = "https://jami.net/"; + description = " for Jami, the free and universal communication platform that respects the privacy and freedoms of its users"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = [ maintainers.linsui ]; + }; + + jami-daemon = callPackage ./daemon.nix { inherit version src udev jack jami-meta; }; + + jami-libclient = libsForQt5.callPackage ./libclient.nix { inherit version src jami-meta; }; + + jami-client-gnome = libsForQt5.callPackage ./client-gnome.nix { inherit version src jami-meta; }; + + jami-client-qt = libsForQt5.callPackage ./client-qt.nix { inherit version src jami-meta; }; +} diff --git a/pkgs/applications/networking/instant-messengers/jami/libclient-include-path.patch b/pkgs/applications/networking/instant-messengers/jami/libclient-include-path.patch new file mode 100644 index 000000000000..3ae017eb458b --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/libclient-include-path.patch @@ -0,0 +1,13 @@ +diff --git i/CMakeLists.txt w/CMakeLists.txt +index 0ee77dba..767e19df 100644 +--- i/CMakeLists.txt ++++ w/CMakeLists.txt +@@ -635,7 +635,7 @@ if(ENABLE_SHARED) + ) + endif() + +-SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include) ++SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_FULL_INCLUDEDIR}) + + INSTALL( FILES ${libringclient_LIB_HDRS} ${libringclient_extra_LIB_HDRS} + DESTINATION ${INCLUDE_INSTALL_DIR}/libringclient diff --git a/pkgs/applications/networking/instant-messengers/jami/libclient.nix b/pkgs/applications/networking/instant-messengers/jami/libclient.nix new file mode 100644 index 000000000000..b5ea7431b915 --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/libclient.nix @@ -0,0 +1,48 @@ +{ version +, src +, jami-meta +, stdenv +, lib +, pkg-config +, cmake +, qtbase +, jami-daemon +}: + +stdenv.mkDerivation { + pname = "jami-libclient"; + inherit version src; + + sourceRoot = "source/lrc"; + + nativeBuildInputs = [ + cmake + pkg-config + ]; + + buildInputs = [ + jami-daemon + ]; + + patches = [ + # Fix path to include dir when using split outputs + ./libclient-include-path.patch + ]; + + propagatedBuildInputs = [ + qtbase + ]; + outputs = [ "out" "dev" ]; + + cmakeFlags = [ + "-DRING_BUILD_DIR=${jami-daemon}/include" + "-DRING_XML_INTERFACES_DIR=${jami-daemon}/share/dbus-1/interfaces" + ]; + + dontWrapQtApps = true; + + meta = jami-meta // { + description = "The client library" + jami-meta.description; + license = lib.licenses.lgpl21Plus; + }; +} diff --git a/pkgs/applications/networking/instant-messengers/jami/update.sh b/pkgs/applications/networking/instant-messengers/jami/update.sh new file mode 100755 index 000000000000..22233a81bf8d --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/jami/update.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p coreutils curl gnused common-updater-scripts + +set -e + +jami_dir="$( dirname "${BASH_SOURCE[0]}" )" + +# Update src version and hash +version=$(curl -s 'https://dl.jami.net/release/tarballs/?C=M;O=D' | sed -n -E 's/^.*jami_([0-9.a-f]+)\.tar\.gz.*$/\1/p' | head -n 1) +update-source-version jami-libclient "$version" --file=pkgs/applications/networking/instant-messengers/jami/default.nix + +src=$(nix-build --no-out-link -A jami-libclient.src) + +config_dir="$jami_dir/config" +mkdir -p $config_dir + +ffmpeg_rules="${src}/daemon/contrib/src/ffmpeg/rules.mak" + +# Update FFmpeg patches +ffmpeg_patches=$(sed -n '/.sum-ffmpeg:/,/HAVE_IOS/p' ${ffmpeg_rules} | sed -n -E 's/.*ffmpeg\/(.*patch).*/\1/p') +echo -e "Patches for FFmpeg:\n${ffmpeg_patches}\n" +echo "${ffmpeg_patches}" > "$config_dir/ffmpeg_patches" + +# Update FFmpeg args +ffmpeg_args_common=$(sed -n '/#disable everything/,/#platform specific options/p' ${ffmpeg_rules} | sed -n -E 's/.*(--[0-9a-z=_-]+).*/\1/p') +echo -e "Common args for FFmpeg:\n${ffmpeg_args_common}\n" +echo "${ffmpeg_args_common}" > "$config_dir/ffmpeg_args_common" + +ffmpeg_args_linux1=$(sed -n '/ifdef HAVE_LINUX/,/ifdef HAVE_ANDROID/p' ${ffmpeg_rules} | sed -n -E 's/.*(--[0-9a-z=_-]+).*/\1/p') +ffmpeg_args_linux2=$(sed -n '/# Desktop Linux/,/i386 x86_64/p' ${ffmpeg_rules} | sed -n -E 's/.*(--[0-9a-z=_-]+).*/\1/p') +echo -e "Linux args for FFmpeg:\n${ffmpeg_args_linux1}\n${ffmpeg_args_linux2}\n" +echo "${ffmpeg_args_linux1}" > "$config_dir/ffmpeg_args_linux" +echo "${ffmpeg_args_linux2}" >> "$config_dir/ffmpeg_args_linux" + +ffmpeg_args_x86=$(sed -n '/i386 x86_64/,/# End Desktop Linux:/p' ${ffmpeg_rules} | sed -n -E 's/.*(--[0-9a-z=_-]+).*/\1/p') +echo -e "x86 args for FFmpeg:\n${ffmpeg_args_x86}\n" +echo "${ffmpeg_args_x86}" > "$config_dir/ffmpeg_args_x86" + +# Update pjsip patches +pjsip_patches=$(sed -n '/UNPACK/,/HAVE_ANDROID/p' ${src}/daemon/contrib/src/pjproject/rules.mak | sed -n -E 's/.*pjproject\/(00.*patch).*/\1/p') +echo -e "Patches for pjsip:\n${pjsip_patches}\n" +echo "${pjsip_patches}" > "$config_dir/pjsip_patches" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f8d9d3c12ccd..9752d3aa1bf3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -33173,6 +33173,13 @@ with pkgs; btcdeb = callPackage ../applications/blockchains/btcdeb { }; + inherit (callPackage ../applications/networking/instant-messengers/jami { + # TODO: remove once `udev` is `systemdMinimal` everywhere. + udev = systemdMinimal; + jack = libjack2; + }) + jami-daemon jami-libclient jami-client-gnome jami-client-qt; + jitsi-meet-electron = callPackage ../applications/networking/instant-messengers/jitsi-meet-electron { electron = electron_13; };