Project

General

Profile

Installation » History » Version 41

Tony Ciavarella, 03/11/2013 05:05 PM

1 1 Tony Ciavarella
h1. Installation
2
3 5 Tony Ciavarella
h2. Obtaining the Source Code
4 1 Tony Ciavarella
5 2 Tony Ciavarella
h3. Release Tarballs
6
7 4 Tony Ciavarella
Release source tarballs are available on the "Files":http://oss.squalllinesoftware.com/projects/disorder/files page.  This is what you want if you are looking for stability and something ready for production use.  You'll probably want to use the most recent version found on that page.
8 2 Tony Ciavarella
9
h3. SCM
10
11 4 Tony Ciavarella
The Disorder source code is hosted in a "Bazaar":http://bazaar.canonical.com repository.  This is what you want if you are looking for the very latest bleeding edge of the code for contributing to Disorder or whatever other reason you may have.
12 2 Tony Ciavarella
13 27 Tony Ciavarella
Read the "Bazaar Documentation":http://doc.bazaar.canonical.com/en/ if you aren't familiar with that and you want to go this route.
14
15 2 Tony Ciavarella
To get a lightweight checkout of the latest version without all the history (not suitable for Disorder development):
16 25 Tony Ciavarella
<pre>bzr co --lightweight bzr://bzr.squalllinesoftware.com/disorder</pre>
17 2 Tony Ciavarella
18 31 Tony Ciavarella
To clone the repository including the full history (suitable for Disorder development):
19 25 Tony Ciavarella
<pre>bzr branch bzr://bzr.squalllinesoftware.com/disorder</pre>
20 2 Tony Ciavarella
21 1 Tony Ciavarella
h2. Prerequisites
22
23 38 Tony Ciavarella
Given the assumption that a somewhat sane build environment for C++ already exists on the build machine, the following third party things are required to build Disorder:
24 6 Tony Ciavarella
* "Boost":http://www.boost.org >= 1.49.0
25 8 Tony Ciavarella
* "Eigen":http://eigen.tuxfamily.org >= 3.0.5
26 7 Tony Ciavarella
* C++ version of the "SEDRIS SRM":http://www.sedris.org/srm_4.4/srm_c_cpp.htm >= 4.4.0 (optional but you will need some kind of sophisticated geospatial library)
27 1 Tony Ciavarella
* A "Python":http://www.python.org interpreter (needed to use the "waf":https://code.google.com/p/waf/ build system)
28
29 13 Tony Ciavarella
Build and install these things in accordance with the instructions for your operating system provided by each vendor.  Some hints for certain platforms follow.
30 1 Tony Ciavarella
31 8 Tony Ciavarella
h3. Debian Linux and Derivatives
32
33 39 Tony Ciavarella
h4. Debian 6.x (Squeeze)
34
35 41 Tony Ciavarella
The binary packages for "Boost":http://www.boost.org and "Eigen":http://eigen.tuxfamily.org in the package system are way too old.  You'll have to download the source for them and build "Boost":http://www.boost.org yourself.
36 39 Tony Ciavarella
37
h4. Debian >= 7.x (Wheezy)
38 40 Tony Ciavarella
39 39 Tony Ciavarella
All the dependencies are available via the package system.  To install the Boost and Eigen build dependencies on Debian and maybe other derivatives:
40 8 Tony Ciavarella
<pre>sudo apt-get install libboost-dev libboost-system-dev libboost-thread-dev libboost-date-time-dev libeigen3-dev</pre>
41 1 Tony Ciavarella
42
If you don't already have python, this will get the required bits of that:
43
<pre>sudo apt-get install python</pre>
44 13 Tony Ciavarella
45 33 Tony Ciavarella
h3. Sabayon Linux
46
47
Pat yourself on the back for using a good operating system.  To install boost via the entropy package system:
48
<pre>sudo equo install boost</pre>
49
50 37 Tony Ciavarella
As of 2/22/2013, the Eigen verison in entropy is a bit outdated (3.0.6).  You can use it, but you probably should download the latest version from "Eigen":http://eigen.tuxfamily.org which doesn't require any compilation.  Just extract the content of the archive somewhere and remember to tell Disorder where to find it with --eigen-root=<put actual path to eigen root here> during the configuration step.
51 33 Tony Ciavarella
52 35 Tony Ciavarella
If you don't already have python, this will get the required bits of that: <pre>sudo equo install python</pre>
53 34 Tony Ciavarella
54 13 Tony Ciavarella
h2. Configuration
55
56
If everything is setup properly, this step will be a breeze, but it is important to resolve any errors produced by the configuration step prior to attempting to compile Disorder.
57
58 15 Tony Ciavarella
h3. Linux
59 13 Tony Ciavarella
60
From inside the root of the Disorder tree do this in your favorite terminal emulator:
61
<pre>./waf configure --sedris-srm-root=<put the path to the SEDRIS SRM root here></pre>
62
For example, if your SEDRIS SRM is in /opt/sedris/srm:
63
<pre>./waf configure --sedris-srm-root=/opt/sedris/srm</pre>
64
65
That command will take several seconds and print a bunch of hopefully green stuff.  The output should end up looking something like this:
66
<pre>
67
Setting top to                           : /opt/disorder 
68
Setting out to                           : /opt/disorder/bin 
69
Checking for 'g++' (c++ compiler)        : /usr/bin/g++ 
70
Checking for program doxygen             : /usr/bin/doxygen 
71
Checking for program tar                 : /bin/tar 
72
Checking boost ABI tag                   :  
73
Checking boost includes                  : 1_49 
74
Checking boost libs                      : ok 
75
Checking for boost linkage               : ok 
76
Checking for header boost/asio.hpp       : yes 
77
Checking for header boost/bind.hpp       : yes 
78
Checking for header boost/date_time.hpp  : yes 
79
Checking for header boost/detail/endian.hpp : yes 
80
Checking for header boost/format.hpp        : yes 
81
Checking for header boost/function.hpp      : yes 
82
Checking for header boost/functional/factory.hpp : yes 
83
Checking for header boost/ptr_container/ptr_vector.hpp : yes 
84
Checking for header boost/scoped_ptr.hpp               : yes 
85
Checking for header boost/static_assert.hpp            : yes 
86
Checking for header boost/thread.hpp                   : yes 
87
Checking for program pkg-config                        : /usr/bin/pkg-config 
88
Checking for 'eigen3'                                  : yes 
89
Checking for header Eigen/Dense                        : yes 
90
Checking for SEDRIS SRM                                : /opt/sedris/srm 
91
Checking for SEDRIS SRM include directory              : /opt/sedris/srm/src/include 
92
Checking for SEDRIS SRM library directory              : /opt/sedris/srm/lib/linux-3.1.0-1-amd64-i386-gnu-/OPT 
93
SEDRIS SRM library                                     : /opt/sedris/srm/lib/linux-3.1.0-1-amd64-i386-gnu-/OPT/libsrm.so 
94
Checking for header srf_all.h                          : yes 
95
'configure' finished successfully (25.518s)
96
</pre>
97
98 18 Tony Ciavarella
If you get an error instead of that last line saying that 'configure' finished successfully, you must fix whatever is making it unhappy and try again.
99 13 Tony Ciavarella
100 19 Tony Ciavarella
h4. Clang++
101 16 Tony Ciavarella
102 32 Tony Ciavarella
To use the "Clang":http://clang.llvm.org/ C++ compiler instead of "GCC":http://gcc.gnu.org/, assuming clang++ is installed on the build system:
103 16 Tony Ciavarella
<pre>CXX=<put the path to clang++ here> ./waf configure --sedris-srm-root=<put the path to the SEDRIS SRM root here></pre>
104
105 19 Tony Ciavarella
For example:
106 16 Tony Ciavarella
<pre>CXX=/usr/bin/clang++ ./waf configure --sedris-srm-root=/opt/sedris/srm</pre>
107
108 13 Tony Ciavarella
h3. Windows
109
110
On windows, your $PATH environment variable needs to include the path to the Python interpreter.
111
112 30 Tony Ciavarella
The easiest way to configure Disorder on Windows is to use a modified version of the provided batch file to tell Disorder where your prerequisites live.  Copy the template from @tools/windows/configure.bat@ to the root of the Disorder tree.
113 1 Tony Ciavarella
114 30 Tony Ciavarella
This file contains some variables near the middle that must be set according to your system configuration.  An example is provided in the template for guidance.
115
116
Once you are finished editing configure.bat, it's time to execute it.  From the command line:
117
<pre>configure.bat</pre>
118
119
If everything is successful, you should get something that looks like this:
120
<pre>
121
C:\oss\disorder>python waf configure --boost-includes=c:\oss\boost_1_48_0 --boost-libs=c:\oss\boost_1_48_0\stage\lib --boost-mt --boost-static --eigen-root=c:\oss\eigen-3.0.4 --sedris-srm-root=c:\oss\sedris\srm --sedris-srm-static
122
Setting top to                           : C:\oss\disorder
123
Setting out to                           : C:\oss\disorder\bin
124
Checking for 'msvc' (c++ compiler)       : c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\amd64\CL.exe
125
Checking for program doxygen             : not found
126
Checking for Eigen library               : c:\oss\eigen-3.0.4
127
Checking for header Eigen/Dense          : yes
128
Checking for SEDRIS SRM                  : c:\oss\sedris\srm
129
Checking for SEDRIS SRM include directory : c:\oss\sedris\srm\src\include
130
Checking for SEDRIS SRM library directory : c:\oss\sedris\srm\lib\[Debug/Release]
131
Checking for header srf_all.h             : yes
132
Configuring boost libraries               : debug variant
133
Checking boost ABI tag                    : gd
134
Checking boost includes                   : 1_48
135
Checking boost libs                       : ok
136
Checking for boost linkage                : ok
137
Checking for header boost/asio.hpp        : yes
138
Checking for header boost/bind.hpp        : yes
139
Checking for header boost/date_time.hpp   : yes
140
Checking for header boost/detail/endian.hpp : yes
141
Checking for header boost/format.hpp        : yes
142
Checking for header boost/function.hpp      : yes
143
Checking for header boost/functional/factory.hpp : yes
144
Checking for header boost/ptr_container/ptr_vector.hpp : yes
145
Checking for header boost/scoped_ptr.hpp               : yes
146
Checking for header boost/static_assert.hpp            : yes
147
Checking for header boost/thread.hpp                   : yes
148
Configuring boost libraries                            : optimized variant
149
Checking boost ABI tag                                 :
150
Checking boost includes                                : 1_48
151
Checking boost libs                                    : ok
152
Checking for boost linkage                             : ok
153
Checking for header boost/asio.hpp                     : yes
154
Checking for header boost/bind.hpp                     : yes
155
Checking for header boost/date_time.hpp                : yes
156
Checking for header boost/detail/endian.hpp            : yes
157
Checking for header boost/format.hpp                   : yes
158
Checking for header boost/function.hpp                 : yes
159
Checking for header boost/functional/factory.hpp       : yes
160
Checking for header boost/ptr_container/ptr_vector.hpp : yes
161
Checking for header boost/scoped_ptr.hpp               : yes
162
Checking for header boost/static_assert.hpp            : yes
163
Checking for header boost/thread.hpp                   : yes
164
'configure' finished successfully (31.262s)
165
</pre>
166
167
If you don't see that last line that says @'configure' finished successfully@, then something is screwed up and it needs to be fixed.  Fix it and try again.
168 10 Tony Ciavarella
169 1 Tony Ciavarella
h2. Compiling
170
171 20 Tony Ciavarella
The basic strategy for building Disorder is to invoke the waf build system with the desired build variant.
172 1 Tony Ciavarella
173 20 Tony Ciavarella
Disorder has two build variants:
174 23 Tony Ciavarella
* debug: produces a library that contains debugging symbols and disables most compiler optimizations
175
* optimized: produces a library stripped of debugging symbols and enables compiler optimizations for performance
176 1 Tony Ciavarella
177 23 Tony Ciavarella
It might be reasonable to use the @debug@ variant in a development environment and the @optimized@ variant in a production environment.
178 1 Tony Ciavarella
179 23 Tony Ciavarella
The @debug@ variant is produced by the @build_debug@ build target and the @optimized@ variant is produced by the @build_optimized@ build target.
180
181 26 Tony Ciavarella
The results of the build are put in the @bin@ subdirectory under the name of the variant.  
182 23 Tony Ciavarella
183 26 Tony Ciavarella
Both variants can coexist peacefully in the tree at the same time.
184 23 Tony Ciavarella
185 20 Tony Ciavarella
h3. Linux
186 1 Tony Ciavarella
187 23 Tony Ciavarella
On Linux, to build the Disorder @debug@ variant:
188 20 Tony Ciavarella
<pre>./waf build_debug</pre>
189
190
h3. Windows
191
192 23 Tony Ciavarella
On Windows, the waf script is invoked indirectly.  To build the @optimized@ variant:
193
<pre>python.exe waf build_optimized</pre>
194 12 Tony Ciavarella
195 1 Tony Ciavarella
h2. Building Against the Disorder Library
196 28 Tony Ciavarella
197
h3. Compiling
198
199
In order to compile your goodness against the Disorder library, you'll need to have the header files from the @src@ directory in the Disorder tree and Eigen's include directory in your compiler's include path.  You do not need anything from SEDRIS SRM in your include path.
200
201
h3. Linking
202
203 29 Tony Ciavarella
Just link your program against Disorder's static library that can be found in the @bin/<build variant>@ directory.