about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking/instant-messengers/jami
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-01-03 23:55:00 +0000
committerAlyssa Ross <hi@alyssa.is>2022-02-19 11:03:39 +0000
commitf4cf97a04cd5d0b86aa46baec9fb228a8f671c03 (patch)
tree28192415ff39a661d0001563bf81cc93fa25d16d /nixpkgs/pkgs/applications/networking/instant-messengers/jami
parentf8422837c9bde058e8f2de37702e7e94b2226040 (diff)
parent18c84ea816348e2a098390101b92d1e39a9dbd45 (diff)
downloadnixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.gz
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.bz2
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.lz
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.xz
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.zst
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.zip
Merge commit '18c84ea816348e2a098390101b92d1e39a9dbd45'
Conflicts:
	nixpkgs/nixos/modules/misc/documentation.nix
	nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix
	nixpkgs/pkgs/applications/window-managers/sway/default.nix
	nixpkgs/pkgs/build-support/rust/build-rust-package/default.nix
	nixpkgs/pkgs/development/go-modules/generic/default.nix
	nixpkgs/pkgs/development/interpreters/ruby/default.nix
	nixpkgs/pkgs/development/interpreters/ruby/patchsets.nix
	nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix
	nixpkgs/pkgs/development/python-modules/django-mailman3/default.nix
	nixpkgs/pkgs/servers/mail/mailman/web.nix
	nixpkgs/pkgs/top-level/aliases.nix
	nixpkgs/pkgs/top-level/all-packages.nix
	nixpkgs/pkgs/top-level/impure.nix
Diffstat (limited to 'nixpkgs/pkgs/applications/networking/instant-messengers/jami')
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/client-gnome.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/client-qt.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common143
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_linux18
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_x8610
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches6
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches1
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/daemon.nix135
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/libclient-include-path.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/libclient.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/pjproject-src.nix6
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/jami/update.sh50
13 files changed, 594 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/client-gnome.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/client-gnome.nix
new file mode 100644
index 000000000000..8cb748f54059
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/client-gnome.nix
@@ -0,0 +1,64 @@
+{ 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[@]}")
+    # Users that set CLUTTER_BACKEND=wayland in their default environment will
+    # encounter a segfault due to:
+    # https://git.jami.net/savoirfairelinux/jami-client-gnome/-/issues/1100 .
+    qtWrapperArgs+=("--unset" "CLUTTER_BACKEND")
+  '';
+
+  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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/client-qt.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/client-qt.nix
new file mode 100644
index 000000000000..0c952fd1ecad
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common
new file mode 100644
index 000000000000..9376a38b1874
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_common
@@ -0,0 +1,143 @@
+--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=matroska
+--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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_linux b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_linux
new file mode 100644
index 000000000000..6c40e8d2ea99
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_x86 b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_args_x86
new file mode 100644
index 000000000000..2043aa3ee2d3
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches
new file mode 100644
index 000000000000..2422192c09f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/ffmpeg_patches
@@ -0,0 +1,6 @@
+remove-mjpeg-log.patch
+change-RTCP-ratio.patch
+rtp_ext_abs_send_time.patch
+libopusdec-enable-FEC.patch
+libopusenc-enable-FEC.patch
+screen-sharing-x11-fix.patch
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches
new file mode 100644
index 000000000000..5b9579f8f94e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches
@@ -0,0 +1 @@
+0009-add-config-site.patch
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/daemon.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/daemon.nix
new file mode 100644
index 000000000000..a324d061aa73
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/daemon.nix
@@ -0,0 +1,135 @@
+{ src
+, version
+, jami-meta
+, stdenv
+, lib
+, fetchFromGitHub
+, 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" ];
+      meta = old.meta // {
+        # undefined reference to `ff_nlmeans_init_aarch64'
+        broken = stdenv.isAarch64;
+      };
+    });
+
+  pjsip-jami = pjsip.overrideAttrs (old:
+    let
+      src-args = import ./pjproject-src.nix;
+      version = lib.concatStrings (lib.lists.take 7 (lib.stringToCharacters src-args.rev));
+      patch-src = src + "/daemon/contrib/src/pjproject/";
+    in
+    {
+      inherit version;
+
+      src = fetchFromGitHub src-args;
+
+      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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix
new file mode 100644
index 000000000000..5be6e0211788
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, lib
+, callPackage
+, fetchzip
+, jack
+, udev
+, libsForQt5
+}:
+
+rec {
+  version = "20211213.2.37be4c3";
+
+  src = fetchzip {
+    url = "https://dl.jami.net/release/tarballs/jami_${version}.tar.gz";
+    sha256 = "08abswvxwsxh6b0smb4l4cmymsbfiy7473b2sgvghj55w603prsc";
+
+    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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/libclient-include-path.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/libclient-include-path.patch
new file mode 100644
index 000000000000..3ae017eb458b
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/libclient.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/libclient.nix
new file mode 100644
index 000000000000..b5ea7431b915
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/applications/networking/instant-messengers/jami/pjproject-src.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/pjproject-src.nix
new file mode 100644
index 000000000000..76e88d887555
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/pjproject-src.nix
@@ -0,0 +1,6 @@
+{
+  owner = "savoirfairelinux";
+  repo = "pjproject";
+  rev = "e1f389d0b905011e0cb62cbdf7a8b37fc1bcde1a";
+  sha256 = "0inpmyb6mhrzr0g309d6clkc99lddqdvyf9xajz0igvgp9pvgpza";
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/update.sh
new file mode 100755
index 000000000000..10d9bb885c35
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/update.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p coreutils curl gnused common-updater-scripts nix-prefetch
+
+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"
+
+# Update pjsip version
+pjsip_version=$(sed -n -E 's/.*PJPROJECT_VERSION := ([0-9a-f]+).*/\1/p' ${src}/daemon/contrib/src/pjproject/rules.mak)
+nix-prefetch fetchFromGitHub \
+  --owner savoirfairelinux \
+  --repo pjproject \
+  --rev ${pjsip_version} \
+  --output nix > "${jami_dir}/pjproject-src.nix"