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

3
## Build prerequisite
4 5

* Xcode (download from apple or using appstore application)
6 7 8 9
* [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.
 * [HomeBrew](http://brew.sh) or [Macports](http://www.macports.org/).
 * [XQuartz](https://xquartz.macosforge.org) for GTK version.
10

11 12 13 14 15
### Dependencies

#### Using MacPorts

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

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


28
##### Linphone library (liblinphone)
Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
29

30
        sudo port install automake autoconf libtool pkgconfig intltool wget cunit \
Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
31 32
        antlr3 speex libvpx readline sqlite3 libsoup openldap libupnp \
        ffmpeg-devel -gpl2
33

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

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

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
38 39 40
        sudo port install gtk2 +quartz +no_x11
        sudo port install gtk-osx-application -python27
        sudo port install hicolor-icon-theme
41

42
#### Using HomeBrew
43

44 45
##### Linphone library (liblinphone)

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
46
        brew tap Gui13/linphone
47
        brew install intltool libtool wget pkg-config automake libantlr3.4c \
François Grisez's avatar
François Grisez committed
48
                antlr3.2 gettext speex ffmpeg readline libvpx opus
49 50
        ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
        brew link --force gettext
51

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

François Grisez's avatar
François Grisez committed
54
	brew install cairo --without-x11
55
        brew install gtk+ --without-x11
François Grisez's avatar
François Grisez committed
56
        brew install gettext gtk-mac-integration libsoup
57 58 59
        #readline is required from linphonec.c otherwise compilation will fail
        brew link readline --force

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
60
### Building Linphone
61 62 63 64 65

The next pieces need to be compiled manually.

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

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
66 67 68 69 70
        export MACOSX_DEPLOYMENT_TARGET=10.6
        export CFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5"
        export OBJCFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5"
        export CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5"
        export LDFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5 -Wl,-headerpad_max_install_names -Wl,-read_only_relocs -Wl,suppress"
71

72
* (MacPorts only) Install libantlr3c (library used by belle-sip for parsing)
73

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
74 75 76 77 78
        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
79 80

* Install polarssl (encryption library used by belle-sip)
Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
81 82 83 84 85

        git clone git://git.linphone.org/polarssl.git -b linphone
        cd polarssl
        ./autogen.sh && ./configure --prefix=/opt/local && make
        sudo make install
86 87 88

* Install belle-sip (sip stack)

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
89 90 91 92
        git clone git://git.linphone.org/belle-sip.git
        cd belle-sip
        ./autogen.sh && ./configure --prefix=/opt/local && make
        sudo make install
93 94 95

* (Optional) Install srtp for call encryption

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
96 97 98
        git clone git://git.linphone.org/srtp.git
        cd srtp && autoconf && ./configure --prefix=/opt/local && make libsrtp.a
        sudo make install
99

Gautier Pelloux-Prayer's avatar
Gautier Pelloux-Prayer committed
100
* (Optional) Install zrtp, for unbreakable call encryption
101

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
102 103 104
        git clone git://git.linphone.org:bzrtp
        cd bzrtp && ./autogen.sh && ./configure --prefix=/opt/local && make
        sudo make install
105 106 107

* (Optional) Install gsm codec

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
108 109 110 111
        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
112 113 114 115 116 117 118 119

* (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:

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
120
        ./configure --prefix=/opt/local && make && sudo make install
121 122 123

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

126
        PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --prefix=/opt/local --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make
127 128 129

* Install on the system

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
130
        sudo make install
131

132
 You are done.
133 134 135 136 137

### Generate portable bundle

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

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
138 139 140
        git clone https://github.com/jralls/gtk-mac-bundler.git
        cd gtk-mac-bundler && make install
        export PATH=$PATH:~/.local/bin
141
        # make this dummy charset.alias file for the bundler to be happy:
Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
142
        sudo touch /opt/local/lib/charset.alias
143 144 145 146

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:

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
147 148 149
        <binary>
        ${prefix:ms2plugins}/lib/mediastreamer/plugins/*.*.so
        </binary>
150 151 152

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

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
153
        make && make bundle
154 155 156 157 158

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).

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
159 160 161 162 163
        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
164 165 166 167 168 169 170 171 172

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:

Guillaume BIENKOWSKI's avatar
Guillaume BIENKOWSKI committed
173 174 175 176 177
        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
178 179 180 181 182 183

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