cgal/Installation/doc_tex/Installation/installation.tex

1412 lines
61 KiB
TeX

%%
%% *** CGAL Installation Guide ***
%%
%% file: installation.tex
%%
%% authors: Michael Hoffmann, Dima Pasechnik and Wieger Wesselink
%%
%% $Id$
%%
%% macro for GNU
\newcommand{\gnu}{\textsc{Gnu}}
%% macro for QT
\newcommand{\qt}{\textsc{Qt}}
%% macro for GMP
\newcommand{\gmp}{\textsc{Gmp}}
%% macro for MPFR
\newcommand{\mpfr}{\textsc{Mpfr}}
%% macro for Boost
\newcommand{\boost}{\textsc{Boost}}
%% macro for Core
\newcommand{\core}{\textsc{Core}}
%% macro for Taucs
\newcommand{\taucs}{\textsc{Taucs}}
%% macro for Windows-specific installation
\newcommand{\MSInst}{Windows-specific Installation}
%% macro for g++
\newcommand{\Gcc}[1]{\gnu~\texttt{g++}~{\rm #1}}
\newcommand{\gccurl}{\path'http://gcc.gnu.org/'}
%% macro for SUNPRO CC
\newcommand{\sunprocc}[1]{\textsc{Sunpro}~\texttt{CC}~{\rm #1}}
\newcommand{\sunproccurl}{\path'http://www.sun.com/software/Developer-products/cplusplus/'}
%% macro for SGI CC
\newcommand{\mipsprocc}{\textsc{SGI}~Mips(Pro)~\texttt{CC}}
\newcommand{\mipsprourl}{\path'http://www.sgi.com/software/irix/tools/c++.html'}
%% macro for Borland C++
\newcommand{\bcc}[1]{\textsc{Borland}~\texttt{C++}~{\rm #1}}
\newcommand{\bccurl}{\path'http://www.inprise.com/bcppbuilder/'}
%% macro for Microsoft Visual C++
\newcommand{\msvc}[1]{\textsc{MS}~Visual~\texttt{C++}~{\rm #1}}
\newcommand{\msvcurl}{\path'http://msdn.microsoft.com/visualc/'}
%% macro for Intel C++ Compiler
\newcommand{\icl}[1]{\textsc{Intel}~\texttt{C++}~{\rm #1}}
\newcommand{\iclurl}{\path'http://developer.intel.com/software/products/compilers/'}
%% macro for Microsoft Windows
\newcommand{\mswin}{\textsc{MS}~Windows}
%% macro for CGAL release number
\newcommand{\cgalrelease}{3.2}
%% macro for CGAL directory
\newcommand{\cgaldir}{\texttt{CGAL-\cgalrelease}}
%% macro for YOUR CGAL directory :)
\newcommand{\yourcgaldir}{$<$\textit{insert your \cgaldir\ dir}$>$}
%% macro for CGAL install config directory
\newcommand{\cgalinstconfdir}{\cgaldir\texttt{/config/install}\index{directories!config/install@\texttt{config/install}}}
%% macros for WWW pages
\newcommand{\cgalhomepage}{\path'http://www.cgal.org'}
\newcommand{\gmppage}{\path'http://www.swox.com/gmp/'}
\newcommand{\mpfrpage}{\path'http://www.mpfr.org/'}
\newcommand{\boostpage}{\path'http://www.boost.org/'}
\newcommand{\corepage}{\path'http://www.cs.nyu.edu/exact/core\_pages/'}
\newcommand{\ledapage}{\path'http://www.algorithmic-solutions.com/'}
\newcommand{\trolltechpage}{\path'http://www.trolltech.com'}
\newcommand{\qtpage}{\path'http://doc.trolltech.com/'}
\newcommand{\qtmocpage}{\path'http://doc.trolltech.com/moc.html'}
\newcommand{\taucspage}{\path'http://www.tau.ac.il/~stoledo/taucs/'}
\newcommand{\xpage}{\path'http://www.x.org/'}
\newcommand{\zlibpage}{\path'http://www.zlib.net/'}
%% write index in typewriter type. (c) Susan :-)
\newcommand{\TTindex}[1]{\index{#1@{\tt #1}}}
\newcommand{\TTsubindex}[2]{\index{#1@{\tt #1}!{#2}}}
\newcommand{\TTsubindextwo}[2]{\index{#1!#2@{\tt #2} }}
\section{Introduction}
\cgal\ stands for \textit{Computational Geometry Algorithms Library}.
It is a software library written in \CC, whose development started in
an {\sc Esprit Ltr} project. The goal of \cgal\ is to make the large
body of geometric algorithms developed in the field of computational
geometry available for industrial application.
This document describes how to install \cgal\ on Unix-like systems.
Besides that, you will find some information about the makefile
structure of \cgal\ and the support for using \cgal\ together with
other software libraries, such as the \boost\
libraries\footnote{\boostpage}, the \gnu\ Multiple Precision library
\gmp\footnote{\gmppage}, the \mpfr\ library\footnote{\mpfrpage} for
multiple-precision floating-point computations with exact rounding,
the \core\ library\footnote{\corepage} for robust numerical and
geometric computation, \leda, the Library of Efficient Datatypes and
Algorithms\footnote{\ledapage}, \taucs, a library of sparse linear
solvers\footnote{\taucspage}, or Trolltech's\footnote{\trolltechpage}
\qt\ toolkit.
\section{Prerequisites\label{sec:prerequisites}}
In order to build the \cgal\ libraries you need a \CC\ compiler. Most
recent compilers on Unix platforms and \mswin\ are supported, provided
that they reasonably conform to the ISO 14882 standard for \CC.
\cgaldir\ supports the following compilers/operating systems:
\begin{center}\index{compilers!supported}\index{supported compilers}
\renewcommand{\arraystretch}{1.3}
\gdef\lcTabularBorder{2}
\begin{tabular}{|l|l|} \hline
\textbf{compiler} & \textbf{operating system}\\\hline\hline
%%\mipsprocc\ 7.4 (n32 and 64) \footnotemark[7] & IRIX 6.5\\\hline
\Gcc{3.3.3, 3.4, 4.0, 4.1} \footnotemark[9]
& IRIX 6.5 / Solaris 2.6+ / Linux 2.x / MacOS X /
\\ & \mswin\ 95/98/2000/XP/NT4\footnotemark[10]\\\hline
%%\sunprocc{5.5} \footnotemark[11] & Solaris 2.6+\\\hline
\msvc{7.1} (\textsc{.NET}) \footnotemark[12]
& \mswin\ 95/98/2000/XP/NT4\footnotemark[10]\\\hline
\icl{8.1} \footnotemark[13]
& \mswin\ 95/98/2000/XP/NT4\footnotemark[10]\\\hline
%% \bcc{5.5.1} \footnotemark[13]
%% & \mswin\ 95/98/2000/XP/NT4\footnotemark[10]\\\hline
\end{tabular}
\end{center}
%%\footnotetext[7]{\mipsprourl}\addtocounter{footnote}{1}
\footnotetext[9]{\gccurl}\addtocounter{footnote}{1}
\footnotetext[10]{with Cygwin
(\path~http://www.cygwin.com~)}\addtocounter{footnote}{1}
%%\footnotetext[11]{\sunproccurl}\addtocounter{footnote}{1}
\footnotetext[12]{\msvcurl}\addtocounter{footnote}{1}
\footnotetext[13]{\iclurl}\addtocounter{footnote}{1}
%%\footnotetext[13]{\bccurl}\addtocounter{footnote}{1}
\addtocounter{footnote}{1}
Note that neither prerelease versions nor repository snapshots of
\texttt{GCC} are supported.
Moreover, \cgal\ requires a working installation of the \boost\
libraries (at least, the header files) Version 1.32 or later. In case
the \boost\ libraries are not installed on your system already, you
can obtain them from \boostpage.
Having \gmp\ version 4.1.4 or later and \mpfr\ version 2.0.1 or later
installed is highly recommended. These libraries can be obtained from
\gmppage\ and \mpfrpage, respectively, if they should not be present
on your system. Note that \mpfr\ used to be included with \gmp\ up to
\gmp\ version 4.1.X, but it is not included anymore starting from
\gmp~4.2. Within \cgal, support for \gmp\ requires also \mpfr\ and
vice versa.
If you are going to install \cgal\ using
Cygwin\footnote{\path~http://www.cygwin.com~}, please read
Section~\ref{sec:cygwin} first.
\section{Getting CGAL\label{sec:gettingcgal}}
\index{CGAL@\cgal!getting}\index{getting \cgal}
The \cgal\ library can be downloaded from the \cgal\
homepage:\index{CGAL@\cgal!homepage}
\begin{quote}
\cgalhomepage
\end{quote}
and go to the `Download' section. Just follow the instructions on this
page to obtain your copy of the library.
After you have downloaded the file containing the \cgal\ library, you
have to decompress it. Use the commands
\begin{verbatim}
gunzip <filename>.tar.gz
tar xvf <filename>.tar
\end{verbatim}
Alternatively, your browser might be able to invoke the right
decompression program by itself.
In both cases the directory \cgaldir\ will be created. This directory
contains the following subdirectories:\index{directories!structure}
\begin{center}
\renewcommand{\arraystretch}{1.3}
\gdef\lcTabularBorder{2}
\begin{tabular}{|l|l|} \hline
\textbf{directory} & \textbf{contents}\\\hline\hline
\texttt{auxiliary} & packages that can optionally be used with \cgal\\\hline
\texttt{config} & configuration files for install script\\\hline
\texttt{demo} & demo programs (most of them need \qt, geomview
or other third-party products)\\\hline
\texttt{doc\_html} & documentation (HTML)\\\hline
\texttt{doc\_pdf} & documentation (PDF)\\\hline
\texttt{doc\_ps} & documentation (Postscript)\\\hline
\texttt{examples} & example programs\\\hline
\texttt{include} & header files\\\hline
\texttt{lib} & (shared) object libraries\\\hline
\texttt{make} & files with platform dependent makefile settings\\\hline
\texttt{scripts} & some useful scripts (e.g. for creating makefiles)\\\hline
\texttt{src} & source files\\\hline
\end{tabular}
\end{center}
The directories \texttt{include/CORE} and \texttt{src/Core} contain a
distribution of the \core\ library\footnote{\corepage} version~1.7 for
robust numerical and geometric computation. \core\ is not part of
\cgal\ and has its own license.
\subsection{Visualization\label{sec:vis}}
The programs below the \texttt{demo} directory provide visual output.
Most of these use \ccc{CGAL::Qt_widget}, a widget and some helper
classes that allow to interact with two dimensional \cgal\ objects in
\qt~3 based applications.\index{visualization!Qt} There is no support
for \qt~4 in \cgal\ yet.
If you have \leda\ installed, you might want to use
\ccc{CGAL::Window_stream} as an interface between two dimensional
\cgal\ objects and a \ccc{leda_window}. To be able to use the
\ccc{Window_stream}, you simply have to compile \cgal\ with \leda\
support.\index{visualization!LEDA}
Some demo programs for 3D structures require the geomview program for
visualization.\index{visualization!geomview} This is available from
\path'http://www.geomview.org' (note that it does not run on \mswin).
\section{Installing CGAL}
The directory \cgaldir\ contains a Bourne shell script called
\texttt{install\_cgal}\TTindex{install\_cgal}
\index{scripts!\texttt{install\_cgal}}. The script can be run in two
modes: a menu-driven interactive mode and a non-interactive mode.
Normally you should use the interactive mode, but in case you run into
problems with it or do not like it for some reason, you can still use
the non-interactive mode.
We first describe a sample installation in
Section~\ref{sec:sample-inst}. This section provides an overview on
the interactive installation. If you want more detailed information
about specific menus and their options, take a look at
Section~\ref{sec:interactive-mode}. Finally, for the non-interactive
mode refer to Section~\ref{sec:non-interactive}.
\section{A Sample Installation\label{sec:sample-inst}}
In this section we sketch an example installation on a Linux machine
with the \Gcc{3.4.5} compiler. For a complete description of the
different menus and their options refer to
Section~\ref{sec:interactive-mode}.
\subsection{Start the Script}
Go to the \cgaldir\ directory and enter the command
\begin{verbatim}
./install_cgal -i
\end{verbatim}
The script first parses support options for various third party
libraries that can be use together with \cgal. Then you get a message
indicating the \cgal\ version you are going to install and that you
are running the interactive mode. It takes some time while the script
locates a number of utility programs. You will not get informed about
this\footnote{If you are that curious what happens exactly, have a
look at the file
\texttt{\cgaldir/install.log}.\TTindex{install.log}}, but you see
some dots written to the screen indicating progress.
{\ccTexHtml{\scriptsize}{}
\begin{alltt}
Parsing support specfiles for 3rd party libraries:
BOOST, BOOSTPROGRAMOPTIONS, EXTERNTAUCSNIX, EXTERNTAUCSMS, TAUCSNIX,
TAUCSMS, X11, GMP, GMPXX, MPFR, CORE, CGALCORE, ZLIB, ZLIBMS, LEDA,
LEDAWIN, LEDAMS, LEDAWINMS, QT3MT, QT3ST, QT3MSMT, QT3MSST, done.
--------------------------------------------------------
This is the install script for CGAL \cgalrelease
--------------------------------------------------------
starting interactive mode - one moment, please
.
--------------------------------------------------------
Settings from Command Line/Environment:
--------------------------------------------------------
Choosing compiler GNU 3.4.5.
\end{alltt}}
The script searches for \CC\ compilers that are installed on your
system and accessible through your \texttt{PATH} environment variable.
If more than one compiler (that is supported by \cgal) is found on
your system, you are presented a list of compilers to choose from. In
this example, only one compiler, \Gcc{3.4.5}, was found on the system
and the script selects this compiler without any user interaction. In
general, the selection of which compiler to use can be made from the
compiler menu (cf. Section~\ref{sec:compiler-menu}).
The script interprets the environment variables \texttt{CXX},
\texttt{CXXFLAGS}, and \texttt{LDFLAGS} and accordingly sets the
compiler, compiler flags, and linker flags, respectively. Therefore,
another way to select the compiler is to set the environment variable
\texttt{CXX} to the compiler to be selected.
A menu similar to the following will appear on your screen.\index{main
menu}\index{menus!main}
{\ccTexHtml{\scriptsize}{} \label{pic:main-menu}
\begin{alltt}
****************************************************************
** CGAL 3.2 Installation Main Menu **
** =============================== **
** **
** OS: i686_Linux-2.6 **
** Compiler: GNU 3.4.5 **
** Support for: no other library. **
** **
** Compiler is supported by CGAL. **
** The setup has not been tested. **
** **
** There are no libs for this os/compiler. **
** **
** <C> Compiler Menu **
** <S> Support Menu **
** <T> Test (and save) setup **
** <A> Run all setup tests (no cache) **
** **
** <B> Build CGAL Libraries **
** <I> Install CGAL Libraries **
** **
** <Q> Back to OS **
** **
** Your Choice: **
** **
****************************************************************
\end{alltt}}
The first lines below the headline contain some kind of status report:
current OS and compiler, and which third-party software libraries are
supported. Moreover you can see that the current setup has not yet
been tested, and that there do not exist \cgal\ libraries for this
OS/compiler combination in the \cgal\ lib directory by now.
\subsection{Test the Setup\label{sec:test-the-setup}}
As a first step, you should test the current setup by typing ``{\tt
t}''. This starts a number of tests to check whether your compiler
supports certain language constructs or has specific bugs. The script
also tries to locate other libraries that are installed on your system
and can be used together with \cgal. There is quite a number of these
tests, so this step may take a while. For each test you should get a
message what in particular is tested at the moment and what the result
is. More details about why a certain test failed can be found in the
installation logfile \texttt{install.log}.
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
****************************************************************
** The following lines show results of configuration tests. **
** Some of the tests might fail, since many compilers are **
** still not completely ISO standard compliant. **
** Since we worked around the arising problems, **
** *** CGAL will work fine *** **
** regardless of the outcome of these tests. **
****************************************************************
Checking for standard header files
All headers at once : ok.
Testing for CCTYPE_MACRO_BUG ... ok.
<many lines omitted>
Saving current setup ... done.
\end{verbatim}
}
After all these tests are completed, the current settings are saved
into a file that resides in the directory \cgalinstconfdir. Thus, if
you run the install script a second time for this OS/compiler, you
will not have to go through the whole config-/test cycle again, but
the configuration will be retrieved from the corresponding config file
instead. In case you want to re-run all tests, pick the option
\texttt{<A> Run all setup tests (no cache)} from the main menu.
Looking at the menu header field ``\texttt{Support for}'', you can see
whether the setup has been tested successfully and which other
libraries have been found on your system. The install script
automatically enables \cgal\ support for any library that has been
found.
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
****************************************************************
** CGAL 3.2-I-432 Installation Main Menu **
** ===================================== **
** **
** OS: i686_Linux-2.6 **
** Compiler: GNU 3.4.5 **
** Support for: BOOST, BOOST_PROGRAM_OPTIONS, X11, GMP, **
** MPFR, GMPXX, CORE, ZLIB, and QT. **
** **
** Compiler is supported by CGAL. **
** The setup has been tested ok. **
<some lines omitted>
****************************************************************
\end{verbatim}
}
In case you are not happy with the set of libraries for which support
is configured, you can change the settings for each library
individually from the support menu (cf.
Section~\ref{sec:support-menu}). In case you wonder why a certain
library was not automatically configured correctly, you will find more
details in the installation logfile \texttt{\cgaldir/install.log}.
\subsection{Build the CGAL Libraries\label{sec:build-the-libs}}
We are now ready to build the \cgal\ libraries. From the main menu
just type ``{\tt b}'' to start compilation. Building consists of
several steps:
%%
\begin{enumerate}
\item write the include makefile,
\item compile the static libraries,
\item \textit{(on some systems)} compile the shared libraries,
\item \textit{(if \qt\ support is configured)} compile the CGALQt
library, \textit{and}
\item \textit{(if \textsc{CgalCore} support is configured)} compile
the \core\ library.
\end{enumerate}
%%
The include makefile\index{include makefile} encapsulates the OS-- and
compiler-specific settings and should be included (hence the name) in
all makefiles that compile \cgal\ applications. If everything went ok,
the output should look as follows. (Otherwise, you should have a look
at the error messages from compiler or linker.)
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
****************************************************************
** **
** Compiling CGAL 3.2 **
** ================== **
** **
****************************************************************
OS: i686_Linux-2.6
COMPILER: GNU 3.4.5
BOOST: supported
BOOST_PROGRAM_OPTIONS: supported
EXTERNTAUCS: not supported
TAUCS: not supported
X11: supported
GMP: supported
MPFR: supported
GMPXX: supported
CORE: supported
ZLIB: supported
LEDA: not supported
LEDAWIN: not supported
QT: supported
Generating Makefiles ... done.
Building CGAL_lib ... done.
Building CGAL_sharedlib ... done.
Building CGAL_Qt ... done.
Building CGAL_Core ... done.
****************************************************************
** Please press <ENTER> to continue. **
****************************************************************
\end{verbatim}}
{
}
That's all, it's done. Press ``\texttt{<ENTER>}'' to return to the
main menu. \cgal\ is now ready to use.
\subsection{Install the CGAL Libraries\label{sec:install-the-libs}}
It is perfectly fine to install and use \cgal\ from its build-tree
and, in fact, this has been the default setup for many years. But
sometimes it is more convenient to install \cgal\ in a directory
outside its build-tree such as, for instance,
\texttt{/usr/local/cgal}. In case you prefer such a setup, go to the
install menu by choosing the option ``\texttt{i}'' from the main menu.
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
****************************************************************
** CGAL 3.2 Installation Install Menu **
** ================================== **
** **
** OS: i686_Linux-2.6 **
** Compiler: GNU 3.4.5 **
** Support for: BOOST, BOOST_PROGRAM_OPTIONS, X11, GMP, **
** GMPXX, MPFR, CORE, ZLIB, and QT. **
** **
** Compiler is supported by CGAL. **
** The setup has been tested ok. **
** **
** Libs built: 19 Apr 17:20 **
** **
** <D> Change Installation root directory **
** /usr/local/CGAL-3.2 **
** <I> Install CGAL **
** **
** <Q> Back to Main Menu **
** **
** Your Choice: **
** **
****************************************************************
\end{verbatim}
}
You can adjust the installation root directory using option
``\texttt{d}''; it defaults to the current build root. Then start the
installation by selecting ``\texttt{i}''.
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
****************************************************************
** **
** Installing CGAL 3.2 **
** =================== **
** **
****************************************************************
OS: i686_Linux-2.6
<some lines omitted>
****************************************************************
** **
** Target Directory: /usr/local/CGAL-3.2. **
** Do you want to install CGAL into this directory (y/N)? **
** **
****************************************************************
\end{verbatim}
}
If you confirm the settings and enter ``\texttt{y}'', \cgal\ is
installed below the given root directory. It can there be used
independently from its build-tree, that is, you may even delete the
build-tree.
{\ccTexHtml{\scriptsize}{}
\begin{verbatim}
Install CGAL headers ... done.
Install CGAL libraries ... done.
Install CGAL programs ... done.
Install CGAL Makefile ... done.
****************************************************************
** Please press <ENTER> to continue. **
****************************************************************
\end{verbatim}
}
Press ``\texttt{<ENTER>}'' and then select ``\texttt{q}'' to return to
the main menu.
\subsection{Further Steps\label{sec:further}}
You may now proceed by installing \cgal\ for a different compiler (go
to the compiler menu and choose ``\texttt{c}'' to get a list of
supported compilers detected on your system).
Another option is to simply quit the install script by typing
``\texttt{q}''. When leaving the script, you get a list of successful
builds during the session. Furthermore, the script prints the setting
of \texttt{CGAL\_MAKEFILE} for the last active configuration. Remember
to set this environment variable before compiling \cgal\ applications.
On Bourne shell derivatives, you would type in our example
\begin{alltt}
export CGAL_MAKEFILE=\cgaldir/make/makefile_sparc_SunOS-5.6_g++-3.4.3
\end{alltt}
while for \texttt{csh} descendants the syntax is
\begin{alltt}
setenv CGAL_MAKEFILE \cgaldir/make/makefile_sparc_SunOS-5.6_g++-3.4.3
\end{alltt}
In Section~\ref{sec:makefiles} you can find more information on the
\cgal\ makefile structure, and how to set \texttt{CGAL\_MAKEFILE} when
using \cgal\ on several platforms.
\section{The Interactive Mode\label{sec:interactive-mode}}
\index{interactive installation}\index{installation!interactive}
\TTsubindex{install\_cgal}{interactive mode}
To run the install script in the interactive mode, go to the \cgaldir\
directory and enter the command
\begin{verbatim}
./install_cgal -i
\end{verbatim}
After initialization during which certain utility programs are located
and your system is searched for compilers supported by \cgal, you get
into the \cgal\ installation \textit{main menu} (see
page~\pageref{pic:main-menu} for a picture).
From the main menu you can reach a number of different sub-menus, of
which the most important maybe is the \textit{compiler menu}. This is
where you can choose the compiler you want to work with and set custom
compiler or linker options. The compiler menu is described in
Section~\ref{sec:compiler-menu}.
If you want to use other libraries such as \boost, \taucs, \gmp,
\mpfr, \core, \leda, or \qt\ with \cgal, you can setup support for
these libraries from the support menu that is described in
Section~\ref{sec:support-menu}.
At some point, you most probably want to build the \cgal\ libraries by
typing \texttt{b}. However, it is recommended to run the \textit{setup
test} -- which is available in all menus as option \texttt{t} --
before. The setup test includes tests for certain compiler features or
bugs as well as tests for the presence of other libraries that can be
used in conjunction with \cgal. The install script tries to find and
enable support for as many other libraries as possible.
As a default, \cgal\ is built and installed within its build-tree. In
case you want to install \cgal\ in a directory separate from its
build-tree, the \textit{install menu} is the place to go to.
The install script keeps track of the tests passed and only tests
again, if you change the setup in a way that may affect the test
result. If you want to redo \textit{all} tests, you have to choose
option ``\texttt{a}'' from the main menu.
\subsection{Files Created during Installation\label{sec:filescreated}}
The install script stores all relevant settings for an OS/compiler
combination in a file
\begin{center}
\texttt{\cgalinstconfdir/$<$\textit{CGAL-OS-description}$>$}
\end{center}
where $<$\textit{CGAL-OS-description}$>$ identifies your OS/compiler
combination in a way specified in Section~\ref{sec:os-compiler-id}.
This saves you the work of configuring everything again, if you
upgrade \index{upgrading \cgal}\index{CGAL@\cgal!upgrade} \cgal\ or
another package that makes recompiling the \cgal\ libraries necessary.
Besides the config files, the install script uses several temporary
files during interactive installation. Most of them are removed after
use, but some are not, since it might be helpful to keep some
information about the last run. You can keep or delete them as you
like, as they are not needed anymore once the script terminated. A
list of these files (all are plain ASCII and reside in \cgaldir)
follows.
\begin{center}\index{files!temporary}\index{logfiles}
\renewcommand{\arraystretch}{1.3}
\gdef\lcTabularBorder{2}
\begin{tabular}{|l|l|} \hline
\textbf{filename} & \textbf{content}\\\hline\hline
\texttt{install.log}\TTindex{install.log} &
detailed overall protocol\\\hline
\texttt{install.completed}\TTindex{install.completed} &
list of systems for which \cgal\ libraries
have been built\\\hline
\texttt{compile.log}\TTindex{compile.log} &
output of the last compiler call\\\hline
\end{tabular}
\end{center}
\subsection{The Compiler Menu\label{sec:compiler-menu}}
\index{compiler menu}\index{menus!compiler}
Here is the place to set compiler specific options, such as the
compiler to use (if more than one has been detected), custom compiler
or linker flags, or to decide whether or not to build shared
libraries.\bigskip
\fbox{
\begin{minipage}{.95\linewidth}
\vspace{2pt}
\centerline{{\large{\bf Compiler Menu}}}
\vspace{2pt}
\begin{description}
\item[$<$C$>$] Choose the compiler to be used from the list of
detected compilers. You can also register other compilers, if they
have not been detected automatically.\index{compilers!choosing}
\item[$<$F$>$] Set custom compiler flags. These are the first flags
given to the compiler in every call. Under normal circumstances
there should be no need to set any such
flag.\index{compilers!setting custom flags}
\item[$<$L$>$] Set custom linker flags. These are the first flags
given to the linker in every call. Under normal circumstances
there should be no need to set any such flag.
\item[$<$S$>$] Toggle shared libraries building.
By default, shared libraries are built (e.g. \texttt{libCGAL.so}),
but it is possible to only build static libraries using this option.
\item[$<$O$>$] Set custom ostype tag. Set a tag that is mangled into
the CGAL-OS-description. This is useful to distinguish \cgal\
installations with different settings for the same OS-compiler
combination.
\end{description}
\vspace{2pt}
\end{minipage}
\hfill}
\subsection{The Support Menu\label{sec:support-menu}}
\index{support menu}\index{menus!support}
This menu provides the starting point to setup support for third-party
software libraries such as \boost, \taucs, \gmp, \mpfr, \core, \leda,
or \qt.\bigskip
First, it provides an option ``\texttt{Auto-find all libraries}'' to
find and enable support for as many of those third-party software
libraries as possible. Note that this is also done automatically
during the first setup test for a platform.
Then there is a sub-menu for each third-party library that can be used
in conjunction with \cgal. Each of these sub-menus contains an
autofind option that is similar to the global autofind in the support
menu but restricted to the particular library under consideration.
In case a library is installed in a non-standard location, you may
have to provide a path to its header files and/or libraries.
Therefore, the menu for each library \texttt{L} offers an option to
set an include directory \texttt{L\_INCL\_DIR} and a lib directory
\texttt{L\_LIB\_DIR} for \texttt{L}. For instance, if on your system
\gmp\ is installed in \texttt{/opt/sw/gmp/}, you would set
\texttt{GMP\_INCL\_DIR} to \texttt{/opt/sw/gmp/include} and
\texttt{GMP\_LIB\_DIR} to \texttt{/opt/sw/gmp/lib}. Note that on
Cygwin you have to provide Posix-style paths, e.g.,
\texttt{/cygdrive/c/gmp} instead of \verb|C:\gmp|.
If you have trouble to setup support for one of the libraries, having
a look at the \texttt{install.log} file may give you a hint.
More details about the different third-party libraries that are
supported by \cgal\ can be found in sections
\ref{sec:boost-setup}--\ref{sec:qt-setup}.
\section{The Non-Interactive Mode\label{sec:non-interactive}}
\index{non-interactive
installation}\index{installation!non-interactive}
\TTsubindex{install\_cgal}{non-interactive mode}
To run the install script in the non-interactive mode, you have to
specify the compiler to use by setting the environment variable
\texttt{CXX} to the C++ compiler executable.\index{compilers!choosing}
You can either specify a full path, e.g.
\texttt{CXX=/usr/local/bin/g++}, or just the basename, e.g.
\texttt{CXX=g++}, which means the script searches your \texttt{PATH}
for the compiler location. If your compiler call contains whitespaces
then it has to be quoted, e.g., \texttt{CXX="CC -n32"}. The options
given this way become part of your \cgal-OS description\index{OS
description} (see Section~\ref{sec:os-compiler-id}) which is useful,
e.g., to distinguish between different compilers using the same
frontend (such as \mipsprocc\ on \texttt{IRIX6}).
Go to the \cgaldir\ directory and enter the command
\begin{verbatim}
CXX=<compiler> ./install_cgal -ni
\end{verbatim}
where \texttt{<compiler>} is the C++ compiler executable, as described
above.
There are a number of additional command line options to customize
your \cgal\ setup which are discussed below. You should read the
corresponding paragraphs before you continue, especially if you want
to enable support for a third party library that is installed in a
non-standard location.
The script tries to enable support for as many third party libraries
as possible, most of them should be found automatically if installed
in a standard location. If you do not want to enable support for third
party libraries automatically, use the command line switch
\texttt{--without-autofind}.
Once you started the script, it should give you a message indicating
the \cgal\ version you are going to install and that you are running
the non-interactive mode. Then it proceeds by locating some utility
programs, determining your OS and compiler version and displaying the
settings you gave via command line. Your compiler is also checked for
a number of bugs resp. support of certain language features; a message
\texttt{ok} always indicates that your compiler works as it should,
that is, a feature is supported or a bug is \textit{not} present. On
the other hand, \texttt{no} or \texttt{unfortunately} indicate a lack
of support or the presence of a bug.
Then the current setup is summarized, system specific directories for
makefiles and libraries are created (if they did not exist before) and
a new include makefile is written into the makefile directory. If
there already exists a makefile for the current OS/compiler
combination, it is backed up.
Finally, the \cgal\ libraries are built and -- if a separate
installation root was specified -- installed into the given
installation directory.
\subsection{Specify an Install Directory\label{sec:install-setup}}
\index{install directory}
As a default, \cgal\ is installed within its build-tree. The
installation root directory can be changed using the command line
option ``\texttt{--prefix <dir>}''. For example, to install \cgal\
below \texttt{/usr/local/cgal}, you would type
%%
\begin{verbatim}
--prefix /usr/local/cgal
\end{verbatim}
%%
\subsection{Setup Support for Boost\label{sec:boost-setup}}
\index{Boost@\boost!enable support}
The \boost\ headers are required by \cgal, you can get them from
\boostpage. If installed in a standard location, \boost\ should be
found automatically. Otherwise, you have to specify where \boost\ is
installed on your system using the command line options
``\texttt{--BOOST\_INCL\_DIR}'' and/or ``\texttt{--BOOST\_LIB\_DIR}''.
For instance, if you have installed \boost\ in \texttt{/opt/boost/},
type
%%
\begin{verbatim}
--BOOST_INCL_DIR /opt/boost/include --BOOST_LIB_DIR /opt/boost/lib
\end{verbatim}
%%
Even in case you disabled the automatic support for third party
libraries, boost support is still enabled because it is required.
\subsection{Setup Support for Boostprogramoptions\label{sec:boostlibs-setup}}
\index{Boost@\boost!enable support}
The \boost\ library program\_options is used by a few demo programs to
parse command line options. You can get it from \boostpage. If
installed in a standard location, program\_options should be found
automatically. Otherwise, you have to specify where program\_options
is installed on your system using the command line options
``\texttt{--BOOSTPROGRAMOPTIONS\_INCL\_DIR}'' and/or
``\texttt{--BOOSTPROGRAMOPTIONS\_LIB\_DIR}''.
In case you disabled the automatic support for third party libraries,
support for program\_options can be enabled with the command line
switch ``\texttt{--with-BOOSTPROGRAMOPTIONS}''.
\subsection{Setup Support for Taucs\label{sec:taucs-setup}}
\index{Taucs@\taucs!enable support}
\taucs\ is library of sparse linear solvers that is available from
\taucspage. In \cgal\ it is used to speedup the computations within
the Parameterization package (Planar Parameterization of Triangulated
Surface Meshes) only.
\taucs\ support requires the environment variables \texttt{TAUCSROOT}
and \texttt{TAUCS\_OSTYPE} to be set to the \taucs\ root directory and
the \taucs\ operating system descriptor, respectively. (Just scan the
directory \verb|${TAUCSROOT}/lib| for a directory that matches your
OS.)
Based on these variables, \taucs\ should be found automatically.
Therefore, it should not be necessary to specify include or lib
directories for \taucs\ on the command line.
In case you disabled the automatic support for third party libraries,
support for \taucs\ can be enabled with the command line switches
``\texttt{--with-EXTERNTAUCSMS}'' and ``\texttt{--with-TAUCSMS}'' (for
Microsoft and Intel Compiler) or ``\texttt{--with-EXTERNTAUCSNIX}''
and ``\texttt{--with-TAUCSNIX}'' (all other compilers). For technical
reasons, \taucs\ support is split into two separate features that have
to be enabled both.
\subsection{Setup Support for X11\label{sec:x11-setup}}
\index{X11@\texttt{X11}!enable support}
As visualization in \cgal\ is done using \qt\ mostly, the direct
support for X11 is used in conjunction with the \leda\ window library
mostly. You can get X11 from \xpage.
If installed in a standard location, X11 should be found
automatically. Otherwise, you have to specify where X11 is installed
on your system using the command line options
``\texttt{--X11\_INCL\_DIR}'' and/or ``\texttt{--X11\_LIB\_DIR}''. For
instance, if you have installed X11 in \texttt{/opt/X11R8/}, type
%%
\begin{verbatim}
--X11_INCL_DIR /opt/X11R8/include --X11_LIB_DIR /opt/X11R8/lib
\end{verbatim}
%%
In case you disabled the automatic support for third party libraries,
support for X11 can be enabled with the command line switch
``\texttt{--with-X11}''.
\subsection{Setup Support for GMP\label{sec:gmp-setup}}
\index{GMP@\gmp!enable support}
\gmp\ is a multi-precision number type library that is available from
\gmppage. In \cgal\ it is used in many example and demo programs to
speedup the computation. It is highly recommended to configure \cgal\
with support for \gmp. Note that \gmp\ support also requires \mpfr\
support and vice versa.
If installed in a standard location, \gmp\ should be
found automatically. Otherwise, you have to specify where \gmp\ is
installed on your system using the command line options
``\texttt{--GMP\_INCL\_DIR}'' and/or ``\texttt{--GMP\_LIB\_DIR}''. For
instance, if you have installed \gmp\ in \texttt{/opt/gmp}, type
%%
\begin{verbatim}
--GMP_INCL_DIR /opt/gmp/include --GMP_LIB_DIR /opt/gmp/lib
\end{verbatim}
%%
In case you disabled the automatic support for third party libraries,
support for \gmp\ can be enabled with the command line switch
``\texttt{--with-GMP}''.
\subsection{Setup Support for GMPXX\label{sec:gmpxx-setup}}
\index{GMPXX@\texttt{GMPXX}!enable support}
GMPXX denotes a \CC\ wrapper for \gmp, that is an optional feature of
\gmp\ and, therefore, not present in all installations.
If installed in a standard location, GMPXX should be found
automatically. As GMPXX depends on \gmp, there is usually no need to
specify include or lib directories for GMPXX once \gmp\ support is
configured correctly.
In case you disabled the automatic support for third party libraries,
support for GMPXX can be enabled with the command line switch
``\texttt{--with-GMPXX}''.
\subsection{Setup Support for MPFR\label{sec:mpfr-setup}}
\index{MPFR@\texttt{MPFR}!enable support}
\mpfr\ is a library for multi-precision floating-point computations
with exact rounding that is available from \mpfrpage. In \cgal\ it is
used in many example and demo programs to speedup the computation. It
is highly recommended to configure \cgal\ with support for \mpfr. Note
that \mpfr\ support also requires \gmp\ support and vice versa.
If installed in a standard location, \mpfr\ should be found
automatically. As \mpfr\ depends on \gmp, there is no need to specify
include or lib directories for \mpfr\ when \gmp\ version prior to 4.2
is used and configured correctly. Otherwise, you have to specify where
\mpfr\ is installed on your system using the command line options
``\texttt{--MPFR\_INCL\_DIR}'' and/or ``\texttt{--MPFR\_LIB\_DIR}''.
For instance, if you have installed \mpfr\ in \texttt{/opt/mpfr}, type
%%
\begin{verbatim}
--MPFR_INCL_DIR /opt/mpfr/include --MPFR_LIB_DIR /opt/mpfr/lib
\end{verbatim}
%%
In case you disabled the automatic support for third party libraries,
support for \mpfr\ can be enabled with the command line switch
``\texttt{--with-MPFR}''.
\subsection{Setup Support for CORE\label{sec:core-setup}}
\index{CORE@\core!enable support}
\core\ is a number type library for exact geometric computation that
is available from \corepage. \core\ version 1.7 is also shipped with
\cgal~\cgalrelease. In \cgal\ it is used in many example and demo
programs to speedup the computation. It is highly recommended to
configure \cgal\ with support for \core. Note that \core\ support also
requires \gmp\ support.
If installed in a standard location, \core\ should be found
automatically. Otherwise, you have two options: Either use the version
of \core\ that is shipped with \cgal\ and, hence, found automatically,
or specify where \core\ is installed on your system using the command
line options ``\texttt{--CORE\_INCL\_DIR}'' and/or
``\texttt{--CORE\_LIB\_DIR}''. For instance, if you have installed
\core\ in \texttt{/opt/core}, type
%%
\begin{verbatim}
--CORE_INCL_DIR /opt/core/include --CORE_LIB_DIR /opt/core/lib
\end{verbatim}
%%
In case you disabled the automatic support for third party libraries,
support for CORE can be enabled with the command line switch
``\texttt{--with-CORE}''. In order to enable support for the version
of \core\ that is shipped with \cgal, use the
switch``\texttt{--with-CGALCORE}'' instead.
\subsection{Setup Support for ZLIB\label{sec:zlib-setup}}
\index{ZLIB@\texttt{ZLIB}!enable support}
ZLIB is a compression library that is available from \zlibpage.
Within \cgal, it is used to compress images for the Surface Mesher
only.
If installed in a standard location, ZLIB should be found
automatically. Otherwise, you have to specify where ZLIB is installed
on your system using the command line options
``\texttt{--ZLIB\_INCL\_DIR}'' and/or ``\texttt{--ZLIB\_LIB\_DIR}''.
For instance, if you have installed ZLIB in \texttt{/opt/zlib}, type
%%
\begin{verbatim}
--ZLIB_INCL_DIR /opt/zlib/include --ZLIB_LIB_DIR /opt/zlib/lib
\end{verbatim}
%%
In case you disabled the automatic support for third party libraries,
support for ZLIB can be enabled with the command line switch
``\texttt{--with-ZLIBMS}'' (for Microsoft and Intel Compiler) or
``\texttt{--with-ZLIB}'' (all other compilers).
\subsection{Setup Support for LEDA\label{sec:leda-setup}}
\index{LEDA@\leda!enable support}
\leda\ is a library for efficient data types and algorithms that can
be bought from \ledapage. \cgal\ offers an interface to the \leda\
window and geowin classes and support for \leda\ number types. For
more details, see Section~\ref{sec:leda}.
If installed in a standard location, \leda\ should be found
automatically. Otherwise, you have to specify where \leda\ is
installed on your system using the command line options
``\texttt{--LEDA\_INCL\_DIR}'' and/or ``\texttt{--LEDA\_LIB\_DIR}''.
For instance, if you have installed \leda\ in \texttt{/opt/leda}, type
%%
\begin{verbatim}
--LEDA_INCL_DIR /opt/leda/include --LEDA_LIB_DIR /opt/leda/lib
\end{verbatim}
%%
The \leda\ window library is handled separately because it depends on
X11. Obviously there is no need to specify include and lib directories
for the \leda\ window library once \leda\ support is configured
correctly.
In case you disabled the automatic support for third party libraries,
support for \leda\ can be enabled with the command line switch
``\texttt{--with-LEDAMS}'' (for Microsoft and Intel Compiler) or
``\texttt{--with-LEDA}'' (all other compilers). Support for the \leda\
window library can be enabled with the command line switch
``\texttt{--with-LEDAWINMS}'' (for Microsoft and Intel Compiler) or
``\texttt{--with-LEDAWIN}'' (all other compilers).
\subsection{Setup Support for Qt\label{sec:qt-setup}}
\index{Qt!enable support}
\qt\ is a GUI library that is available from \qtpage. Most demo
programs of \cgal\ for two-dimensional data structures and algorithms
use \qt\ for visualization. Note that \cgal\ supports \qt~3 but not
(yet) \qt~4.
\qt\ support requires the environment variable \texttt{QTDIR} to be
set to the \qt\ root directory. On most systems where \qt\ is
installed this should be set correctly, otherwise you have to set this
variable manually. We assume the \qt\ meta object compiler is
available under \texttt{\${QTDIR}/bin/moc}.
Based on the setting of \texttt{QTDIR}, \qt\ should be found
automatically. Therefore, it should not be necessary to specify
include or lib directories for \qt\ on the command line.
There are two different ways to build \qt, namely single-threaded or
multi-threaded. The automatic support settings prefer the
multi-threaded version where present.
In case you disabled the automatic support for third party libraries,
support for the multi-threaded version of \qt\ can be enabled with the
command line switch ``\texttt{--with-QT3MSMT}'' (for Microsoft and
Intel Compiler) or ``\texttt{--with-QT3MT}'' (all other compilers).
Support for the single-threaded version of \qt\ can be enabled with
the command line switch ``\texttt{--with-QT3MSST}'' (for Microsoft and
Intel Compiler) or ``\texttt{--with-QT3ST}'' (all other compilers).
\subsection{Setting Custom Compiler/Linker Flags\label{sec:custom-setup}}
\index{compilers!setting custom flags}
You can supply custom compiler and linker flags using the options
\mbox{(``\texttt{--CUSTOM\_CXXFLAGS}
\textit{$<$flags$>$}'')\TTindex{CUSTOM\_CXXFLAGS}} and
\mbox{(``\texttt{--CUSTOM\_LDFLAGS}
\textit{$<$flags$>$}'')\TTindex{CUSTOM\_LDFLAGS}}. These are the
first flags given to the compiler/linker in every call.
\textit{Note:} Do not forget to quote your options in case they
contain spaces. Example:
\begin{verbatim}
--CUSTOM_CXXFLAGS "-I/my/include -O2"
\end{verbatim}
\subsection{Disable Shared Libraries\label{sec:disable-shared-setup}}
\index{compilers!disabling shared libraries building}
You can disable the building of shared libraries (e.g.,
\texttt{libCGAL.so}) using the option
\mbox{``\texttt{--disable-shared}''\TTindex{disable-shared}}. This
way, only static libraries (object file archives) are built.
\subsection{Other Options\label{sec:other-options}}
Some less important features of the install script are summarized
here.
First of all, you can get the version number of \texttt{install\_cgal}
using the option ``\texttt{--version}''. All other options are ignored
in this case.\TTsubindex{install\_cgal}{version number}
Second, there is an option ``\texttt{-os \textit{$<$compiler$>$}}''
where \textit{$<$compiler$>$} is your \CC\ compiler. This allows you
to determine your \cgal-OS description\index{OS description} (see
Section~\ref{sec:os-compiler-id}). The compiler can either be given by
an absolute path like
\begin{verbatim}
./install_cgal -os /usr/local/gcc-3.4.3/sun/bin/g++
\end{verbatim}
or just by denoting its basename, as long as it is on your path:
\begin{verbatim}
./install_cgal -os CC
\end{verbatim}
The option is intended for testing purposes and automatic detection of
the correct include makefile (see also Section~\ref{sec:makefiles}).
Finally, there exists an option
``\texttt{--verbose}''\TTsubindex{install\_cgal}{verbose mode} that
can be set in interactive mode as well as in non-interactive mode.
When set you get a detailed summary of error messages occurring during
\textit{any} compiler test (determining \stl\ version etc.). Normally
you only get these messages, if a required test (such as the general
\stl\ test) fails, otherwise you are just informed, \textit{if} it
succeeded or not. This option is not recommended for general use, but
it can be useful to check why a certain test fails that was expected
to be passed. Most of the extra information it provides can also be
extracted from the installation logfile.
\section{Upgrade an Existing CGAL Installation\label{sec:upgrade}}
\index{upgrading \cgal}\index{CGAL@\cgal!upgrade}
Due to a large number of changes in the configuration and installation
process, we recommend to install \cgal\ from scratch, without re-using
configuration files of possible previous \cgal\ installations.
%% In case you already have a previous release of \cgal\ installed on
%% your system, you might like to reuse your configuration files. Simply
%% use the following command to copy them into the right
%% place:\TTsubindex{install\_cgal}{upgrade option}
%% \begin{verbatim}
%% ./install_cgal --upgrade <OLD_CGAL_DIR>
%% \end{verbatim}
%% where \texttt{<OLD\_CGAL\_DIR>} is the root directory of your existing
%% \cgal\ installation\\ (e.g. \texttt{/pub/local/CGAL-3.0}). You can
%% then build all libraries for the actual operating system that existed
%% in your previous \cgal\ installation with
%% \TTsubindex{install\_cgal}{rebuild-all option}
%% \begin{verbatim}
%% ./install_cgal --rebuild-all
%% \end{verbatim}
%% If you want to install \cgal\ for more than one operating system in
%% the same directory structure, you have to run the latter command
%% (\texttt{rebuild-all}) once on each operating system.
%% Using \texttt{--build-all} instead of \texttt{--rebuild-all} will save
%% you the time of the configuration tests, and will only rebuild the libraries.
%% If you want to install only one configuration on a given operating system,
%% you can specify its name (the base name of a file in \cgalinstconfdir) with
%% the option \texttt{--rebuild <config>} or \texttt{--build <config>}.
%% \textbf{Note} that some compilers that have been supported in previous
%% \cgal\ releases might not be supported in \cgal-\cgalrelease\ anymore,
%% see section \ref{sec:prerequisites}. Trying to build
%% \cgal-\cgalrelease\ with these compilers will most probably fail. You
%% can solve this problem by deleting the obsolete config files (see
%% section \ref{sec:filescreated}) from \cgalinstconfdir\ before issuing
%% the \texttt{rebuild-all} command.
%% Similarly, you might want to use compilers with \cgal-\cgalrelease\
%% that have not been supported in previous releases. For these compilers
%% please follow the usual procedure as described in section
%% \ref{sec:interactive-mode} or \ref{sec:non-interactive}.
\section{Identify OS and Compiler\label{sec:os-compiler-id}}
\index{OS description}\index{identifying OS and compiler}
Since \cgal\ supports several different operating systems and
compilers, this is also reflected in the structure of the \cgal\
directory tree. Each OS/compiler combination has its own lib directory
under \texttt{\cgaldir/lib}) (and analogously its own include
makefile\index{include makefile} in \texttt{\cgaldir/make}) named as
determined by the following scheme.
\begin{center}
\textit{$<$arch$>$\texttt{\_}$<$os$>$\texttt{-}$<$os-version$>$\texttt{\_}$<$comp$>${\tt
-}$<$comp-version$>$}
\end{center}
\begin{description}
\item[$<$arch$>$] is the system architecture as defined by ``{\tt
uname -p}'' or ``\texttt{uname -m}'',
\item[$<$os$>$] is the operating system as defined by ``\texttt{uname
-s}'',
\item[$<$os-version$>$] is the operating system version as defined by
``\texttt{uname -r}'',
\item[$<$comp$>$] is the basename of the compiler executable (if it
contains spaces, these are replaced by "-") \textit{and}
\item[$<$comp-version$>$] is the compiler's version number (which
unfortunately can not be derived in a uniform manner, since it is
quite compiler specific).
\end{description}
We call the resulting string \cgal-OS description.\\ Examples are
\texttt{mips\_IRIX-6.5\_CC-7.2} or {\tt
sparc\_SunOS-5.5\_g++-3.4.3}.\\ You can use the install script to
get your \cgal-OS description, see Section~\ref{sec:other-options}.
\section{The CGAL Makefile Structure\label{sec:makefiles}}
\index{makefile structure}
There is a makefile in each directory below \texttt{\cgaldir/examples}
and \texttt{\cgaldir/demo}. All these makefiles are generic: they can
be used for more than one compiler. To achieve this, the first section
of each makefile contains an include statement that looks as follows:
%%
\begin{verbatim}
# CGAL_MAKEFILE = ENTER_YOUR_INCLUDE_MAKEFILE_HERE
include $(CGAL_MAKEFILE)
\end{verbatim}
%$
The file \texttt{CGAL\_MAKEFILE}\TTindex{CGAL\_MAKEFILE} is an include
file\index{include makefile} with platform dependent makefile
settings. The abbreviation \texttt{<CGAL-OS description>} (see
Section~\ref{sec:os-compiler-id} for details) is used to identify the
operating system and compiler for which the settings hold. For
example, the file \texttt{makefile\_mips\_IRIX64-6.5\_CC-n32-7.30}
contains makefile settings for the IRIX 6.5 operating system and the
\mipsprocc\ 7.3 compiler. These include files are automatically
generated by the \texttt{install\_cgal} script and they are all
located in the \texttt{\cgaldir/make} directory.
%% M: I don't think this is true anymore.
%%For convenience, the \texttt{install\_cgal} script will substitute the
%%include makefile that was generated most recently.
If you want to compile an application or an object library with a
different compiler, the only thing you need to do is to substitute
another include makefile for the \texttt{CGAL\_MAKEFILE} variable. A
very convenient way to do this is to create an environment variable
\texttt{CGAL\_MAKEFILE}. In Bourne shell you type
\begin{alltt}
export CGAL_MAKEFILE=<\textit{insert your CGAL makefile}>
\end{alltt}
whereas in csh derivatives you use
\begin{alltt}
setenv CGAL_MAKEFILE <\textit{insert your CGAL makefile}>
\end{alltt}
For instance,
\begin{verbatim}
setenv CGAL_MAKEFILE /usr/CGAL-3.2/make/makefile_i686_Linux-2.6_g++-3.4.4
\end{verbatim}
If you use \cgal\ with several different OS/compiler combination, a
comfortable way to set \texttt{CGAL\_MAKEFILE} is by using
\texttt{install\_cgal~-os} (see Section~\ref{sec:other-options}). For
example, if your compiler is \texttt{g++}, you would type
\begin{alltt}
CGAL_MAKEFILE=`\yourcgaldir/install_cgal -os g++`
\end{alltt}
in Bourne shell resp.
\begin{alltt}
setenv CGAL_MAKEFILE `\yourcgaldir/install_cgal -os g++`
\end{alltt}
in csh derivatives.
\textit{Tip:} Include the setting of \texttt{CGAL\_MAKEFILE} into your
shell startup script (e.g. \texttt{.}(\texttt{t})\texttt{cshrc} for
(\texttt{t})\texttt{csh} or \texttt{.bashrc} for \texttt{bash}).
All makefiles contain sections with compiler and linker flags. You
can add your own flags here. For example, you might want to add the
flag \texttt{-DCGAL\_NO\_PRECONDITIONS} to turn off precondition
checking. The flags \texttt{\$(CGAL\_CXXFLAGS)} and
\texttt{\$(CGAL\_LDFLAGS)} should never be removed.
The default extension for \cgal\ source files is \texttt{.C}. The
last section of the makefiles contains a suffix rule that tells the
compiler how to create a \texttt{.o}-file from a \texttt{.C}-file. If
you want to use the default rule that is defined by the make utility,
you may want to remove this suffix rule. However, note that this may
have consequences for the makefile variables \texttt{CGAL\_CXX} and
\texttt{CXXFLAGS}.
\section{Compile a CGAL Application\label{sec:appl}}
\index{building applications}
\index{compiling applications}
There is a script for conveniently creating makefiles for \cgal\
applications, see Section~\ref{sec:create_cgal_makefile}.
The directories \texttt{\cgaldir/examples} and \texttt{\cgaldir/demo}
contain many subdirectories with non-graphical and graphical example
programs. In all these directories you will find a makefile that is
ready to use.
You either need to substitute the \texttt{CGAL\_MAKEFILE} variable in
these makefiles (see Section~\ref{sec:makefiles}), or set the
environment variable, to point to the makefile in the
\texttt{\cgaldir/make} directory. Then just type \texttt{make}.
Within \cgal, the file \texttt{<CGAL/basic.h>}
\index{files!\texttt{basic.h}} manages all configuration problems. It
is therefore \textbf{important that \texttt{<CGAL/basic.h>} is always
included before any other file}. In most cases you do not have to do
anything special for this, because many \cgal\ files (in particular,
\texttt{<CGAL/Cartesian.h>} and \texttt{<CGAL/Homogeneous.h>}) already
take care of including \texttt{<CGAL/basic.h>} first. Nevertheless it
is a good idea to always start your \cgal\ programs with including
\texttt{<CGAL/basic.h>}.
\section{Installation on Cygwin\label{sec:cygwin}}
\index{Cygwin!installation on}\index{installation!on Cygwin}
Cygwin is a free Unix-like environment for MS-Windows, distributed by
Cygnus Solutions. It consists of a port of a large number of GNU
tools, such as bash, make, gcc, gas, file utilities, etc, as well as
tools ensuring an ability to emulate Unix-like access to resources,
for instance mount. For a comprehensive introduction and details, see
\path~http://www.cygwin.com/~ .
Make sure that the link \texttt{/bin/sh.exe} exists. If not, create
it:
\begin{verbatim}
cd /bin
ln -s bash.exe sh.exe
\end{verbatim}
\subsection{Pathnames}
\index{Cygwin!pathnames}
Cygwin has a UNIX-like way of navigating hard drives, NFS shares, etc.
This is also the way in which directories and pathnames have to given
to the installation script. They are automatically converted to
Win32-style pathnames when given to the compiler or linker.
The main difference is that directories are separated by slash (``/'')
rather than by backslash (``$\backslash$''). The other difference is
concerned with specifying drives. One way is to use POSIX-style
pathnames that map Win32-style drives (\texttt{A:}, \texttt{B:}) to
\texttt{//a/\ldots}, \texttt{//b/\ldots} respectively. For instance,
the path
\texttt{D:$\backslash$Mystuff$\backslash$Mydir$\backslash$LEDA}
translates to \texttt{//d/Mystuff/Mydir/LEDA}.
Alternatively, it can be done using the mount utility, that can be
used to establish a map between Win32-style drives and the Unix-like
style. More precisely, it maps the forest of the directories/files on
Win32-drives to a tree with the root that is usually located at the top
level of the boot drive, say \texttt{C:}. The root location can be
seen by typing \texttt{mount} command without parameters. For
instance, if \texttt{D:} is mounted on
\texttt{C:$\backslash$ddrive}\footnote{by typing \texttt{mount D:
/ddrive}} then the path
\texttt{D:$\backslash$Mystuff$\backslash$Mydir$\backslash$LEDA}
translates to \texttt{/ddrive/Mystuff/Mydir/LEDA}.
\paragraph{Upper/lower case and spaces in file names}
Behavior of Cygwin in this regard might be different from the \mswin\
behavior. In particular, using spaces in filenames should be avoided.
\paragraph{Links, shortcuts, etc.} should be avoided as well.
\subsection{\msvc{}-Setup}
\index{Cygwin!setup for \msvc{}}
\index{msvc@\msvc{}!setup on cygwin}
A number of environment variables has to be set (or updated)
in order to use the installation.
\texttt{PATH} should contain \msvc{} command line tools locations.
The environment variables \texttt{INCLUDE} and \texttt{LIB} should
point to the location of \msvc{} header files and to the location of
the \msvc{} libraries, respectively.
First, the memory for environment variables has to be increased.
Select the Cygwin icon from the Start-menu, press the right mouse
button and choose \textit{Properties}. Go to \textit{Memory}, select
\textit{Initial Environment}, set it to at least 2048 and
\textit{apply} the changes.
Second, edit the file \texttt{cygwin.bat}, located in the cygwin main
directory and add the line
\begin{verbatim}
call C:\VisualStudio2003\Common7\Tools\vsvars32.bat
\end{verbatim}
customized according to where \msvc{} is installed on your system.
Depending on the version of \msvc{} you might have to replace
\texttt{VSVARS32.BAT} by \texttt{MSCVARS32.BAT} or
\texttt{VCVARS32.BAT} and the script may reside in a different
sub-directory.
All libraries that are used by an application have to be compiled with
the same options\footnote{\msvc\ compilation/linking options
\texttt{-ML, -MT, -MD, -MLD, -MTD, -MDD}} controlling the use of
debugging and multithreading.
%%
%% EOF
%%