Difference between revisions of "BuildingMacOSX"

From Mumble Wiki
Jump to: navigation, search
(Compiling Portaudio)
(Added link to new build docs)
 
(106 intermediate revisions by 5 users not shown)
Line 1: Line 1:
== Universal or not Universal? ==
+
{{Warning
 +
|message=The build instructions listed here only apply to Mumble v1.3.x or older. If you want to build Mumble starting from v1.4.0, checkout https://github.com/mumble-voip/mumble/tree/master/docs/dev/build-instructions
 +
}}
  
If you want to build Mumble as universal binary you will first have to build all dependencies as universal binary.
+
{{Building}}
 +
 
 +
=== Introduction ===
 +
 
 +
This guide describes the method to get a fully working and redistributable version of Mumble and Murmur that uses the Cocoa version of Qt 4.
  
== Dependencies ==
 
 
To build Mumble you will need:
 
To build Mumble you will need:
* XCode (http://developer.apple.com/tools/xcode/)
+
* Mac OS X 10.8 (Mountain Lion)
* pkg-config (http://pkg-config.freedesktop.org/)
+
* Xcode 4.4
* QT >= 4.3.1 (http://trolltech.com/developer/downloads/qt/mac)
+
 
* Boost (http://www.boost.org/)
+
=== Creating a build environment ===
* Portaudio (http://www.portaudio.com/)
+
 
 +
The git repository at https://github.com/mumble-voip/mumble-releng contains pre-made scripts that build the current canonical Mumble OS X build environment.
 +
 
 +
Simply clone the repo, and cd into it:
 +
 
 +
  $ git clone https://github.com/mumble-voip/mumble-releng
 +
  $ cd mumble-releng/buildenv/1.3.x/osx
 +
 
 +
Create a MumbleBuild directory in your home dir:
 +
 
 +
  $ mkdir -p ~/MumbleBuild
 +
 
 +
Copy the 'env' script to the directory you created in the previous step:
 +
 
 +
  $ cp env ~/MumbleBuild/env
 +
 
 +
Source the env script to set up the proper environment variables for the Mumble build environment:
 +
 
 +
  $ source ~/MumbleBuild/env
 +
 
 +
Build the enviroment:
 +
 
 +
  $ ./build-all.bash
 +
 
 +
Once this is done, you should have a fully functional installation of Mumble's dependencies (tools and libs) in a self-contained MumbleBuild directory in your home directory.
 +
 
 +
=== Building Mumble ===
 +
 
 +
Make sure you've sourced ~/MumbleBuild/env into your current shell session:
 +
 
 +
$ source ~/MumbleBuild/env
 +
 
 +
Fetch the Mumble source from Git into a directory of your choosing:
  
=== Compiling pkg-config ===
+
git clone --recursive https://github.com/mumble-voip/mumble
  
This is just a build tool, so you do not have to build it as universal binary. Download and unpack pkg-config.
+
To build the client, execute:
sudo mkdir /usr/lib/pkgconfig (choose a path you like)
 
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
 
./configure && make && sudo make install
 
  
To make the path permanent add the following line to your ''~/.profile'' file:
+
cd mumble
  export PKG_CONFIG_PATH=/usr/lib/pkgconfig
+
  qmake -recursive -Wall main.pro CONFIG+="release static"
Also add a path entry to the pkg-config binary to this file:
+
  make
  export PATH=$PATH:/usr/local/bin
 
  
=== Compiling QT ===
+
If everything went well, you should now have a Mumble.app application bundle in the release directory of the root of the source tree.
  
Download an unpack QT. Run
+
=== Building Murmur ===
./configure -universal -qt-sql-sqlite -qt-libpng
 
in the QT dir.
 
If configure is successful run
 
make && sudo make install
 
QT will be installed to ''/usr/local/Trolltech/Qt-4.3.X'' or similar.
 
  
To make the QT tools visible add the following line to your ''~/.profile'' file:
+
Make sure you've sourced ~/MumbleBuild/env into your current shell session:
export PATH=$PATH:/usr/local/Trolltech/Qt-4.3.X/bin
 
  
=== Compiling Boost ===
+
$ source ~/MumbleBuild/env
  
As Mumble only uses some Boost headers you do not have to build/install this. Just unpack Boost.
+
Fetch the Mumble and Murmur source from Git into a directory of your choosing:
  
=== Compiling Portaudio ===
+
git clone --recursive https://github.com/mumble-voip/mumble
  
This builds universal by default. So just download, unpack and:
+
To build the server, execute:
./configure && make
 
  
For the Mumble build system to find this you will have to modify the included ''portaudio-2.0.pc.in'', rename it to ''portaudio-2.0.pc'' and put it in you PKG_CONFIG_PATH.
+
cd mumble
My ''portaudio-2.0.pc'' file looks like this:
+
qmake -spec unsupported/macx-clang -recursive CONFIG+="release static no-client no-dbus"
 +
make
  
prefix=/Users/username/Development/portaudio
+
If everything went well, you should now have a murmur binary in the release directory of the root of the source tree.
exec_prefix=${prefix}
 
libdir=${exec_prefix}/lib
 
includedir=${exec_prefix}/include
 
 
Name: PortAudio
 
Description: Portable audio I/O
 
Requires:
 
Version: 19
 
 
Libs: -L${libdir} -lportaudio
 
Cflags: -I${includedir}
 
  
== Building Mumble ==
+
=== Distributing Mumble ===
  
Fetch the Mumble source from SVN. First build speex by changing into the ''speexbuild'' subdirectory and running:
+
If you wish to create a proper redistributable Mumble application bundle, please refer to the osxdist.py script in
qmake speexbuild.pro && make
+
the macx/scripts directory. This will help you clean up your application bundle, include the needed dependencies, resources etc., and create a compressed disk image - ready to redistribute!
  
After that change to the ''src/mumble'' subdirectory. Here you might have to change some parameters in ''mumble.pro'', so open it in a text editor.
+
The script expects you to be in the root of the source tree. After executing, it will spit out a .dmg of your Mumble build in the release folder.
Change the path in the line:
 
INCLUDEPATH += /usr/local/include/boost-1_34/
 
to the path where your boost headers are located.
 
  
then run:
+
If you only have a Mumble.app, and have not built Murmur, you should also pass the
qmake -nocache -config release -spec macx-xcode mumble.pro
 
after that you can:
 
open mumble.xcodeproj
 
  
In XCode switch to Release target and press the build button. If this finishes without errors you have done everything right and the finished application is located in the subdir ''src/mumble/build/Release'' of the main mumble sourcedir.
+
--no-server
  
== Distributing Mumble ==
+
parameter to the osxdist.py script. This will not attempt to package Murmur-specific files in the generated .dmg.
  
To include all the needed dependencies in the mumble application bundle you can use the following shell script:
+
The script supports code signing, and among other things, allow you to build a copy of Mumble signed with your Developer ID certificates from Apple.
 +
To build with code signing enabled, use the following three parameters to the osxdist.py script:
  
#!/bin/bash
+
* --developer-id='<Name or Organization>'
#
+
* --keychain=<keychain> (optional, defaults to 'login.keychain')
# Original version by
 
#    Thomas Keller (me AT thomaskeller DOT biz)
 
#
 
# adapted by Sebastian Schlingmann (sebastian dot schlingmann at users dot sourceforge dot net)
 
 
#
 
# INITIAL CONFIGURATION START
 
#
 
 
# relative path to the directory which contains the created app bundle
 
BIN_DIR="."
 
# name of the binary
 
BINARY_NAME="mumble"
 
# Qt libraries you've linked against
 
declare -a NEEDED_LIBS=( "QtCore" "QtGui" "QtXml" "QtOpenGL" "QtSql" "QtNetwork" )
 
# additional files you'd like to get copied to the final dmg
 
declare -a ADD_FILES=( )
 
# additional libs we have linked against
 
declare -a OTHER_LIBS=( "/usr/lib/libcrypto.0.9.7.dylib" "/usr/lib/libssl.0.9.7.dylib" "/usr/local/lib/libportaudio.0.0.19.dylib" )
 
 
#
 
# INITIAL CONFIGURATION END, CONTINUE AT 'OTHER CONFIGURATION'
 
#
 
 
bundle_dir="$BIN_DIR/$BINARY_NAME.app"
 
bundle_bin="$bundle_dir/Contents/MacOS/$BINARY_NAME"
 
framework_dir="$bundle_dir/Contents/Frameworks"
 
resources_dir="$bundle_dir/Contents/Resources"
 
 
if [ -z $QTDIR ]; then
 
  echo "\$QTDIR environment variable not found... exiting."
 
  exit 1
 
fi
 
 
# canonicalize QtDir, unfortunately this bash has no realpath() implementation
 
# so we need to use perl for this
 
QTDIR=`perl -e "use Cwd 'realpath'; print realpath('$QTDIR');"`
 
 
if [ ! -d "$bundle_dir" ]; then
 
  echo "Application bundle not found in bin... exiting."
 
  exit 1
 
fi
 
 
echo "Creating Frameworks directory in application bundle..."
 
mkdir -p "$framework_dir"
 
echo "Creating Resources directory in application bundle..."
 
mkdir -p "$resources_dir"
 
 
libcount=${#NEEDED_LIBS[@]}
 
for (( i = 0 ; i < libcount ; i++ ))
 
do
 
    lib=${NEEDED_LIBS[$i]}
 
    echo "Processing $lib..."
 
 
    if [ ! -d "$QTDIR/lib/$lib.framework" ]; then
 
        echo "Couldn't find $lib.framework in $QTDIR."
 
        exit 1
 
    fi
 
 
    rm -rf "$framework_dir/$lib.framework"
 
    cp -fR "$QTDIR/lib/$lib.framework" "$framework_dir"
 
    echo "...$lib copied."
 
 
    install_name_tool \
 
        -id "@executable_path/../Frameworks/$lib.framework/Versions/4/$lib" \
 
        "$framework_dir/$lib.framework/Versions/4/$lib"
 
 
    # other Qt libs depend at least on QtCore
 
    if [ "$lib" != "QtCore" ]; then
 
        install_name_tool -change "$QTDIR/lib/QtCore.framework/Versions/4/QtCore" \
 
            "@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore" \
 
            "$framework_dir/$lib.framework/Versions/Current/$lib"
 
    fi
 
 
    if [ "$lib" == "QtOpenGL" ]; then
 
        install_name_tool -change "$QTDIR/lib/QtGui.framework/Versions/4/QtGui" \
 
            "@executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui" \
 
            "$framework_dir/$lib.framework/Versions/Current/$lib"
 
    fi
 
   
 
    install_name_tool -change "$QTDIR/lib/$lib.framework/Versions/4/$lib" \
 
        "@executable_path/../Frameworks/$lib.framework/Versions/4/$lib" \
 
        "$bundle_bin"
 
    echo "...$lib done."
 
done
 
 
libcount=${#OTHER_LIBS[@]}
 
for (( i = 0 ; i < libcount ; i++ ))
 
do
 
    lib=${OTHER_LIBS[$i]}
 
    lib_basename=`basename $lib`
 
    echo "Processing $lib..."
 
 
    if [ ! -f "$lib" ]; then
 
        echo "Couldn't find $lib."
 
        exit 1
 
    fi
 
 
    rm -rf "$framework_dir/$lib"
 
    cp -fRL "$lib" "$framework_dir"
 
    echo "...$lib copied."
 
 
    install_name_tool \
 
        -id "@executable_path/../Frameworks/$lib_basename" \
 
        "$framework_dir/$lib_basename"
 
   
 
    install_name_tool -change "$lib" \
 
        "@executable_path/../Frameworks/$lib_basename" \
 
        "$bundle_bin"
 
#
 
# OTHER CONFIGURATION
 
#
 
# insert propper paths and filenames
 
#
 
 
    if [ "$lib_basename" == "libssl.0.9.7.dylib" ]; then
 
        install_name_tool -change "/usr/lib/libcrypto.0.9.7.dylib" \
 
        "@executable_path/../Frameworks/libcrypto.0.9.7.dylib" \
 
        "$framework_dir/$lib_basename"
 
    fi
 
#
 
# OTHER CONFIGURATION END
 
#
 
 
    echo "...$lib done."
 
done
 
 
#copy icon
 
cp mumble.icns $resources_dir
 
 
#strip main executable
 
strip $bundle_bin
 
 
echo "Preparing image directory..."
 
tempdir="/tmp/`basename $0`.$$"
 
mkdir $tempdir
 
cp -R $bundle_dir $tempdir
 
echo "...Bundle copied"
 
fcount=${#ADD_FILES[@]}
 
for (( i = 0 ; i < fcount ; i++ )) do
 
    file=${ADD_FILES[$i]} 
 
    if [ ! -f "$file" ]; then
 
        echo "WARNING: $file not found!"
 
    else
 
        cp "$file" $tempdir
 
        echo "...$file copied"
 
    fi
 
done
 
echo "Creating disk image..."
 
rm -f "$BIN_DIR/$BINARY_NAME.dmg"
 
# format UDBZ: bzip2 compressed (10.4+),  UDZ0: zlib compressed (default)  
 
hdiutil create -srcfolder $tempdir -format UDBZ -volname "$BINARY_NAME" "$BIN_DIR/$BINARY_NAME.dmg"
 
rm -rf $tempdir
 
  
You will have to set the QTDIR environment variable before executing the script. You will also most certainly have to change something in the ''INITIAL CONFIGURATION'' and/or the ''OTHER CONFIGURATION'' sections.
+
[[Category:Development]]
The output is a nice little .dmg file with you application bundle inside.
 

Latest revision as of 07:40, 12 October 2020

Icons oxygen 48x48 status task-attention.png
Warning: The build instructions listed here only apply to Mumble v1.3.x or older. If you want to build Mumble starting from v1.4.0, checkout https://github.com/mumble-voip/mumble/tree/master/docs/dev/build-instructions


Building Guides

This page is one of a set of Building pages/guides for the different OSes with information on building Mumble/Murmur.

BuildingLinux BuildingFreeBSD BuildingOpenBSD BuildingMacOSX BuildingWindows


Introduction

This guide describes the method to get a fully working and redistributable version of Mumble and Murmur that uses the Cocoa version of Qt 4.

To build Mumble you will need:

  • Mac OS X 10.8 (Mountain Lion)
  • Xcode 4.4

Creating a build environment

The git repository at https://github.com/mumble-voip/mumble-releng contains pre-made scripts that build the current canonical Mumble OS X build environment.

Simply clone the repo, and cd into it:

 $ git clone https://github.com/mumble-voip/mumble-releng
 $ cd mumble-releng/buildenv/1.3.x/osx

Create a MumbleBuild directory in your home dir:

 $ mkdir -p ~/MumbleBuild

Copy the 'env' script to the directory you created in the previous step:

 $ cp env ~/MumbleBuild/env

Source the env script to set up the proper environment variables for the Mumble build environment:

 $ source ~/MumbleBuild/env

Build the enviroment:

 $ ./build-all.bash

Once this is done, you should have a fully functional installation of Mumble's dependencies (tools and libs) in a self-contained MumbleBuild directory in your home directory.

Building Mumble

Make sure you've sourced ~/MumbleBuild/env into your current shell session:

$ source ~/MumbleBuild/env

Fetch the Mumble source from Git into a directory of your choosing:

git clone --recursive https://github.com/mumble-voip/mumble

To build the client, execute:

cd mumble
qmake -recursive -Wall main.pro CONFIG+="release static"
make

If everything went well, you should now have a Mumble.app application bundle in the release directory of the root of the source tree.

Building Murmur

Make sure you've sourced ~/MumbleBuild/env into your current shell session:

$ source ~/MumbleBuild/env

Fetch the Mumble and Murmur source from Git into a directory of your choosing:

git clone --recursive https://github.com/mumble-voip/mumble

To build the server, execute:

cd mumble
qmake -spec unsupported/macx-clang -recursive CONFIG+="release static no-client no-dbus"
make

If everything went well, you should now have a murmur binary in the release directory of the root of the source tree.

Distributing Mumble

If you wish to create a proper redistributable Mumble application bundle, please refer to the osxdist.py script in the macx/scripts directory. This will help you clean up your application bundle, include the needed dependencies, resources etc., and create a compressed disk image - ready to redistribute!

The script expects you to be in the root of the source tree. After executing, it will spit out a .dmg of your Mumble build in the release folder.

If you only have a Mumble.app, and have not built Murmur, you should also pass the

--no-server

parameter to the osxdist.py script. This will not attempt to package Murmur-specific files in the generated .dmg.

The script supports code signing, and among other things, allow you to build a copy of Mumble signed with your Developer ID certificates from Apple. To build with code signing enabled, use the following three parameters to the osxdist.py script:

  • --developer-id='<Name or Organization>'
  • --keychain=<keychain> (optional, defaults to 'login.keychain')