biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / applications / networking / pjsip / default.nix
blob124a1d40f3b31ee7aee8ea7efe3f286c74f1e552
1 { lib
2 , testers
3 , stdenv
4 , fetchFromGitHub
5 , openssl
6 , libsamplerate
7 , swig
8 , alsa-lib
9 , AppKit
10 , CoreFoundation
11 , Security
12 , python3
13 , pythonSupport ? true
14 , runCommand
16 stdenv.mkDerivation (finalAttrs: {
17   pname = "pjsip";
18   version = "2.14.1";
20   src = fetchFromGitHub {
21     owner = finalAttrs.pname;
22     repo = "pjproject";
23     rev = "refs/tags/${finalAttrs.version}";
24     hash = "sha256-LDA3o1QMrAxcGuOi/YRoMzXmw/wFkfDs2wweZuIJ2RY=";
25   };
27   patches = [
28     ./fix-aarch64.patch
29   ];
31   nativeBuildInputs =
32     lib.optionals pythonSupport [ swig python3 ];
34   buildInputs = [ openssl libsamplerate ]
35     ++ lib.optional stdenv.isLinux alsa-lib
36     ++ lib.optionals stdenv.isDarwin [ AppKit CoreFoundation Security ];
38   env = lib.optionalAttrs stdenv.cc.isClang {
39     CXXFLAGS = "-std=c++11";
40   } // lib.optionalAttrs stdenv.isDarwin {
41     NIX_CFLAGS_LINK = "-headerpad_max_install_names";
42   };
44   preConfigure = ''
45     export LD=$CC
46   '';
48   postBuild = lib.optionalString pythonSupport ''
49     make -C pjsip-apps/src/swig/python
50   '';
52   configureFlags = [ "--enable-shared" ];
54   outputs = [ "out" ]
55     ++ lib.optional pythonSupport "py";
57   postInstall = ''
58     mkdir -p $out/bin
59     cp pjsip-apps/bin/pjsua-* $out/bin/pjsua
60     mkdir -p $out/share/${finalAttrs.pname}-${finalAttrs.version}/samples
61     cp pjsip-apps/bin/samples/*/* $out/share/${finalAttrs.pname}-${finalAttrs.version}/samples
62   '' + lib.optionalString pythonSupport ''
63     (cd pjsip-apps/src/swig/python && \
64       python setup.py install --prefix=$py
65     )
66   '' + lib.optionalString stdenv.isDarwin ''
67     # On MacOS relative paths are used to refer to libraries. All libraries use
68     # a relative path like ../lib/*.dylib or ../../lib/*.dylib. We need to
69     # rewrite these to use absolute ones.
71     # First, find all libraries (and their symlinks) in our outputs to define
72     # the install_name_tool -change arguments we should pass.
73     readarray -t libraries < <(
74       for outputName in $(getAllOutputNames); do
75         find "''${!outputName}" \( -name '*.dylib*' -o -name '*.so*' \)
76       done
77     )
79     # Determine the install_name_tool -change arguments that are going to be
80     # applied to all libraries.
81     change_args=()
82     for lib in "''${libraries[@]}"; do
83       lib_name="$(basename $lib)"
84       change_args+=(-change ../lib/$lib_name $lib)
85       change_args+=(-change ../../lib/$lib_name $lib)
86     done
88     # Rewrite id and library refences for all non-symlinked libraries.
89     for lib in "''${libraries[@]}"; do
90       if [ -f "$lib" ]; then
91         install_name_tool -id $lib "''${change_args[@]}" $lib
92       fi
93     done
95     # Rewrite library references for all executables.
96     find "$out" -executable -type f | while read executable; do
97       install_name_tool "''${change_args[@]}" "$executable"
98     done
99   '';
101   # We need the libgcc_s.so.1 loadable (for pthread_cancel to work)
102   dontPatchELF = true;
104   passthru.tests.version = testers.testVersion {
105     package = finalAttrs.finalPackage;
106     command = "pjsua --version";
107   };
109   passthru.tests.pkg-config = testers.hasPkgConfigModules {
110     package = finalAttrs.finalPackage;
111   };
113   passthru.tests.python-pjsua2 = runCommand "python-pjsua2" { } ''
114     ${(python3.withPackages (pkgs: [ pkgs.pjsua2 ])).interpreter} -c "import pjsua2" > $out
115   '';
117   meta = with lib; {
118     description = "A multimedia communication library written in C, implementing standard based protocols such as SIP, SDP, RTP, STUN, TURN, and ICE";
119     homepage = "https://pjsip.org/";
120     license = licenses.gpl2Plus;
121     maintainers = with maintainers; [ olynch ];
122     mainProgram = "pjsua";
123     platforms = platforms.linux ++ platforms.darwin;
124     pkgConfigModules = [
125       "libpjproject"
126     ];
127   };