[BACK]Return to README.macros CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / gc / doc

Annotation of OpenXM_contrib2/asir2000/gc/doc/README.macros, Revision 1.1

1.1     ! noro        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: 3) The code currently avoids #elif, eventhough that would make it more
        !            23: readable.  This was done since #elif would need to be understood by ALL
        !            24: compilers used to build the collector, and that hasn't always been the case.
        !            25: It makes sense to reconsider this decision at some point, since #elif has been
        !            26: standardized at least since 1989.
        !            27:
        !            28: Many of the tested configuration macros are at least somewhat defined in
        !            29: either include/private/gcconfig.h or in Makefile.direct.  Here is an attempt
        !            30: at defining some of the remainder:  (Thanks to Walter Bright for suggesting
        !            31: this.  This is a work in progress)
        !            32:
        !            33: MACRO          EXPLANATION
        !            34: -----          -----------
        !            35:
        !            36: __DMC__        Always #define'd by the Digital Mars compiler. Expands
        !            37:                to the compiler version number in hex, i.e. 0x810 is
        !            38:                version 8.1b0
        !            39:
        !            40: _ENABLE_ARRAYNEW
        !            41:                #define'd by the Digital Mars C++ compiler when
        !            42:                operator new[] and delete[] are separately
        !            43:                overloadable. Used in gc_cpp.h.
        !            44:
        !            45: _MSC_VER       Expands to the Visual C++ compiler version.  Assumed to
        !            46:                not be defined for other compilers (at least if they behave
        !            47:                appreciably differently).
        !            48:
        !            49: _DLL           Defined by Visual C++ if dynamic libraries are being built
        !            50:                or used.  Used to test whether __declspec(dllimport) or
        !            51:                __declspec(dllexport) needs to be added to declarations
        !            52:                to support the case in which the collector is in a dll.
        !            53:
        !            54: GC_DLL         User-settable macro that forces the effect of _DLL.
        !            55:
        !            56: GC_NOT_DLL     User-settable macro that overrides _DLL, e.g. if dynamic
        !            57:                libraries are used, but the collector is in a static library.
        !            58:
        !            59: __STDC__       Assumed to be defined only by compilers that understand
        !            60:                prototypes and other C89 features.  Its value is generally
        !            61:                not used, since we are fine with most nonconforming extensions.
        !            62:
        !            63: SUNOS5SIGS     Solaris-like signal handling.  This is probably misnamed,
        !            64:                since it really doesn't guarantee much more than Posix.
        !            65:                Currently set only for Solaris2.X, HPUX, and DRSNX.  Should
        !            66:                probably be set for some other platforms.
        !            67:
        !            68: PCR            Set if the collector is being built as part of the Xerox
        !            69:                Portable Common Runtime.
        !            70:
        !            71: SRC_M3         Set if the collector is being built as a replacement of the
        !            72:                one in the DEC/Compaq SRC Modula-3 runtime.  I suspect this
        !            73:                was last used around 1994, and no doubt broke a long time ago.
        !            74:                It's there primarily incase someone wants to port to a similar
        !            75:                system.
        !            76:
        !            77:
        !            78:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>