Major additions about MS-stuff by Dima.

Reorganized section order moving some stuff into the appendix.
A number of minor changes/additions.
This commit is contained in:
Michael Hoffmann 2000-01-04 11:26:29 +00:00
parent 3420d9c5af
commit 50fb9d8a78
1 changed files with 652 additions and 185 deletions

View File

@ -3,7 +3,7 @@
%%
%% file: installation.tex
%%
%% authors: Michael Hoffmann and Wieger Wesselink
%% authors: Michael Hoffmann, Dima Pasechnik and Wieger Wesselink
%%
%% $Revision$ $Date$
%%
@ -11,8 +11,11 @@
%% macro for GNU
\newcommand{\gnu}{\textsc{Gnu}}
%% macro for GNU
\newcommand{\MSInst}{``Windows-specific Installation''}
%% macro for GMP
\newcommand{\gmp}{\textsc{GMP}}
%% macro for Windows-specific installation
\newcommand{\MSInst}{Windows-specific Installation}
%% macro for g++
\newcommand{\Gcc}[1]{\gnu~\texttt{g++}~{\rm #1}}
@ -32,6 +35,9 @@
%% macro for Microsoft Visual C++
\newcommand{\msvc}[1]{\textsc{MS}~Visual~\texttt{C++}~{\rm #1}}
%% macro for Intel C++ Compiler
\newcommand{\icl}[1]{\textsc{Intel}~\texttt{C++}~{\rm #1}}
%% macro for Microsoft Windows
\newcommand{\mswin}{\textsc{MS}~Windows}
@ -53,7 +59,7 @@
\newcommand{\faqpage}{\path'http://www.cs.uu.nl/CGAL/FAQ/'}
%%\newcommand{\hpstlpage}{\path'http://www.cs.rpi.edu/~musser/stl.html'}
\newcommand{\sgistlpage}{\path'http://www.sgi.com/Technology/STL/'}
\newcommand{\stlportpage}{\path'http://www.metabyte.com/~fbp/stl/'}
\newcommand{\stlportpage}{\path'http://www.stlport.org/'}
\newcommand{\ledapage}{\path'http://www.mpi-sb.mpg.de/LEDA'}
\newcommand{\gmppage}{\path'http://www.gnu.org/software/gmp'}
\newcommand{\clnpage}{\path'http://clisp.cons.org/~haible/packages-cln.html'}
@ -86,11 +92,15 @@ conform to the ISO 14882 standard for \lcTex{\CC\footnote{see e.g.
we could not work around all of them.
On \mswin, one has two options for installing: one is specifically
targeted for this OS and is described in \MSInst; the other is using
Cygwin\footnote{see \path~http://sourceware.cygnus.com/cygwin~} and
the generic installation procedure for Unix-like environments
described here. If you are going to install \cgal\ using Cygwin,
please read section \ref{sec:cygwin} first.
targeted for this OS and is described in
section~\ref{sec:wininst}\footnote{see also {\tt wininstall.txt} in
the root directory of the installation}; the other is using
Cygwin\footnote{\path~http://sourceware.cygnus.com/cygwin~} and the
generic installation procedure for Unix-like environments described in
section~\ref{sec:sample-inst} and subsequent sections. If you are
going to install \cgal\ using Cygwin, please read section
\ref{sec:cygwin} first.
More precisely, \cgaldir\ supports the following compilers/operating
systems:
@ -103,24 +113,27 @@ systems:
\mipsprocc\ 7.3 (n32) & IRIX 6.5\\\hline
\Gcc{2.95} (and later) &
IRIX 6.5 / Solaris 2.6 / Linux 2.x /
\mswin\ 95/98/NT4\footnotemark[6]\\\hline
\mswin\ 95/98/NT4\footnotemark[7]\\\hline
\egcs{1.1.2} (and later) &
IRIX 6.5 / Solaris 2.6 / Linux 2.x /
\mswin\ 95/98/NT4\footnotemark[6]\\\hline
\mswin\ 95/98/NT4\footnotemark[7]\\\hline
\msvc{6.0} & \mswin\ 95/98/NT4\\\hline
\end{tabular}
\end{center}
\footnotetext[6]{with Cygwin $\beta$20.1}
\footnotetext[7]{with Cygwin $\beta$20.1}
There are plans to provide full support for \bcc{5.4} in the future,
but there is no such support at the moment. The \sunprocc{4.2}
compiler is not supported anymore, please stay with \cgal-1.2 if you
have to use it. \Gcc{2.8.1} is not supported anymore, please stay
with \cgal-2.0 if you have to use it. Support for \sunprocc{5} will
be reconsidered as soon as an acceptable degree of
standard-conformance is reached.
but there is no such support at the moment. \msvc{5.0} and prior is
not supported and there are no plans to support it in future releases.
The \sunprocc{4.2} compiler is not supported anymore, please stay with
\cgal-1.2 if you have to use it. \Gcc{2.8.1} is not supported
anymore, please stay with \cgal-2.0 if you have to use it. Support
for \sunprocc{5} will be reconsidered as soon as an acceptable degree
of standard-conformance is reached. Support for \icl{4.0} will be
considered.
\section{Getting \cgal}
\section{Getting \cgal} \label{sec:gettingcgal}
This section applies to Unix-like environments, as well as to \mswin .
The \cgal\ library can be downloaded in two different ways: using ftp
or using WWW. If you have a WWW connection, the easiest way to
@ -144,7 +157,7 @@ file that contains descriptions of the files in this directory. An
example of an FTP-session is given below.
\begin{alltt}
$ ftp ftp.cs.uu.nl
> ftp ftp.cs.uu.nl
Name (ftp.cs.uu.nl:<your username>): anonymous
Password: <type your email address here>
ftp> cd pub/CGAL
@ -155,7 +168,10 @@ example of an FTP-session is given below.
\end{alltt}
After you have downloaded the file containing the \cgal\ library, you
have to decompress it. For the zipfile use the command
have to decompress it. For the zipfile use the
command\footnote{\texttt{unzip} for \mswin\
can be downloaded, for instance, from
\texttt{http://www.itribe.net/virtunix/}}.
\begin{verbatim}
unzip <filename>.zip
@ -168,12 +184,15 @@ and for the gzipped file use the commands
tar xvf <filename>.tar
\end{verbatim}
%% N.B. On a PC you should use an unzip utility that can deal with long
%% filenames (like WinZip or InfoZip)!
Alternatively, your browser might be able to invoke the right
decompression program by itself.
On \mswin\ you should use an unzip utility that can deal with long
filenames (like WinZip or InfoZip).
In both cases the directory \cgaldir\ will be created. This directory
contains the following subdirectories:
\footnotetext[8]{\stlportpage}
\begin{center}
\renewcommand{\arraystretch}{1.3}
\gdef\lcTabularBorder{2}
@ -181,8 +200,8 @@ contains the following subdirectories:
\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 (some of them need \leda, geomview,
OpenGL or other third-party products)\\\hline
\texttt{demo} & demo programs (some of them need \leda, 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
@ -192,9 +211,20 @@ contains the following subdirectories:
\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
\texttt{stlport} &
a customized version of \texttt{Stlport-3.2.1}\footnotemark[8]
that is used with \msvc{6.0}\\\hline
\end{tabular}
\end{center}
In order to avoid problems with installation routines, please make
sure that the full path to \cgaldir\ does not contain spaces
(the latter, while in principle possible on \mswin , in not supported
in the present release).
It is planned that in the future on \mswin\ the installation procedure
will be automated via InstallShield.
\section{Installing \cgal}
The directory \cgaldir\ contains a Bourne shell script called
@ -402,7 +432,7 @@ This also retests for \leda/GMP/CLN installation in system directories
which otherwise is only done the first time you enable \leda/GMP/CLN
support for an OS/compiler combination.
\subsection{Files created during installation}
\subsection{Files created during installation}\label{sec:filescreated}
The install script stores all relevant settings for an OS/compiler
combination in the directory
@ -499,13 +529,14 @@ option to set these directories differently.\bigskip
\subsection{The GMP Menu}\label{sec:gmp-menu}
This menu is to set GMP (\gnu\ Muptiple Precision Library) specific
This menu is to set GMP (\gnu\ Multiple Precision Library) specific
options, if you plan to use GMP together with \cgal . In the {\tt
auxiliary} directory you can find a GMP distribution, if you do not
already have it installed on your system. This menu contains an option
to install GMP in your \cgal\ directory tree\footnote{This option is
not present on \mswin.}, but of course you can also install it
independently from \cgal .
on \msvc\ just unpacks the corresponding pre-compiled library that
comes with \cgal\ distribution.}, but of course you can also install
it independently from \cgal .
If GMP support is enabled the first time, the script tests whether GMP
is installed in standard system directories or in the \cgal\ tree. If
@ -700,6 +731,39 @@ 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.
\section{Upgrading a previous \cgal\ installation}\label{sec:upgrade}
In case you have \cgal\ 1.*/2.0 installed on your system, you might
like to reuse your configuration files and GMP installations. Simply
use the following command to copy them into the right place:
\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-1.2}).
You can then build all libraries for the actual operating system that
existed in your \cgal\ 1.* installation with
\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.
\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{Identifying OS and Compiler}\label{sec:os-compiler-id}
Since \cgal\ supports several different operating systems and
@ -762,6 +826,7 @@ contains an include statement that looks as follows:
CGAL_MAKEFILE = /users/jannes/CGAL-2.1/make/makefile_<CGAL-OS description>
include $(CGAL_MAKEFILE)
\end{verbatim}
%$
The file \texttt{CGAL\_MAKEFILE} is an include file with platform
dependent makefile settings. The abbreviation \texttt{<CGAL-OS
@ -832,11 +897,382 @@ Furthermore the directories \texttt{\cgaldir/examples} and
and graphical example programs. In all these directories you will
find a makefile that is ready for use.
\section{Using \cgal\ and \leda}\label{sec:leda}
This section describes how to use \cgal\ and \leda\ simultaneously.
\section{Installation on Cygwin}\label{sec:cygwin}
\subsection{Support for \leda}
\cgal\ supports \leda\ in the following ways:
Cygwin is a free Unix-like environment for MS-Windows, distributed by
Cygnus Solutions. For our tests we have used version $\beta$-20.1.
It consists of a port of a large number of GNU tools, such as bash,
make, gcc (egcs), 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://sourceware.cygnus.com/cygwin/~ .
\subsection{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 seperated 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}
Behavour of Cygwin in this regard might be different from the \mswin\
behaviour. In particular, using spaces in filenames should better be
avoided.
\paragraph{Links, shortcuts, etc} should be avoided as well.
\subsection{\msvc{6.0}-setup}
A number of environment variables has to be set (or updated)
in order to use the installation.
\texttt{PATH} should contain \msvc{6.0} command line tools locations.
The environment variables \texttt{INCLUDE} and \texttt{LIB} should
point to the location of \msvc{6.0} header files and to the location
of the \msvc{6.0} libraries, respectively.
The interface for doing this is different for NT and for Win9*.
\paragraph{\mswin-NT4.0.}
One can set the corresponding environment variables using the
usual NT interface\footnote{open MyComputer, press right mouse button,
select Properties, select Environment, set the relevant variables}.
Alternatively, they can be set in the \texttt{.bashrc} file for the
particular user, or in the system-wide \texttt{bash} customization
file (usually \texttt{/etc/bashrc}).
The result should look roughly as follows, assuming that
\texttt{C:$\backslash$PROGRA$\sim$1$\backslash$MICROS$\sim$2$\backslash$}
is the location of the \msvc{} installation.
\begin{verbatim}
LIB=C:\PROGRA~1\MICROS~2\VC98\LIB
INCLUDE=C:\PROGRA~1\MICROS~2\VC98\INCLUDE
\end{verbatim}
and \texttt{PATH} should contain
\begin{verbatim}
/PROGRA~1/MICROS~2/Common/msdev98/BIN:
/PROGRA~1/MICROS~2/VC98/BIN:/PROGRA~1/MICROS~2/Common/TOOLS:
/PROGRA~1/MICROS~2/Common/TOOLS/WINNT
\end{verbatim}
\paragraph{\mswin-9*.}
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{cygnus.bat}, located in the cygwin main
directory and add the line
\begin{verbatim}
call C:\PROGRA~1\MICROS~2\VC98\Bin\MSCVARS32.BAT
\end{verbatim}
where
\texttt{C:$\backslash$PROGRA$\sim$1$\backslash$MICROS$\sim$2$\backslash$}
has to be customized according to where \msvc{} is installed on your
system.
\section{Installation on \mswin\ with native tools} \label{sec:wininst}
\cgal-\cgalrelease\ provides a basic support for \msvc{6.0}
compiler. It can also be considered an early beta release for Inprise
Borland C++ Builder 4, known also as \bcc{5.4}.
Using the latter with \cgal\ is briefly described
in file \texttt{wininstall.txt} located in the directory
\cgal-\cgalrelease.
Downloading and contents of the distribution are described in
section~\ref{sec:gettingcgal} above.
In order to install and use \cgal\ with \msvc , you need \msvc\
command line tools installed and working\footnote{To make sure that
certain environment variables are set correctly, one can execute
\texttt{VCVARS32.BAT} located in the same directory as the \msvc\
executables.}. Certain familiarity with using Windows command prompt
and these tools is assumed. A reasonable amount of system resources,
that is enough memory to run large compilations (64 Mb on NT4.0) and
about 15MB of disk space, is required.
It is highly recommended that you have a recent (at least 4.0) version
of \leda\ installed. Most of the \cgal\ demos use \leda\ for
visualization.
\cgal\ has interfaces to a number of rather important 3rd party
packages, that provide, in particular, arbitrary precision arithmetic,
and visualization. On Windows these packages are \leda\ and \gnu\ MP
(also known as \gmp ). \gmp\ is supported by default; see
section~\ref{sect:wingmp} for details. \leda\ configuration is
described below.
\newcommand{\CGALR}{\texttt{CGALROOT}}
\newcommand{\bslsh}{$\backslash$}
In what follows \CGALR\ will refer to the full path to the
directory \cgal-\cgalrelease , where the downloaded source is
unpacked.
\subsection{Initial customization}
Change to \CGALR\ and run the batch file \texttt{cgal\_config.bat} at the
command prompt. This script will set the appropriate makefiles for
subsequent compilation.
\texttt{cgal\_config.bat} accepts 4 parameters.
\begin{enumerate}
\item the compiler type (\texttt{msc} or \texttt{bcc})
%
\item (optional) compiler options (to enable debugging and/or threads
support)
%
\item (optional) \texttt{LEDAROOT} (the location where \leda\ lib files are installed)
%
\item (optional) the location where \leda\ header files are installed.
If omitted, it is assumed to be
\texttt{LEDAROOT\bslsh incl}.
\end{enumerate}
Typically, assuming that \leda\ is installed in
\texttt{k:\bslsh LEDA-4.1-991117},
one would run at the command prompt:
\begin{verbatim}
K:\cgal\> cgal_config msc k:\LEDA-4.1-991117
\end{verbatim}
Otherwise, if \leda\ header files are not in \texttt{LEDAROOT\bslsh incl},
one would run, say,
\begin{verbatim}
K:\cgal\> cgal_config msc k:\LEDA-4.1-991117\msvc k:\LEDA-4.1-991117\incl
\end{verbatim}
It is assumed that paths to \texttt{LEDAROOT} and \leda\ include
directories do not have names with spaces.
Running \texttt{cgal\_config.bat} without parameters prints out the detailed
options list (in particular, the compiler and linker options).
\subsection{Building the library, examples and demos}
Change (if necessary)
to \CGALR\ and run \texttt{make\_lib.bat} at the command prompt. Namely,
\begin{verbatim}
K:\cgal\> make_lib
\end{verbatim}
builds the library with the compiler and linker options specified
by the last run of \texttt{cgal\_config.bat}.
For other settings, one would have to reconfigure and recompile
(same as for current \leda\ installation).
\begin{verbatim}
K:\cgal\> make_examples
\end{verbatim}
compiles and links the examples and
\begin{verbatim}
K:\cgal\> make_demos
\end{verbatim}
compiles and links the demos.
Examples and demos can also be built on per directory, or even on per
executable basis. For instance, change to
\texttt{\cgal-\cgalrelease\bslsh demo\bslsh Point\_set\_2}
and type \texttt{nmake all} to build all the examples.
Typing \texttt{nmake ps\_test1}
will build the particular demo program \texttt{ps\_test1}.
The corresponding executable(s) then can be run as usual, from the
command prompt, or via Explorer.
Note that demos requiring \leda\ would not work if \cgal\ was
configured without \leda\ support. \leda\ must be compiled and used
with \texttt{LEDA\_STD\_HEADERS} flag on. See
section~\ref{subs:ledastlconfl} for details.
\subsection{Developing for \cgal\ with \msvc{6.0}}
Here we give some hints on the use of \cgal\ with native \msvc\ tools;
C++ language issues, troubleshooting and the use of \cgal\ with Cygwin
are covered above.
The most important issue is the following. \cgal\ uses C++ STL
(Standard Template Library) quite extensively. To resolve many C++
Standard compliance problems of the native \msvc\ STL, we chose to use
a drop-in replacement for it, \texttt{STLPort} (see \stlportpage). We
have customized \texttt{STLPort-3.2.1} to partially support
\texttt{std::iterator\_traits} template of STL.
For this to work, the compiler should have \texttt{STLPort}
subdirectory first in its search path. This issue is taken care of in
the makefiles generated. Customization of IDE is described in Sect
4.2 below.
\paragraph{Using nmake makefiles.}
Simply adapt a makefile from an \texttt{examples/} or \texttt{demos/}
subdirectory.
This means changing the target \texttt{all} and changing the targets that
create executables (look in the subsection ``target entries'' there).
For instance, you would like to create an executable \texttt{demo\_beta.exe}
from a C++ source file \texttt{demo\_beta.C}. Then your
\texttt{makefile}, that would
include the ``main'' makefile makefile.mak in \CGALR\ would have
\begin{verbatim}
all: demo_beta
demo_beta: demo_beta.obj
$(CGAL_CXX) $(LIBPATH) $(EXE_OPT)demo_beta demo_beta.obj \
$(LDFLAGS)
\end{verbatim}
and a ``suffix rule'' that describes creation of an object file from a
.C - file, e.g.
\begin{verbatim}
.C.obj:
$(CGAL_CXX) $(CXXFLAGS) $(OBJ_OPT) $<
\end{verbatim}
Extra compiler and linker options are to be specified by changing
macros \texttt{CXXFLAGS} and \texttt{LDFLAGS}, respectively.
One way to specify the ``main'' makefile is by using environment
variable \texttt{CGAL\_MAKEFILE} to specify the full path to
\texttt{makefile.mak} in
\CGALR .
Probably such a makefile can also be used for a ``custom build'' via an
IDE, although we never attempted this ourselves.
\paragraph{Using \msvc\ IDE.}
The compiler/linker options used to build the \cgal\ library should
match those used for the project. This can be done by
selecting {\em Project/Settings...}, the {\em C/C++} section,
{\em Code Generation} category, and choosing the right
library in {\em Use run-time library}:
\begin{tabular}{|l|l|} \hline
Single-Threaded& ml (or no option)\\
Multi-threaded & mt\\
Multi-threaded DLL& md\\
Debug Single-Threaded & mld\\
Debug Multi-threaded & mtd\\
Debug Multi-threaded DLL& mdd\\\hline
\end{tabular}
Further necessary customization is as follows.
We hope that the forthcoming automatic installation will simplify
these elaborated procedures.
\paragraph{Customizing compilation.}
Additional include directories (in the right order!) and preprocessor
definitions have to be specified. We assume that either
\texttt{CGAL\_ROOT} is
an (already defined) environment variable (and then the include and
library paths can be entered as shown), or
\texttt{\$(CGAL\_ROOT)} must be
replaced by the corresponding full path to the \cgal\ installation.
Select {\em Project/Settings...}, the {\em C/C++}
section, {\em Preprocessor} category. Add (in the following order)
\begin{verbatim}
$(CGAL_ROOT)\stlport
$(CGAL_ROOT)\include\CGAL\config\msvc
$(CGAL_ROOT)\include
$(CGAL_ROOT)\include
$(CGAL_ROOT)\auxiliary\wingmp\gmp-2.0.2
\end{verbatim}
%$ %$ %$%$
to "Additional include directories:".
It is very important that
\texttt{\$(CGAL\_ROOT)\bslsh stlport}
appears first in the list in {\em Additional include directories}.
Otherwise a bunch
of ugly compiler error messages is guaranteed.
If \leda\ is used, don't forget to add
\texttt{\$(LEDAROOT)\bslsh incl}
to {\em Additional include directories}.
Add \texttt{CGAL\_USE\_GMP} to {\em Preprocessor definitions}.
If \leda\ is used, also add \texttt{CGAL\_USE\_LEDA} and
\texttt{LEDA\_PREFIX} there.
Should your source file(s) have suffices that are not recognized by
\msvc{6.0} IDE as C++ source files,
(like all the \cgal\ source files, by the way)
add \texttt{/TP} to options {\em Project Settings} in the {\em C/C++} section,
{\em Preprocessor} category.
\paragraph{Customizing linking.}
Additional library directories have to be specified.
Select {\em Project/Settings...}, {\em Link} section, {\em Input}
category. Add
\texttt{CGAL.lib} and \texttt{gmp.lib}
in {\em Object/library modules}: list.
If LEDA is used, also add there
\texttt{libP.lib},
\texttt{libG.lib}, and
\texttt{libL.lib}.
If \leda\ Window is used, also add there \texttt{libW.lib}.
In addition, make sure that you link against the system libraries
\texttt{user32.lib, gdi32.lib, comdlg32.lib, shell32.lib, advapi32.lib}
(usually IDE has them already on the list).
If \leda\ Geowin is used, one should as well add
\texttt{libGeoW.lib} and \texttt{libD3.lib}
to {\em Object/library modules}.
\subsection{\gmp\ support}\label{sect:wingmp}
A pre-compiled for \msvc{6.0}, using Cygwin \gnu\ C compiler and
\gnu\ assembler,
static object library \texttt{gmp.lib} is located in
\texttt{CGALROOT\bslsh auxiliary\bslsh wingmp\bslsh gmp-2.0.2\bslsh msvc}
and the corresponding header file \texttt{gmp.h} in
\texttt{CGALROOT\bslsh auxiliary\bslsh wingmp\bslsh gmp-2.0.2}.
It was created using M.Khan's Cygwin-specific patches to \gmp-2.0.2,
that are available from\\
\texttt{http://www.xraylith.wisc.edu/~khan/software/gnu-win32/} and then
slightly modified (by adding a few routines, like
\texttt{random}, and creating a
separate \msvc{6.0}-compiled library that does I/O of the GMP numbers.) It
was checked that all tests that come with \gmp\ distribution pass.
See \texttt{CGALROOT\bslsh auxiliary\bslsh wingmp\bslsh
gmp-2.0.2\bslsh msvc\bslsh src} for details.
Subject to time constraints, we might provide a smoother \gmp\ support
for \msvc\ in the future. A new major release of \msvc\ is expected in
March 2000, probably \cgal\ will be upgraded to use it then.
\lcTex{\begin{appendix}}
\section{Using \cgal\ and \leda}\label{sec:leda}
\cgal\ supports \leda\ in the following ways.
\begin{enumerate}
\item There are support functions defined for the \leda\ number types
@ -844,6 +1280,11 @@ This section describes how to use \cgal\ and \leda\ simultaneously.
\texttt{real} (see the files \texttt{<CGAL/leda\_*>}).
\item For all two-dimensional geometric objects there are input/output
operators from/to a \texttt{leda\_window}.
\item For all two-dimensional geometric objects there are output
operators to a \texttt{leda\_ps\_file}.
\item The registration functions needed to interact with a
\texttt{leda\_geowin} are defined for all geometric objects from the
\cgal\ kernel.
\item \cgal\ defines the following \leda-related compiler flags:
\begin{itemize}
\item When \leda\ is used, the flags \texttt{CGAL\_USE\_LEDA} and
@ -860,6 +1301,55 @@ The include makefiles in the \texttt{\cgaldir/make} directory
corresponding to \leda\ can be recognized by the suffix
``\texttt{\_LEDA}''.
\section{Compiler workarounds}
In \cgal\ a number of compiler flags is defined, all of them start
with the prefix \texttt{CGAL\_CFG}. These flags are used to work
around compiler bugs and limitations. For example, the flag
\texttt{CGAL\_CFG\_NO\_MUTABLE} denotes that the compiler does not
know the keyword \texttt{mutable}.
For each compiler a file \texttt{<CGAL/compiler\_config.h>} is
defined, with the correct settings of all flags. This file is
generated automatically by the \texttt{install\_cgal} script. For this
the test programs in the directory \texttt{\cgaldir/config/testfiles}
are used. The file \texttt{<CGAL/compiler\_config.h>} and the test
programs contain a description of the problem, so in case of trouble
with a \texttt{CGAL\_CFG} flag it is a good idea to take a look at it.
The file \texttt{<CGAL/config.h>} manages all configuration problems
of the compiler. This file includes the file
\texttt{CGAL/compiler\_config.h}. It is therefore important that the
file \texttt{<CGAL/config.h>} is always included before any other
\cgal\ source file that depends on workaround flags. In most cases you
do not have to do anything special for this, because many CGAL files
already take care of including \texttt{<CGAL/config.h>}. Nevertheless
it would be a good idea to always start your \cgal\ programs with
including \texttt{<CGAL/config.h>} (or \texttt{<CGAL/basic.h>}, which
contains some more basic \cgal\ definitions).
\section{Compiler Optimizations}\label{sec:compiler-optimisations}
You may have noticed that we do not set optimizer flags as \texttt{-O}
by default in the include makefiles(see section~\ref{sec:makefiles} for
a description of the makefile structure in \cgal). The main reason
for not doing this is that compilers run much more stable without. On
the other hand, most if not all \cgal\ programs will run considerably
faster when compiled with optimizations! So if you are going for
performance, you should/have to add \texttt{-O}, \texttt{-O3} or maybe
more specific optimizer flags (please refer to the compiler
documentation for that) to the \texttt{CXXFLAGS} variable in your
application makefile:
\begin{alltt}
#---------------------------------------------------------------------#
# compiler flags
#---------------------------------------------------------------------#
# The flag CGAL_CXXFLAGS contains the path to the compiler and is defined
# in the file CGAL_MAKEFILE. You may add your own compiler flags to CXXFLAGS.
CXXFLAGS = $(CGAL_CXXFLAGS) -O
\end{alltt}
%$
\section{Troubleshooting}\label{sec:troubleshooting}
This section contains some remarks about known problems and the
@ -925,80 +1415,145 @@ CXXFLAGS = $(LONG_NAME_PROBLEM_CXXFLAGS) $(CGAL_CXXFLAGS)
LDFLAGS = $(LONG_NAME_PROBLEM_LDFLAGS) $(CGAL_LDFLAGS)
\end{alltt}
\subsection{\leda\ and \stl\ conflicts}
\subsection{\leda\ and \stl\ conflicts}\label{subs:ledastlconfl}
If you are using an old version of \leda, the combination of \leda\
and \stl\ may give some problems. In order to avoid them, it is highly
recommended to use the latest \leda\ release\footnote{At the moment
this is \leda\ 4.0.}, since this is what we test \cgal\ with.
\section{Compiler Optimizations}\label{sec:compiler-optimisations}
You may have noticed that we do not set optimizer flags as \texttt{-O}
by default in the include makefiles(see section\ref{sec:makefiles} for
a description of the makefile structure in \cgal). The main reason
for not doing this is that compilers run much more stable without. On
the other hand, most if not all \cgal\ programs will run considerably
faster when compiled with optimizations! So if you are going for
performance, you should/have to add \texttt{-O}, \texttt{-O3} or maybe
more specific optimizer flags (please refer to the compiler
documentation for that) to the \texttt{CXXFLAGS} variable in your
application makefile:
\paragraph{\msvc\-specific problems.}
Using \msvc\ with \leda\ requires\footnote{Also applies to \bcc .} the
latter to be compiled and used with \texttt{LEDA\_STD\_HEADERS} flag
on. \cgal\ uses new-style C++ standard conformant headers\footnote{the
ones that do not have \texttt{.h} suffix}, while \leda\ can work
with both styles. Mixing these styles is a strict no-no for \msvc.
Before compiling \leda\, edit the file
\texttt{\$(LEDAROOT)/incl/LEDA/system.h} and uncomment the
\texttt{\#define} in the following fragment there.
\begin{alltt}
#---------------------------------------------------------------------#
# compiler flags
#---------------------------------------------------------------------#
# The flag CGAL_CXXFLAGS contains the path to the compiler and is defined
# in the file CGAL_MAKEFILE. You may add your own compiler flags to CXXFLAGS.
CXXFLAGS = $(CGAL_CXXFLAGS) -O
// use c++ std headers
//#define LEDA_STD_HEADERS
\end{alltt}
\section{Upgrading a previous \cgal\ installation}
In case you have \cgal\ 1.*/2.0 installed on your system, you might
like to reuse your configuration files and GMP installations. Simply
use the following command to copy them into the right place:
\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-1.2}).
Also, \leda\ and \cgal\ libraries must be compiled with the same
options controlling the use of debugging and multithreading.
\footnote{\msvc\ compilation/linking options
\texttt{-ML, -MT, -MD, -MLD, -MTD, -MDD}}
You can then build all libraries for the actual operating system that
existed in your \cgal\ 1.* installation with
\begin{verbatim}
./install_cgal --rebuild-all
\end{verbatim}
\subsection{\msvc{6.0}-specific C++ problems}
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.
%Most of the following really belongs to,
%yet to be written, \cgal\ Developer manual.
\section{Compiler workarounds}
In \cgal\ a number of compiler flags is defined, all of them start
with the prefix \texttt{CGAL\_CFG}. These flags are used to work
around compiler bugs and limitations. For example, the flag
\texttt{CGAL\_CFG\_NO\_MUTABLE} denotes that the compiler does not
know the keyword \texttt{mutable}.
\cgal\ uses a modified drop-in replacement for STL, STLPort,
version 3.2.1. Our modifications included
\begin{itemize}
\item modifying the code to enable
the use of \texttt{std::iterator\_traits} template, where possible;
\item providing \texttt{std::vector} class that does not use
a plain C pointer as \texttt{vector\_iterator}.
\end{itemize}
The latter allows using the full power of STL algorithms on
\texttt{std::vector} without the limitation given by the absense
of the support for partial specialization of template parameters.
For each compiler a file \texttt{<CGAL/compiler\_config.h>} is
defined, with the correct settings of all flags. This file is
generated automatically by the \texttt{install\_cgal} script. For this
the test programs in the directory \texttt{\cgaldir/config/testfiles}
are used. The file \texttt{<CGAL/compiler\_config.h>} and the test
programs contain a description of the problem, so in case of trouble
with a \texttt{CGAL\_CFG} flag it is a good idea to take a look at it.
Always make sure that the subdirectory
\texttt{\$(CGAL\_ROOT)/stlport/} %$
comes first in the list of additional include directories for \msvc.
This is handled automatically if you use \cgal-supplied (or \cgal-generated)
makefiles.
The file \texttt{<CGAL/config.h>} manages all configuration problems
of the compiler. This file includes the file
\texttt{CGAL/compiler\_config.h}. It is therefore important that the
file \texttt{<CGAL/config.h>} is always included before any other
\cgal\ source file that depends on workaround flags. In most cases you
do not have to do anything special for this, because many CGAL files
already take care of including \texttt{<CGAL/config.h>}. Nevertheless
it would be a good idea to always start your \cgal\ programs with
including \texttt{<CGAL/config.h>} (or \texttt{<CGAL/basic.h>}, which
contains some more basic \cgal\ definitions).
\paragraph{\texttt{std::iterator\_traits}} is only partially
supported, due to absense of partial specialization support in \msvc.
This means that \texttt{std::iterator\_traits<T>} must be explicitly
instantiated when \texttt{T} is a C pointer.
\cgal\ provides
these instantiations for most commonly used primitive data types and
\cgal\ kernel types\footnote{\cgal\ \texttt{Point, Segment}, etc.}.
For other types the user must do this himself.
This can be done by using the macro
\texttt{CGAL\_DEFINE\_ITERATOR\_TRAITS\_POINTER\_SPEC(T)}.
Note that the parameter of this macro cannot contain symbols $<$ and
$>$. Thus the macro cannot on types that contain $<$ and $>$
directly. However, one can be done by first define a new type using
\texttt{typedef} and then applying the macro to this new type.
See e.g. \texttt{examples/Getting\_started/advanced\_hull.C}
for an example of using this macro.
Note that this macro does not have any effect when other than
\msvc{6.0} compiler is used, so it can be safely left in the source code.
\medskip
\paragraph{Other problems.} Here goes an incomplete list
of problems encountered, and \cgal-specific workarounds, if
available.
Compiler error messages are meant to be
hints only, and do not pretend to be complete, as well.
\begin{enumerate}
%
\item Partial specialization of template parameters is not
supported. Do not use it. Error messages say that ``the class has
already been declared'', or ``unrecognizable template
declaration/definition''. See
\texttt{config/testfiles/CGAL\_CFG\_NO\_PARTIAL\_CLASS\_TEMPLATE\_SPECIALISATION.C}\\
for a test program illustrating the problem. \label{msvc::parspec}
%
\item Compiler does not always match the most
specialized instance of a function template correctly. So you get
``error C2667: none of 2 overload have a best conversion''.\\
See \texttt{config/testfiles/CGAL\_CFG\_MATCHING\_BUG\_2.C} \\
for a test program illustrating the problem.\label{msvc::matchbug2}
%
\item Compiler does not support the Koenig
lookup. That is, it does not search in the namespace of the arguments for
the function. See
\texttt{config/testfiles/CGAL\_CFG\_NO\_KOENIG\_LOOKUP.C}. \label{msvc::koenig}
%
\item A scope operator in parameter types of a member function only
works when the function is defined inline. See
\texttt{config/testfiles/CGAL\_CFG\_NO\_SCOPE\_MEMBER\_FUNCTION\_PARAMETERS.C}.
\label{msvc::scopememberfunc}
%
\item Passing a dependant type as template parameter cannot be done
with \texttt{typename} keyword on \msvc. Replace \texttt{typename}
by \texttt{CGAL\_TYPENAME\_MSVC\_NULL} in such places.\\
See \texttt{config/testfiles/CGAL\_CFG\_TYPENAME\_BUG.C}. \label{msvc::typename}
%
\item Template \texttt{friend} declarations must not contain $<>$.
Replace $<>$ by \texttt{CGAL\_NULL\_TMPL\_ARGS}.\\
See \texttt{config/testfiles/CGAL\_CFG\_NO\_TEMPLATE\_FRIEND\_DISTINCTION}.
\label{msvc::friend}
%
\item Using non-class template parameters often gives internal
compiler errors.
%
\item Internal compiler errors can sometimes be avoided by increasing
the amount of memory available to the compiler. Use \texttt{-Zm<number>}
option. In \cgal\ makefiles it is set to \texttt{-Zm900}, meaning
``using 900\% out of the usual memory limit''. \label{msvc::Zm}
%
\item \texttt{[...]/VC98/INCLUDE/xlocnum(268) :
error C2587: '\_U' :\\
illegal use of local variable as default
parameter} can occur\footnote{For instance, in \cgal\
\texttt{Min\_circle} package}. The only workaround we know is to redefine
the macro \texttt{\_VIRTUAL} in
\texttt{<xlocnum>}\footnote{Yes, in the \msvc\ header !}
to be empty. Search for\\
\texttt{\#define~\_VIRTUAL~virtual} there and
replace it by \texttt{\#define~\_VIRTUAL~}. \label{msvc::VIRTUAL}
%
\item Various matching failures for overloaded functions and ctors.
Use dummy parameters.
%
\item Avoid multiple forward declarations.
%
\item If necessary, simplify template parameters by using extra
\texttt{typedef}s.
\end{enumerate}
\section{Scripts}
@ -1072,98 +1627,10 @@ Alternatively, you can type
perl -wi.hrbck -- replace_headers <FILES>
\end{alltt}
\section{Installation on Cygwin}\label{sec:cygwin}
\lcTex{\end{appendix}}
Cygwin is a free Unix-like environment for MS-Windows, distributed by
Cygnus Solutions, see \path~http://sourceware.cygnus.com/cygwin/~ For
our tests we have used version $\beta$-20.1.
%%
%% EOF
%%
It consists of a port of a large number of GNU tools, such as bash,
make, gcc (egcs), 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 the URL
above.
\subsection{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
Win*-style pathnames when given to the compiler or linker.
The main difference is that directories are seperated 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 Win*-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 Win*-style drives and the Unix-like
style. More precisely, it maps the forest of the directories/files on
Win*-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}
might also be confusing. Behavour of Cygwin in this regard might be
different from the \mswin\ behavour.
In particular, using spaces in filenames should better be avoided.
\paragraph{Links, shortcuts, etc} should be avoided as well.
\subsection{\msvc{6.0}-setup}
A number of environment variables has to be set (or updated)
in order to use the installation.
\texttt{PATH} should contain \msvc{6.0} command line tools locations.
The environment variables \texttt{INCLUDE} and \texttt{LIB} should
point to the location of \msvc{6.0} header files and to the location
of the \msvc{6.0} libraries, respectively.
The interface for doing this is different for NT and for Win9*.
\paragraph{\mswin-NT4.0.}
One can set the corresponding environment variables using the
usual NT interface\footnote{open MyComputer, press right mouse button,
select Properties, select Environment, set the relevant variables}.
Alternatively, they can be set in \texttt{.bashrc} file for the
particular user.
The result should look roughly as follows, assuming that
\texttt{C:$\backslash$PROGRA$\sim$1$\backslash$MICROS$\sim$2$\backslash$}
is the location of the \msvc{} installation.
\begin{verbatim}
LIB=C:\PROGRA~1\MICROS~2\VC98\LIB
INCLUDE=C:\PROGRA~1\MICROS~2\VC98\INCLUDE
\end{verbatim}
and \texttt{PATH} should contain
\begin{verbatim}
/PROGRA~1/MICROS~2/Common/msdev98/BIN:
/PROGRA~1/MICROS~2/VC98/BIN:/PROGRA~1/MICROS~2/Common/TOOLS:
/PROGRA~1/MICROS~2/Common/TOOLS/WINNT
\end{verbatim}
\paragraph{\mswin-9*.}
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{cygnus.bat}, located in the cygwin main
directory and add the line
\begin{verbatim}
call C:\PROGRA~1\MICROS~2\VC98\Bin\MSCVARS32.BAT
\end{verbatim}
where
\texttt{C:$\backslash$PROGRA$\sim$1$\backslash$MICROS$\sim$2$\backslash$}
has to be customized according to where \msvc{} is installed on your
system.