README.macos.md 6.76 KB
Newer Older
1
# Linphone on MacOS X
2

3
## Build prerequisite
4 5

* Xcode (download from apple or using appstore application)
6 7
* [Java SE](http://www.oracle.com/technetwork/java/javase/downloads/index.html) or openJDK
 This is required to generate a C sourcefile from SIP grammar using [antlr3](http://www.antlr3.org/) generator.
Simon Morlat's avatar
Simon Morlat committed
8
* [HomeBrew](http://brew.sh) or [Macports](http://www.macports.org/).
9

10 11 12 13 14
### Dependencies

#### Using MacPorts

##### Multiple MacOS version support
15 16 17 18 19 20 21 22 23 24 25 26

In order to enable generation of bundle for multiple MacOS version and 32 bit processors, it is recommended to:

1. Edit `/opt/local/etc/macports/macports.conf` to add the following line:

 > macosx_deployment_target 10.6

2. Edit `/opt/local/etc/macports/variants.conf` to add the following line:

 > +universal


27
##### Linphone library (liblinphone)
28

29
        sudo port install automake autoconf libtool pkgconfig intltool wget cunit \
30 31
        antlr3 speex libvpx readline sqlite3 libsoup openldap libupnp \
        ffmpeg-devel -gpl2
32

33 34 35
##### Linphone UI (GTK version)

Install `GTK`. It is recommended to use the `quartz` backend for better integration.
36

37 38 39
        sudo port install gtk2 +quartz +no_x11
        sudo port install gtk-osx-application -python27
        sudo port install hicolor-icon-theme
40

41
#### Using HomeBrew
42

43 44
##### Linphone library (liblinphone)

45
        brew tap Gui13/linphone
46
        brew install intltool libtool wget pkg-config automake libantlr3.4c \
47
                antlr3.2 gettext speex ffmpeg readline libvpx opus
48 49
        ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
        brew link --force gettext
50

51 52
##### Linphone UI (GTK version)

53
	brew install cairo --without-x11
54
        brew install gtk+ --without-x11
55
        brew install gettext gtk-mac-integration libsoup hicolor-icon-theme
56 57 58
        #readline is required from linphonec.c otherwise compilation will fail
        brew link readline --force

59
### Building Linphone
60 61 62 63 64

The next pieces need to be compiled manually.

* To ensure compatibility with multiple MacOS versions it is recommended to do:

65
        export MACOSX_DEPLOYMENT_TARGET=10.6
66
        export LDFLAGS="-Wl,-headerpad_max_install_names -Wl,-read_only_relocs -Wl,suppress"
67

68
* (MacPorts only) Install libantlr3c (library used by belle-sip for parsing)
69

70 71 72 73 74
        git clone -b linphone git://git.linphone.org/antlr3.git
        cd antlr3/runtime/C
        ./autogen.sh
        ./configure --disable-static --prefix=/opt/local && make
        sudo make install
75 76

* Install polarssl (encryption library used by belle-sip)
77 78 79 80 81

        git clone git://git.linphone.org/polarssl.git -b linphone
        cd polarssl
        ./autogen.sh && ./configure --prefix=/opt/local && make
        sudo make install
82 83 84

* Install belle-sip (sip stack)

85 86 87 88
        git clone git://git.linphone.org/belle-sip.git
        cd belle-sip
        ./autogen.sh && ./configure --prefix=/opt/local && make
        sudo make install
89 90 91

* (Optional) Install srtp for call encryption

92 93 94
        git clone git://git.linphone.org/srtp.git
        cd srtp && autoconf && ./configure --prefix=/opt/local && make libsrtp.a
        sudo make install
95

96
* (Optional) Install zrtp, for unbreakable call encryption
97

98 99 100
        git clone git://git.linphone.org:bzrtp
        cd bzrtp && ./autogen.sh && ./configure --prefix=/opt/local && make
        sudo make install
101 102 103

* (Optional) Install gsm codec

104 105 106 107
        git clone git://git.linphone.org/gsm.git
        cd gsm
        make CCFLAGS="$CFLAGS -c -O2 -DNeedFunctionPrototypes=1"
        sudo make install INSTALL_ROOT=/opt/local GSM_INSTALL_INC=/opt/local/include
108 109 110 111 112 113 114 115

* (Optional) libvpx-1.2 has a bug on MacOS resulting in ugly video. It is recommended to upgrade it manually to 1.3 from source.
The libvpx build isn't able to produce dual architecture files. To workaround this, configure libvpx twice and use lipo to create a dual architecture `libvpx.a`.

* (Optional, proprietary extension only) Compile and install the tunnel library
 If you got the source code from git, run `./autogen.sh` first.
 Then or otherwise, do:

116
        ./configure --prefix=/opt/local && make && sudo make install
117 118 119

* Compile Linphone
 If you got the source code from git, run `./autogen.sh` first.
120
 Then or otherwise, :
121

122
        PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --prefix=/opt/local --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make
123 124 125

* Install on the system

126
        sudo make install
127

128
 You are done.
129 130 131 132 133

### Generate portable bundle

If you want to generate a portable bundle, then install `gtk-mac-bundler`:

134 135 136
        git clone https://github.com/jralls/gtk-mac-bundler.git
        cd gtk-mac-bundler && make install
        export PATH=$PATH:~/.local/bin
137
        # make this dummy charset.alias file for the bundler to be happy:
138
        sudo touch /opt/local/lib/charset.alias
139 140 141 142

The bundler file in `build/MacOS/linphone.bundle` expects some plugins to be installed in `/opt/local/lib/mediastreamer/plugins`.
If you don't need plugins, remove or comment out this line from the bundler file:

143 144 145
        <binary>
        ${prefix:ms2plugins}/lib/mediastreamer/plugins/*.*.so
        </binary>
146

147 148 149 150 151 152
If using HomeBrew, this is not working yet. However you will at least need to:

        brew install shared-mime-info glib-networking hicolor-icon-theme
        update-mime-database /usr/local/share/mime

 And modify also:
153 154 155

        <prefix name="default">/usr/local</prefix>

156 157
Then run, inside Linphone source tree configure as told before but with `--enable-relativeprefix` appended.

158
        make && make bundle
159 160 161 162 163

The resulting bundle is located in Linphone build directory, together with a zipped version.

* For a better appearance, you can install `gtk-quartz-engine` (a GTK theme) that makes GTK application more similar to other Mac applications (but not perfect).

164 165 166 167 168
        git clone https://github.com/jralls/gtk-quartz-engine.git
        cd gtk-quartz-engine
        autoreconf -i
        ./configure --prefix=/opt/local CFLAGS="$CFLAGS -Wno-error" && make
        sudo make install
169 170 171 172 173 174 175 176 177

Generate a new bundle to have it included.

### libiconv hack

The `Makefile.am` rules used to generate the bundle fetch a `libiconv.2.dylib` from a Linphone download page.
This library adds some additional symbols so that dependencies requiring the `iconv` from `/usr/lib` and the ones requiring from the bundle are both satisfied.
In case this library needs to generated, here are the commands:

178 179 180 181 182
        wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
        cd libiconv-1.14
        patch -p1 < ../linphone/build/MacOS/libiconv-MacOS.patch
        ./configure --prefix=/opt/local --disable-static 'CFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5' 'LDFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5'  CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" && make
        make install DESTDIR=/tmp
183 184 185 186 187 188

The resulted library can be found in `/tmp/opt/local/lib`.