FlightGear Portability Guide
Bernie Bright (bbright@c031.aone.net.au)
28 November 1998
FlightGear is a multi-platform general aviation flight simulator. It is an
open development project in which anyone with network access and a C++ compiler
can contribute patches or new features.
1 Introduction
The file Include/compiler.h attempts to capture the differences between
C++ compiler and STL implementations through the use of ``feature test macros''.
The file is divided into two parts. The first part contains a section for each
compiler, consisting of manifest constants specifying the features supported
or absent from the particular compiler/STL combination. The second part uses
the feature test macros to supply any missing features.
1.1 Supported compilers (more to come)
gcc 2.7.x
gcc 2.8.x
egcs 1.x
Inprise (Borland) C++ 5.02
Inprise (Borland) C++Builder 1 (5.20)
1.2 Features Tests
1.2.1 STL
- FG_NEED_AUTO_PTR
- Some STL implementations don't supply an auto_ptr<>
class template. Define this to provide one.
- FG_NO_DEFAULT_TEMPLATE_ARGS
- Define this if the compiler doesn't support
default arguments in template declarations. (example)
- FG_INCOMPLETE_FUNCTIONAL
- Some STL implementations don't have mem_fun_ref().
Define this to provide one.
- FG_NO_ARROW_OPERATOR
- Define this if iterators don't support operator->().
(example)
- FG_EXPLICIT_FUNCTION_TMPL_ARGS
-
- FG_MEMBER_TEMPLATES
-
1.2.2 Compiler
- FG_NAMESPACES
- Define if compiler supports namespaces.
- FG_HAVE_STD
- Define if std:: namespace supported.
- FG_HAVE_STD_INCLUDES
- Define if headers should be included as <iostream>
instead of <iostream.h>. Also implies that all ISO C++ standard include
files are present.
- FG_HAVE_STREAMBUF
- Define if <streambuf> or <streambuf.h>
are present.
- FG_CLASS_PARTIAL_SPECIALIZATION
-
- FG_NEED_EXPLICIT
- Define if the compiler doesn't support the explicit
keyword.
- FG_NEED_TYPENAME
- Define if the compiler doesn't support the typename
keyword.
- FG_NEED_MUTABLE
- Define if the compiler doesn't support the mutable
keyword.
- FG_NEED_BOOL
- Define if the compiler doesn't have the bool
type.
1.2.3 Include Files
This section deals with header file naming conventions. Some systems truncate
filenames, 8.3 being common, other systems use old or non-standard names for
some header files. We deal with the simple cases by defining macros that expand
to the appropriate filename.
- STD_ALGORITHM
- => <algorithm>, ``algorithm''
- STD_FUNCTIONAL
- => <functional>, ``functional''
- STD_IOMANIP
- => <iomanip>, <iomanip.h>
- STD_IOSTREAM
- => <iostream>, <iostream.h>, <iostreams.h>
- STD_STDEXCEPT
- => <stdexcept> (ignore this, FlightGear doesn't use exceptions)
- STD_STRING
- => <string>
- STD_STRSTREAM
- => <strstream>, <strstream.h>
In use, instead of writing #include <iostream> you write #include STD_IOSTREAM.
The situation becomes complicated with missing header files. <streambuf> is
a good example. In this case we must rely on FG_HAVE_STD_INCLUDES and FG_HAVE_STREAMBUF.
TODO
1.3 and the rest
1.3.1 Namespace Issues
- FG_USING_STD(X)
-
- FG_NAMESPACE(X)
-
- FG_NAMESPACE_END
-
- FG_USING_NAMESPACE(X)
-
1.3.2 Templates
- FG_NULL_TMPL_ARGS
-
- FG_TEMPLATE_NULL
-
References
- 1
- Stroustrup, Bjarne, The C++ Programming Programming Language, 3rd edition,
June 1997, ISBN 0-201-88954-4
- 2
- SGI Standard Template Library (STL) release 3.11
About this document ...
FlightGear Flight Simulator
Portability Guide
This document was generated using the LaTeX2HTML translator Version 96.1 (Feb 5, 1996) Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds. The command line arguments were:
latex2html -show_section_numbers -split 0 fgfs-portability-guide. The translation was initiated by Curtis L. Olson on Mon Dec 7 15:43:47 CST 1998
Curtis L. Olson
Mon Dec 7 15:43:47 CST 1998
|