2013-12-12 16:10:49 +00:00
|
|
|
Building Subsurface from Source
|
|
|
|
===============================
|
2013-10-09 01:29:04 +00:00
|
|
|
|
2013-12-12 16:10:49 +00:00
|
|
|
Subsurface uses a few open source libraries and frameworks to do its
|
2014-12-14 21:11:37 +00:00
|
|
|
job. The most important ones include libdivecomputer, Qt, Marble
|
|
|
|
(more precisely libmarblewidget), libxml2, libxslt, libsqlite3, libzip,
|
|
|
|
and libgit2.
|
2013-12-12 16:10:49 +00:00
|
|
|
|
|
|
|
Below are instructions for building Subsurface under some popular
|
|
|
|
Linux distributions, for building Subsurface using Homebrew on a Mac,
|
|
|
|
and for cross-building Subsurface for Windows. The lack of a working
|
|
|
|
package management system for Windows makes it really painful to build
|
|
|
|
Subsurface natively under Windows, we have some hints how to do so
|
|
|
|
here as well.
|
|
|
|
|
2014-12-14 21:11:37 +00:00
|
|
|
As of Subsurface 4.3 all of the prebuilt binaries that we provide (right
|
|
|
|
now Windows64, Windows32, Mac, Ubuntu and LinuxMint) are built using our
|
|
|
|
own custom "flavors" of libdivecomputer and libmarblewidget. You can get
|
|
|
|
these from
|
|
|
|
|
|
|
|
git://git.subsurface-divelog.org/marble (in the Subsurface-4.3 branch)
|
|
|
|
git://git.subsurface-divelog.org/libdc (in the Subsurface-4.3 branch)
|
|
|
|
|
|
|
|
Both of these repositories also have a Subsurface-testing branch. That
|
|
|
|
branch is explicitly marked as NOT STABLE and will receive force pushes.
|
|
|
|
The rationale for this is that we have no intention of forking either of
|
|
|
|
these two projects. We simply are adding a few patches on top of their
|
|
|
|
latest versions and so those testing branches get frequently rebased.
|
|
|
|
|
|
|
|
Also, all of the prebuilt binaries (with the exception of the Windows32
|
|
|
|
build) are now Qt5 based and Qt5 is considered the stable and supported
|
|
|
|
framework to use for building Subsurface.
|
2013-12-12 16:10:49 +00:00
|
|
|
|
|
|
|
Build options for Subsurface
|
|
|
|
----------------------------
|
|
|
|
|
2013-12-15 16:15:45 +00:00
|
|
|
The following options are recognized when passed to qmake:
|
2013-12-12 16:10:49 +00:00
|
|
|
|
|
|
|
-config debug Create a debug build
|
|
|
|
-config release Create a release build
|
|
|
|
The default depends on how Qt was built.
|
|
|
|
V=1 Disable the "silent" build mode
|
|
|
|
LIBDCDEVEL=1 Search for libdivecomputer in ../libdivecomputer
|
2014-12-14 21:11:37 +00:00
|
|
|
LIBMARBLEDEVEL=path Search for marble library and includes in path
|
|
|
|
LIBGIT2DEVEL=path Search for libgit2 library and includes in path
|
2013-12-12 16:10:49 +00:00
|
|
|
INCLUDEPATH+=xxx Add xxx to the include paths to the compiler
|
|
|
|
(pass the actual path, without -I)
|
|
|
|
LIBS+=xxx Add xxx to the linker flags. -l and -L options are
|
2013-12-15 16:15:45 +00:00
|
|
|
recognized.
|
2013-12-12 16:10:49 +00:00
|
|
|
|
|
|
|
The INCLUDEPATH and LIBS options are useful to tell the buildsystem
|
|
|
|
about non-standard installation paths for the dependencies (such as
|
|
|
|
Marble). They can be repeated as often as needed, or multiple
|
|
|
|
arguments can be passed on the same switch, separated by a space. For
|
|
|
|
example:
|
|
|
|
|
|
|
|
qmake LIBS+="-L$HOME/marble/lib -L$HOME/libdivecomputer/lib" \
|
|
|
|
INCLUDEPATH+="$HOME/marble/include $HOME/libdivecomputer/include"
|
|
|
|
|
|
|
|
|
|
|
|
Building Subsurface 4 under Linux
|
|
|
|
---------------------------------
|
2013-10-09 01:29:04 +00:00
|
|
|
|
2014-12-14 21:11:37 +00:00
|
|
|
On Fedora you need
|
|
|
|
|
|
|
|
sudo yum install git gcc-c++ make autoconf automake libtool cmake \
|
|
|
|
libzip-devel libxml2-devel libxslt-devel libsqlite3x-devel \
|
|
|
|
libgit2-devel libudev-devel libusbx-devel \
|
|
|
|
qt5-qtbase-devel qt5-qtdeclarative-devel qt5-qtscript-devel \
|
|
|
|
qt5-qtwebkit-devel qt5-qtsvg-devel qt5-qttools-devel
|
|
|
|
|
|
|
|
FIXME -- Debian package names needed
|
2013-12-12 16:10:49 +00:00
|
|
|
|
|
|
|
On Debian style distributions you can install the required development
|
2013-12-12 23:38:54 +00:00
|
|
|
packages by running (once Qt version of subsurface is available in your
|
|
|
|
distribution)
|
2013-12-12 23:38:53 +00:00
|
|
|
$ sudo apt-get build-dep subsurface
|
2014-12-14 21:11:37 +00:00
|
|
|
but on many of them this will give you the build dependencies for the
|
|
|
|
official package (which is often way out of date). So be careful that this
|
|
|
|
doesn't get you a Qt4 based environment
|
2013-10-09 01:29:04 +00:00
|
|
|
|
2013-12-12 16:10:49 +00:00
|
|
|
If you want to install the required packages individually instead you
|
2013-12-12 23:02:35 +00:00
|
|
|
need libqt4-dev, qt4-qmake, libxml2-dev, libxslt1-dev, zlib1g-dev,
|
|
|
|
libzip-dev, libmarble-dev, libsqlite3-dev, libqtwebkit-dev
|
|
|
|
(and libusb-1.0-0-dev if you're going to compile libdivecomputer).
|
2013-10-09 01:29:04 +00:00
|
|
|
|
2013-12-12 16:10:49 +00:00
|
|
|
|
2014-12-14 21:11:37 +00:00
|
|
|
First you need to compile our version of libdivecomputer:
|
|
|
|
|
|
|
|
$ mkdir ~/src # unless you have this already
|
|
|
|
$ cd ~/src
|
|
|
|
$ git clone -b Subsurface-4.3 git://subsurface-divelog.org/libdc libdivecomputer
|
|
|
|
# or -b Subsurface-testing to get the testing version - careful,
|
|
|
|
# careful - this gets rebased and may be broken
|
|
|
|
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cd libdivecomputer
|
|
|
|
$ autoreconf --install
|
2013-10-11 17:05:22 +00:00
|
|
|
$ ./configure --disable-shared
|
2013-10-09 01:29:04 +00:00
|
|
|
$ make
|
|
|
|
$ sudo make install
|
|
|
|
|
2014-12-14 21:11:37 +00:00
|
|
|
Then you compile our custom branch of libmarblewidget
|
|
|
|
|
|
|
|
$ cd ~/src
|
|
|
|
$ git clone -b Subsurface-4.3 git://subsurface-divelog.org/marble marble-source
|
|
|
|
# or -b Subsurface-testing to get the testing version - careful,
|
|
|
|
# careful - this gets rebased and may be broken
|
|
|
|
|
|
|
|
$ mkdir marble-build
|
|
|
|
$ cd marble-build
|
|
|
|
$ cmake -DQTONLY=ON -DQT5BUILD=ON \
|
|
|
|
-DBUILD_MARBLE_APPS=OFF -DBUILD_MARBLE_EXAMPLES=OFF \
|
|
|
|
-DBUILD_MARBLE_TESTS=OFF -DBUILD_MARBLE_TOOLS=OFF \
|
|
|
|
-DBUILD_TESTING=OFF -DWITH_DESIGNER_PLUGIN=OFF \
|
|
|
|
-DBUILD_WITH_DBUS=OFF ../marble-source
|
|
|
|
$ make # <- this step will take quite a while... if you have more cores
|
|
|
|
# try make -j8 or something like that
|
|
|
|
$ sudo make install
|
|
|
|
|
|
|
|
Finally you can compile Subsurface:
|
|
|
|
|
|
|
|
$ cd ~/src
|
2014-11-18 13:12:40 +00:00
|
|
|
$ git clone git://subsurface-divelog.org/subsurface.git
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cd subsurface
|
2014-12-14 21:11:37 +00:00
|
|
|
$ cd git checkout v4.3 # this get's you the last release
|
|
|
|
# skip this step to build the latest development
|
|
|
|
# version
|
|
|
|
$ qmake # on Fedora you need qmake-qt5
|
2013-10-09 01:29:04 +00:00
|
|
|
$ make
|
2014-12-14 21:11:37 +00:00
|
|
|
$ sudo make install # [optionally, add: prefix=/usr/local]
|
|
|
|
|
|
|
|
At least on Fedora you need to make sure that /usr/local/lib is searched
|
|
|
|
for shared libraries (this is where the steps above installed
|
|
|
|
libdivecomputer and libmarblewidget in oder not to conflict with system
|
|
|
|
pacakges). So you need to do the following:
|
|
|
|
$ sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf
|
|
|
|
$ sudo ldconfig
|
|
|
|
|
|
|
|
Now you should be able to start the Subsurface binary you just created
|
|
|
|
with
|
|
|
|
|
|
|
|
$ ./subsurface
|
2013-10-09 01:29:04 +00:00
|
|
|
|
2013-12-09 19:48:16 +00:00
|
|
|
|
2014-12-14 21:11:37 +00:00
|
|
|
Building Subsurface under MacOSX (using Homebrew)
|
|
|
|
-------------------------------------------------
|
2013-10-09 01:29:04 +00:00
|
|
|
|
2014-12-01 12:55:20 +00:00
|
|
|
0) You need to have XCode installed. The first time (and possibly after updating OSX)
|
|
|
|
you need to run
|
|
|
|
|
|
|
|
$ xcode-select --install
|
|
|
|
|
2013-10-09 01:29:04 +00:00
|
|
|
1) Install Homebrew
|
|
|
|
|
2013-11-24 00:12:54 +00:00
|
|
|
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"
|
2013-10-09 01:29:04 +00:00
|
|
|
|
|
|
|
2) Install needed dependencies
|
|
|
|
|
|
|
|
$ brew install asciidoc libzip qt sqlite cmake libusb pkg-config
|
|
|
|
|
|
|
|
3) Make the brew version of sqlite the default
|
|
|
|
|
|
|
|
$ brew link --force sqlite
|
|
|
|
|
|
|
|
4) Install Marble
|
|
|
|
|
|
|
|
$ mkdir -p ~/src/marble/build
|
2014-02-23 16:40:06 +00:00
|
|
|
$ git clone -b KDE/4.11 git://anongit.kde.org/marble ~/src/marble/sources
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cd ~/src/marble/build
|
2013-10-10 14:53:35 +00:00
|
|
|
$ cmake -DCMAKE_BUILD_TYPE=Debug -DQTONLY=TRUE -DCMAKE_INSTALL_PREFIX=/usr/local ../sources
|
2013-11-27 22:11:47 +00:00
|
|
|
- or -
|
|
|
|
$ cmake -DCMAKE_BUILD_TYPE=Release -DQTONLY=TRUE -DCMAKE_INSTALL_PREFIX=/usr/local ../sources
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cd src/lib
|
2013-10-09 19:56:15 +00:00
|
|
|
$ make -j4
|
2013-11-27 21:45:00 +00:00
|
|
|
$ install_name_tool -id /usr/local/lib/`echo libmarblewidget.??.dylib` libmarblewidget.dylib
|
2013-10-09 19:56:15 +00:00
|
|
|
$ cp *dylib /usr/local/lib/
|
2013-10-09 01:29:04 +00:00
|
|
|
$ mkdir -p /usr/local/include/marble
|
2013-11-24 00:12:54 +00:00
|
|
|
$ cd ../../../sources/src/lib
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cp $(find . -name '*.h') /usr/local/include/marble/
|
|
|
|
|
|
|
|
5) Install Libdivecomputer
|
|
|
|
|
|
|
|
$ brew install automake libtool
|
|
|
|
$ cd ~/src
|
2013-10-09 19:56:15 +00:00
|
|
|
$ git clone git://git.libdivecomputer.org/libdivecomputer
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cd libdivecomputer
|
|
|
|
$ git checkout release-0.4
|
|
|
|
$ autoreconf --install
|
2013-10-11 17:05:22 +00:00
|
|
|
$ ./configure --disable-shared
|
2013-10-09 01:29:04 +00:00
|
|
|
$ make
|
2013-10-09 19:56:15 +00:00
|
|
|
$ make install
|
2013-10-09 01:29:04 +00:00
|
|
|
|
|
|
|
6) Compile Subsurface
|
|
|
|
|
|
|
|
$ cd ~/src
|
2014-11-18 13:12:40 +00:00
|
|
|
$ git clone git://subsurface-divelog.org/subsurface.git
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cd subsurface
|
|
|
|
$ qmake
|
|
|
|
$ make
|
2013-10-09 20:44:44 +00:00
|
|
|
$ make install_mac_bundle
|
2013-10-09 01:29:04 +00:00
|
|
|
|
|
|
|
After the above is done, Subsurface will be installed to
|
|
|
|
/Applications.
|
|
|
|
|
|
|
|
Another option is to create a .dmg for distribution:
|
|
|
|
|
|
|
|
$ qmake
|
|
|
|
$ make
|
|
|
|
$ make mac-create-dmg
|
|
|
|
|
2013-11-28 00:26:39 +00:00
|
|
|
NOTES: macdeployqt assumes that the plugins are located "next" to the
|
|
|
|
frameworks. The frameworks are linked from /usr/local/lib - but the
|
|
|
|
plugins are not in /usr/local/plugins.
|
|
|
|
The easiest workaround is to create a symbolic link from
|
|
|
|
/usr/local/plugins to /usr/local/Cellar/qt/4.8.5/plugins (or whatever
|
|
|
|
version of Qt you have built earlier).
|
|
|
|
|
2014-02-26 16:21:13 +00:00
|
|
|
Building the Qt version under MacOSX (using MacPorts)
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
|
|
|
1) Install MacPorts
|
|
|
|
|
|
|
|
Please refer to http://www.macports.org/install.php
|
|
|
|
|
|
|
|
2) Install needed dependencies
|
|
|
|
|
2014-03-07 14:25:49 +00:00
|
|
|
$ sudo port -vp install asciidoc libzip libusb sqlite cmake qt4-mac marble libdivecomputer libgit2
|
2014-02-26 16:21:13 +00:00
|
|
|
|
|
|
|
3) Check dependencies' versions
|
|
|
|
|
|
|
|
$ port installed qt4-mac libdivecomputer marble libzip asciidoc libusb sqlite cmake
|
|
|
|
The following ports are currently installed:
|
|
|
|
asciidoc @8.6.9_1 (active)
|
|
|
|
cmake @2.8.12_3 (active)
|
|
|
|
libdivecomputer @0.4.1_0 (active)
|
2014-03-07 14:25:49 +00:00
|
|
|
libgit2 @0.20.0_0 (active)
|
2014-02-26 16:21:13 +00:00
|
|
|
libusb @1.0.18_0 (active)
|
|
|
|
libzip @0.11.1_0 (active)
|
|
|
|
marble @4.12.2_0 (active)
|
|
|
|
qt4-mac @4.8.5_1 (active)
|
|
|
|
|
|
|
|
4) Compile Subsurface
|
|
|
|
|
|
|
|
$ cd ~/src
|
2014-11-18 13:12:40 +00:00
|
|
|
$ git clone git://subsurface-divelog.org/subsurface.git
|
2014-02-26 16:21:13 +00:00
|
|
|
$ cd subsurface
|
|
|
|
$ qmake
|
|
|
|
$ make
|
|
|
|
$ make install_mac_bundle
|
|
|
|
|
2013-10-09 01:29:04 +00:00
|
|
|
Cross-building Subsurface on Linux for Windows
|
|
|
|
----------------------------------------------
|
|
|
|
|
|
|
|
Subsurface builds nicely with MinGW - the official builds are done as
|
2013-12-12 16:10:49 +00:00
|
|
|
cross builds under Linux (currently on Fedora 19). A shell script to do
|
2013-10-09 01:29:04 +00:00
|
|
|
that (plus the .nsi file to create the installer with makensis) are
|
2013-12-12 16:10:49 +00:00
|
|
|
included in the packaging/windows directory.
|
2013-10-09 01:29:04 +00:00
|
|
|
|
|
|
|
The best way to get libdivecomputer to build appears to be
|
|
|
|
|
2013-12-12 16:10:49 +00:00
|
|
|
$ mkdir -p ~/src
|
|
|
|
$ git clone git://git.libdivecomputer.org/libdivecomputer ~/src/libdivecomputer
|
|
|
|
$ cd ~/src/libdivecomputer
|
2013-10-09 01:29:04 +00:00
|
|
|
$ git checkout release-0.4
|
2013-10-11 17:05:22 +00:00
|
|
|
$ mingw32-configure --disable-shared
|
2013-10-09 01:29:04 +00:00
|
|
|
$ mingw32-make
|
|
|
|
$ sudo mingw32-make install
|
|
|
|
|
2013-11-27 22:11:47 +00:00
|
|
|
To compile Marble, use:
|
|
|
|
|
|
|
|
$ mkdir -p ~/src/marble/build
|
2014-02-23 16:40:06 +00:00
|
|
|
$ git clone -b KDE/4.11 git://anongit.kde.org/marble ~/src/marble/sources
|
2013-11-27 22:11:47 +00:00
|
|
|
$ cd ~/src/marble/build
|
|
|
|
$ mingw32-cmake -DCMAKE_BUILD_TYPE=Debug -DQTONLY=TRUE ../sources
|
|
|
|
- or -
|
|
|
|
$ mingw32-cmake -DCMAKE_BUILD_TYPE=Release -DQTONLY=TRUE ../sources
|
|
|
|
$ mingw32-make -j4
|
|
|
|
$ mingw32-make install
|
|
|
|
|
2014-03-08 00:33:00 +00:00
|
|
|
To compile libgit2, use:
|
|
|
|
|
|
|
|
$ mkdir -p ~/src/libgit2/build
|
|
|
|
$ git clone git://github.com/libgit2/libgit2 ~/src/libgit2
|
|
|
|
$ cd ~/src/libgit2/build
|
|
|
|
$ mingw32-cmake ..
|
|
|
|
$ mingw32-cmake --build .
|
|
|
|
|
2013-10-09 01:29:04 +00:00
|
|
|
To compile Subsurface, use:
|
|
|
|
|
2013-12-12 16:10:49 +00:00
|
|
|
$ mkdir -p ~/src/subsurface
|
2014-11-18 13:12:40 +00:00
|
|
|
$ git clone git://subsurface-divelog.org/subsurface.git ~/src/subsurface
|
2013-12-12 16:10:49 +00:00
|
|
|
$ cd ~/src/subsurface
|
2013-11-28 00:41:16 +00:00
|
|
|
$ packaging/windows/mingw-make.sh
|
|
|
|
$ packaging/windows/mingw-make.sh install
|
|
|
|
$ packaging/windows/mingw-make.sh installer
|
|
|
|
|
|
|
|
The last step assumes that you have a link from packaging/windows/dll to
|
|
|
|
the correct directory in your MinGW installation. On my machine that is
|
|
|
|
/usr/i686-w64-mingw32/sys-root/mingw/bin
|
|
|
|
Similarly, the paths used in packaging/windows/mingw-make.sh may need to
|
|
|
|
be adjusted according to your distributions layout
|
|
|
|
|
2013-10-09 01:29:04 +00:00
|
|
|
|
|
|
|
Building Subsurface on Windows
|
|
|
|
------------------------------
|
|
|
|
|
2013-10-14 10:52:49 +00:00
|
|
|
1) Install msys-git:
|
|
|
|
http://msysgit.github.io
|
|
|
|
|
|
|
|
Tools part of MSYS are required for building Subsurface, while you also
|
|
|
|
need Git to be upstream and contribute to the project.
|
|
|
|
Make sure that the msys/bin (or git/bin) folder is in PATH.
|
|
|
|
|
|
|
|
2) Install Qt
|
|
|
|
http://qt-project.org/downloads
|
|
|
|
|
|
|
|
Subsurface is currently built against Qt 4.8.5.
|
|
|
|
|
|
|
|
3) Install a MinGW toolchain
|
|
|
|
https://docs.google.com/open?id=0B4D8x6CJEmtuczdiQklwMEs4RUU
|
|
|
|
|
|
|
|
Qt 4.8.5 comes without a compiler and you will have to download it from
|
|
|
|
a separate location. Other compiler may work, but there are no guaranties for
|
|
|
|
that. Make sure that the mingw/bin folder is in PATH.
|
|
|
|
|
|
|
|
4) Install Libdivecomputer
|
|
|
|
Use similar steps to the previous section, without the sudo command.
|
|
|
|
|
|
|
|
5) Install CMake (required for building Marble):
|
|
|
|
http://www.cmake.org/cmake/resources/software.html
|
|
|
|
|
|
|
|
Make sure that the cmake/bin folder is in PATH.
|
|
|
|
|
|
|
|
5) Download and build Marble
|
|
|
|
http://marble.kde.org/sources.php
|
|
|
|
http://techbase.kde.org/Projects/Marble/WindowsCompiling#Compiling_Marble_using_MingW
|
|
|
|
|
|
|
|
Make sure you build both the Debug and Release versions.
|
|
|
|
|
|
|
|
6) Install pkg-config
|
|
|
|
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip
|
|
|
|
|
|
|
|
pkg-config depends on DLL files such as libglib-2.0-0.dll and has to be in
|
|
|
|
PATH, so it's best that you copy the executable to msys/bin.
|
|
|
|
|
|
|
|
7) Install other dependencies
|
|
|
|
Subsurface also depends on the following libraries:
|
|
|
|
|
|
|
|
* libxml2
|
|
|
|
http://www.xmlsoft.org/downloads.html
|
|
|
|
* libxslt
|
|
|
|
http://xmlsoft.org/XSLT/
|
|
|
|
* libusb-1.0
|
|
|
|
http://sourceforge.net/apps/trac/libusb-win32/wiki
|
|
|
|
* zlib
|
|
|
|
http://www.zlib.net/
|
|
|
|
* libzip
|
|
|
|
http://www.nih.at/libzip/
|
|
|
|
|
|
|
|
Once you have the libraries, create .pc files (pkg-config) for them and place
|
|
|
|
the files in a folder that is indicated by the PKG_CONFIG_PATH environment
|
|
|
|
variable - e.g. PKG_CONFIG_PATH=c:\msys\pkg-config
|
2013-10-09 01:29:04 +00:00
|
|
|
|
|
|
|
To build subsurface, use:
|
|
|
|
|
2014-11-18 13:12:40 +00:00
|
|
|
$ git clone git://subsurface-divelog.org/subsurface.git
|
2013-10-09 01:29:04 +00:00
|
|
|
$ cd subsurface
|
|
|
|
$ qmake
|
|
|
|
$ make
|
|
|
|
$ make install
|
2013-11-28 00:41:16 +00:00
|
|
|
$ make installer
|