ViewVC logotype

Contents of /trunk/doc/install/source.tex

Parent Directory Parent Directory | Revision Log Revision Log

Revision 4915 - (show annotations)
Wed Apr 30 05:29:23 2014 UTC (5 years, 4 months ago) by jfenwick
File MIME type: application/x-tex
File size: 24495 byte(s)
Fixes for macports
1 %!TEX root = install.tex
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 % Copyright (c) 2012-2014 by University of Queensland
4 % http://www.uq.edu.au
5 %
6 % Primary Business: Queensland, Australia
7 % Licensed under the Open Software License version 3.0
8 % http://www.opensource.org/licenses/osl-3.0.php
9 %
10 % Development until 2012 by Earth Systems Science Computational Center (ESSCC)
11 % Development 2012-2013 by School of Earth Sciences
12 % Development from 2014 by Centre for Geoscience Computing (GeoComp)
13 %
14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
16 % Notes about compilers
18 \chapter{Installing from Source}\label{chap:source}
20 This chapter assumes you are using a unix/posix like system (including MacOSX).
22 \section{Parallel Technologies}\label{sec:par}
23 It is likely that the computer you run \escript on, will have more than one processor core.
24 \escript can make use of multiple cores [in order to solve problems more quickly] if it is told to do so,
25 but this functionality must be enabled at compile time.
26 Section~\ref{sec:needpar} gives some rough guidelines to help you determine what you need.
28 There are two technologies which \escript can employ here.
29 \begin{itemize}
30 \item OpenMP -- more efficient of the two [thread level parallelism].
31 \item MPI -- Uses multiple processes (less efficient), needs less help from the compiler.
32 \end{itemize}
34 Escript is primarily tested on recent versions of the GNU and Intel suites (``g++'' / ``icpc'').
35 However, it also passes our tests when compiled using ``clang++''.
36 The table below shows what methods are available with which compilers.
38 \begin{center}
39 \begin{tabular}{|l|c|c|c|}\hline
40 & Serial & OpenMP & MPI \\\hline
41 $\leq$ g++-4.2.1 & \checkmark & \raisebox{-0.1cm}{\footnotemark}& \checkmark \\\hline
42 g++ (recent $\geq 4.3.2$) & \checkmark& \checkmark& \checkmark \\\hline
43 icpc(10) & \checkmark& \checkmark& \checkmark \\\hline
44 icpc(11) & \checkmark& \raisebox{-0.1cm}{\footnotemark} &\checkmark \\\hline
45 icpc(12) & \checkmark& \checkmark&\checkmark \\\hline
46 clang++ & \checkmark& & \checkmark\\\hline
47 \end{tabular}
48 \end{center}
49 \addtocounter{footnote}{-1}
50 \footnotetext{The \openmp support in g++-4.2.1 is buggy/non-functional.}
51 \addtocounter{footnote}{1}
52 \footnotetext{There is a subtle bug in icpc-11 when \openmp and c++ exception handling
53 are combined.}
55 \noindent Where both \openmp and \mpi are marked, \escript can be compiled with either or both.
56 A \checkmark mark means that combination passes our tests.
58 \subsection{What parallel technology do I need?}\label{sec:needpar}
59 If you are using any version of Linux released in the past few years, then your system compiler will support
60 \openmp with no extra work; so you should use it.
61 You will not need MPI unless your computer is some form of cluster.
63 If you are using BSD or MacOSX and you are just experimenting with \escript, then performance is
64 probably not a major issue for you at the moment so you don't need to use either \openmp or MPI.
65 This also applies if you write and polish your scripts on your computer and then send them to a cluster to execute.
66 If in the future you find escript useful and your scripts take significant time to run, then you may want to reinstall
67 \escript with more options.
69 In general, for a single computer, \openmp will give better performance (both time and memory) so use it if possible.
70 If \openmp is not an option, then use MPI.
72 Note that even if your version of \escript has support for \openmp or MPI, you will still need to tell the system to
73 use it when you run your scripts.
74 If you are using the \texttt{run-escript} launcher, then this is controlled by the \texttt{-t} and \texttt{-p} options.
75 If not, then consult the documentation for your MPI libraries (or the compiler documentation in the case of OpenMP
76 \footnote{It may be enough to set the \texttt{OMP\_NUM\_THREADS} environment variable.}).
78 If you are using MacOSX, then see the next section, if not, then skip to Section~\ref{sec:build}.
80 \section{MacOS}
82 To build \escript from source you need to choose and install the following (if you already have some parts installed, skip
83 that section).
84 \begin{itemize}
85 \item \texttt{XCode} and the associated command line tools. [Section~\ref{sec:initcompiler}]
86 \item A package manager. [Section~\ref{sec:osxpackagemanager}]
87 \item A compiler. [Section~\ref{sec:osxcompiler}]
88 \end{itemize}
90 As noted above, different compilers have varying support for parallel processing technologies so your choice of
91 compiler may limit your options of parallel technologies.
92 Once you have the pieces in this section, go to Section~\ref{sec:build} for build instructions.
94 \subsection{Initial compiler}\label{sec:initcompiler}
95 \emph{This information is accurate as far as we can tell at time of writing but things may change.}
97 Even if you wish to install and use a different compiler later, the first step is generally
98 to get some compiler onto your system.
100 As of OSX10.9, the command \texttt{xcodebuild} will allow you to download and install the commandline tools seemingly
101 without an AppleID.
102 For previous releases, it seems to be trickier to get the basic compiler without doing one of the following:
103 \begin{itemize}
104 \item purchasing an iTunes gift card.
105 \item giving Apple access to your credit card.
106 \item signing up as an Apple developer\footnote{If you do this you can download a ``command line tools'' package
107 which installs the relevant compilers without needing to install all of \texttt{XCode}.} and giving up personal information.
108 \end{itemize}
110 If you install \texttt{XCode}, you will need to download the ``command line tools'' optional package [see \texttt{XCode} documentation for details].
112 There are also a number of projects on the net which aim to deliver compilers for MacOS.
113 Use at your own risk.
114 For example:
115 \begin{itemize}
116 \item \url{http://hpc.sourceforge.net}
117 \item \url{http://kennethreitz.org/experiments/xcode-gcc-and-homebrew}
118 \end{itemize}
120 \subsection{OSX Package Managers}\label{sec:osxpackagemanager}
121 Once you have a working compiler, you will need to consider how you will install the components \escript needs.
122 While it is certainly possible to compile and install these pieces manually, it can be easier to use a tool
123 which handles some of the details for you.
124 This is especially true if you will need to uninstall or upgrade them later.
126 On OSX, there are a number of options.
127 The popular ones at time of writing seem to be \texttt{macports} and \texttt{homebrew}.
128 (We have not experimented with \texttt{fink}).
129 \escript does not assume that you are using a particular package manager\footnote{or even if you are using one at all.}.
130 The configuration instructions/files in this guide are just examples that we have found to work.
132 Note that package managers will make changes to your computer based on programs configured by other people from
133 various places around the internet.
134 It is important to satisfy yourself as to the security of those systems.
136 Please consult the documentation for your chosen package manager to determine how to set it up.
138 \subsection{A compiler}\label{sec:osxcompiler}
139 While the command line tools described in \ref{sec:initcompiler}, do contain a c++ compiler, in recent versions of OSX,
140 it is likely to be some version of \texttt{clang++}\footnote{even if it is
141 labelled as g++ it is likely clang++ under the hood.}.
142 If you don't need \openmp or genuine \texttt{g++} or you have installed an \openmp supporting compiler
143 using some other method, then you can skip to Section~\ref{sec:build}.
145 If you are still reading this part, we assume that you wish to use \texttt{g++} to build escript on your system and that you are
146 using a package manager.
147 The challenge here isn't installing the compiler itself.
148 The issue is that the other dependencies that \escript needs have
149 probably\footnote{or ``will probably be compiled'' in the case of \texttt{homebrew}.} been compiled by \texttt{clang} rather than the compiler
150 you want to use.
151 A lot of the time this is fine, but in the case of \texttt{c++} libraries such as \texttt{boost}, the result can be two different
152 standard c++ libraries\footnote{\texttt{libstdc++} and \texttt{libc++} on OSX 10.9.} being used in the same program and confusing matters.
153 Apart from giving up, there are two ways to try to solve this problem.
154 \begin{enumerate}
155 \item Changing the compiler that your package manager uses to compile its packages.
156 \emph{This is not for the faint hearted!} But we do provide some instructions in Appendix~\ref{chap:chcomp}.
157 \item Install most of the libraries using your package manager to install most things and then compile the c++ parts yourself.
158 (The most important one is \texttt{boost}).
159 We have tested this on Macports and it works well. The only trick is to make sure that your ``replacement'' components are in a separate
160 directory which is ahead of you Macports directory in the various paths (\texttt{PATH, LD\_LIBRARY\_PATH, DYLD\_LIBRARY\_PATH}).
161 \end{enumerate}
166 % \subsection{Packaging System}
167 % The packaging system (also known as the package manager) is the tool you use to search for and install new open source software.
168 % For Linux, there will be one set up by default: the apt tools on Debian and Ubuntu, yast on Suse, yum on the RedHat family.
169 % On BSD systems this will be a combination of \texttt{pkg_add} and the \texttt{ports} tree.
171 % For MacOS, this is a bit more tricky.
172 % There are a number of possible systems including \texttt{macports} and \texttt{homebrew}\footnote{There is also \texttt{fink},
173 % but we have not experimented with that.}, but they do not come pre-installed so if you want to make use of one you will need
174 % you will need to install it.
176 % Packaging systems will make changes to your computer based on programs configured by other people from
177 % various places around the internet.
178 % It is important to satisfy yourself as to the security of those systems.
180 % If you are using Linux or have decided that you don't want to use OpenMP skip to Section~\ref{sec:build}.
183 % \textsl{This whole section could be moved to an appendix.
184 % Need to make it clear somewhere near that it is not intended to be complicated but to give options.
185 % }
188 % make it clear that escript can be customised to use whatever you have
190 %Should include optional customisation
192 %Talk about options_files and the ability to specify them
194 %talk about -j1 and replacing it with more ops
195 %Talk about installation prefix
197 %also note that this doesn't build the doco but we do have downloads for that or you can install extra packages
199 \section{Building}\label{sec:build}
201 To simplify things for people, we have prepared \texttt{_options.py} files for a number of
202 systems\footnote{These are correct a time of writing but later versions of those systems may require tweaks.
203 Also, these systems represent a cross section of possible platforms rather than meaning those systems get particular support.}.
204 The \texttt{_options.py} files are locate in the scons/os directory. We suggest that the file most relavent to your os
205 be copied from the os directory to the scons directory and renamed to the form XXXX_options.py where XXXX should be replaced with your computer's name.
206 If your particular system is not in the list below, or if you want a more customised
207 build\footnote{for example, you want MPI functionality or you wish to use a different compiler},
208 see Section~\ref{sec:othersrc} for instructions.
209 \begin{itemize}
210 \item Debian - \ref{sec:debsrc}
211 \item Ubuntu - \ref{sec:ubsrc}
212 \item OpenSuse - \ref{sec:susesrc}
213 \item Centos - \ref{sec:centossrc}
214 \item Fedora - \ref{sec:fedorasrc}
215 \item MacOS (macports) - \ref{sec:macportsrc}
216 \item MacOS (homebrew) - \ref{sec:homebrewsrc}
217 \item FreeBSD - \ref{sec:freebsdsrc}
218 \end{itemize}
220 Once these are done proceed to Section~\ref{sec:cleanup} for cleanup steps.
222 All of these instructions assume that you have obtained the source (uncompressed it if necessary).
223 \subsection{Debian}\label{sec:debsrc}
225 \begin{shellCode}
226 sudo aptitude install python-dev python-numpy libboost-python-dev libnetcdf-dev
227 sudo aptitude install scons lsb-release
228 sudo aptitude install python-sympy python-matplotlib python-scipy
229 sudo aptitude install python-pyproj python-gdal
230 \end{shellCode}
233 \begin{optionalstep}
234 If for some reason, you wish to rebuild the documentation, you would also need the following:
235 \begin{shellCode}
236 sudo aptitude install python-sphinx doxygen python-docutils texlive
237 sudo aptitude install zip texlive-latex-extra latex-xcolor
238 \end{shellCode}
239 \end{optionalstep}
241 \noindent In the source directory execute the following (substitute squeeze or wheezy as appropriate for XXXX):
242 \begin{shellCode}
243 scons -j1 options_file=scons/os/XXXX_options.py
244 \end{shellCode}
246 \noindent If you wish to test your build, you can use the following:
247 \begin{shellCode}
248 scons -j1 py_tests options_file=scons/os/XXXX_options.py
249 \end{shellCode}
251 \subsection{Ubuntu}\label{sec:ubsrc}
253 If you have not installed \texttt{aptitude}, then substitute \texttt{apt-get} in the following.
254 \begin{shellCode}
255 sudo aptitude install python-dev python-numpy libboost-python-dev libnetcdf-dev
256 sudo aptitude install scons lsb-release
257 sudo aptitude install python-sympy python-matplotlib python-scipy
258 sudo aptitude install python-pyproj python-gdal
259 \end{shellCode}
262 \begin{optionalstep}
263 If for some reason, you wish to rebuild the documentation, you would also need the following:
264 \begin{shellCode}
265 sudo aptitude install python-sphinx doxygen python-docutils texlive
266 sudo aptitude install zip texlive-latex-extra latex-xcolor
267 \end{shellCode}
268 \end{optionalstep}
270 \noindent In the source directory execute the following (substitute precise, quantal or raring as appropriate for XXXX):
271 \begin{shellCode}
272 scons -j1 options_file=scons/os/XXXX_options.py
273 \end{shellCode}
275 \noindent If you wish to test your build, you can use the following:
276 \begin{shellCode}
277 scons -j1 py_tests options_file=scons/os/XXXX_options.py
278 \end{shellCode}
282 \subsection{OpenSuse}\label{sec:susesrc}
283 These instructions were prepared using release $13.1$.
285 \noindent Install packages from the main distribution:
286 \begin{shellCode}
287 sudo zypper install libboost_python1_53_0 python-devel python-numpy
288 sudo zypper install python-scipy python-sympy python-matplotlib libnetcdf_c++-devel
289 sudo zypper install gcc-c++ scons boost-devel netcdf-devel
290 \end{shellCode}
291 These will allow you to use most features except some parts of the \downunder inversion library.
292 If you wish to use those, you will need some additional packages [python-pyproj, python-gdal].
293 This can be done after Escript installation.
295 \begin{optionalstep}
296 Add \url{http://ftp.suse.de/pub/opensuse/repositories/Application:/Geo/openSUSE_13.1/}
297 to your repositories in \texttt{zypper}.
298 \begin{shellCode}
299 sudo zypper install python-pyproj, python-gdal
300 \end{shellCode}
301 \end{optionalstep}
303 Now to build escript itself.
304 In the escript source directory:
305 \begin{shellCode}
306 scons -j1 options_file=scons/os/opensuse13.1_options.py
307 \end{shellCode}
309 \noindent If you wish to test your build, you can use the following:
310 \begin{shellCode}
311 scons -j1 py_tests options_file=scons/os/opensuse13.1_options.py
312 \end{shellCode}
314 \noindent Now go to Section~\ref{sec:cleanup} for cleanup.
316 \subsection{Centos}\label{sec:centossrc}
317 These instructions were prepared using release $6.5$.
318 The core of escript works, however some functionality is not availible because the default packages for some dependencies in Centos are too old.
320 \noindent Install packages from the main distribution:
321 \begin{shellCode}
322 yum install python-devel numpy scipy scons boost-devel
323 yum install python-matplotlib gcc-c++
324 yum install boost-python
325 \end{shellCode}
327 The above packages will allow you to use most features except saving and loading files in \texttt{netCDF}
328 format and the \downunder inversion library.
329 If you wish to use those features, you will need to install some additional packages.
330 NetCDF needs to be installed when you compile if you wish to use it.
331 \begin{optionalstep}
332 \noindent Add the \texttt{EPEL} repository.
333 \begin{shellCode}
334 rpm -U http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
335 \end{shellCode}
337 \begin{shellCode}
338 yum install netcdf-devel gdal-python
339 \end{shellCode}
340 \end{optionalstep}
342 \noindent For some coordinate transformations, \downunder can also make use of the python interface to a tool called \texttt{proj}.
343 There does not seem to be an obvious centos repository for this though.
344 If it turns out to be necessary for your particular application, the source can be downloaded.
346 \noindent Now to build escript itself.
347 In the escript source directory:
348 \begin{shellCode}
349 scons -j1 options_file=scons/os/centos6.5_options.py
350 \end{shellCode}
352 \noindent Now go to Section~\ref{sec:cleanup} for cleanup.
354 \subsection{Fedora}\label{sec:fedorasrc}
355 These instructions were prepared using release $20$.
357 \noindent Install packages
358 \begin{shellCode}
359 yum install netcdf-cxx-devel gcc-c++ scipy
360 yum install sympy scons pyproj gdal python-matplotlib
361 yum install boost-devel
362 \end{shellCode}
364 \noindent Now to build escript itself.
365 In the escript source directory:
366 \begin{shellCode}
367 scons -j1 options_file=scons/os/fedora18_options.py
368 \end{shellCode}
370 \noindent If you wish to test your build, you can use the following:
371 \begin{shellCode}
372 scons -j1 py_tests options_file=scons/os/fedora18_options.py
373 \end{shellCode}
375 \noindent Now go to Section~\ref{sec:cleanup} for cleanup.
377 \subsection{MacOS (macports)}\label{sec:macportsrc}
379 \begin{shellCode}
380 port install python27
381 port select --set python python27
382 port install scons
383 port install openmpi
384 port install py27-numpy
385 port install boost
386 port install py27-sympy
387 port select --set py-sympy py27-sympy
388 install py27-scipy
389 install py27-pyproj
390 install py27-gdal
391 install py27-netcdf4
392 install netcdf-cxx
393 \end{shellCode}
395 The options file we provide as an example below uses \texttt{clang} as its compiler.
396 If you wish to use \texttt{g++}, then you will need to modify the
397 \begin{verbatim}
398 tools_names = ['clang']
399 \end{verbatim}
400 to
401 \begin{verbatim}
402 tools_names = ['default']
403 \end{verbatim}
406 \begin{shellCode}
407 scons -j1 options_file=scons/os/macports_options.py
408 \end{shellCode}
411 \subsection{MacOS (homebrew)}\label{sec:homebrewsrc}
413 Note that these steps add ``non-official'' packages.
414 You will also want to make sure that the homebrew Python is executed in preference to the system
415 Python\footnote{Putting \texttt{/usr/local/bin} at the front of your PATH is one way to do this.}.
417 \begin{shellCode}
418 brew install python
419 brew install scons
420 brew install boost
421 brew tap samueljohn/python
422 brew tap homebrew/science
423 pip install nose
424 brew install gfortran
425 brew install samueljohn/python/numpy
426 brew install scipy
427 brew install gdal
428 brew install openmpi
429 brew install matplotlib
430 brew install netcdf --enable-cxx-compat
431 \end{shellCode}
433 There do not appear to be formulae for \texttt{sympy} or \texttt{pyproj} so if you wish to use those features, then
434 you will need to install them separately.
437 \begin{shellCode}
438 scons -j1 options_file=scons/os/homebrew_options.py
439 \end{shellCode}
442 \subsection{FreeBSD}\label{sec:freebsdsrc}
443 The following was tested on the $9.1$ release of FreeBSD.
444 It passes the majority of tests but there is an issue related to some features in the inversion library.
445 The following set of installations ``works'' but is not guaranteed to be minimal\footnote{Depending on your needs you might be able to
446 get by with a smaller set of packages.}.
448 Install the following packages:
449 \begin{itemize}
450 \item python
451 \item scons
452 \item boost-python-libs
453 \item bash
454 \end{itemize}
456 Now install the following ports:
457 \begin{itemize}
458 \item science/py-scipy
459 \item science/py-netCDF4
460 \item math/py-sympy
461 \item graphics/py-pyproj
462 \item graphics/py-gdal
463 \item net/openmpi
464 \end{itemize}
466 You will need to add \texttt{/usr/local/mpi/openmpi/bin} to your path if you wish to build with MPI.
468 Next choose (or create) your options file.
469 In this case we have three prepared in the \texttt{scons/os} directory:
470 \begin{itemize}
471 \item \texttt{freebsd91_options.py}
472 \item \texttt{freebsd91_mpi_options.py} If you would like to use MPI.
473 \item \texttt{freebsd91_gcc46_options.py} Use this if you have managed to change compilers to gcc4.6 (and would like to use OpenMP).
474 \end{itemize}
476 In the escript source directory (where ZZZ is your options file):
477 \begin{shellCode}
478 scons -j1 options_file=ZZZ
479 \end{shellCode}
483 \subsection{Other Systems / Custom Builds}\label{sec:othersrc}
485 \escript has support for a number of optional packages.
486 Some, like \texttt{netcdf} need to be enabled at compile time, while others, such as \texttt{sympy} and the projection packages
487 used in \downunder are checked at run time.
488 For the second type, you can install them at any time (ensuring that python can find them) and they should work.
489 For the first type, you need to modify the options file and recompile with scons.
490 The rest of this section deals with this.
492 To avoid having to specify the options file each time you run scons, copy an existing \texttt{_options.py} file from the
493 \texttt{scons/} or \texttt{scons/os/} directories. Put the file in the \texttt{scons} directory and name
494 it \textit{yourmachinename}\texttt{_options.py}.\footnote{If the name
495 has - or other non-alpha characters, they must be replaced with underscores in the filename}.
496 For example: on a machine named toybox, the file would be \texttt{scons/toybox_options.py}.
498 Individual lines can be enabled/disabled, by removing or adding \# (the python comment character) to the beginning of the line.
499 For example, to enable OpenMP, change the line
500 \begin{verbatim}
501 #openmp = True
502 \end{verbatim}
503 to
504 \begin{verbatim}
505 openmp = True
506 \end{verbatim}.
508 If you are using libraries which are not installed in the standard places (or have different names) you will need to
509 change the relevant lines.
510 A common need for this would be using a more recent version of the boost::python library.
512 You can also change the compiler or the options passed to it by modifying the relevant lines.
514 \subsubsection*{MPI}
515 If you wish to enable or disable MPI, or if you wish to use a different implementation of MPI, you can use the \texttt{mpi}
516 configuration variable.
517 To disable MPI use, \verb|mpi = 'none'|.
518 You will also need to ensure that the \texttt{mpi_prefix} and \texttt{mpi_libs} variables are uncommented and set correctly.
520 \subsubsection{Python3}
521 \escript works with \texttt{python3} but until recently, many distributions have not distributed python3 versions of their packages.
522 You can try it out though by modifying the following variables:
524 \begin{verbatim}
525 pythoncmd='python3'
526 \end{verbatim}
528 \begin{verbatim}
529 usepython3=True
530 \end{verbatim}
532 \begin{verbatim}
533 pythonlibname='whateveryourpython3libraryiscalled'
534 \end{verbatim}
539 \subsubsection{Testing}
540 As indicated earlier, you can test your build using \texttt{scons py_tests}.
541 Note however, that some features like \texttt{netCDF} are optional for using \escript, the tests will report a failure if
542 they are missing.
544 \section{Cleaning up}
545 \label{sec:cleanup}
547 Once the build (and optional testing) is complete, you can remove everything except:
548 \begin{itemize}
549 \item bin
550 \item esys
551 \item lib
552 \item doc
553 \item CREDITS.TXT
555 \end{itemize}
556 The last two aren't strictly required for operation.
557 The \texttt{doc} directory is not required either but does contain examples of escript scripts.
559 You can run escript using \texttt{\textit{path_to_escript_files}/bin/run-escript}.
560 Where \texttt{\textit{path_to_escript_files}} is replaced with the real path.
562 \begin{optionalstep}
563 You can add the escript \texttt{bin} directory to your \texttt{PATH} variable.
564 The launcher will then take care of the rest of the environment.
565 \end{optionalstep}
567 \section{Optional Extras}
569 Some other packages which might be useful include:
570 \begin{itemize}
571 \item support for silo format (install the relevant libraries and enable them in the options file).
572 \item Visit --- visualisation package. Can be used independently but our \texttt{weipa} library can make a Visit
573 plug-in to allow direct visualisation of escript files.
574 \item gmsh --- meshing software used by our \texttt{pycad} library.
575 \item mayavi --- another visualisation tool.
576 \end{itemize}
579 %Need a better title but this is stuff like visit and silo (for non-debian distros)
580 %Perhaps - optional extras

  ViewVC Help
Powered by ViewVC 1.1.26