~ubuntu-branches/ubuntu/raring/boost-build/raring

« back to all changes in this revision

Viewing changes to jam_src/boehm_gc/doc/README.macros

  • Committer: Bazaar Package Importer
  • Author(s): Steve M. Robbins
  • Date: 2008-08-06 00:38:31 UTC
  • mfrom: (4.1.1 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080806003831-zr65893244swds0b
Tags: 2.0-m12-2
* debian/rules: Do not install /etc/user-config.jam.
* debian/site-config.jam: New.  Install into /etc instead of empty
  example.  Closes: #493323.

* debian/control: Update homepage.  Update description.  Closes:
  #493510.  Update Standards-Version to 3.8.0; no changes.

* debian/compat: New.  Set compat level to 7.
* debian/rules: Remove DH_COMPAT setting.
* debian/control: Change debhelper build-dep to version >= 7.

* debian/control: Remove docbook-to-man, bison from build-deps.

* debian/rules: Clean up upstream source by removing debian/conffiles.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
The collector uses a large amount of conditional compilation in order to
 
2
deal with platform dependencies.  This violates a number of known coding
 
3
standards.  On the other hand, it seems to be the only practical way to
 
4
support this many platforms without excessive code duplication. 
 
5
 
 
6
A few guidelines have mostly been followed in order to keep this manageable:
 
7
 
 
8
1) #if and #ifdef directives are properly indented whenever easily possible.
 
9
All known C compilers allow whitespace between the "#" and the "if" to make
 
10
this possible.  ANSI C also allows white space before the "#", though we
 
11
avoid that.  It has the known disadvantages that it differs from the normal
 
12
GNU conventions, and that it makes patches larger than otherwise necessary.
 
13
In my opinion, it's still well worth it, for the same reason that we indent
 
14
ordinary "if" statements.
 
15
 
 
16
2) Whenever possible, tests are performed on the macros defined in gcconfig.h
 
17
instead of directly testing patform-specific predefined macros.  This makes it
 
18
relatively easy to adapt to new compilers with a different set of predefined
 
19
macros.  Currently these macros generally identify platforms instead of
 
20
features.  In many cases, this is a mistake.
 
21
 
 
22
Many of the tested configuration macros are at least somewhat defined in
 
23
either include/private/gcconfig.h or in Makefile.direct.  Here is an attempt
 
24
at defining some of the remainder:  (Thanks to Walter Bright for suggesting
 
25
this.  This is a work in progress)
 
26
 
 
27
MACRO           EXPLANATION
 
28
-----           -----------
 
29
 
 
30
__DMC__ Always #define'd by the Digital Mars compiler. Expands
 
31
                to the compiler version number in hex, i.e. 0x810 is
 
32
                version 8.1b0
 
33
 
 
34
_ENABLE_ARRAYNEW
 
35
                #define'd by the Digital Mars C++ compiler when
 
36
                operator new[] and delete[] are separately
 
37
                overloadable. Used in gc_cpp.h.
 
38
 
 
39
_MSC_VER        Expands to the Visual C++ compiler version.  Assumed to
 
40
                not be defined for other compilers (at least if they behave
 
41
                appreciably differently).
 
42
 
 
43
_DLL            Defined by Visual C++ if dynamic libraries are being built
 
44
                or used.  Used to test whether __declspec(dllimport) or
 
45
                __declspec(dllexport) needs to be added to declarations
 
46
                to support the case in which the collector is in a dll.
 
47
 
 
48
GC_DLL          User-settable macro that forces the effect of _DLL.  Set
 
49
                by gc.h if _DLL is defined and GC_NOT_DLL is undefined.
 
50
                This is the macro that is tested internally to determine
 
51
                whether the GC is in its own dynamic library.  May need
 
52
                to be set by clients before including gc.h.  Note that
 
53
                inside the GC implementation it indicates that the
 
54
                collector is in its own dynamic library, should export
 
55
                its symbols, etc.  But in clients it indicates that the
 
56
                GC resides in a different DLL, its entry points should
 
57
                be referenced accordingly, and precautions may need to
 
58
                be taken to properly deal with statically allocated 
 
59
                variables in the main program.  Used only for MS Windows.
 
60
 
 
61
GC_NOT_DLL      User-settable macro that overrides _DLL, e.g. if dynamic
 
62
                libraries are used, but the collector is in a static library.
 
63
 
 
64
__STDC__        Assumed to be defined only by compilers that understand
 
65
                prototypes and other C89 features.  Its value is generally
 
66
                not used, since we are fine with most nonconforming extensions.
 
67
 
 
68
SUNOS5SIGS      Solaris-like signal handling.  This is probably misnamed,
 
69
                since it really doesn't guarantee much more than Posix.
 
70
                Currently set only for Solaris2.X, HPUX, and DRSNX.  Should
 
71
                probably be set for some other platforms.
 
72
 
 
73
PCR             Set if the collector is being built as part of the Xerox
 
74
                Portable Common Runtime.
 
75
 
 
76
USE_COMPILER_TLS  Assume the existence of __thread-style thread-local
 
77
                storage.  Set automatically for thread-local allocation with
 
78
                the HP/UX vendor compiler.  Usable with gcc on sufficiently
 
79
                up-to-date ELF platforms.
 
80
 
 
81
 
 
82