about summary refs log tree commit diff
path: root/pkgs/applications/networking/pjsip
diff options
context:
space:
mode:
authorBob van der Linden <bobvanderlinden@gmail.com>2023-03-19 23:41:47 +0100
committerGitHub <noreply@github.com>2023-03-19 23:41:47 +0100
commit27e8a2b86c0f0e7e47a951ea53696a3e166e9cd8 (patch)
tree4ad68df4882ac5822f17baafc85e44c69bed4015 /pkgs/applications/networking/pjsip
parentd84f1532124b3a77e6aa9c4f60cae26e531b399d (diff)
pjsip: add darwin support (#220884)
Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
Diffstat (limited to 'pkgs/applications/networking/pjsip')
-rw-r--r--pkgs/applications/networking/pjsip/default.nix46
1 files changed, 41 insertions, 5 deletions
diff --git a/pkgs/applications/networking/pjsip/default.nix b/pkgs/applications/networking/pjsip/default.nix
index 33747e2d669b2..db76d3f58611c 100644
--- a/pkgs/applications/networking/pjsip/default.nix
+++ b/pkgs/applications/networking/pjsip/default.nix
@@ -7,10 +7,13 @@
 , swig
 , alsa-lib
 , AppKit
+, CoreFoundation
+, Security
 , python3
 , pythonSupport ? true
+, pjsip
+, runCommand
 }:
-
 stdenv.mkDerivation rec {
   pname = "pjsip";
   version = "2.13";
@@ -41,21 +44,23 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ openssl libsamplerate ]
     ++ lib.optional stdenv.isLinux alsa-lib
-    ++ lib.optional stdenv.isDarwin AppKit;
+    ++ lib.optionals stdenv.isDarwin [ AppKit CoreFoundation Security ];
 
   preConfigure = ''
     export LD=$CC
   '';
 
+  NIX_CFLAGS_LINK = lib.optionalString stdenv.isDarwin "-headerpad_max_install_names";
+
   postBuild = lib.optionalString pythonSupport ''
     make -C pjsip-apps/src/swig/python
   '';
 
+  configureFlags = [ "--enable-shared" ];
+
   outputs = [ "out" ]
     ++ lib.optional pythonSupport "py";
 
-  configureFlags = [ "--enable-shared" ];
-
   postInstall = ''
     mkdir -p $out/bin
     cp pjsip-apps/bin/pjsua-* $out/bin/pjsua
@@ -65,13 +70,44 @@ stdenv.mkDerivation rec {
     (cd pjsip-apps/src/swig/python && \
       python setup.py install --prefix=$py
     )
+  '' + lib.optionalString stdenv.isDarwin ''
+    # On MacOS relative paths are used to refer to libraries. All libraries use
+    # a relative path like ../lib/*.dylib or ../../lib/*.dylib. We need to
+    # rewrite these to use absolute ones.
+
+    # First, find all libraries (and their symlinks) in our outputs to define
+    # the install_name_tool -change arguments we should pass.
+    readarray -t libraries < <(
+      for outputName in $(getAllOutputNames); do
+        find "''${!outputName}" \( -name '*.dylib*' -o -name '*.so*' \)
+      done
+    )
+
+    # Determine the install_name_tool -change arguments that are going to be
+    # applied to all libraries.
+    change_args=()
+    for lib in "''${libraries[@]}"; do
+      lib_name="$(basename $lib)"
+      change_args+=(-change ../lib/$lib_name $lib)
+      change_args+=(-change ../../lib/$lib_name $lib)
+    done
+
+    # Rewrite id and library refences for all non-symlinked libraries.
+    for lib in "''${libraries[@]}"; do
+      if [ -f "$lib" ]; then
+        install_name_tool -id $lib "''${change_args[@]}" $lib
+      fi
+    done
   '';
 
   # We need the libgcc_s.so.1 loadable (for pthread_cancel to work)
   dontPatchELF = true;
 
+  passthru.tests.python-pjsua2 = runCommand "python-pjsua2" { } ''
+    ${(python3.withPackages (pkgs: [ pkgs.pjsua2 ])).interpreter} -c "import pjsua2" > $out
+  '';
+
   meta = with lib; {
-    broken = stdenv.isDarwin;
     description = "A multimedia communication library written in C, implementing standard based protocols such as SIP, SDP, RTP, STUN, TURN, and ICE";
     homepage = "https://pjsip.org/";
     license = licenses.gpl2Plus;