diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 665d858d1db..9e95db9351c 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -21,7 +21,7 @@ @copying @quotation -GNAT Reference Manual , April 21, 2016 +GNAT Reference Manual , July 04, 2016 AdaCore @@ -283,6 +283,7 @@ Implementation Defined Pragmas * Pragma Unreserve_All_Interrupts:: * Pragma Unsuppress:: * Pragma Use_VADS_Size:: +* Pragma Unused:: * Pragma Validity_Checks:: * Pragma Volatile:: * Pragma Volatile_Full_Access:: @@ -469,7 +470,6 @@ Partition-Wide Restrictions * No_Implicit_Conditionals:: * No_Implicit_Dynamic_Code:: * No_Implicit_Heap_Allocations:: -* No_Implicit_Loops:: * No_Implicit_Protected_Object_Allocations:: * No_Implicit_Task_Allocations:: * No_Initialize_Scalars:: @@ -522,6 +522,7 @@ Program Unit Level Restrictions * No_Implementation_Restrictions:: * No_Implementation_Units:: * No_Implicit_Aliasing:: +* No_Implicit_Loops:: * No_Obsolescent_Features:: * No_Wide_Characters:: * SPARK_05:: @@ -1335,6 +1336,7 @@ consideration, the use of these pragmas should be minimized. * Pragma Unreserve_All_Interrupts:: * Pragma Unsuppress:: * Pragma Use_VADS_Size:: +* Pragma Unused:: * Pragma Validity_Checks:: * Pragma Volatile:: * Pragma Volatile_Full_Access:: @@ -1529,7 +1531,7 @@ Ada 83, Ada 95, or Ada 2005 programs. The one argument form, which is not a configuration pragma, is used for managing the transition from Ada 2005 to Ada 2012 in the run-time library. If an entity is marked -as Ada_201 only, then referencing the entity in any pre-Ada_2012 +as Ada_2012 only, then referencing the entity in any pre-Ada_2012 mode will generate a warning. In addition, in any pre-Ada_2012 mode, a preference rule is established which does not choose such an entity unless it is unambiguously specified. This avoids @@ -8193,7 +8195,7 @@ Note that in addition to the checks defined in the Ada RM, GNAT recogizes a number of implementation-defined check names. See the description of pragma @cite{Suppress} for full details. -@node Pragma Use_VADS_Size,Pragma Validity_Checks,Pragma Unsuppress,Implementation Defined Pragmas +@node Pragma Use_VADS_Size,Pragma Unused,Pragma Unsuppress,Implementation Defined Pragmas @anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{107} @section Pragma Use_VADS_Size @@ -8217,8 +8219,42 @@ the handling of existing code which depends on the interpretation of Size as implemented in the VADS compiler. See description of the VADS_Size attribute for further details. -@node Pragma Validity_Checks,Pragma Volatile,Pragma Use_VADS_Size,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{108} +@node Pragma Unused,Pragma Validity_Checks,Pragma Use_VADS_Size,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{108}@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{109} +@section Pragma Unused + + +@geindex Warnings +@geindex unused + +Syntax: + +@example +pragma Unused (LOCAL_NAME @{, LOCAL_NAME@}); +@end example + +This pragma signals that the assignable entities (variables, +@cite{out} parameters, and @cite{in out} parameters) whose names are listed +deliberately do not get assigned or referenced in the current source unit +after the occurrence of the pragma in the current source unit. This +suppresses warnings about the entities that are unreferenced and/or not +assigned, and, in addition, a warning will be generated if one of these +entities gets assigned or subsequently referenced in the same unit as the +pragma (in the corresponding body or one of its subunits). + +This is particularly useful for clearly signaling that a particular +parameter is not modified or referenced, even though the spec suggests +that it might be. + +For the variable case, warnings are never given for unreferenced +variables whose name contains one of the substrings +@cite{DISCARD@comma{} DUMMY@comma{} IGNORE@comma{} JUNK@comma{} UNUSED} in any casing. Such names +are typically to be used in cases where such warnings are expected. +Thus it is never necessary to use @cite{pragma Unmodified} for such +variables, though it is harmless to do so. + +@node Pragma Validity_Checks,Pragma Volatile,Pragma Unused,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{10a} @section Pragma Validity_Checks @@ -8275,7 +8311,7 @@ A := C; -- C will be validity checked @end example @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{109} +@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{10b} @section Pragma Volatile @@ -8293,7 +8329,7 @@ implementation of pragma Volatile is upwards compatible with the implementation in DEC Ada 83. @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{10a}@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{10b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{10c}@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{10d} @section Pragma Volatile_Full_Access @@ -8325,7 +8361,7 @@ It is not permissible to specify @cite{Volatile_Full_Access} for a composite (record or array) type or object that has at least one @cite{Aliased} component. @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{10c}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{10d} +@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10e}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{10f} @section Pragma Volatile_Function @@ -8339,7 +8375,7 @@ For the semantics of this pragma, see the entry for aspect @cite{Volatile_Functi in the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{10e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{110} @section Pragma Warning_As_Error @@ -8374,7 +8410,7 @@ as shown in the example below, to treat a class of warnings as errors. The above use of patterns to match the message applies only to warning messages generated by the front end. This pragma can also be applied to -warnings provided by the back end and mentioned in @ref{10f,,Pragma Warnings}. +warnings provided by the back end and mentioned in @ref{111,,Pragma Warnings}. By using a single full @emph{-Wxxx} switch in the pragma, such warnings can also be treated as errors. @@ -8424,7 +8460,7 @@ the tag is changed from "warning:" to "error:" and the string "[warning-as-error]" is appended to the end of the message. @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{10f}@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{110} +@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{111}@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{112} @section Pragma Warnings @@ -8576,7 +8612,7 @@ selectively for each tool, and as a consequence to detect useless pragma Warnings with switch @cite{-gnatw.w}. @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{111} +@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{113} @section Pragma Weak_External @@ -8627,7 +8663,7 @@ end External_Module; @end example @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{112} +@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{114} @section Pragma Wide_Character_Encoding @@ -8654,7 +8690,7 @@ encoding within that file, and does not affect withed units, specs, or subunits. @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top -@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{113}@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{114}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{115} +@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{115}@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{116}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{117} @chapter Implementation Defined Aspects @@ -8769,7 +8805,7 @@ or attribute definition clause. @end menu @node Aspect Abstract_State,Annotate,,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{116} +@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{118} @section Aspect Abstract_State @@ -8778,7 +8814,7 @@ or attribute definition clause. This aspect is equivalent to @ref{1c,,pragma Abstract_State}. @node Annotate,Aspect Async_Readers,Aspect Abstract_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects annotate}@anchor{117} +@anchor{gnat_rm/implementation_defined_aspects annotate}@anchor{119} @section Annotate @@ -8805,7 +8841,7 @@ Equivalent to @cite{pragma Annotate (ID@comma{} ID @{@comma{} ARG@}@comma{} Enti @end table @node Aspect Async_Readers,Aspect Async_Writers,Annotate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{118} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{11a} @section Aspect Async_Readers @@ -8814,7 +8850,7 @@ Equivalent to @cite{pragma Annotate (ID@comma{} ID @{@comma{} ARG@}@comma{} Enti This boolean aspect is equivalent to @ref{2c,,pragma Async_Readers}. @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{119} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{11b} @section Aspect Async_Writers @@ -8823,7 +8859,7 @@ This boolean aspect is equivalent to @ref{2c,,pragma Async_Readers}. This boolean aspect is equivalent to @ref{2f,,pragma Async_Writers}. @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{11a} +@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{11c} @section Aspect Constant_After_Elaboration @@ -8832,7 +8868,7 @@ This boolean aspect is equivalent to @ref{2f,,pragma Async_Writers}. This aspect is equivalent to @ref{40,,pragma Constant_After_Elaboration}. @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{11b} +@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{11d} @section Aspect Contract_Cases @@ -8843,7 +8879,7 @@ of clauses being enclosed in parentheses so that syntactically it is an aggregate. @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{11c} +@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{11e} @section Aspect Depends @@ -8852,7 +8888,7 @@ aggregate. This aspect is equivalent to @ref{50,,pragma Depends}. @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{11d} +@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{11f} @section Aspect Default_Initial_Condition @@ -8861,7 +8897,7 @@ This aspect is equivalent to @ref{50,,pragma Depends}. This aspect is equivalent to @ref{4b,,pragma Default_Initial_Condition}. @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{11e} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{120} @section Aspect Dimension @@ -8897,7 +8933,7 @@ Note that when the dimensioned type is an integer type, then any dimension value must be an integer literal. @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{11f} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{121} @section Aspect Dimension_System @@ -8957,7 +8993,7 @@ See section 'Performing Dimensionality Analysis in GNAT' in the GNAT Users Guide for detailed examples of use of the dimension system. @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{120} +@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{122} @section Aspect Disable_Controlled @@ -8970,7 +9006,7 @@ where for example you might want a record to be controlled or not depending on whether some run-time check is enabled or suppressed. @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{121} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{123} @section Aspect Effective_Reads @@ -8979,7 +9015,7 @@ whether some run-time check is enabled or suppressed. This aspect is equivalent to @ref{56,,pragma Effective_Reads}. @node Aspect Effective_Writes,Aspect Extensions_Visible,Aspect Effective_Reads,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{122} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{124} @section Aspect Effective_Writes @@ -8988,7 +9024,7 @@ This aspect is equivalent to @ref{56,,pragma Effective_Reads}. This aspect is equivalent to @ref{58,,pragma Effective_Writes}. @node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Effective_Writes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{123} +@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{125} @section Aspect Extensions_Visible @@ -8997,7 +9033,7 @@ This aspect is equivalent to @ref{58,,pragma Effective_Writes}. This aspect is equivalent to @ref{64,,pragma Extensions_Visible}. @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{124} +@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{126} @section Aspect Favor_Top_Level @@ -9006,7 +9042,7 @@ This aspect is equivalent to @ref{64,,pragma Extensions_Visible}. This boolean aspect is equivalent to @ref{69,,pragma Favor_Top_Level}. @node Aspect Ghost,Aspect Global,Aspect Favor_Top_Level,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{125} +@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{127} @section Aspect Ghost @@ -9015,7 +9051,7 @@ This boolean aspect is equivalent to @ref{69,,pragma Favor_Top_Level}. This aspect is equivalent to @ref{6c,,pragma Ghost}. @node Aspect Global,Aspect Initial_Condition,Aspect Ghost,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{126} +@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{128} @section Aspect Global @@ -9024,7 +9060,7 @@ This aspect is equivalent to @ref{6c,,pragma Ghost}. This aspect is equivalent to @ref{6e,,pragma Global}. @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{127} +@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{129} @section Aspect Initial_Condition @@ -9033,7 +9069,7 @@ This aspect is equivalent to @ref{6e,,pragma Global}. This aspect is equivalent to @ref{7c,,pragma Initial_Condition}. @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{128} +@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{12a} @section Aspect Initializes @@ -9042,7 +9078,7 @@ This aspect is equivalent to @ref{7c,,pragma Initial_Condition}. This aspect is equivalent to @ref{7e,,pragma Initializes}. @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{129} +@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{12b} @section Aspect Inline_Always @@ -9051,7 +9087,7 @@ This aspect is equivalent to @ref{7e,,pragma Initializes}. This boolean aspect is equivalent to @ref{81,,pragma Inline_Always}. @node Aspect Invariant,Aspect Invariant'Class,Aspect Inline_Always,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{12a} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{12c} @section Aspect Invariant @@ -9062,7 +9098,7 @@ synonym for the language defined aspect @cite{Type_Invariant} except that it is separately controllable using pragma @cite{Assertion_Policy}. @node Aspect Invariant'Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{12b} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{12d} @section Aspect Invariant'Class @@ -9073,7 +9109,7 @@ synonym for the language defined aspect @cite{Type_Invariant'Class} except that it is separately controllable using pragma @cite{Assertion_Policy}. @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant'Class,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{12c} +@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{12e} @section Aspect Iterable @@ -9149,7 +9185,7 @@ function Get_Element (Cont : Container; Position : Cursor) return Element_Type; This aspect is used in the GNAT-defined formal container packages. @node Aspect Linker_Section,Aspect Lock_Free,Aspect Iterable,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{12d} +@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{12f} @section Aspect Linker_Section @@ -9158,7 +9194,7 @@ This aspect is used in the GNAT-defined formal container packages. This aspect is equivalent to @ref{90,,pragma Linker_Section}. @node Aspect Lock_Free,Aspect No_Elaboration_Code_All,Aspect Linker_Section,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{12e} +@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{130} @section Aspect Lock_Free @@ -9167,7 +9203,7 @@ This aspect is equivalent to @ref{90,,pragma Linker_Section}. This boolean aspect is equivalent to @ref{92,,pragma Lock_Free}. @node Aspect No_Elaboration_Code_All,Aspect No_Tagged_Streams,Aspect Lock_Free,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{12f} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{131} @section Aspect No_Elaboration_Code_All @@ -9177,7 +9213,7 @@ This aspect is equivalent to @ref{9b,,pragma No_Elaboration_Code_All} for a program unit. @node Aspect No_Tagged_Streams,Aspect Object_Size,Aspect No_Elaboration_Code_All,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{130} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{132} @section Aspect No_Tagged_Streams @@ -9188,16 +9224,16 @@ argument specifying a root tagged type (thus this aspect can only be applied to such a type). @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Tagged_Streams,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{131} +@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{133} @section Aspect Object_Size @geindex Object_Size -This aspect is equivalent to @ref{132,,attribute Object_Size}. +This aspect is equivalent to @ref{134,,attribute Object_Size}. @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{133} +@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{135} @section Aspect Obsolescent @@ -9208,7 +9244,7 @@ evaluation of this aspect happens at the point of occurrence, it is not delayed until the freeze point. @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{134} +@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{136} @section Aspect Part_Of @@ -9217,7 +9253,7 @@ delayed until the freeze point. This aspect is equivalent to @ref{ab,,pragma Part_Of}. @node Aspect Persistent_BSS,Aspect Predicate,Aspect Part_Of,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{135} +@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{137} @section Aspect Persistent_BSS @@ -9226,7 +9262,7 @@ This aspect is equivalent to @ref{ab,,pragma Part_Of}. This boolean aspect is equivalent to @ref{ad,,pragma Persistent_BSS}. @node Aspect Predicate,Aspect Pure_Function,Aspect Persistent_BSS,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{136} +@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{138} @section Aspect Predicate @@ -9240,7 +9276,7 @@ expression. It is also separately controllable using pragma @cite{Assertion_Policy}. @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Predicate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{137} +@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{139} @section Aspect Pure_Function @@ -9249,7 +9285,7 @@ expression. It is also separately controllable using pragma This boolean aspect is equivalent to @ref{c1,,pragma Pure_Function}. @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{138} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{13a} @section Aspect Refined_Depends @@ -9258,7 +9294,7 @@ This boolean aspect is equivalent to @ref{c1,,pragma Pure_Function}. This aspect is equivalent to @ref{c6,,pragma Refined_Depends}. @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{139} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{13b} @section Aspect Refined_Global @@ -9267,7 +9303,7 @@ This aspect is equivalent to @ref{c6,,pragma Refined_Depends}. This aspect is equivalent to @ref{c7,,pragma Refined_Global}. @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{13a} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{13c} @section Aspect Refined_Post @@ -9276,7 +9312,7 @@ This aspect is equivalent to @ref{c7,,pragma Refined_Global}. This aspect is equivalent to @ref{c9,,pragma Refined_Post}. @node Aspect Refined_State,Aspect Remote_Access_Type,Aspect Refined_Post,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{13b} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{13d} @section Aspect Refined_State @@ -9285,7 +9321,7 @@ This aspect is equivalent to @ref{c9,,pragma Refined_Post}. This aspect is equivalent to @ref{cb,,pragma Refined_State}. @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Refined_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{13c} +@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{13e} @section Aspect Remote_Access_Type @@ -9294,16 +9330,16 @@ This aspect is equivalent to @ref{cb,,pragma Refined_State}. This aspect is equivalent to @ref{cf,,pragma Remote_Access_Type}. @node Aspect Scalar_Storage_Order,Aspect Shared,Aspect Remote_Access_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{13d} +@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{13f} @section Aspect Scalar_Storage_Order @geindex Scalar_Storage_Order -This aspect is equivalent to a @ref{13e,,attribute Scalar_Storage_Order}. +This aspect is equivalent to a @ref{140,,attribute Scalar_Storage_Order}. @node Aspect Shared,Aspect Simple_Storage_Pool,Aspect Scalar_Storage_Order,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{13f} +@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{141} @section Aspect Shared @@ -9313,7 +9349,7 @@ This boolean aspect is equivalent to @ref{d5,,pragma Shared} and is thus a synonym for aspect @cite{Atomic}. @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Shared,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{140} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{142} @section Aspect Simple_Storage_Pool @@ -9322,7 +9358,7 @@ and is thus a synonym for aspect @cite{Atomic}. This aspect is equivalent to @ref{da,,attribute Simple_Storage_Pool}. @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{141} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{143} @section Aspect Simple_Storage_Pool_Type @@ -9331,7 +9367,7 @@ This aspect is equivalent to @ref{da,,attribute Simple_Storage_Pool}. This boolean aspect is equivalent to @ref{d8,,pragma Simple_Storage_Pool_Type}. @node Aspect SPARK_Mode,Aspect Suppress_Debug_Info,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{142} +@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{144} @section Aspect SPARK_Mode @@ -9342,7 +9378,7 @@ may be specified for either or both of the specification and body of a subprogram or package. @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect SPARK_Mode,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{143} +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{145} @section Aspect Suppress_Debug_Info @@ -9351,7 +9387,7 @@ of a subprogram or package. This boolean aspect is equivalent to @ref{e8,,pragma Suppress_Debug_Info}. @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{144} +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{146} @section Aspect Suppress_Initialization @@ -9360,7 +9396,7 @@ This boolean aspect is equivalent to @ref{e8,,pragma Suppress_Debug_Info}. This boolean aspect is equivalent to @ref{ec,,pragma Suppress_Initialization}. @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{145} +@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{147} @section Aspect Test_Case @@ -9369,7 +9405,7 @@ This boolean aspect is equivalent to @ref{ec,,pragma Suppress_Initialization}. This aspect is equivalent to @ref{ef,,pragma Test_Case}. @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{146} +@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{148} @section Aspect Thread_Local_Storage @@ -9378,7 +9414,7 @@ This aspect is equivalent to @ref{ef,,pragma Test_Case}. This boolean aspect is equivalent to @ref{f1,,pragma Thread_Local_Storage}. @node Aspect Universal_Aliasing,Aspect Universal_Data,Aspect Thread_Local_Storage,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{147} +@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{149} @section Aspect Universal_Aliasing @@ -9387,7 +9423,7 @@ This boolean aspect is equivalent to @ref{f1,,pragma Thread_Local_Storage}. This boolean aspect is equivalent to @ref{fc,,pragma Universal_Aliasing}. @node Aspect Universal_Data,Aspect Unmodified,Aspect Universal_Aliasing,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-universal-data}@anchor{148} +@anchor{gnat_rm/implementation_defined_aspects aspect-universal-data}@anchor{14a} @section Aspect Universal_Data @@ -9396,7 +9432,7 @@ This boolean aspect is equivalent to @ref{fc,,pragma Universal_Aliasing}. This aspect is equivalent to @ref{fd,,pragma Universal_Data}. @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Data,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{149} +@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{14b} @section Aspect Unmodified @@ -9405,7 +9441,7 @@ This aspect is equivalent to @ref{fd,,pragma Universal_Data}. This boolean aspect is equivalent to @ref{100,,pragma Unmodified}. @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{14a} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{14c} @section Aspect Unreferenced @@ -9416,7 +9452,7 @@ in the case of formal parameters, it is not permitted to have aspects for a formal parameter, so in this case the pragma form must be used. @node Aspect Unreferenced_Objects,Aspect Value_Size,Aspect Unreferenced,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{14b} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{14d} @section Aspect Unreferenced_Objects @@ -9425,45 +9461,45 @@ a formal parameter, so in this case the pragma form must be used. This boolean aspect is equivalent to @ref{103,,pragma Unreferenced_Objects}. @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect Unreferenced_Objects,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{14c} +@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{14e} @section Aspect Value_Size @geindex Value_Size -This aspect is equivalent to @ref{14d,,attribute Value_Size}. +This aspect is equivalent to @ref{14f,,attribute Value_Size}. @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{14e} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{150} @section Aspect Volatile_Full_Access @geindex Volatile_Full_Access -This boolean aspect is equivalent to @ref{10a,,pragma Volatile_Full_Access}. +This boolean aspect is equivalent to @ref{10c,,pragma Volatile_Full_Access}. @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{14f} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{151} @section Aspect Volatile_Function @geindex Volatile_Function -This boolean aspect is equivalent to @ref{10d,,pragma Volatile_Function}. +This boolean aspect is equivalent to @ref{10f,,pragma Volatile_Function}. @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{150} +@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{152} @section Aspect Warnings @geindex Warnings -This aspect is equivalent to the two argument form of @ref{10f,,pragma Warnings}, +This aspect is equivalent to the two argument form of @ref{111,,pragma Warnings}, where the first argument is @cite{ON} or @cite{OFF} and the second argument is the entity. @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top -@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{151}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{152} +@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{153}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{154} @chapter Implementation Defined Attributes @@ -9563,7 +9599,7 @@ consideration, you should minimize the use of these attributes. @end menu @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{153} +@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{155} @section Attribute Abort_Signal @@ -9577,7 +9613,7 @@ completely outside the normal semantics of Ada, for a user program to intercept the abort exception). @node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{154} +@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{156} @section Attribute Address_Size @@ -9593,7 +9629,7 @@ reference to System.Address'Size is nonstatic because Address is a private type. @node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{155} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{157} @section Attribute Asm_Input @@ -9607,10 +9643,10 @@ to be a static expression, and is the constraint for the parameter, value to be used as the input argument. The possible values for the constant are the same as those used in the RTL, and are dependent on the configuration file used to built the GCC back end. -@ref{156,,Machine Code Insertions} +@ref{158,,Machine Code Insertions} @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{157} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{159} @section Attribute Asm_Output @@ -9626,10 +9662,10 @@ result. The possible values for constraint are the same as those used in the RTL, and are dependent on the configuration file used to build the GCC back end. If there are no output operands, then this argument may either be omitted, or explicitly given as @cite{No_Output_Operands}. -@ref{156,,Machine Code Insertions} +@ref{158,,Machine Code Insertions} @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{158} +@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{15a} @section Attribute Atomic_Always_Lock_Free @@ -9641,7 +9677,7 @@ and False otherwise. The result indicate whether atomic operations are supported by the target for the given type. @node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{159} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{15b} @section Attribute Bit @@ -9672,7 +9708,7 @@ This attribute is designed to be compatible with the DEC Ada 83 definition and implementation of the @cite{Bit} attribute. @node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{15a} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{15c} @section Attribute Bit_Position @@ -9687,7 +9723,7 @@ type @cite{Universal_Integer}. The value depends only on the field the containing record @cite{R}. @node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{15b} +@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{15d} @section Attribute Code_Address @@ -9730,7 +9766,7 @@ the same value as is returned by the corresponding @cite{'Address} attribute. @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{15c} +@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{15e} @section Attribute Compiler_Version @@ -9741,7 +9777,7 @@ prefix) yields a static string identifying the version of the compiler being used to compile the unit containing the attribute reference. @node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{15d} +@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{15f} @section Attribute Constrained @@ -9756,7 +9792,7 @@ record type without discriminants is always @cite{True}. This usage is compatible with older Ada compilers, including notably DEC Ada. @node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{15e} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{160} @section Attribute Default_Bit_Order @@ -9773,7 +9809,7 @@ as a @cite{Pos} value (0 for @cite{High_Order_First}, 1 for @cite{Default_Bit_Order} in package @cite{System}. @node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{15f} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{161} @section Attribute Default_Scalar_Storage_Order @@ -9790,7 +9826,7 @@ equal to @cite{Default_Bit_Order} if unspecified) as a @cite{System.Bit_Order} value. This is a static attribute. @node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{160} +@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{162} @section Attribute Deref @@ -9803,7 +9839,7 @@ a named access-to-@cite{typ} type, except that it yields a variable, so it can b used on the left side of an assignment. @node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{161} +@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{163} @section Attribute Descriptor_Size @@ -9830,7 +9866,7 @@ In the example above, the descriptor contains two values of type a size of 31 bits and an alignment of 4, the descriptor size is @cite{2 * Positive'Size + 2} or 64 bits. @node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{162} +@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{164} @section Attribute Elaborated @@ -9845,7 +9881,7 @@ units has been completed. An exception is for units which need no elaboration, the value is always False for such units. @node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{163} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{165} @section Attribute Elab_Body @@ -9861,7 +9897,7 @@ e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{164} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{166} @section Attribute Elab_Spec @@ -9877,7 +9913,7 @@ Ada code, e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{165} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{167} @section Attribute Elab_Subp_Body @@ -9891,7 +9927,7 @@ elaboration procedure by the binder in CodePeer mode only and is unrecognized otherwise. @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{166} +@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{168} @section Attribute Emax @@ -9904,7 +9940,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{167} +@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{169} @section Attribute Enabled @@ -9928,7 +9964,7 @@ a @cite{pragma Suppress} or @cite{pragma Unsuppress} before instantiating the package or subprogram, controlling whether the check will be present. @node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{168} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{16a} @section Attribute Enum_Rep @@ -9965,7 +10001,7 @@ integer calculation is done at run time, then the call to @cite{Enum_Rep} may raise @cite{Constraint_Error}. @node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{169} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{16b} @section Attribute Enum_Val @@ -9988,7 +10024,7 @@ absence of an enumeration representation clause. This is a static attribute (i.e., the result is static if the argument is static). @node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{16a} +@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{16c} @section Attribute Epsilon @@ -10001,7 +10037,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Fast_Math,Attribute Fixed_Value,Attribute Epsilon,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{16b} +@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{16d} @section Attribute Fast_Math @@ -10012,7 +10048,7 @@ prefix) yields a static Boolean value that is True if pragma @cite{Fast_Math} is active, and False otherwise. @node Attribute Fixed_Value,Attribute From_Any,Attribute Fast_Math,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{16c} +@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{16e} @section Attribute Fixed_Value @@ -10039,7 +10075,7 @@ This attribute is primarily intended for use in implementation of the input-output functions for fixed-point values. @node Attribute From_Any,Attribute Has_Access_Values,Attribute Fixed_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{16d} +@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{16f} @section Attribute From_Any @@ -10049,7 +10085,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{16e} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{170} @section Attribute Has_Access_Values @@ -10067,7 +10103,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has access values. @node Attribute Has_Discriminants,Attribute Img,Attribute Has_Access_Values,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{16f} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{171} @section Attribute Has_Discriminants @@ -10083,7 +10119,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has discriminants. @node Attribute Img,Attribute Integer_Value,Attribute Has_Discriminants,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{170} +@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{172} @section Attribute Img @@ -10113,7 +10149,7 @@ that returns the appropriate string when called. This means that in an instantiation as a function parameter. @node Attribute Integer_Value,Attribute Invalid_Value,Attribute Img,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{171} +@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{173} @section Attribute Integer_Value @@ -10141,7 +10177,7 @@ This attribute is primarily intended for use in implementation of the standard input-output functions for fixed-point values. @node Attribute Invalid_Value,Attribute Iterable,Attribute Integer_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{172} +@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{174} @section Attribute Invalid_Value @@ -10155,7 +10191,7 @@ including the ability to modify the value with the binder -Sxx flag and relevant environment variables at run time. @node Attribute Iterable,Attribute Large,Attribute Invalid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-iterable}@anchor{173} +@anchor{gnat_rm/implementation_defined_attributes attribute-iterable}@anchor{175} @section Attribute Iterable @@ -10164,7 +10200,7 @@ relevant environment variables at run time. Equivalent to Aspect Iterable. @node Attribute Large,Attribute Library_Level,Attribute Iterable,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{174} +@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{176} @section Attribute Large @@ -10177,7 +10213,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Library_Level,Attribute Lock_Free,Attribute Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{175} +@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{177} @section Attribute Library_Level @@ -10203,7 +10239,7 @@ end Gen; @end example @node Attribute Lock_Free,Attribute Loop_Entry,Attribute Library_Level,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-lock-free}@anchor{176} +@anchor{gnat_rm/implementation_defined_attributes attribute-lock-free}@anchor{178} @section Attribute Lock_Free @@ -10213,7 +10249,7 @@ end Gen; pragma @cite{Lock_Free} applies to P. @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Lock_Free,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{177} +@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{179} @section Attribute Loop_Entry @@ -10243,7 +10279,7 @@ entry. This copy is not performed if the loop is not entered, or if the corresponding pragmas are ignored or disabled. @node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{178} +@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{17a} @section Attribute Machine_Size @@ -10253,7 +10289,7 @@ This attribute is identical to the @cite{Object_Size} attribute. It is provided for compatibility with the DEC Ada 83 attribute of this name. @node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{179} +@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{17b} @section Attribute Mantissa @@ -10266,7 +10302,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Maximum_Alignment,Attribute Mechanism_Code,Attribute Mantissa,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{17a}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{17b} +@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{17c}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{17d} @section Attribute Maximum_Alignment @@ -10282,7 +10318,7 @@ for an object, guaranteeing that it is properly aligned in all cases. @node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Maximum_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{17c} +@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{17e} @section Attribute Mechanism_Code @@ -10313,7 +10349,7 @@ by reference @end table @node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{17d} +@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{17f} @section Attribute Null_Parameter @@ -10338,7 +10374,7 @@ There is no way of indicating this without the @cite{Null_Parameter} attribute. @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{132}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{17e} +@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{134}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{180} @section Attribute Object_Size @@ -10408,7 +10444,7 @@ Similar additional checks are performed in other contexts requiring statically matching subtypes. @node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{17f} +@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{181} @section Attribute Old @@ -10423,7 +10459,7 @@ definition are allowed under control of implementation defined pragma @cite{Unevaluated_Use_Of_Old}. @node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{180} +@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{182} @section Attribute Passed_By_Reference @@ -10439,7 +10475,7 @@ passed by copy in calls. For scalar types, the result is always @cite{False} and is static. For non-scalar types, the result is nonstatic. @node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{181} +@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{183} @section Attribute Pool_Address @@ -10464,7 +10500,7 @@ For an object created by @cite{new}, @code{Ptr.all'Pool_Address} is what is passed to @cite{Allocate} and returned from @cite{Deallocate}. @node Attribute Range_Length,Attribute Restriction_Set,Attribute Pool_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{182} +@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{184} @section Attribute Range_Length @@ -10477,7 +10513,7 @@ applied to the index subtype of a one dimensional array always gives the same result as @cite{Length} applied to the array itself. @node Attribute Restriction_Set,Attribute Result,Attribute Range_Length,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{183} +@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{185} @section Attribute Restriction_Set @@ -10547,7 +10583,7 @@ Restrictions pragma, they are not analyzed semantically, so they do not have a type. @node Attribute Result,Attribute Safe_Emax,Attribute Restriction_Set,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{184} +@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{186} @section Attribute Result @@ -10560,7 +10596,7 @@ For a further discussion of the use of this attribute and examples of its use, see the description of pragma Postcondition. @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Result,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{185} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{187} @section Attribute Safe_Emax @@ -10573,7 +10609,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{186} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{188} @section Attribute Safe_Large @@ -10586,7 +10622,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{187} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{189} @section Attribute Safe_Small @@ -10599,7 +10635,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{188}@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{13e} +@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{18a}@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{140} @section Attribute Scalar_Storage_Order @@ -10661,10 +10697,7 @@ types. This may be overridden for the derived type by giving an explicit scalar storage order for the derived type. For a record extension, the derived type must have the same scalar storage order as the parent type. -If a component of @cite{T} is of a record or array type, then that type must -also have a @cite{Scalar_Storage_Order} attribute definition clause. - -A component of a record or array type that is a packed array, or that +A component of a record or array type that is a bit-packed array, or that does not start on a byte boundary, must have the same scalar storage order as the enclosing record or array type. @@ -10711,12 +10744,17 @@ inheritance in the case of a derived type), then the default is normally the native ordering of the target, but this default can be overridden using pragma @cite{Default_Scalar_Storage_Order}. +Note that if a component of @cite{T} is itself of a record or array type, +the specfied @cite{Scalar_Storage_Order} does @emph{not} apply to that nested type: +an explicit attribute definition clause must be provided for the component +type as well if desired. + Note that the scalar storage order only affects the in-memory data representation. It has no effect on the representation used by stream attributes. @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{da}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{189} +@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{da}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{18b} @section Attribute Simple_Storage_Pool @@ -10779,7 +10817,7 @@ as defined in section 13.11.2 of the Ada Reference Manual, except that the term 'simple storage pool' is substituted for 'storage pool'. @node Attribute Small,Attribute Storage_Unit,Attribute Simple_Storage_Pool,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{18a} +@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{18c} @section Attribute Small @@ -10795,7 +10833,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute when applied to floating-point types. @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{18b} +@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{18d} @section Attribute Storage_Unit @@ -10805,7 +10843,7 @@ this attribute when applied to floating-point types. prefix) provides the same value as @cite{System.Storage_Unit}. @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{18c} +@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{18e} @section Attribute Stub_Type @@ -10829,7 +10867,7 @@ unit @cite{System.Partition_Interface}. Use of this attribute will create an implicit dependency on this unit. @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{18d} +@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{18f} @section Attribute System_Allocator_Alignment @@ -10846,7 +10884,7 @@ with alignment too large or to enable a realignment circuitry if the alignment request is larger than this value. @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{18e} +@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{190} @section Attribute Target_Name @@ -10859,7 +10897,7 @@ standard gcc target name without the terminating slash (for example, GNAT 5.0 on windows yields "i586-pc-mingw32msv"). @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{18f} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{191} @section Attribute To_Address @@ -10882,7 +10920,7 @@ modular manner (e.g., -1 means the same as 16#FFFF_FFFF# on a 32 bits machine). @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{190} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{192} @section Attribute To_Any @@ -10892,7 +10930,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{191} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{193} @section Attribute Type_Class @@ -10922,7 +10960,7 @@ applies to all concurrent types. This attribute is designed to be compatible with the DEC Ada 83 attribute of the same name. @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{192} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{194} @section Attribute Type_Key @@ -10934,7 +10972,7 @@ about the type or subtype. This provides improved compatibility with other implementations that support this attribute. @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{193} +@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{195} @section Attribute TypeCode @@ -10944,7 +10982,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{194} +@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{196} @section Attribute Unconstrained_Array @@ -10958,7 +10996,7 @@ still static, and yields the result of applying this test to the generic actual. @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{195} +@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{197} @section Attribute Universal_Literal_String @@ -10986,7 +11024,7 @@ end; @end example @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{196} +@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{198} @section Attribute Unrestricted_Access @@ -11173,7 +11211,7 @@ In general this is a risky approach. It may appear to "work" but such uses of of @cite{GNAT} to another, so are best avoided if possible. @node Attribute Update,Attribute Valid_Scalars,Attribute Unrestricted_Access,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{197} +@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{199} @section Attribute Update @@ -11254,7 +11292,7 @@ A := A'Update ((1, 2) => 20, (3, 4) => 30); which changes element (1,2) to 20 and (3,4) to 30. @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Update,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{198} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{19a} @section Attribute Valid_Scalars @@ -11289,7 +11327,7 @@ to write a function with a single use of the attribute, and then call that function from multiple places. @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{199} +@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{19b} @section Attribute VADS_Size @@ -11309,7 +11347,7 @@ gives the result that would be obtained by applying the attribute to the corresponding type. @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{19a}@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{14d} +@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{19c}@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{14f} @section Attribute Value_Size @@ -11323,7 +11361,7 @@ a value of the given subtype. It is the same as @code{type'Size}, but, unlike @cite{Size}, may be set for non-first subtypes. @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{19b} +@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{19d} @section Attribute Wchar_T_Size @@ -11335,7 +11373,7 @@ primarily for constructing the definition of this type in package @cite{Interfaces.C}. The result is a static constant. @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{19c} +@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{19e} @section Attribute Word_Size @@ -11346,7 +11384,7 @@ prefix) provides the value @cite{System.Word_Size}. The result is a static constant. @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top -@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{19d}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{19e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{19f}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1a0} @chapter Standard and Implementation Defined Restrictions @@ -11375,7 +11413,7 @@ language defined or GNAT-specific, are listed in the following. @end menu @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{19f}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1a0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1a1}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1a2} @section Partition-Wide Restrictions @@ -11421,7 +11459,6 @@ then all compilation units in the partition must obey the restriction). * No_Implicit_Conditionals:: * No_Implicit_Dynamic_Code:: * No_Implicit_Heap_Allocations:: -* No_Implicit_Loops:: * No_Implicit_Protected_Object_Allocations:: * No_Implicit_Task_Allocations:: * No_Initialize_Scalars:: @@ -11465,7 +11502,7 @@ then all compilation units in the partition must obey the restriction). @end menu @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1a1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1a3} @subsection Immediate_Reclamation @@ -11477,7 +11514,7 @@ deallocation, any storage reserved at run time for an object is immediately reclaimed when the object no longer exists. @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1a2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1a4} @subsection Max_Asynchronous_Select_Nesting @@ -11489,7 +11526,7 @@ detected at compile time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1a3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1a5} @subsection Max_Entry_Queue_Length @@ -11510,7 +11547,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1a4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1a6} @subsection Max_Protected_Entries @@ -11521,7 +11558,7 @@ bounds of every entry family of a protected unit shall be static, or shall be defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1a5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1a7} @subsection Max_Select_Alternatives @@ -11530,7 +11567,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. [RM D.7] Specifies the maximum number of alternatives in a selective accept. @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1a6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1a8} @subsection Max_Storage_At_Blocking @@ -11541,7 +11578,7 @@ Storage_Size that can be retained by a blocked task. A violation of this restriction causes Storage_Error to be raised. @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1a7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1a9} @subsection Max_Task_Entries @@ -11554,7 +11591,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1a8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1aa} @subsection Max_Tasks @@ -11567,7 +11604,7 @@ time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1a9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1ab} @subsection No_Abort_Statements @@ -11577,7 +11614,7 @@ Storage_Error to be raised. no calls to Task_Identification.Abort_Task. @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1aa} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1ac} @subsection No_Access_Parameter_Allocators @@ -11588,7 +11625,7 @@ occurrences of an allocator as the actual parameter to an access parameter. @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1ab} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1ad} @subsection No_Access_Subprograms @@ -11598,7 +11635,7 @@ parameter. declarations of access-to-subprogram types. @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1ac} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1ae} @subsection No_Allocators @@ -11608,7 +11645,7 @@ declarations of access-to-subprogram types. occurrences of an allocator. @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1ad} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1af} @subsection No_Anonymous_Allocators @@ -11618,7 +11655,7 @@ occurrences of an allocator. occurrences of an allocator of anonymous access type. @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1ae} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1b0} @subsection No_Asynchronous_Control @@ -11628,7 +11665,7 @@ occurrences of an allocator of anonymous access type. dependences on the predefined package Asynchronous_Task_Control. @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1af} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1b1} @subsection No_Calendar @@ -11638,7 +11675,7 @@ dependences on the predefined package Asynchronous_Task_Control. dependences on package Calendar. @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1b0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1b2} @subsection No_Coextensions @@ -11648,7 +11685,7 @@ dependences on package Calendar. coextensions. See 3.10.2. @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1b1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1b3} @subsection No_Default_Initialization @@ -11665,7 +11702,7 @@ is to prohibit all cases of variables declared without a specific initializer (including the case of OUT scalar parameters). @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1b2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1b4} @subsection No_Delay @@ -11675,7 +11712,7 @@ initializer (including the case of OUT scalar parameters). delay statements and no semantic dependences on package Calendar. @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1b3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1b5} @subsection No_Dependence @@ -11685,7 +11722,7 @@ delay statements and no semantic dependences on package Calendar. dependences on a library unit. @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1b4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1b6} @subsection No_Direct_Boolean_Operators @@ -11698,7 +11735,7 @@ protocol requires the use of short-circuit (and then, or else) forms for all composite boolean operations. @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1b5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1b7} @subsection No_Dispatch @@ -11708,7 +11745,7 @@ composite boolean operations. occurrences of @cite{T'Class}, for any (tagged) subtype @cite{T}. @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1b6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1b8} @subsection No_Dispatching_Calls @@ -11769,7 +11806,7 @@ end Example; @end example @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1b7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1b9} @subsection No_Dynamic_Attachment @@ -11788,7 +11825,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1b8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1ba} @subsection No_Dynamic_Priorities @@ -11797,7 +11834,7 @@ warnings on obsolescent features are activated). [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities. @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1b9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1bb} @subsection No_Entry_Calls_In_Elaboration_Code @@ -11809,7 +11846,7 @@ restriction, the compiler can assume that no code past an accept statement in a task can be executed at elaboration time. @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1ba} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1bc} @subsection No_Enumeration_Maps @@ -11820,7 +11857,7 @@ enumeration maps are used (that is Image and Value attributes applied to enumeration types). @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1bb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1bd} @subsection No_Exception_Handlers @@ -11845,7 +11882,7 @@ statement generated by the compiler). The Line parameter when nonzero represents the line number in the source program where the raise occurs. @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1bc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1be} @subsection No_Exception_Propagation @@ -11862,7 +11899,7 @@ the package GNAT.Current_Exception is not permitted, and reraise statements (raise with no operand) are not permitted. @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1bd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1bf} @subsection No_Exception_Registration @@ -11876,7 +11913,7 @@ code is simplified by omitting the otherwise-required global registration of exceptions when they are declared. @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1be} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1c0} @subsection No_Exceptions @@ -11886,7 +11923,7 @@ of exceptions when they are declared. raise statements and no exception handlers. @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1bf} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1c1} @subsection No_Finalization @@ -11927,7 +11964,7 @@ object or a nested component, either declared on the stack or on the heap. The deallocation of a controlled object no longer finalizes its contents. @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1c0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1c2} @subsection No_Fixed_Point @@ -11937,7 +11974,7 @@ deallocation of a controlled object no longer finalizes its contents. occurrences of fixed point types and operations. @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1c1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1c3} @subsection No_Floating_Point @@ -11947,7 +11984,7 @@ occurrences of fixed point types and operations. occurrences of floating point types and operations. @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1c2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1c4} @subsection No_Implicit_Conditionals @@ -11963,7 +12000,7 @@ normal manner. Constructs generating implicit conditionals include comparisons of composite objects and the Max/Min attributes. @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1c3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1c5} @subsection No_Implicit_Dynamic_Code @@ -11992,8 +12029,8 @@ but only if pragma Favor_Top_Level applies, or the access type has a foreign-language convention; primitive operations of nested tagged types. -@node No_Implicit_Heap_Allocations,No_Implicit_Loops,No_Implicit_Dynamic_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1c4} +@node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1c6} @subsection No_Implicit_Heap_Allocations @@ -12001,25 +12038,8 @@ types. [RM D.7] No constructs are allowed to cause implicit heap allocation. -@node No_Implicit_Loops,No_Implicit_Protected_Object_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{1c5} -@subsection No_Implicit_Loops - - -@geindex No_Implicit_Loops - -[GNAT] This restriction ensures that the generated code does not contain any -implicit @cite{for} loops, either by modifying -the generated code where possible, -or by rejecting any construct that would otherwise generate an implicit -@cite{for} loop. If this restriction is active, it is possible to build -large array aggregates with all static components without generating an -intermediate temporary, and without generating a loop to initialize individual -components. Otherwise, a loop is created for arrays larger than about 5000 -scalar components. - -@node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Loops,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1c6} +@node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1c7} @subsection No_Implicit_Protected_Object_Allocations @@ -12029,7 +12049,7 @@ scalar components. protected object. @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1c7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1c8} @subsection No_Implicit_Task_Allocations @@ -12038,7 +12058,7 @@ protected object. [GNAT] No constructs are allowed to cause implicit heap allocation of a task. @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1c8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1c9} @subsection No_Initialize_Scalars @@ -12050,7 +12070,7 @@ code, and in particular eliminates dummy null initialization routines that are otherwise generated for some record and array types. @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1c9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1ca} @subsection No_IO @@ -12061,7 +12081,7 @@ dependences on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO. @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1ca} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1cb} @subsection No_Local_Allocators @@ -12072,7 +12092,7 @@ occurrences of an allocator in subprograms, generic subprograms, tasks, and entry bodies. @node No_Local_Protected_Objects,No_Local_Timing_Events,No_Local_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1cb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1cc} @subsection No_Local_Protected_Objects @@ -12082,7 +12102,7 @@ and entry bodies. only declared at the library level. @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Protected_Objects,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1cc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1cd} @subsection No_Local_Timing_Events @@ -12092,7 +12112,7 @@ only declared at the library level. declared at the library level. @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1cd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1ce} @subsection No_Long_Long_Integers @@ -12104,7 +12124,7 @@ implicit base type is Long_Long_Integer, and modular types whose size exceeds Long_Integer'Size. @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1ce} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1cf} @subsection No_Multiple_Elaboration @@ -12121,7 +12141,7 @@ programs and Stand Alone libraries, are not permitted and will be diagnosed by the binder. @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1cf} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{1d0} @subsection No_Nested_Finalization @@ -12130,7 +12150,7 @@ by the binder. [RM D.7] All objects requiring finalization are declared at the library level. @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1d0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{1d1} @subsection No_Protected_Type_Allocators @@ -12140,7 +12160,7 @@ by the binder. expressions that attempt to allocate protected objects. @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1d1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{1d2} @subsection No_Protected_Types @@ -12150,7 +12170,7 @@ expressions that attempt to allocate protected objects. declarations of protected types or protected objects. @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1d2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{1d3} @subsection No_Recursion @@ -12160,7 +12180,7 @@ declarations of protected types or protected objects. part of its execution. @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1d3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{1d4} @subsection No_Reentrancy @@ -12170,7 +12190,7 @@ part of its execution. two tasks at the same time. @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1d4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{1d5} @subsection No_Relative_Delay @@ -12181,7 +12201,7 @@ relative statements and prevents expressions such as @cite{delay 1.23;} from appearing in source code. @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1d5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{1d6} @subsection No_Requeue_Statements @@ -12199,7 +12219,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on oNobsolescent features are activated). @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1d6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{1d7} @subsection No_Secondary_Stack @@ -12211,7 +12231,7 @@ stack is used to implement functions returning unconstrained objects (arrays or records) on some targets. @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1d7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{1d8} @subsection No_Select_Statements @@ -12221,7 +12241,7 @@ stack is used to implement functions returning unconstrained objects kind are permitted, that is the keyword @cite{select} may not appear. @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1d8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{1d9} @subsection No_Specific_Termination_Handlers @@ -12231,7 +12251,7 @@ kind are permitted, that is the keyword @cite{select} may not appear. or to Ada.Task_Termination.Specific_Handler. @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{1d9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{1da} @subsection No_Specification_of_Aspect @@ -12242,7 +12262,7 @@ specification, attribute definition clause, or pragma is given for a given aspect. @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{1da} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{1db} @subsection No_Standard_Allocators_After_Elaboration @@ -12254,7 +12274,7 @@ library items of the partition has completed. Otherwise, Storage_Error is raised. @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{1db} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{1dc} @subsection No_Standard_Storage_Pools @@ -12266,7 +12286,7 @@ have an explicit Storage_Pool attribute defined specifying a user-defined storage pool. @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{1dc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{1dd} @subsection No_Stream_Optimizations @@ -12279,7 +12299,7 @@ due to their supperior performance. When this restriction is in effect, the compiler performs all IO operations on a per-character basis. @node No_Streams,No_Task_Allocators,No_Stream_Optimizations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{1dd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{1de} @subsection No_Streams @@ -12300,7 +12320,7 @@ unit declaring a tagged type should be compiled with the restriction, though this is not required. @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Streams,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{1de} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{1df} @subsection No_Task_Allocators @@ -12310,7 +12330,7 @@ though this is not required. or types containing task subcomponents. @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{1df} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{1e0} @subsection No_Task_At_Interrupt_Priority @@ -12322,7 +12342,7 @@ a consequence, the tasks are always created with a priority below that an interrupt priority. @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{1e0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{1e1} @subsection No_Task_Attributes_Package @@ -12339,7 +12359,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{1e1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{1e2} @subsection No_Task_Hierarchy @@ -12349,7 +12369,7 @@ warnings on obsolescent features are activated). directly on the environment task of the partition. @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{1e2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{1e3} @subsection No_Task_Termination @@ -12358,7 +12378,7 @@ directly on the environment task of the partition. [RM D.7] Tasks that terminate are erroneous. @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{1e3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{1e4} @subsection No_Tasking @@ -12371,7 +12391,7 @@ and cause an error message to be output either by the compiler or binder. @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{1e4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{1e5} @subsection No_Terminate_Alternatives @@ -12380,7 +12400,7 @@ binder. [RM D.7] There are no selective accepts with terminate alternatives. @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{1e5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{1e6} @subsection No_Unchecked_Access @@ -12390,7 +12410,7 @@ binder. occurrences of the Unchecked_Access attribute. @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{1e6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{1e7} @subsection No_Unchecked_Conversion @@ -12400,7 +12420,7 @@ occurrences of the Unchecked_Access attribute. dependences on the predefined generic function Unchecked_Conversion. @node No_Unchecked_Deallocation,No_Use_Of_Entity,No_Unchecked_Conversion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{1e7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{1e8} @subsection No_Unchecked_Deallocation @@ -12410,7 +12430,7 @@ dependences on the predefined generic function Unchecked_Conversion. dependences on the predefined generic procedure Unchecked_Deallocation. @node No_Use_Of_Entity,Pure_Barriers,No_Unchecked_Deallocation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{1e8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{1e9} @subsection No_Use_Of_Entity @@ -12430,7 +12450,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line @end example @node Pure_Barriers,Simple_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{1e9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{1ea} @subsection Pure_Barriers @@ -12479,7 +12499,7 @@ but still ensures absence of side effects, exceptions, and recursion during the evaluation of the barriers. @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{1ea} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{1eb} @subsection Simple_Barriers @@ -12498,7 +12518,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{1eb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{1ec} @subsection Static_Priorities @@ -12509,7 +12529,7 @@ are static, and that there are no dependences on the package @cite{Ada.Dynamic_Priorities}. @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{1ec} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{1ed} @subsection Static_Storage_Size @@ -12519,7 +12539,7 @@ are static, and that there are no dependences on the package in a Storage_Size pragma or attribute definition clause is static. @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{1ed}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{1ee} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{1ee}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{1ef} @section Program Unit Level Restrictions @@ -12540,6 +12560,7 @@ other compilation units in the partition. * No_Implementation_Restrictions:: * No_Implementation_Units:: * No_Implicit_Aliasing:: +* No_Implicit_Loops:: * No_Obsolescent_Features:: * No_Wide_Characters:: * SPARK_05:: @@ -12547,7 +12568,7 @@ other compilation units in the partition. @end menu @node No_Elaboration_Code,No_Dynamic_Sized_Objects,,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{1ef} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{1f0} @subsection No_Elaboration_Code @@ -12603,7 +12624,7 @@ associated with the unit. This counter is typically used to check for access before elaboration and to control multiple elaboration attempts. @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Elaboration_Code,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{1f0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{1f1} @subsection No_Dynamic_Sized_Objects @@ -12621,7 +12642,7 @@ access discriminants. It is often a good idea to combine this restriction with No_Secondary_Stack. @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{1f1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{1f2} @subsection No_Entry_Queue @@ -12634,7 +12655,7 @@ checked at compile time. A program execution is erroneous if an attempt is made to queue a second task on such an entry. @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{1f2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{1f3} @subsection No_Implementation_Aspect_Specifications @@ -12645,7 +12666,7 @@ GNAT-defined aspects are present. With this restriction, the only aspects that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{1f3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{1f4} @subsection No_Implementation_Attributes @@ -12657,7 +12678,7 @@ attributes that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{1f4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{1f5} @subsection No_Implementation_Identifiers @@ -12668,7 +12689,7 @@ implementation-defined identifiers (marked with pragma Implementation_Defined) occur within language-defined packages. @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{1f5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{1f6} @subsection No_Implementation_Pragmas @@ -12679,7 +12700,7 @@ GNAT-defined pragmas are present. With this restriction, the only pragmas that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{1f6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{1f7} @subsection No_Implementation_Restrictions @@ -12691,7 +12712,7 @@ are present. With this restriction, the only other restriction identifiers that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{1f7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{1f8} @subsection No_Implementation_Units @@ -12701,8 +12722,8 @@ that can be used are those defined in the Ada Reference Manual. mention in the context clause of any implementation-defined descendants of packages Ada, Interfaces, or System. -@node No_Implicit_Aliasing,No_Obsolescent_Features,No_Implementation_Units,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{1f8} +@node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{1f9} @subsection No_Implicit_Aliasing @@ -12716,8 +12737,25 @@ Unrestricted_Access is forbidden is that it would require the prefix to be aliased, and in such cases, it can always be replaced by the standard attribute Unchecked_Access which is preferable. -@node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Aliasing,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{1f9} +@node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{1fa} +@subsection No_Implicit_Loops + + +@geindex No_Implicit_Loops + +[GNAT] This restriction ensures that the generated code of the unit marked +with this restriction does not contain any implicit @cite{for} loops, either by +modifying the generated code where possible, or by rejecting any construct +that would otherwise generate an implicit @cite{for} loop. If this restriction is +active, it is possible to build large array aggregates with all static +components without generating an intermediate temporary, and without generating +a loop to initialize individual components. Otherwise, a loop is created for +arrays larger than about 5000 scalar components. Note that if this restriction +is set in the spec of a package, it will not apply to its body. + +@node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{1fb} @subsection No_Obsolescent_Features @@ -12727,7 +12765,7 @@ the standard attribute Unchecked_Access which is preferable. features are used, as defined in Annex J of the Ada Reference Manual. @node No_Wide_Characters,SPARK_05,No_Obsolescent_Features,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{1fa} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{1fc} @subsection No_Wide_Characters @@ -12741,7 +12779,7 @@ appear in the program (that is literals representing characters not in type @cite{Character}). @node SPARK_05,,No_Wide_Characters,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{1fb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{1fd} @subsection SPARK_05 @@ -13100,7 +13138,7 @@ violations will be reported for constructs forbidden in SPARK 95, instead of SPARK 2005. @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top -@anchor{gnat_rm/implementation_advice doc}@anchor{1fc}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}@anchor{gnat_rm/implementation_advice id1}@anchor{1fd} +@anchor{gnat_rm/implementation_advice doc}@anchor{1fe}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}@anchor{gnat_rm/implementation_advice id1}@anchor{1ff} @chapter Implementation Advice @@ -13197,7 +13235,7 @@ case the text describes what GNAT does and why. @end menu @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{1fe} +@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{200} @section RM 1.1.3(20): Error Detection @@ -13214,7 +13252,7 @@ or diagnosed at compile time. @geindex Child Units @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{1ff} +@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{201} @section RM 1.1.3(31): Child Units @@ -13230,7 +13268,7 @@ Followed. @geindex Bounded errors @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{200} +@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{202} @section RM 1.1.5(12): Bounded Errors @@ -13247,7 +13285,7 @@ runtime. @geindex Pragmas @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice -@anchor{gnat_rm/implementation_advice id2}@anchor{201}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{202} +@anchor{gnat_rm/implementation_advice id2}@anchor{203}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{204} @section RM 2.8(16): Pragmas @@ -13360,7 +13398,7 @@ that this advice not be followed. For details see @ref{7,,Implementation Defined Pragmas}. @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{203} +@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{205} @section RM 2.8(17-19): Pragmas @@ -13381,14 +13419,14 @@ replacing @cite{library_items}." @end itemize @end quotation -See @ref{202,,RM 2.8(16); Pragmas}. +See @ref{204,,RM 2.8(16); Pragmas}. @geindex Character Sets @geindex Alternative Character Sets @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{204} +@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{206} @section RM 3.5.2(5): Alternative Character Sets @@ -13416,7 +13454,7 @@ there is no such restriction. @geindex Integer types @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{205} +@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{207} @section RM 3.5.4(28): Integer Types @@ -13435,7 +13473,7 @@ are supported for convenient interface to C, and so that all hardware types of the machine are easily available. @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{206} +@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{208} @section RM 3.5.4(29): Integer Types @@ -13451,7 +13489,7 @@ Followed. @geindex Enumeration values @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{207} +@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{209} @section RM 3.5.5(8): Enumeration Values @@ -13471,7 +13509,7 @@ Followed. @geindex Float types @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{208} +@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{20a} @section RM 3.5.7(17): Float Types @@ -13501,7 +13539,7 @@ since this is a software rather than a hardware format. @geindex multidimensional @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration'Small,RM 3 5 7 17 Float Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{209} +@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{20b} @section RM 3.6.2(11): Multidimensional Arrays @@ -13519,7 +13557,7 @@ Followed. @geindex Duration'Small @node RM 9 6 30-31 Duration'Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{20a} +@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{20c} @section RM 9.6(30-31): Duration'Small @@ -13540,7 +13578,7 @@ it need not be the same time base as used for @cite{Calendar.Clock}." Followed. @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration'Small,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{20b} +@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{20d} @section RM 10.2.1(12): Consistent Representation @@ -13562,7 +13600,7 @@ advice without severely impacting efficiency of execution. @geindex Exception information @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{20c} +@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{20e} @section RM 11.4.1(19): Exception Information @@ -13593,7 +13631,7 @@ Pragma @cite{Discard_Names}. @geindex suppression of @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{20d} +@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{20f} @section RM 11.5(28): Suppression of Checks @@ -13608,7 +13646,7 @@ Followed. @geindex Representation clauses @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{20e} +@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{210} @section RM 13.1 (21-24): Representation Clauses @@ -13657,7 +13695,7 @@ Followed. @geindex Packed types @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{20f} +@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{211} @section RM 13.2(6-8): Packed Types @@ -13696,7 +13734,7 @@ Followed. @geindex Address clauses @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{210} +@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{212} @section RM 13.3(14-19): Address Clauses @@ -13749,7 +13787,7 @@ Followed. @geindex Alignment clauses @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{211} +@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{213} @section RM 13.3(29-35): Alignment Clauses @@ -13806,7 +13844,7 @@ Followed. @geindex Size clauses @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{212} +@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{214} @section RM 13.3(42-43): Size Clauses @@ -13824,7 +13862,7 @@ object's @cite{Alignment} (if the @cite{Alignment} is nonzero)." Followed. @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{213} +@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{215} @section RM 13.3(50-56): Size Clauses @@ -13875,7 +13913,7 @@ Followed. @geindex Component_Size clauses @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{214} +@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{216} @section RM 13.3(71-73): Component Size Clauses @@ -13909,7 +13947,7 @@ Followed. @geindex enumeration @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{215} +@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{217} @section RM 13.4(9-10): Enumeration Representation Clauses @@ -13931,7 +13969,7 @@ Followed. @geindex records @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{216} +@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{218} @section RM 13.5.1(17-22): Record Representation Clauses @@ -13991,7 +14029,7 @@ and all mentioned features are implemented. @geindex Storage place attributes @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{217} +@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{219} @section RM 13.5.2(5): Storage Place Attributes @@ -14011,7 +14049,7 @@ Followed. There are no such components in GNAT. @geindex Bit ordering @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{218} +@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{21a} @section RM 13.5.3(7-8): Bit Ordering @@ -14031,7 +14069,7 @@ Thus non-default bit ordering is not supported. @geindex as private type @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{219} +@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{21b} @section RM 13.7(37): Address as Private @@ -14049,7 +14087,7 @@ Followed. @geindex operations of @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{21a} +@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{21c} @section RM 13.7.1(16): Address Operations @@ -14067,7 +14105,7 @@ operation raises @cite{Program_Error}, since all operations make sense. @geindex Unchecked conversion @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{21b} +@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{21d} @section RM 13.9(14-17): Unchecked Conversion @@ -14111,7 +14149,7 @@ Followed. @geindex implicit @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{21c} +@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{21e} @section RM 13.11(23-25): Implicit Heap Usage @@ -14162,7 +14200,7 @@ Followed. @geindex Unchecked deallocation @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 17 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{21d} +@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{21f} @section RM 13.11.2(17): Unchecked Deallocation @@ -14177,7 +14215,7 @@ Followed. @geindex Stream oriented attributes @node RM 13 13 2 17 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-13-2-17-stream-oriented-attributes}@anchor{21e} +@anchor{gnat_rm/implementation_advice rm-13-13-2-17-stream-oriented-attributes}@anchor{220} @section RM 13.13.2(17): Stream Oriented Attributes @@ -14232,7 +14270,7 @@ the @cite{GNAT and Libraries} section of the @cite{GNAT User's Guide}. @end itemize @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 17 Stream Oriented Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{21f} +@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{221} @section RM A.1(52): Names of Predefined Numeric Types @@ -14250,7 +14288,7 @@ Followed. @geindex Ada.Characters.Handling @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{220} +@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{222} @section RM A.3.2(49): @cite{Ada.Characters.Handling} @@ -14267,7 +14305,7 @@ Followed. GNAT provides no such localized definitions. @geindex Bounded-length strings @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{221} +@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{223} @section RM A.4.4(106): Bounded-Length String Handling @@ -14282,7 +14320,7 @@ Followed. No implicit pointers or dynamic allocation are used. @geindex Random number generation @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{222} +@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{224} @section RM A.5.2(46-47): Random Number Generation @@ -14311,7 +14349,7 @@ condition here to hold true. @geindex Get_Immediate @node RM A 10 7 23 Get_Immediate,RM B 1 39-41 Pragma Export,RM A 5 2 46-47 Random Number Generation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{223} +@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{225} @section RM A.10.7(23): @cite{Get_Immediate} @@ -14335,7 +14373,7 @@ this functionality. @geindex Export @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 10 7 23 Get_Immediate,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{224} +@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{226} @section RM B.1(39-41): Pragma @cite{Export} @@ -14383,7 +14421,7 @@ Followed. @geindex Interfaces @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{225} +@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{227} @section RM B.2(12-13): Package @cite{Interfaces} @@ -14413,7 +14451,7 @@ Followed. GNAT provides all the packages described in this section. @geindex interfacing with @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{226} +@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{228} @section RM B.3(63-71): Interfacing with C @@ -14501,7 +14539,7 @@ Followed. @geindex interfacing with @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{227} +@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{229} @section RM B.4(95-98): Interfacing with COBOL @@ -14542,7 +14580,7 @@ Followed. @geindex interfacing with @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{228} +@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{22a} @section RM B.5(22-26): Interfacing with Fortran @@ -14593,7 +14631,7 @@ Followed. @geindex Machine operations @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{229} +@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{22b} @section RM C.1(3-5): Access to Machine Operations @@ -14628,7 +14666,7 @@ object that is specified as exported." Followed. @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{22a} +@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{22c} @section RM C.1(10-16): Access to Machine Operations @@ -14689,7 +14727,7 @@ Followed on any target supporting such operations. @geindex Interrupt support @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{22b} +@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{22d} @section RM C.3(28): Interrupt Support @@ -14707,7 +14745,7 @@ of interrupt blocking. @geindex Protected procedure handlers @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{22c} +@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{22e} @section RM C.3.1(20-21): Protected Procedure Handlers @@ -14733,7 +14771,7 @@ Followed. Compile time warnings are given when possible. @geindex Interrupts @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{22d} +@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{22f} @section RM C.3.2(25): Package @cite{Interrupts} @@ -14751,7 +14789,7 @@ Followed. @geindex Pre-elaboration requirements @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{22e} +@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{230} @section RM C.4(14): Pre-elaboration Requirements @@ -14767,7 +14805,7 @@ Followed. Executable code is generated in some cases, e.g., loops to initialize large arrays. @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{22f} +@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{231} @section RM C.5(8): Pragma @cite{Discard_Names} @@ -14785,7 +14823,7 @@ Followed. @geindex Task_Attributes @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{230} +@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{232} @section RM C.7.2(30): The Package Task_Attributes @@ -14806,7 +14844,7 @@ Not followed. This implementation is not targeted to such a domain. @geindex Locking Policies @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{231} +@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{233} @section RM D.3(17): Locking Policies @@ -14823,7 +14861,7 @@ whose names (@cite{Inheritance_Locking} and @geindex Entry queuing policies @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{232} +@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{234} @section RM D.4(16): Entry Queuing Policies @@ -14838,7 +14876,7 @@ Followed. No such implementation-defined queuing policies exist. @geindex Preemptive abort @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{233} +@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{235} @section RM D.6(9-10): Preemptive Abort @@ -14864,7 +14902,7 @@ Followed. @geindex Tasking restrictions @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{234} +@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{236} @section RM D.7(21): Tasking Restrictions @@ -14883,7 +14921,7 @@ pragma @cite{Profile (Restricted)} for more details. @geindex monotonic @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{235} +@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{237} @section RM D.8(47-49): Monotonic Time @@ -14918,7 +14956,7 @@ Followed. @geindex PCS @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{236} +@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{238} @section RM E.5(28-29): Partition Communication Subsystem @@ -14946,7 +14984,7 @@ GNAT. @geindex COBOL support @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{237} +@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{239} @section RM F(7): COBOL Support @@ -14966,7 +15004,7 @@ Followed. @geindex Decimal radix support @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{238} +@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{23a} @section RM F.1(2): Decimal Radix Support @@ -14982,7 +15020,7 @@ representations. @geindex Numerics @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{239} +@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{23b} @section RM G: Numerics @@ -15002,7 +15040,7 @@ Followed. @geindex Complex types @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{23a} +@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{23c} @section RM G.1.1(56-58): Complex Types @@ -15064,7 +15102,7 @@ Followed. @geindex Complex elementary functions @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{23b} +@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{23d} @section RM G.1.2(49): Complex Elementary Functions @@ -15086,7 +15124,7 @@ Followed. @geindex Accuracy requirements @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{23c} +@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{23e} @section RM G.2.4(19): Accuracy Requirements @@ -15110,7 +15148,7 @@ Followed. @geindex complex arithmetic @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{23d} +@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{23f} @section RM G.2.6(15): Complex Arithmetic Accuracy @@ -15128,7 +15166,7 @@ Followed. @geindex Sequential elaboration policy @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{23e} +@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{240} @section RM H.6(15/2): Pragma Partition_Elaboration_Policy @@ -15143,7 +15181,7 @@ immediately terminated." Not followed. @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top -@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{23f}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{240} +@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{241}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{242} @chapter Implementation Defined Characteristics @@ -16338,7 +16376,7 @@ When the @cite{Pattern} parameter is not the null string, it is interpreted according to the syntax of regular expressions as defined in the @cite{GNAT.Regexp} package. -See @ref{241,,GNAT.Regexp (g-regexp.ads)}. +See @ref{243,,GNAT.Regexp (g-regexp.ads)}. @itemize * @@ -17380,7 +17418,7 @@ H.4(27)." There are no restrictions on pragma @cite{Restrictions}. @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top -@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{242}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{243} +@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{244}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{245} @chapter Intrinsic Subprograms @@ -17417,7 +17455,7 @@ Ada standard does not require Ada compilers to implement this feature. @end menu @node Intrinsic Operators,Compilation_Date,,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{244}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{245} +@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{246}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{247} @section Intrinsic Operators @@ -17448,7 +17486,7 @@ It is also possible to specify such operators for private types, if the full views are appropriate arithmetic types. @node Compilation_Date,Compilation_Time,Intrinsic Operators,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{246}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{247} +@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{248}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{249} @section Compilation_Date @@ -17462,7 +17500,7 @@ application program should simply call the function the current compilation (in local time format MMM DD YYYY). @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{248}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{249} +@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{24a}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{24b} @section Compilation_Time @@ -17476,7 +17514,7 @@ application program should simply call the function the current compilation (in local time format HH:MM:SS). @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{24a}@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{24b} +@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{24c}@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{24d} @section Enclosing_Entity @@ -17490,7 +17528,7 @@ application program should simply call the function the current subprogram, package, task, entry, or protected subprogram. @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{24c}@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{24d} +@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{24e}@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{24f} @section Exception_Information @@ -17504,7 +17542,7 @@ so an application program should simply call the function the exception information associated with the current exception. @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{24e}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{24f} +@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{250}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{251} @section Exception_Message @@ -17518,7 +17556,7 @@ so an application program should simply call the function the message associated with the current exception. @node Exception_Name,File,Exception_Message,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{250}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{251} +@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{252}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{253} @section Exception_Name @@ -17532,7 +17570,7 @@ so an application program should simply call the function the name of the current exception. @node File,Line,Exception_Name,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms file}@anchor{252}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{253} +@anchor{gnat_rm/intrinsic_subprograms file}@anchor{254}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{255} @section File @@ -17546,7 +17584,7 @@ application program should simply call the function file. @node Line,Shifts and Rotates,File,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{254}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{255} +@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{256}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{257} @section Line @@ -17560,7 +17598,7 @@ application program should simply call the function source line. @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{256}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{257} +@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{258}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{259} @section Shifts and Rotates @@ -17599,7 +17637,7 @@ the Provide_Shift_Operators pragma, which provides the function declarations and corresponding pragma Import's for all five shift functions. @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{258}@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{259} +@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{25a}@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{25b} @section Source_Location @@ -17613,7 +17651,7 @@ application program should simply call the function source file location. @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top -@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{25a}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{25b} +@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{25c}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{25d} @chapter Representation Clauses and Pragmas @@ -17659,7 +17697,7 @@ and this section describes the additional capabilities provided. @end menu @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{25c}@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{25d} +@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{25e}@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{25f} @section Alignment Clauses @@ -17673,13 +17711,13 @@ values are as follows: @itemize * @item -@emph{Primitive Types}. +@emph{Elementary Types}. -For primitive types, the alignment is the minimum of the actual size of +For elementary types, the alignment is the minimum of the actual size of objects of the type divided by @cite{Storage_Unit}, and the maximum alignment supported by the target. (This maximum alignment is given by the GNAT-specific attribute -@cite{Standard'Maximum_Alignment}; see @ref{17a,,Attribute Maximum_Alignment}.) +@cite{Standard'Maximum_Alignment}; see @ref{17c,,Attribute Maximum_Alignment}.) @geindex Maximum_Alignment attribute @@ -17695,10 +17733,11 @@ aligned. For arrays, the alignment is equal to the alignment of the component type for the normal case where no packing or component size is given. If the array is packed, and the packing is effective (see separate section on -packed arrays), then the alignment will be one for long packed arrays, -or arrays whose length is not known at compile time. For short packed +packed arrays), then the alignment will be either 4, 2, or 1 for long packed +arrays or arrays whose length is not known at compile time, depending on +whether the component size is divisible by 4, 2, or is odd. For short packed arrays, which are handled internally as modular types, the alignment -will be as described for primitive types, e.g., a packed array of length +will be as described for elementary types, e.g. a packed array of length 31 bits will have an object size of four bytes, and an alignment of 4. @item @@ -17787,7 +17826,7 @@ assumption is non-portable, and other compilers may choose different alignments for the subtype @cite{RS}. @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{25e}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{25f} +@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{260}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{261} @section Size Clauses @@ -17864,7 +17903,7 @@ if it is known that a Size value can be accommodated in an object of type Integer. @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{260}@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{261} +@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{262}@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{263} @section Storage_Size Clauses @@ -17937,7 +17976,7 @@ Of course in practice, there will not be any explicit allocators in the case of such an access declaration. @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{262}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{263} +@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{264}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{265} @section Size of Variant Record Objects @@ -18047,7 +18086,7 @@ the maximum size, regardless of the current variant value, the variant value. @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{264}@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{265} +@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{266}@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{267} @section Biased Representation @@ -18085,7 +18124,7 @@ biased representation can be used for all discrete types except for enumeration types for which a representation clause is given. @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{266}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{267} +@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{268}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{269} @section Value_Size and Object_Size Clauses @@ -18148,7 +18187,7 @@ discrete types are as follows: The @cite{Object_Size} for base subtypes reflect the natural hardware size in bits (run the compiler with @emph{-gnatS} to find those values for numeric types). Enumeration types and fixed-point base subtypes have -8, 16, 32 or 64 bits for this size, depending on the range of values +8, 16, 32, or 64 bits for this size, depending on the range of values to be stored. @item @@ -18392,7 +18431,7 @@ definition clause forces biased representation. This warning can be turned off using @cite{-gnatw.B}. @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{268}@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{269} +@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{26a}@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{26b} @section Component_Size Clauses @@ -18439,7 +18478,7 @@ and a pragma Pack for the same array type. if such duplicate clauses are given, the pragma Pack will be ignored. @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{26a}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{26b} +@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{26c}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{26d} @section Bit_Order Clauses @@ -18528,7 +18567,7 @@ little-endian machines, this must be explicitly programmed. This capability is not provided by @cite{Bit_Order}. @item -Components that are positioned across byte boundaries +Components that are positioned across byte boundaries. but do not occupy an integral number of bytes. Given that bytes are not reordered, such fields would occupy a non-contiguous sequence of bits @@ -18545,7 +18584,7 @@ if desired. The following section contains additional details regarding the issue of byte ordering. @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{26c}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{26d} +@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{26e}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{26f} @section Effect of Bit_Order on Byte Ordering @@ -18802,35 +18841,36 @@ to set the boolean constant @cite{Master_Byte_First} in an appropriate manner. @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{26e}@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{26f} +@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{270}@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{271} @section Pragma Pack for Arrays @geindex Pragma Pack (for arrays) -Pragma @cite{Pack} applied to an array has no effect unless the component type -is packable. For a component type to be packable, it must be one of the -following cases: +Pragma @cite{Pack} applied to an array has an effect that depends upon whether the +component type is @emph{packable}. For a component type to be @emph{packable}, it must +be one of the following cases: @itemize * @item -Any scalar type +Any elementary type. @item -Any type whose size is specified with a size clause +Any small packed array type with a static size. @item -Any packed array type with a static size - -@item -Any record type padded because of its default alignment +Any small simple record type with a static size. @end itemize For all these cases, if the component subtype size is in the range -1 through 63, then the effect of the pragma @cite{Pack} is exactly as though a +1 through 64, then the effect of the pragma @cite{Pack} is exactly as though a component size were specified giving the component subtype size. + +All other types are non-packable, they occupy an integral number of storage +units and the only effect of pragma Pack is to remove alignment gaps. + For example if we have: @example @@ -18841,7 +18881,7 @@ pragma Pack (ar); @end example Then the component size of @cite{ar} will be set to 5 (i.e., to @cite{r'size}, -and the size of the array @cite{ar} will be exactly 40 bits. +and the size of the array @cite{ar} will be exactly 40 bits). Note that in some cases this rather fierce approach to packing can produce unexpected effects. For example, in Ada 95 and Ada 2005, @@ -18918,7 +18958,7 @@ Here 31-bit packing is achieved as required, and no warning is generated, since in this case the programmer intention is clear. @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{270}@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{271} +@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{272}@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{273} @section Pragma Pack for Records @@ -18934,22 +18974,24 @@ Components of the following types are considered packable: @itemize * @item -Components of a primitive type are packable unless they are aliased -or of an atomic type. +Components of an elementary type are packable unless they are aliased, +independent, or of an atomic type. @item -Small packed arrays, whose size does not exceed 64 bits, and where the -size is statically known at compile time, are represented internally -as modular integers, and so they are also packable. +Small packed arrays, where the size is statically known, are represented +internally as modular integers, and so they are also packable. + +@item +Small simple records, where the size is statically known, are also packable. @end itemize -All packable components occupy the exact number of bits corresponding to -their @cite{Size} value, and are packed with no padding bits, i.e., they -can start on an arbitrary bit boundary. +For all these cases, if the 'Size value is in the range 1 through 64, the +components occupy the exact number of bits corresponding to this value +and are packed with no padding bits, i.e. they can start on an arbitrary +bit boundary. -All other types are non-packable, they occupy an integral number of -storage units, and -are placed at a boundary corresponding to their alignment requirements. +All other types are non-packable, they occupy an integral number of storage +units and the only effect of pragma Pack is to remove alignment gaps. For example, consider the record @@ -19001,7 +19043,7 @@ the @cite{L6} field is aligned to the next byte boundary, and takes an integral number of bytes, i.e., 72 bits. @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{272}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{273} +@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{274}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{275} @section Record Representation Clauses @@ -19080,13 +19122,13 @@ end record; Note: the above rules apply to recent releases of GNAT 5. In GNAT 3, there are more severe restrictions on larger components. -For non-primitive types, including packed arrays with a size greater than +For composite types, including packed arrays with a size greater than 64 bits, component clauses must respect the alignment requirement of the type, in particular, always starting on a byte boundary, and the length must be a multiple of the storage unit. @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{274}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{275} +@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{276}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{277} @section Handling of Records with Holes @@ -19163,7 +19205,7 @@ for Hrec'Size use 64; @end example @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{276}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{277} +@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{278}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{279} @section Enumeration Clauses @@ -19206,7 +19248,7 @@ the overhead of converting representation values to the corresponding positional values, (i.e., the value delivered by the @cite{Pos} attribute). @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{278}@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{279} +@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{27a}@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{27b} @section Address Clauses @@ -19536,7 +19578,7 @@ then the program compiles without the warning and when run will generate the output @cite{X was not clobbered}. @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{27a}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{27b} +@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{27c}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{27d} @section Use of Address Clauses for Memory-Mapped I/O @@ -19594,7 +19636,7 @@ provides the pragma @cite{Volatile_Full_Access} which can be used in lieu of pragma @cite{Atomic} and will give the additional guarantee. @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{27c}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{27d} +@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{27e}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{27f} @section Effect of Convention on Representation @@ -19672,7 +19714,7 @@ when one of these values is read, any nonzero value is treated as True. @end itemize @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{27e}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{27f} +@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{280}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{281} @section Conventions and Anonymous Access Types @@ -19748,7 +19790,7 @@ package ConvComp is @end example @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{280}@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{281} +@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{282}@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{283} @section Determining the Representations chosen by GNAT @@ -19900,7 +19942,7 @@ generated by the compiler into the original source to fix and guarantee the actual representation to be used. @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top -@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}@anchor{gnat_rm/standard_library_routines doc}@anchor{282}@anchor{gnat_rm/standard_library_routines id1}@anchor{283} +@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}@anchor{gnat_rm/standard_library_routines doc}@anchor{284}@anchor{gnat_rm/standard_library_routines id1}@anchor{285} @chapter Standard Library Routines @@ -20723,7 +20765,7 @@ For packages in Interfaces and System, all the RM defined packages are available in GNAT, see the Ada 2012 RM for full details. @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top -@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{284}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{285} +@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{286}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{287} @chapter The Implementation of Standard I/O @@ -20775,7 +20817,7 @@ these additional facilities are also described in this chapter. @end menu @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{286}@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{287} +@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{288}@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{289} @section Standard I/O Packages @@ -20846,7 +20888,7 @@ flush the common I/O streams and in particular Standard_Output before elaborating the Ada code. @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{288}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{289} +@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{28a}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{28b} @section FORM Strings @@ -20872,7 +20914,7 @@ unrecognized keyword appears in a form string, it is silently ignored and not considered invalid. @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{28a}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{28b} +@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{28c}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{28d} @section Direct_IO @@ -20892,7 +20934,7 @@ There is no limit on the size of Direct_IO files, they are expanded as necessary to accommodate whatever records are written to the file. @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{28c}@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{28d} +@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{28e}@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{28f} @section Sequential_IO @@ -20939,7 +20981,7 @@ using Stream_IO, and this is the preferred mechanism. In particular, the above program fragment rewritten to use Stream_IO will work correctly. @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{28e}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{28f} +@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{290}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{291} @section Text_IO @@ -21022,7 +21064,7 @@ the file. @end menu @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{290}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{291} +@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{292}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{293} @subsection Stream Pointer Positioning @@ -21058,7 +21100,7 @@ between two Ada files, then the difference may be observable in some situations. @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{292}@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{293} +@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{294}@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{295} @subsection Reading and Writing Non-Regular Files @@ -21109,7 +21151,7 @@ to read data past that end of file indication, until another end of file indication is entered. @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{294}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{295} +@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{296}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{297} @subsection Get_Immediate @@ -21127,7 +21169,7 @@ possible), it is undefined whether the FF character will be treated as a page mark. @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{296}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{297} +@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{298}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{299} @subsection Treating Text_IO Files as Streams @@ -21143,7 +21185,7 @@ skipped and the effect is similar to that described above for @cite{Get_Immediate}. @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{298}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{299} +@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{29a}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{29b} @subsection Text_IO Extensions @@ -21171,7 +21213,7 @@ the string is to be read. @end itemize @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{29a}@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{29b} +@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{29c}@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{29d} @subsection Text_IO Facilities for Unbounded Strings @@ -21219,7 +21261,7 @@ files @code{a-szuzti.ads} and @code{a-szuzti.adb} provides similar extended @cite{Wide_Wide_Text_IO} functionality for unbounded wide wide strings. @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{29c}@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{29d} +@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{29e}@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{29f} @section Wide_Text_IO @@ -21466,12 +21508,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{29e}@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{29f} +@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2a0}@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2a1} @subsection Stream Pointer Positioning @cite{Ada.Wide_Text_IO} is similar to @cite{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{28f,,Text_IO}). There is one additional +of stream pointer positioning (@ref{291,,Text_IO}). There is one additional case: If @cite{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the @@ -21490,7 +21532,7 @@ to a normal program using @cite{Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2a0}@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2a1} +@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2a2}@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2a3} @subsection Reading and Writing Non-Regular Files @@ -21501,7 +21543,7 @@ treated as data characters), and @cite{End_Of_Page} always returns it is possible to read beyond an end of file. @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2a2}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2a3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2a4}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2a5} @section Wide_Wide_Text_IO @@ -21670,12 +21712,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2a4}@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2a5} +@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2a6}@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2a7} @subsection Stream Pointer Positioning @cite{Ada.Wide_Wide_Text_IO} is similar to @cite{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{28f,,Text_IO}). There is one additional +of stream pointer positioning (@ref{291,,Text_IO}). There is one additional case: If @cite{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the @@ -21694,7 +21736,7 @@ to a normal program using @cite{Wide_Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2a6}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2a7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2a8}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2a9} @subsection Reading and Writing Non-Regular Files @@ -21705,7 +21747,7 @@ treated as data characters), and @cite{End_Of_Page} always returns it is possible to read beyond an end of file. @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2a8}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2a9} +@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2aa}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2ab} @section Stream_IO @@ -21727,7 +21769,7 @@ manner described for stream attributes. @end itemize @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2aa}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2ab} +@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2ac}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2ad} @section Text Translation @@ -21761,7 +21803,7 @@ mode. (corresponds to_O_U16TEXT). @end itemize @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2ac}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2ad} +@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2ae}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2af} @section Shared Files @@ -21824,7 +21866,7 @@ heterogeneous input-output. Although this approach will work in GNAT if for this purpose (using the stream attributes) @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2ae}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2af} +@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2b0}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2b1} @section Filenames encoding @@ -21864,7 +21906,7 @@ platform. On the other Operating Systems the run-time is supporting UTF-8 natively. @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2b0}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2b1} +@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2b2}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2b3} @section File content encoding @@ -21897,7 +21939,7 @@ Unicode 8-bit encoding This encoding is only supported on the Windows platform. @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2b2}@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2b3} +@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2b5} @section Open Modes @@ -22000,7 +22042,7 @@ subsequently requires switching from reading to writing or vice-versa, then the file is reopened in @code{r+} mode to permit the required operation. @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2b4}@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2b5} +@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2b7} @section Operations on C Streams @@ -22160,7 +22202,7 @@ end Interfaces.C_Streams; @end example @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2b7} +@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2b9} @section Interfacing to C Streams @@ -22253,7 +22295,7 @@ imported from a C program, allowing an Ada file to operate on an existing C file. @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top -@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}@anchor{gnat_rm/the_gnat_library doc}@anchor{2b8}@anchor{gnat_rm/the_gnat_library id1}@anchor{2b9} +@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}@anchor{gnat_rm/the_gnat_library doc}@anchor{2ba}@anchor{gnat_rm/the_gnat_library id1}@anchor{2bb} @chapter The GNAT Library @@ -22441,7 +22483,7 @@ of GNAT, and will generate a warning message. @end menu @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library -@anchor{gnat_rm/the_gnat_library id2}@anchor{2ba}@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2bb} +@anchor{gnat_rm/the_gnat_library id2}@anchor{2bc}@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2bd} @section @cite{Ada.Characters.Latin_9} (@code{a-chlat9.ads}) @@ -22458,7 +22500,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila1 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2bc}@anchor{gnat_rm/the_gnat_library id3}@anchor{2bd} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2be}@anchor{gnat_rm/the_gnat_library id3}@anchor{2bf} @section @cite{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads}) @@ -22475,7 +22517,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_9 a-cwila1 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id4}@anchor{2be}@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila1-ads}@anchor{2bf} +@anchor{gnat_rm/the_gnat_library id4}@anchor{2c0}@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila1-ads}@anchor{2c1} @section @cite{Ada.Characters.Wide_Latin_9} (@code{a-cwila1.ads}) @@ -22492,7 +22534,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2c0}@anchor{gnat_rm/the_gnat_library id5}@anchor{2c1} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2c2}@anchor{gnat_rm/the_gnat_library id5}@anchor{2c3} @section @cite{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads}) @@ -22509,7 +22551,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2c2}@anchor{gnat_rm/the_gnat_library id6}@anchor{2c3} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2c4}@anchor{gnat_rm/the_gnat_library id6}@anchor{2c5} @section @cite{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads}) @@ -22526,7 +22568,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id7}@anchor{2c4}@anchor{gnat_rm/the_gnat_library ada-containers-formal-doubly-linked-lists-a-cfdlli-ads}@anchor{2c5} +@anchor{gnat_rm/the_gnat_library id7}@anchor{2c6}@anchor{gnat_rm/the_gnat_library ada-containers-formal-doubly-linked-lists-a-cfdlli-ads}@anchor{2c7} @section @cite{Ada.Containers.Formal_Doubly_Linked_Lists} (@code{a-cfdlli.ads}) @@ -22545,7 +22587,7 @@ efficient version than the one defined in the standard. In particular it does not have the complex overhead required to detect cursor tampering. @node Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id8}@anchor{2c6}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-maps-a-cfhama-ads}@anchor{2c7} +@anchor{gnat_rm/the_gnat_library id8}@anchor{2c8}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-maps-a-cfhama-ads}@anchor{2c9} @section @cite{Ada.Containers.Formal_Hashed_Maps} (@code{a-cfhama.ads}) @@ -22564,7 +22606,7 @@ efficient version than the one defined in the standard. In particular it does not have the complex overhead required to detect cursor tampering. @node Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id9}@anchor{2c8}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-sets-a-cfhase-ads}@anchor{2c9} +@anchor{gnat_rm/the_gnat_library id9}@anchor{2ca}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-sets-a-cfhase-ads}@anchor{2cb} @section @cite{Ada.Containers.Formal_Hashed_Sets} (@code{a-cfhase.ads}) @@ -22583,7 +22625,7 @@ efficient version than the one defined in the standard. In particular it does not have the complex overhead required to detect cursor tampering. @node Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Ordered_Sets a-cforse ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id10}@anchor{2ca}@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-maps-a-cforma-ads}@anchor{2cb} +@anchor{gnat_rm/the_gnat_library id10}@anchor{2cc}@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-maps-a-cforma-ads}@anchor{2cd} @section @cite{Ada.Containers.Formal_Ordered_Maps} (@code{a-cforma.ads}) @@ -22602,7 +22644,7 @@ efficient version than the one defined in the standard. In particular it does not have the complex overhead required to detect cursor tampering. @node Ada Containers Formal_Ordered_Sets a-cforse ads,Ada Containers Formal_Vectors a-cofove ads,Ada Containers Formal_Ordered_Maps a-cforma ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-sets-a-cforse-ads}@anchor{2cc}@anchor{gnat_rm/the_gnat_library id11}@anchor{2cd} +@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-sets-a-cforse-ads}@anchor{2ce}@anchor{gnat_rm/the_gnat_library id11}@anchor{2cf} @section @cite{Ada.Containers.Formal_Ordered_Sets} (@code{a-cforse.ads}) @@ -22621,7 +22663,7 @@ efficient version than the one defined in the standard. In particular it does not have the complex overhead required to detect cursor tampering. @node Ada Containers Formal_Vectors a-cofove ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Formal_Ordered_Sets a-cforse ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id12}@anchor{2ce}@anchor{gnat_rm/the_gnat_library ada-containers-formal-vectors-a-cofove-ads}@anchor{2cf} +@anchor{gnat_rm/the_gnat_library id12}@anchor{2d0}@anchor{gnat_rm/the_gnat_library ada-containers-formal-vectors-a-cofove-ads}@anchor{2d1} @section @cite{Ada.Containers.Formal_Vectors} (@code{a-cofove.ads}) @@ -22640,7 +22682,7 @@ efficient version than the one defined in the standard. In particular it does not have the complex overhead required to detect cursor tampering. @node Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Bounded_Holders a-coboho ads,Ada Containers Formal_Vectors a-cofove ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id13}@anchor{2d0}@anchor{gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads}@anchor{2d1} +@anchor{gnat_rm/the_gnat_library id13}@anchor{2d2}@anchor{gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads}@anchor{2d3} @section @cite{Ada.Containers.Formal_Indefinite_Vectors} (@code{a-cfinve.ads}) @@ -22659,7 +22701,7 @@ efficient version than the one defined in the standard. In particular it does not have the complex overhead required to detect cursor tampering. @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id14}@anchor{2d2}@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2d3} +@anchor{gnat_rm/the_gnat_library id14}@anchor{2d4}@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2d5} @section @cite{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads}) @@ -22671,7 +22713,7 @@ This child of @cite{Ada.Containers} defines a modified version of Indefinite_Holders that avoids heap allocation. @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2d4}@anchor{gnat_rm/the_gnat_library id15}@anchor{2d5} +@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2d6}@anchor{gnat_rm/the_gnat_library id15}@anchor{2d7} @section @cite{Ada.Command_Line.Environment} (@code{a-colien.ads}) @@ -22684,7 +22726,7 @@ provides a mechanism for obtaining environment values on systems where this concept makes sense. @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id16}@anchor{2d6}@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2d7} +@anchor{gnat_rm/the_gnat_library id16}@anchor{2d8}@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2d9} @section @cite{Ada.Command_Line.Remove} (@code{a-colire.ads}) @@ -22702,7 +22744,7 @@ to further calls on the subprograms in @cite{Ada.Command_Line} will not see the removed argument. @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2d8}@anchor{gnat_rm/the_gnat_library id17}@anchor{2d9} +@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2da}@anchor{gnat_rm/the_gnat_library id17}@anchor{2db} @section @cite{Ada.Command_Line.Response_File} (@code{a-clrefi.ads}) @@ -22722,7 +22764,7 @@ Using a response file allow passing a set of arguments to an executable longer than the maximum allowed by the system on the command line. @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id18}@anchor{2da}@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2db} +@anchor{gnat_rm/the_gnat_library id18}@anchor{2dc}@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2dd} @section @cite{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads}) @@ -22737,7 +22779,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id19}@anchor{2dc}@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2dd} +@anchor{gnat_rm/the_gnat_library id19}@anchor{2de}@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2df} @section @cite{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads}) @@ -22751,7 +22793,7 @@ exception occurrence (@cite{Null_Occurrence}) without raising an exception. @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id20}@anchor{2de}@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{2df} +@anchor{gnat_rm/the_gnat_library id20}@anchor{2e0}@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{2e1} @section @cite{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads}) @@ -22765,7 +22807,7 @@ exceptions (hence the name last chance), and perform clean ups before terminating the program. Note that this subprogram never returns. @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{2e0}@anchor{gnat_rm/the_gnat_library id21}@anchor{2e1} +@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{2e2}@anchor{gnat_rm/the_gnat_library id21}@anchor{2e3} @section @cite{Ada.Exceptions.Traceback} (@code{a-exctra.ads}) @@ -22778,7 +22820,7 @@ give a traceback array of addresses based on an exception occurrence. @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{2e2}@anchor{gnat_rm/the_gnat_library id22}@anchor{2e3} +@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{2e4}@anchor{gnat_rm/the_gnat_library id22}@anchor{2e5} @section @cite{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads}) @@ -22793,7 +22835,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id23}@anchor{2e4}@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{2e5} +@anchor{gnat_rm/the_gnat_library id23}@anchor{2e6}@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{2e7} @section @cite{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads}) @@ -22808,7 +22850,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{2e6}@anchor{gnat_rm/the_gnat_library id24}@anchor{2e7} +@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{2e8}@anchor{gnat_rm/the_gnat_library id24}@anchor{2e9} @section @cite{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads}) @@ -22825,7 +22867,7 @@ strings, avoiding the necessity for an intermediate operation with ordinary strings. @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id25}@anchor{2e8}@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{2e9} +@anchor{gnat_rm/the_gnat_library id25}@anchor{2ea}@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{2eb} @section @cite{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads}) @@ -22842,7 +22884,7 @@ wide strings, avoiding the necessity for an intermediate operation with ordinary wide strings. @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{2ea}@anchor{gnat_rm/the_gnat_library id26}@anchor{2eb} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{2ec}@anchor{gnat_rm/the_gnat_library id26}@anchor{2ed} @section @cite{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads}) @@ -22859,7 +22901,7 @@ wide wide strings, avoiding the necessity for an intermediate operation with ordinary wide wide strings. @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{2ec}@anchor{gnat_rm/the_gnat_library id27}@anchor{2ed} +@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id27}@anchor{2ef} @section @cite{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads}) @@ -22874,7 +22916,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id28}@anchor{2ee}@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{2ef} +@anchor{gnat_rm/the_gnat_library id28}@anchor{2f0}@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{2f1} @section @cite{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads}) @@ -22889,7 +22931,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id29}@anchor{2f0}@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{2f1} +@anchor{gnat_rm/the_gnat_library id29}@anchor{2f2}@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{2f3} @section @cite{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads}) @@ -22902,7 +22944,7 @@ This package provides subprograms that allow categorization of Wide_Character values according to Unicode categories. @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id30}@anchor{2f3} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id30}@anchor{2f5} @section @cite{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads}) @@ -22917,7 +22959,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id31}@anchor{2f5} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id31}@anchor{2f7} @section @cite{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads}) @@ -22932,7 +22974,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id32}@anchor{2f6}@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{2f7} +@anchor{gnat_rm/the_gnat_library id32}@anchor{2f8}@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{2f9} @section @cite{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads}) @@ -22945,7 +22987,7 @@ This package provides subprograms that allow categorization of Wide_Wide_Character values according to Unicode categories. @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id33}@anchor{2f8}@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{2f9} +@anchor{gnat_rm/the_gnat_library id33}@anchor{2fa}@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{2fb} @section @cite{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads}) @@ -22960,7 +23002,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id34}@anchor{2fa}@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{2fb} +@anchor{gnat_rm/the_gnat_library id34}@anchor{2fc}@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{2fd} @section @cite{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads}) @@ -22975,7 +23017,7 @@ change during execution (for example a standard input file may be redefined to be interactive). @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id35}@anchor{2fd} +@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id35}@anchor{2ff} @section @cite{GNAT.Altivec} (@code{g-altive.ads}) @@ -22988,7 +23030,7 @@ definitions of constants and types common to all the versions of the binding. @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id36}@anchor{2fe}@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{2ff} +@anchor{gnat_rm/the_gnat_library id36}@anchor{300}@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{301} @section @cite{GNAT.Altivec.Conversions} (@code{g-altcon.ads}) @@ -22999,7 +23041,7 @@ binding. This package provides the Vector/View conversion routines. @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id37}@anchor{300}@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{301} +@anchor{gnat_rm/the_gnat_library id37}@anchor{302}@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{303} @section @cite{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads}) @@ -23013,7 +23055,7 @@ library. The hard binding is provided as a separate package. This unit is common to both bindings. @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id38}@anchor{303} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id38}@anchor{305} @section @cite{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads}) @@ -23025,7 +23067,7 @@ This package exposes the various vector types part of the Ada binding to AltiVec facilities. @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id39}@anchor{305} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id39}@anchor{307} @section @cite{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads}) @@ -23040,7 +23082,7 @@ vector elements and provides a simple way to initialize vector objects. @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id40}@anchor{307} +@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id40}@anchor{309} @section @cite{GNAT.Array_Split} (@code{g-arrspl.ads}) @@ -23053,7 +23095,7 @@ an array wherever the separators appear, and provide direct access to the resulting slices. @node GNAT AWK g-awk ads,GNAT Bind_Environment g-binenv ads,GNAT Array_Split g-arrspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id41}@anchor{308}@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{309} +@anchor{gnat_rm/the_gnat_library id41}@anchor{30a}@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{30b} @section @cite{GNAT.AWK} (@code{g-awk.ads}) @@ -23068,7 +23110,7 @@ or more files containing formatted data. The file is viewed as a database where each record is a line and a field is a data element in this line. @node GNAT Bind_Environment g-binenv ads,GNAT Bounded_Buffers g-boubuf ads,GNAT AWK g-awk ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id42}@anchor{30b} +@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id42}@anchor{30d} @section @cite{GNAT.Bind_Environment} (@code{g-binenv.ads}) @@ -23081,7 +23123,7 @@ These associations can be specified using the @cite{-V} binder command line switch. @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Bind_Environment g-binenv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id43}@anchor{30d} +@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id43}@anchor{30f} @section @cite{GNAT.Bounded_Buffers} (@code{g-boubuf.ads}) @@ -23096,7 +23138,7 @@ useful directly or as parts of the implementations of other abstractions, such as mailboxes. @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id44}@anchor{30e}@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{30f} +@anchor{gnat_rm/the_gnat_library id44}@anchor{310}@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{311} @section @cite{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads}) @@ -23109,7 +23151,7 @@ such as mailboxes. Provides a thread-safe asynchronous intertask mailbox communication facility. @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id45}@anchor{311} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id45}@anchor{313} @section @cite{GNAT.Bubble_Sort} (@code{g-bubsor.ads}) @@ -23124,7 +23166,7 @@ data items. Exchange and comparison procedures are provided by passing access-to-procedure values. @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id46}@anchor{312}@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{313} +@anchor{gnat_rm/the_gnat_library id46}@anchor{314}@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{315} @section @cite{GNAT.Bubble_Sort_A} (@code{g-busora.ads}) @@ -23140,7 +23182,7 @@ access-to-procedure values. This is an older version, retained for compatibility. Usually @cite{GNAT.Bubble_Sort} will be preferable. @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id47}@anchor{314}@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{315} +@anchor{gnat_rm/the_gnat_library id47}@anchor{316}@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{317} @section @cite{GNAT.Bubble_Sort_G} (@code{g-busorg.ads}) @@ -23156,7 +23198,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id48}@anchor{317} +@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id48}@anchor{319} @section @cite{GNAT.Byte_Order_Mark} (@code{g-byorma.ads}) @@ -23172,7 +23214,7 @@ the encoding of the string. The routine includes detection of special XML sequences for various UCS input formats. @node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id49}@anchor{319} +@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id49}@anchor{31b} @section @cite{GNAT.Byte_Swapping} (@code{g-bytswa.ads}) @@ -23186,7 +23228,7 @@ General routines for swapping the bytes in 2-, 4-, and 8-byte quantities. Machine-specific implementations are available in some cases. @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id50}@anchor{31a}@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{31b} +@anchor{gnat_rm/the_gnat_library id50}@anchor{31c}@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{31d} @section @cite{GNAT.Calendar} (@code{g-calend.ads}) @@ -23200,7 +23242,7 @@ Also provides conversion of @cite{Ada.Calendar.Time} values to and from the C @cite{timeval} format. @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id51}@anchor{31d} +@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id51}@anchor{31f} @section @cite{GNAT.Calendar.Time_IO} (@code{g-catiio.ads}) @@ -23211,7 +23253,7 @@ C @cite{timeval} format. @geindex GNAT.Calendar.Time_IO (g-catiio.ads) @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id52}@anchor{31e}@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{31f} +@anchor{gnat_rm/the_gnat_library id52}@anchor{320}@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{321} @section @cite{GNAT.CRC32} (@code{g-crc32.ads}) @@ -23228,7 +23270,7 @@ of this algorithm see Aug. 1988. Sarwate, D.V. @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id53}@anchor{321} +@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id53}@anchor{323} @section @cite{GNAT.Case_Util} (@code{g-casuti.ads}) @@ -23243,7 +23285,7 @@ without the overhead of the full casing tables in @cite{Ada.Characters.Handling}. @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id54}@anchor{322}@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{323} +@anchor{gnat_rm/the_gnat_library id54}@anchor{324}@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{325} @section @cite{GNAT.CGI} (@code{g-cgi.ads}) @@ -23258,7 +23300,7 @@ builds a table whose index is the key and provides some services to deal with this table. @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id55}@anchor{325} +@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id55}@anchor{327} @section @cite{GNAT.CGI.Cookie} (@code{g-cgicoo.ads}) @@ -23273,7 +23315,7 @@ Common Gateway Interface (CGI). It exports services to deal with Web cookies (piece of information kept in the Web client software). @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id56}@anchor{327} +@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id56}@anchor{329} @section @cite{GNAT.CGI.Debug} (@code{g-cgideb.ads}) @@ -23285,7 +23327,7 @@ This is a package to help debugging CGI (Common Gateway Interface) programs written in Ada. @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id57}@anchor{328}@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{329} +@anchor{gnat_rm/the_gnat_library id57}@anchor{32a}@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{32b} @section @cite{GNAT.Command_Line} (@code{g-comlin.ads}) @@ -23298,7 +23340,7 @@ including the ability to scan for named switches with optional parameters and expand file names using wild card notations. @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id58}@anchor{32b} +@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id58}@anchor{32d} @section @cite{GNAT.Compiler_Version} (@code{g-comver.ads}) @@ -23316,7 +23358,7 @@ of the compiler if a consistent tool set is used to compile all units of a partition). @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id59}@anchor{32d} +@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id59}@anchor{32f} @section @cite{GNAT.Ctrl_C} (@code{g-ctrl_c.ads}) @@ -23327,7 +23369,7 @@ of a partition). Provides a simple interface to handle Ctrl-C keyboard events. @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id60}@anchor{32e}@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{32f} +@anchor{gnat_rm/the_gnat_library id60}@anchor{330}@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{331} @section @cite{GNAT.Current_Exception} (@code{g-curexc.ads}) @@ -23344,7 +23386,7 @@ This is particularly useful in simulating typical facilities for obtaining information about exceptions provided by Ada 83 compilers. @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id61}@anchor{331} +@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id61}@anchor{333} @section @cite{GNAT.Debug_Pools} (@code{g-debpoo.ads}) @@ -23361,7 +23403,7 @@ problems. See @cite{The GNAT Debug_Pool Facility} section in the @cite{GNAT User's Guide}. @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id62}@anchor{333} +@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id62}@anchor{335} @section @cite{GNAT.Debug_Utilities} (@code{g-debuti.ads}) @@ -23374,7 +23416,7 @@ to and from string images of address values. Supports both C and Ada formats for hexadecimal literals. @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id63}@anchor{335} +@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id63}@anchor{337} @section @cite{GNAT.Decode_String} (@code{g-decstr.ads}) @@ -23398,7 +23440,7 @@ Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id64}@anchor{337} +@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id64}@anchor{339} @section @cite{GNAT.Decode_UTF8_String} (@code{g-deutst.ads}) @@ -23419,7 +23461,7 @@ preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding. @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id65}@anchor{338}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{339} +@anchor{gnat_rm/the_gnat_library id65}@anchor{33a}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{33b} @section @cite{GNAT.Directory_Operations} (@code{g-dirope.ads}) @@ -23432,7 +23474,7 @@ the current directory, making new directories, and scanning the files in a directory. @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id66}@anchor{33a}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{33b} +@anchor{gnat_rm/the_gnat_library id66}@anchor{33c}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{33d} @section @cite{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads}) @@ -23444,7 +23486,7 @@ A child unit of GNAT.Directory_Operations providing additional operations for iterating through directories. @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id67}@anchor{33c}@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{33d} +@anchor{gnat_rm/the_gnat_library id67}@anchor{33e}@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{33f} @section @cite{GNAT.Dynamic_HTables} (@code{g-dynhta.ads}) @@ -23462,7 +23504,7 @@ dynamic instances of the hash table, while an instantiation of @cite{GNAT.HTable} creates a single instance of the hash table. @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id68}@anchor{33f} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id68}@anchor{341} @section @cite{GNAT.Dynamic_Tables} (@code{g-dyntab.ads}) @@ -23482,7 +23524,7 @@ dynamic instances of the table, while an instantiation of @cite{GNAT.Table} creates a single instance of the table type. @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id69}@anchor{340}@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{341} +@anchor{gnat_rm/the_gnat_library id69}@anchor{342}@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{343} @section @cite{GNAT.Encode_String} (@code{g-encstr.ads}) @@ -23504,7 +23546,7 @@ encoding method. Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id70}@anchor{343} +@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id70}@anchor{345} @section @cite{GNAT.Encode_UTF8_String} (@code{g-enutst.ads}) @@ -23525,7 +23567,7 @@ Note there is a preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding. @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id71}@anchor{344}@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{345} +@anchor{gnat_rm/the_gnat_library id71}@anchor{346}@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{347} @section @cite{GNAT.Exception_Actions} (@code{g-excact.ads}) @@ -23538,7 +23580,7 @@ for specific exceptions, or when any exception is raised. This can be used for instance to force a core dump to ease debugging. @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-expect ads,GNAT Exception_Actions g-excact ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id72}@anchor{346}@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{347} +@anchor{gnat_rm/the_gnat_library id72}@anchor{348}@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{349} @section @cite{GNAT.Exception_Traces} (@code{g-exctra.ads}) @@ -23552,7 +23594,7 @@ Provides an interface allowing to control automatic output upon exception occurrences. @node GNAT Exceptions g-expect ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id73}@anchor{348}@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-expect-ads}@anchor{349} +@anchor{gnat_rm/the_gnat_library id73}@anchor{34a}@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-expect-ads}@anchor{34b} @section @cite{GNAT.Exceptions} (@code{g-expect.ads}) @@ -23573,7 +23615,7 @@ predefined exceptions, and for example allow raising @cite{Constraint_Error} with a message from a pure subprogram. @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-expect ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id74}@anchor{34b} +@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id74}@anchor{34d} @section @cite{GNAT.Expect} (@code{g-expect.ads}) @@ -23589,7 +23631,7 @@ It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id75}@anchor{34d} +@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id75}@anchor{34f} @section @cite{GNAT.Expect.TTY} (@code{g-exptty.ads}) @@ -23601,7 +23643,7 @@ ports. It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id76}@anchor{34e}@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{34f} +@anchor{gnat_rm/the_gnat_library id76}@anchor{350}@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{351} @section @cite{GNAT.Float_Control} (@code{g-flocon.ads}) @@ -23615,7 +23657,7 @@ library calls may cause this mode to be modified, and the Reset procedure in this package can be used to reestablish the required mode. @node GNAT Formatted_String g-forstr ads,GNAT Heap_Sort g-heasor ads,GNAT Float_Control g-flocon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id77}@anchor{351} +@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id77}@anchor{353} @section @cite{GNAT.Formatted_String} (@code{g-forstr.ads}) @@ -23630,7 +23672,7 @@ derived from Integer, Float or enumerations as values for the formatted string. @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Formatted_String g-forstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id78}@anchor{353} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id78}@anchor{355} @section @cite{GNAT.Heap_Sort} (@code{g-heasor.ads}) @@ -23644,7 +23686,7 @@ access-to-procedure values. The algorithm used is a modified heap sort that performs approximately N*log(N) comparisons in the worst case. @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id79}@anchor{354}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{355} +@anchor{gnat_rm/the_gnat_library id79}@anchor{356}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{357} @section @cite{GNAT.Heap_Sort_A} (@code{g-hesora.ads}) @@ -23660,7 +23702,7 @@ This differs from @cite{GNAT.Heap_Sort} in having a less convenient interface, but may be slightly more efficient. @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id80}@anchor{356}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{357} +@anchor{gnat_rm/the_gnat_library id80}@anchor{358}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{359} @section @cite{GNAT.Heap_Sort_G} (@code{g-hesorg.ads}) @@ -23674,7 +23716,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id81}@anchor{358}@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{359} +@anchor{gnat_rm/the_gnat_library id81}@anchor{35a}@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{35b} @section @cite{GNAT.HTable} (@code{g-htable.ads}) @@ -23687,7 +23729,7 @@ data. Provides two approaches, one a simple static approach, and the other allowing arbitrary dynamic hash tables. @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id82}@anchor{35a}@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{35b} +@anchor{gnat_rm/the_gnat_library id82}@anchor{35c}@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{35d} @section @cite{GNAT.IO} (@code{g-io.ads}) @@ -23703,7 +23745,7 @@ Standard_Input, and writing characters, strings and integers to either Standard_Output or Standard_Error. @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id83}@anchor{35c}@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{35d} +@anchor{gnat_rm/the_gnat_library id83}@anchor{35e}@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{35f} @section @cite{GNAT.IO_Aux} (@code{g-io_aux.ads}) @@ -23717,7 +23759,7 @@ Provides some auxiliary functions for use with Text_IO, including a test for whether a file exists, and functions for reading a line of text. @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id84}@anchor{35f} +@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id84}@anchor{361} @section @cite{GNAT.Lock_Files} (@code{g-locfil.ads}) @@ -23731,7 +23773,7 @@ Provides a general interface for using files as locks. Can be used for providing program level synchronization. @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id85}@anchor{360}@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{361} +@anchor{gnat_rm/the_gnat_library id85}@anchor{362}@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{363} @section @cite{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads}) @@ -23743,7 +23785,7 @@ The original implementation of @cite{Ada.Numerics.Discrete_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id86}@anchor{362}@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{363} +@anchor{gnat_rm/the_gnat_library id86}@anchor{364}@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{365} @section @cite{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads}) @@ -23755,7 +23797,7 @@ The original implementation of @cite{Ada.Numerics.Float_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id87}@anchor{364}@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{365} +@anchor{gnat_rm/the_gnat_library id87}@anchor{366}@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{367} @section @cite{GNAT.MD5} (@code{g-md5.ads}) @@ -23768,7 +23810,7 @@ the HMAC-MD5 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id88}@anchor{366}@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{367} +@anchor{gnat_rm/the_gnat_library id88}@anchor{368}@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{369} @section @cite{GNAT.Memory_Dump} (@code{g-memdum.ads}) @@ -23781,7 +23823,7 @@ standard output or standard error files. Uses GNAT.IO for actual output. @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id89}@anchor{368}@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{369} +@anchor{gnat_rm/the_gnat_library id89}@anchor{36a}@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{36b} @section @cite{GNAT.Most_Recent_Exception} (@code{g-moreex.ads}) @@ -23795,7 +23837,7 @@ various logging purposes, including duplicating functionality of some Ada 83 implementation dependent extensions. @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id90}@anchor{36a}@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{36b} +@anchor{gnat_rm/the_gnat_library id90}@anchor{36c}@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{36d} @section @cite{GNAT.OS_Lib} (@code{g-os_lib.ads}) @@ -23811,7 +23853,7 @@ including a portable spawn procedure, and access to environment variables and error return codes. @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id91}@anchor{36d} +@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id91}@anchor{36f} @section @cite{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads}) @@ -23829,7 +23871,7 @@ hashcode are in the same order. These hashing functions are very convenient for use with realtime applications. @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id92}@anchor{36f} +@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id92}@anchor{371} @section @cite{GNAT.Random_Numbers} (@code{g-rannum.ads}) @@ -23841,7 +23883,7 @@ Provides random number capabilities which extend those available in the standard Ada library and are more convenient to use. @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{241}@anchor{gnat_rm/the_gnat_library id93}@anchor{370} +@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{243}@anchor{gnat_rm/the_gnat_library id93}@anchor{372} @section @cite{GNAT.Regexp} (@code{g-regexp.ads}) @@ -23857,7 +23899,7 @@ simplest of the three pattern matching packages provided, and is particularly suitable for 'file globbing' applications. @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id94}@anchor{371}@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{372} +@anchor{gnat_rm/the_gnat_library id94}@anchor{373}@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{374} @section @cite{GNAT.Registry} (@code{g-regist.ads}) @@ -23871,7 +23913,7 @@ registry API, but at a lower level of abstraction, refer to the Win32.Winreg package provided with the Win32Ada binding @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{373}@anchor{gnat_rm/the_gnat_library id95}@anchor{374} +@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{375}@anchor{gnat_rm/the_gnat_library id95}@anchor{376} @section @cite{GNAT.Regpat} (@code{g-regpat.ads}) @@ -23886,7 +23928,7 @@ from the original V7 style regular expression library written in C by Henry Spencer (and binary compatible with this C library). @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id96}@anchor{375}@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{376} +@anchor{gnat_rm/the_gnat_library id96}@anchor{377}@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{378} @section @cite{GNAT.Rewrite_Data} (@code{g-rewdat.ads}) @@ -23900,7 +23942,7 @@ full content to be processed is not loaded into memory all at once. This makes this interface usable for large files or socket streams. @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{377}@anchor{gnat_rm/the_gnat_library id97}@anchor{378} +@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id97}@anchor{37a} @section @cite{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads}) @@ -23912,7 +23954,7 @@ Provide the capability to query the high water mark of the current task's secondary stack. @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id98}@anchor{379}@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{37a} +@anchor{gnat_rm/the_gnat_library id98}@anchor{37b}@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{37c} @section @cite{GNAT.Semaphores} (@code{g-semaph.ads}) @@ -23923,7 +23965,7 @@ secondary stack. Provides classic counting and binary semaphores using protected types. @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id99}@anchor{37c} +@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id99}@anchor{37e} @section @cite{GNAT.Serial_Communications} (@code{g-sercom.ads}) @@ -23935,7 +23977,7 @@ Provides a simple interface to send and receive data over a serial port. This is only supported on GNU/Linux and Windows. @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id100}@anchor{37e} +@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id100}@anchor{380} @section @cite{GNAT.SHA1} (@code{g-sha1.ads}) @@ -23948,7 +23990,7 @@ and RFC 3174, and the HMAC-SHA1 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id101}@anchor{37f}@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{380} +@anchor{gnat_rm/the_gnat_library id101}@anchor{381}@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{382} @section @cite{GNAT.SHA224} (@code{g-sha224.ads}) @@ -23961,7 +24003,7 @@ and the HMAC-SHA224 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id102}@anchor{381}@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{382} +@anchor{gnat_rm/the_gnat_library id102}@anchor{383}@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{384} @section @cite{GNAT.SHA256} (@code{g-sha256.ads}) @@ -23974,7 +24016,7 @@ and the HMAC-SHA256 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id103}@anchor{383}@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{384} +@anchor{gnat_rm/the_gnat_library id103}@anchor{385}@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{386} @section @cite{GNAT.SHA384} (@code{g-sha384.ads}) @@ -23987,7 +24029,7 @@ and the HMAC-SHA384 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id104}@anchor{386} +@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id104}@anchor{388} @section @cite{GNAT.SHA512} (@code{g-sha512.ads}) @@ -24000,7 +24042,7 @@ and the HMAC-SHA512 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id105}@anchor{388} +@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id105}@anchor{38a} @section @cite{GNAT.Signals} (@code{g-signal.ads}) @@ -24012,7 +24054,7 @@ Provides the ability to manipulate the blocked status of signals on supported targets. @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id106}@anchor{38a} +@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id106}@anchor{38c} @section @cite{GNAT.Sockets} (@code{g-socket.ads}) @@ -24027,7 +24069,7 @@ on all native GNAT ports and on VxWorks cross prots. It is not implemented for the LynxOS cross port. @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id107}@anchor{38c} +@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id107}@anchor{38e} @section @cite{GNAT.Source_Info} (@code{g-souinf.ads}) @@ -24041,7 +24083,7 @@ subprograms yielding the date and time of the current compilation (like the C macros @cite{__DATE__} and @cite{__TIME__}) @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id108}@anchor{38e} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id108}@anchor{390} @section @cite{GNAT.Spelling_Checker} (@code{g-speche.ads}) @@ -24053,7 +24095,7 @@ Provides a function for determining whether one string is a plausible near misspelling of another string. @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id109}@anchor{38f}@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{390} +@anchor{gnat_rm/the_gnat_library id109}@anchor{391}@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{392} @section @cite{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads}) @@ -24066,7 +24108,7 @@ determining whether one string is a plausible near misspelling of another string. @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id110}@anchor{391}@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{392} +@anchor{gnat_rm/the_gnat_library id110}@anchor{393}@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{394} @section @cite{GNAT.Spitbol.Patterns} (@code{g-spipat.ads}) @@ -24082,7 +24124,7 @@ the SNOBOL4 dynamic pattern construction and matching capabilities, using the efficient algorithm developed by Robert Dewar for the SPITBOL system. @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id111}@anchor{393}@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{394} +@anchor{gnat_rm/the_gnat_library id111}@anchor{395}@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{396} @section @cite{GNAT.Spitbol} (@code{g-spitbo.ads}) @@ -24097,7 +24139,7 @@ useful for constructing arbitrary mappings from strings in the style of the SNOBOL4 TABLE function. @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id112}@anchor{395}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{396} +@anchor{gnat_rm/the_gnat_library id112}@anchor{397}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{398} @section @cite{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads}) @@ -24112,7 +24154,7 @@ for type @cite{Standard.Boolean}, giving an implementation of sets of string values. @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id113}@anchor{397}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{398} +@anchor{gnat_rm/the_gnat_library id113}@anchor{399}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{39a} @section @cite{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads}) @@ -24129,7 +24171,7 @@ for type @cite{Standard.Integer}, giving an implementation of maps from string to integer values. @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id114}@anchor{399}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{39a} +@anchor{gnat_rm/the_gnat_library id114}@anchor{39b}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{39c} @section @cite{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads}) @@ -24146,7 +24188,7 @@ a variable length string type, giving an implementation of general maps from strings to strings. @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id115}@anchor{39b}@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{39c} +@anchor{gnat_rm/the_gnat_library id115}@anchor{39d}@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{39e} @section @cite{GNAT.SSE} (@code{g-sse.ads}) @@ -24158,7 +24200,7 @@ targets. It exposes vector component types together with a general introduction to the binding contents and use. @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id116}@anchor{39e} +@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id116}@anchor{3a0} @section @cite{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads}) @@ -24167,7 +24209,7 @@ introduction to the binding contents and use. SSE vector types for use with SSE related intrinsics. @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id117}@anchor{3a0} +@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id117}@anchor{3a2} @section @cite{GNAT.String_Hash} (@code{g-strhas.ads}) @@ -24179,7 +24221,7 @@ Provides a generic hash function working on arrays of scalars. Both the scalar type and the hash result type are parameters. @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id118}@anchor{3a1}@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3a2} +@anchor{gnat_rm/the_gnat_library id118}@anchor{3a3}@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3a4} @section @cite{GNAT.Strings} (@code{g-string.ads}) @@ -24189,7 +24231,7 @@ Common String access types and related subprograms. Basically it defines a string access and an array of string access types. @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id119}@anchor{3a4} +@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id119}@anchor{3a6} @section @cite{GNAT.String_Split} (@code{g-strspl.ads}) @@ -24203,7 +24245,7 @@ to the resulting slices. This package is instantiated from @cite{GNAT.Array_Split}. @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id120}@anchor{3a6} +@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id120}@anchor{3a8} @section @cite{GNAT.Table} (@code{g-table.ads}) @@ -24223,7 +24265,7 @@ while an instantiation of @cite{GNAT.Dynamic_Tables} creates a type that can be used to define dynamic instances of the table. @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id121}@anchor{3a8} +@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id121}@anchor{3aa} @section @cite{GNAT.Task_Lock} (@code{g-tasloc.ads}) @@ -24240,7 +24282,7 @@ single global task lock. Appropriate for use in situations where contention between tasks is very rarely expected. @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id122}@anchor{3aa} +@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id122}@anchor{3ac} @section @cite{GNAT.Time_Stamp} (@code{g-timsta.ads}) @@ -24255,7 +24297,7 @@ represents the current date and time in ISO 8601 format. This is a very simple routine with minimal code and there are no dependencies on any other unit. @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id123}@anchor{3ac} +@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id123}@anchor{3ae} @section @cite{GNAT.Threads} (@code{g-thread.ads}) @@ -24272,7 +24314,7 @@ further details if your program has threads that are created by a non-Ada environment which then accesses Ada code. @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id124}@anchor{3ad}@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3ae} +@anchor{gnat_rm/the_gnat_library id124}@anchor{3af}@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3b0} @section @cite{GNAT.Traceback} (@code{g-traceb.ads}) @@ -24284,7 +24326,7 @@ Provides a facility for obtaining non-symbolic traceback information, useful in various debugging situations. @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-table ads,GNAT Traceback g-traceb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id125}@anchor{3b0} +@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id125}@anchor{3b2} @section @cite{GNAT.Traceback.Symbolic} (@code{g-trasym.ads}) @@ -24293,7 +24335,7 @@ in various debugging situations. @geindex Trace back facilities @node GNAT UTF_32 g-table ads,GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id126}@anchor{3b1}@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3b2} +@anchor{gnat_rm/the_gnat_library id126}@anchor{3b3}@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3b4} @section @cite{GNAT.UTF_32} (@code{g-table.ads}) @@ -24312,7 +24354,7 @@ lower case to upper case fold routine corresponding to the Ada 2005 rules for identifier equivalence. @node GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-table ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-u3spch-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id127}@anchor{3b4} +@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-u3spch-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id127}@anchor{3b6} @section @cite{GNAT.Wide_Spelling_Checker} (@code{g-u3spch.ads}) @@ -24325,7 +24367,7 @@ near misspelling of another wide wide string, where the strings are represented using the UTF_32_String type defined in System.Wch_Cnv. @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Spelling_Checker g-u3spch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id128}@anchor{3b6} +@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id128}@anchor{3b8} @section @cite{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads}) @@ -24337,7 +24379,7 @@ Provides a function for determining whether one wide string is a plausible near misspelling of another wide string. @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id129}@anchor{3b8} +@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id129}@anchor{3ba} @section @cite{GNAT.Wide_String_Split} (@code{g-wistsp.ads}) @@ -24351,7 +24393,7 @@ to the resulting slices. This package is instantiated from @cite{GNAT.Array_Split}. @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id130}@anchor{3ba} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id130}@anchor{3bc} @section @cite{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads}) @@ -24363,7 +24405,7 @@ Provides a function for determining whether one wide wide string is a plausible near misspelling of another wide wide string. @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id131}@anchor{3bc} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id131}@anchor{3be} @section @cite{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads}) @@ -24377,7 +24419,7 @@ to the resulting slices. This package is instantiated from @cite{GNAT.Array_Split}. @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id132}@anchor{3be} +@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id132}@anchor{3c0} @section @cite{Interfaces.C.Extensions} (@code{i-cexten.ads}) @@ -24388,7 +24430,7 @@ for use with either manually or automatically generated bindings to C libraries. @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id133}@anchor{3bf}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3c0} +@anchor{gnat_rm/the_gnat_library id133}@anchor{3c1}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3c2} @section @cite{Interfaces.C.Streams} (@code{i-cstrea.ads}) @@ -24401,7 +24443,7 @@ This package is a binding for the most commonly used operations on C streams. @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id134}@anchor{3c2} +@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id134}@anchor{3c4} @section @cite{Interfaces.Packed_Decimal} (@code{i-pacdec.ads}) @@ -24416,7 +24458,7 @@ from a packed decimal format compatible with that used on IBM mainframes. @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id135}@anchor{3c4} +@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id135}@anchor{3c6} @section @cite{Interfaces.VxWorks} (@code{i-vxwork.ads}) @@ -24432,7 +24474,7 @@ In particular, it interfaces with the VxWorks hardware interrupt facilities. @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id136}@anchor{3c6} +@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id136}@anchor{3c8} @section @cite{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads}) @@ -24455,7 +24497,7 @@ function codes. A particular use of this package is to enable the use of Get_Immediate under VxWorks. @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id137}@anchor{3c8} +@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id137}@anchor{3ca} @section @cite{System.Address_Image} (@code{s-addima.ads}) @@ -24471,7 +24513,7 @@ function that gives an (implementation dependent) string which identifies an address. @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id138}@anchor{3c9}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3ca} +@anchor{gnat_rm/the_gnat_library id138}@anchor{3cb}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3cc} @section @cite{System.Assertions} (@code{s-assert.ads}) @@ -24487,7 +24529,7 @@ by an run-time assertion failure, as well as the routine that is used internally to raise this assertion. @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id139}@anchor{3cb}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3cc} +@anchor{gnat_rm/the_gnat_library id139}@anchor{3cd}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3ce} @section @cite{System.Atomic_Counters} (@code{s-atocou.ads}) @@ -24501,7 +24543,7 @@ on most targets, including all Alpha, ia64, PowerPC, SPARC V9, x86, and x86_64 platforms. @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id140}@anchor{3ce} +@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id140}@anchor{3d0} @section @cite{System.Memory} (@code{s-memory.ads}) @@ -24519,7 +24561,7 @@ calls to this unit may be made for low level allocation uses (for example see the body of @cite{GNAT.Tables}). @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id141}@anchor{3cf}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3d0} +@anchor{gnat_rm/the_gnat_library id141}@anchor{3d1}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3d2} @section @cite{System.Multiprocessors} (@code{s-multip.ads}) @@ -24532,7 +24574,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id142}@anchor{3d2} +@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id142}@anchor{3d4} @section @cite{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads}) @@ -24545,7 +24587,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id143}@anchor{3d3}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3d4} +@anchor{gnat_rm/the_gnat_library id143}@anchor{3d5}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{3d6} @section @cite{System.Partition_Interface} (@code{s-parint.ads}) @@ -24558,7 +24600,7 @@ is used primarily in a distribution context when using Annex E with @cite{GLADE}. @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id144}@anchor{3d5}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{3d6} +@anchor{gnat_rm/the_gnat_library id144}@anchor{3d7}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{3d8} @section @cite{System.Pool_Global} (@code{s-pooglo.ads}) @@ -24575,7 +24617,7 @@ declared. It uses malloc/free to allocate/free and does not attempt to do any automatic reclamation. @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id145}@anchor{3d7}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{3d8} +@anchor{gnat_rm/the_gnat_library id145}@anchor{3d9}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{3da} @section @cite{System.Pool_Local} (@code{s-pooloc.ads}) @@ -24592,7 +24634,7 @@ a list of allocated blocks, so that all storage allocated for the pool can be freed automatically when the pool is finalized. @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id146}@anchor{3d9}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{3da} +@anchor{gnat_rm/the_gnat_library id146}@anchor{3db}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{3dc} @section @cite{System.Restrictions} (@code{s-restri.ads}) @@ -24608,7 +24650,7 @@ compiler determined information on which restrictions are violated by one or more packages in the partition. @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id147}@anchor{3dc} +@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id147}@anchor{3de} @section @cite{System.Rident} (@code{s-rident.ads}) @@ -24624,7 +24666,7 @@ since the necessary instantiation is included in package System.Restrictions. @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id148}@anchor{3dd}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{3de} +@anchor{gnat_rm/the_gnat_library id148}@anchor{3df}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{3e0} @section @cite{System.Strings.Stream_Ops} (@code{s-ststop.ads}) @@ -24640,7 +24682,7 @@ stream attributes are applied to string types, but the subprograms in this package can be used directly by application programs. @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id149}@anchor{3e0} +@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id149}@anchor{3e2} @section @cite{System.Unsigned_Types} (@code{s-unstyp.ads}) @@ -24653,7 +24695,7 @@ also contains some related definitions for other specialized types used by the compiler in connection with packed array types. @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id150}@anchor{3e2} +@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id150}@anchor{3e4} @section @cite{System.Wch_Cnv} (@code{s-wchcnv.ads}) @@ -24674,7 +24716,7 @@ encoding method. It uses definitions in package @cite{System.Wch_Con}. @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id151}@anchor{3e4} +@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id151}@anchor{3e6} @section @cite{System.Wch_Con} (@code{s-wchcon.ads}) @@ -24686,7 +24728,7 @@ in ordinary strings. These definitions are used by the package @cite{System.Wch_Cnv}. @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top -@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{3e5}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{3e6} +@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{3e7}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{3e8} @chapter Interfacing to Other Languages @@ -24704,7 +24746,7 @@ provided. @end menu @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{3e7}@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{3e8} +@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{3e9}@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{3ea} @section Interfacing to C @@ -24842,7 +24884,7 @@ of the length corresponding to the @code{type'Size} value in Ada. @end itemize @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{3e9}@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{45} +@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{3eb}@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{45} @section Interfacing to C++ @@ -24899,7 +24941,7 @@ The @cite{External_Name} is the name of the C++ RTTI symbol. You can then cover a specific C++ exception in an exception handler. @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{3ea}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{3eb} +@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{3ec}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{3ed} @section Interfacing to COBOL @@ -24907,7 +24949,7 @@ Interfacing to COBOL is achieved as described in section B.4 of the Ada Reference Manual. @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{3ec}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{3ed} +@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{3ee}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{3ef} @section Interfacing to Fortran @@ -24917,7 +24959,7 @@ multi-dimensional array causes the array to be stored in column-major order as required for convenient interface to Fortran. @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{3ee}@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{3ef} +@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{3f0}@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{3f1} @section Interfacing to non-GNAT Ada code @@ -24941,7 +24983,7 @@ values or simple record types without variants, or simple array types with fixed bounds. @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top -@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{3f0}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{3f1} +@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{3f2}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{3f3} @chapter Specialized Needs Annexes @@ -24982,7 +25024,7 @@ in Ada 2005) is fully implemented. @end table @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top -@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{3f2}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{3f3} +@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{3f4}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{3f5} @chapter Implementation of Specific Ada Features @@ -25000,7 +25042,7 @@ facilities. @end menu @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{156}@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{3f4} +@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{158}@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{3f6} @section Machine Code Insertions @@ -25168,7 +25210,7 @@ according to normal visibility rules. In particular if there is no qualification is required. @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{3f5}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{3f6} +@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{3f7}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{3f8} @section GNAT Implementation of Tasking @@ -25183,7 +25225,7 @@ to compliance with the Real-Time Systems Annex. @end menu @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{3f7}@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{3f8} +@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{3f9}@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{3fa} @subsection Mapping Ada Tasks onto the Underlying Kernel Threads @@ -25252,7 +25294,7 @@ support this functionality when the parent contains more than one task. @geindex Forking a new process @node Ensuring Compliance with the Real-Time Annex,,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{3f9}@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{3fa} +@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{3fb}@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{3fc} @subsection Ensuring Compliance with the Real-Time Annex @@ -25301,7 +25343,7 @@ that were ready to execute in the priority queue where R has been placed at the end. @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{3fb}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{3fc} +@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{3fd}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{3fe} @section GNAT Implementation of Shared Passive Packages @@ -25402,7 +25444,7 @@ GNAT supports shared passive packages on all platforms except for OpenVMS. @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{3fd}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{3fe} +@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{3ff}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{400} @section Code Generation for Array Aggregates @@ -25433,7 +25475,7 @@ component values and static subtypes also lead to simpler code. @end menu @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{3ff}@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{400} +@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{401}@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{402} @subsection Static constant aggregates with static bounds @@ -25480,7 +25522,7 @@ Zero2: constant two_dim := (others => (others => 0)); @end example @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{401}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{402} +@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{403}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{404} @subsection Constant aggregates with unconstrained nominal types @@ -25495,7 +25537,7 @@ Cr_Unc : constant One_Unc := (12,24,36); @end example @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{403}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{404} +@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{405}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{406} @subsection Aggregates with static bounds @@ -25523,7 +25565,7 @@ end loop; @end example @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{405}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{406} +@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{407}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{408} @subsection Aggregates with nonstatic bounds @@ -25534,7 +25576,7 @@ have to be applied to sub-arrays individually, if they do not have statically compatible subtypes. @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{407}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{408} +@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{409}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{40a} @subsection Aggregates in assignment statements @@ -25576,7 +25618,7 @@ a temporary (created either by the front-end or the code generator) and then that temporary will be copied onto the target. @node The Size of Discriminated Records with Default Discriminants,Strict Conformance to the Ada Reference Manual,Code Generation for Array Aggregates,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{409}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{40a} +@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{40b}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{40c} @section The Size of Discriminated Records with Default Discriminants @@ -25656,7 +25698,7 @@ say) must be consistent, so it is imperative that the object, once created, remain invariant. @node Strict Conformance to the Ada Reference Manual,,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{40b}@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{40c} +@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{40d}@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{40e} @section Strict Conformance to the Ada Reference Manual @@ -25683,7 +25725,7 @@ behavior (although at the cost of a significant performance penalty), so infinite and NaN values are properly generated. @node Implementation of Ada 2012 Features,Obsolescent Features,Implementation of Specific Ada Features,Top -@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{40d}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{40e} +@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{40f}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{410} @chapter Implementation of Ada 2012 Features @@ -27849,7 +27891,7 @@ RM References: H.04 (8/1) @end itemize @node Obsolescent Features,Compatibility and Porting Guide,Implementation of Ada 2012 Features,Top -@anchor{gnat_rm/obsolescent_features id1}@anchor{40f}@anchor{gnat_rm/obsolescent_features doc}@anchor{410}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{15} +@anchor{gnat_rm/obsolescent_features id1}@anchor{411}@anchor{gnat_rm/obsolescent_features doc}@anchor{412}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{15} @chapter Obsolescent Features @@ -27868,7 +27910,7 @@ compatibility purposes. @end menu @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id2}@anchor{411}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{412} +@anchor{gnat_rm/obsolescent_features id2}@anchor{413}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{414} @section pragma No_Run_Time @@ -27881,7 +27923,7 @@ preferred usage is to use an appropriately configured run-time that includes just those features that are to be made accessible. @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id3}@anchor{413}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{414} +@anchor{gnat_rm/obsolescent_features id3}@anchor{415}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{416} @section pragma Ravenscar @@ -27890,7 +27932,7 @@ The pragma @cite{Ravenscar} has exactly the same effect as pragma is part of the new Ada 2005 standard. @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features -@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{415}@anchor{gnat_rm/obsolescent_features id4}@anchor{416} +@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{417}@anchor{gnat_rm/obsolescent_features id4}@anchor{418} @section pragma Restricted_Run_Time @@ -27900,7 +27942,7 @@ preferred since the Ada 2005 pragma @cite{Profile} is intended for this kind of implementation dependent addition. @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{417}@anchor{gnat_rm/obsolescent_features id5}@anchor{418} +@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{419}@anchor{gnat_rm/obsolescent_features id5}@anchor{41a} @section pragma Task_Info @@ -27926,7 +27968,7 @@ in the spec of package System.Task_Info in the runtime library. @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features -@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{419}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{41a} +@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{41b}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{41c} @section package System.Task_Info (@code{s-tasinf.ads}) @@ -27936,7 +27978,7 @@ to support the @cite{Task_Info} pragma. The predefined Ada package standard replacement for GNAT's @cite{Task_Info} functionality. @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{16}@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{41b}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{41c} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{16}@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{41d}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{41e} @chapter Compatibility and Porting Guide @@ -27958,7 +28000,7 @@ applications developed in other Ada environments. @end menu @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{41d}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{41e} +@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{41f}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{420} @section Writing Portable Fixed-Point Declarations @@ -28080,7 +28122,7 @@ If you follow this scheme you will be guaranteed that your fixed-point types will be portable. @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{41f}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{420} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{421}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{422} @section Compatibility with Ada 83 @@ -28108,7 +28150,7 @@ following subsections treat the most likely issues to be encountered. @end menu @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{421}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{422} +@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{423}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{424} @subsection Legal Ada 83 programs that are illegal in Ada 95 @@ -28208,7 +28250,7 @@ the fix is usually simply to add the @cite{(<>)} to the generic declaration. @end itemize @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{423}@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{424} +@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{425}@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{426} @subsection More deterministic semantics @@ -28236,7 +28278,7 @@ which open select branches are executed. @end itemize @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{425}@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{426} +@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{427}@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{428} @subsection Changed semantics @@ -28278,7 +28320,7 @@ covers only the restricted range. @end itemize @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{427}@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{428} +@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{429}@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{42a} @subsection Other language compatibility issues @@ -28311,7 +28353,7 @@ include @cite{pragma Interface} and the floating point type attributes @end itemize @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{429}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{42a} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{42b}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{42c} @section Compatibility between Ada 95 and Ada 2005 @@ -28383,7 +28425,7 @@ can declare a function returning a value from an anonymous access type. @end itemize @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{42b}@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{42c} +@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{42d}@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{42e} @section Implementation-dependent characteristics @@ -28406,7 +28448,7 @@ transition from certain Ada 83 compilers. @end menu @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{42d}@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{42e} +@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{42f}@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{430} @subsection Implementation-defined pragmas @@ -28428,7 +28470,7 @@ avoiding compiler rejection of units that contain such pragmas; they are not relevant in a GNAT context and hence are not otherwise implemented. @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{42f}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{430} +@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{431}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{432} @subsection Implementation-defined attributes @@ -28442,7 +28484,7 @@ Ada 83, GNAT supplies the attributes @cite{Bit}, @cite{Machine_Size} and @cite{Type_Class}. @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{431}@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{432} +@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{433}@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{434} @subsection Libraries @@ -28471,7 +28513,7 @@ be preferable to retrofit the application using modular types. @end itemize @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{433}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{434} +@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{435}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{436} @subsection Elaboration order @@ -28507,7 +28549,7 @@ pragmas either globally (as an effect of the @emph{-gnatE} switch) or locally @end itemize @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{435}@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{436} +@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{437}@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{438} @subsection Target-specific aspects @@ -28520,10 +28562,10 @@ on the robustness of the original design. Moreover, Ada 95 (and thus Ada 2005 and Ada 2012) are sometimes incompatible with typical Ada 83 compiler practices regarding implicit packing, the meaning of the Size attribute, and the size of access values. -GNAT's approach to these issues is described in @ref{437,,Representation Clauses}. +GNAT's approach to these issues is described in @ref{439,,Representation Clauses}. @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{438}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{439} +@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{43a}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{43b} @section Compatibility with Other Ada Systems @@ -28566,7 +28608,7 @@ far beyond this minimal set, as described in the next section. @end itemize @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{437}@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{43a} +@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{439}@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{43c} @section Representation Clauses @@ -28659,7 +28701,7 @@ with thin pointers. @end itemize @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{43b}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{43c} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{43d}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{43e} @section Compatibility with HP Ada 83 @@ -28689,7 +28731,7 @@ extension of package System. @end itemize @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top -@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{43d}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{43e} +@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{43f}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{440} @chapter GNU Free Documentation License diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 0074b1bc650..dc9c1418953 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -21,7 +21,7 @@ @copying @quotation -GNAT User's Guide for Native Platforms , April 21, 2016 +GNAT User's Guide for Native Platforms , July 04, 2016 AdaCore @@ -68,8 +68,6 @@ included in the section entitled @ref{1,,GNU Free Documentation License}. * Getting Started with GNAT:: * The GNAT Compilation Model:: * Building Executable Programs with GNAT:: -* GNAT Project Manager:: -* Tools Supporting Project Files:: * GNAT Utility Programs:: * GNAT and Program Execution:: * Platform-Specific Information:: @@ -310,108 +308,6 @@ Using the GNU make Utility * Generating the Command Line Switches:: * Overcoming Command Line Length Limits:: -GNAT Project Manager - -* Introduction:: -* Building With Projects:: -* Organizing Projects into Subsystems:: -* Scenarios in Projects:: -* Library Projects:: -* Project Extension:: -* Aggregate Projects:: -* Aggregate Library Projects:: -* Project File Reference:: - -Building With Projects - -* Source Files and Directories:: -* Duplicate Sources in Projects:: -* Object and Exec Directory:: -* Main Subprograms:: -* Tools Options in Project Files:: -* Compiling with Project Files:: -* Executable File Names:: -* Avoid Duplication With Variables:: -* Naming Schemes:: -* Installation:: -* Distributed support:: - -Organizing Projects into Subsystems - -* Project Dependencies:: -* Cyclic Project Dependencies:: -* Sharing Between Projects:: -* Global Attributes:: - -Library Projects - -* Building Libraries:: -* Using Library Projects:: -* Stand-alone Library Projects:: -* Installing a library with project files:: - -Project Extension - -* Project Hierarchy Extension:: - -Aggregate Projects - -* Building all main programs from a single project tree:: -* Building a set of projects with a single command:: -* Define a build environment:: -* Performance improvements in builder:: -* Syntax of aggregate projects:: -* package Builder in aggregate projects:: - -Aggregate Library Projects - -* Building aggregate library projects:: -* Syntax of aggregate library projects:: - -Project File Reference - -* Project Declaration:: -* Qualified Projects:: -* Declarations:: -* Packages:: -* Expressions:: -* External Values:: -* Typed String Declaration:: -* Variables:: -* Case Constructions:: -* Attributes:: - -Attributes - -* Project Level Attributes:: -* Package Binder Attributes:: -* Package Builder Attributes:: -* Package Clean Attributes:: -* Package Compiler Attributes:: -* Package Cross_Reference Attributes:: -* Package Finder Attributes:: -* Package gnatls Attributes:: -* Package IDE Attributes:: -* Package Install Attributes:: -* Package Linker Attributes:: -* Package Naming Attributes:: -* Package Remote Attributes:: -* Package Stack Attributes:: -* Package Synchronize Attributes:: - -Tools Supporting Project Files - -* gnatmake and Project Files:: -* The GNAT Driver and Project Files:: - -gnatmake and Project Files - -* Switches Related to Project Files:: -* Switches and Project Files:: -* Specifying Configuration Pragmas:: -* Project Files and Main Subprograms:: -* Library Project Files:: - GNAT Utility Programs * The File Cleanup Utility gnatclean:: @@ -568,6 +464,7 @@ Microsoft Windows Topics * Using a network installation of GNAT:: * CONSOLE and WINDOWS subsystems:: * Temporary Files:: +* Disabling Command Line Argument Expansion:: * Mixed-Language Programming on Windows:: * Windows Specific Add-Ons:: @@ -717,19 +614,11 @@ main GNAT tools to build executable programs, and it also gives examples of using the GNU make utility with GNAT. @item -@ref{b,,GNAT Project Manager} describes how to use project files -to organize large projects. - -@item -@ref{c,,Tools Supporting Project Files} described how to use the project -facility in conjunction with various GNAT tools. - -@item -@ref{d,,GNAT Utility Programs} explains the various utility programs that +@ref{b,,GNAT Utility Programs} explains the various utility programs that are included in the GNAT environment @item -@ref{e,,GNAT and Program Execution} covers a number of topics related to +@ref{c,,GNAT and Program Execution} covers a number of topics related to running, debugging, and tuning the performace of programs developed with GNAT @end itemize @@ -740,25 +629,25 @@ Appendices cover several additional topics: @itemize * @item -@ref{f,,Platform-Specific Information} describes the different run-time +@ref{d,,Platform-Specific Information} describes the different run-time library implementations and also presents information on how to use GNAT on several specific platforms @item -@ref{10,,Example of Binder Output File} shows the source code for the binder +@ref{e,,Example of Binder Output File} shows the source code for the binder output file for a sample program. @item -@ref{11,,Elaboration Order Handling in GNAT} describes how GNAT helps +@ref{f,,Elaboration Order Handling in GNAT} describes how GNAT helps you deal with elaboration order issues. @item -@ref{12,,Inline Assembler} shows how to use the inline assembly facility +@ref{10,,Inline Assembler} shows how to use the inline assembly facility in an Ada program. @end itemize @node What You Should Know before Reading This Guide,Related Information,What This Guide Contains,About This Guide -@anchor{gnat_ugn/about_this_guide what-you-should-know-before-reading-this-guide}@anchor{13} +@anchor{gnat_ugn/about_this_guide what-you-should-know-before-reading-this-guide}@anchor{11} @section What You Should Know before Reading This Guide @@ -775,7 +664,7 @@ Reference manuals for Ada 95, Ada 2005, and Ada 2012 are included in the GNAT documentation package. @node Related Information,A Note to Readers of Previous Versions of the Manual,What You Should Know before Reading This Guide,About This Guide -@anchor{gnat_ugn/about_this_guide related-information}@anchor{14} +@anchor{gnat_ugn/about_this_guide related-information}@anchor{12} @section Related Information @@ -813,7 +702,7 @@ environment Emacs. @end itemize @node A Note to Readers of Previous Versions of the Manual,Conventions,Related Information,About This Guide -@anchor{gnat_ugn/about_this_guide a-note-to-readers-of-previous-versions-of-the-manual}@anchor{15} +@anchor{gnat_ugn/about_this_guide a-note-to-readers-of-previous-versions-of-the-manual}@anchor{13} @section A Note to Readers of Previous Versions of the Manual @@ -838,20 +727,20 @@ the following material: The @cite{gnatname}, @cite{gnatkr}, and @cite{gnatchop} tools @item -@ref{16,,Configuration Pragmas} +@ref{14,,Configuration Pragmas} @item -@ref{17,,GNAT and Libraries} +@ref{15,,GNAT and Libraries} @item -@ref{18,,Conditional Compilation} including @ref{19,,Preprocessing with gnatprep} -and @ref{1a,,Integrated Preprocessing} +@ref{16,,Conditional Compilation} including @ref{17,,Preprocessing with gnatprep} +and @ref{18,,Integrated Preprocessing} @item -@ref{1b,,Generating Ada Bindings for C and C++ headers} +@ref{19,,Generating Ada Bindings for C and C++ headers} @item -@ref{1c,,Using GNAT Files with External Tools} +@ref{1a,,Using GNAT Files with External Tools} @end itemize @item @@ -862,23 +751,23 @@ the following content: @itemize - @item -@ref{1d,,Building with gnatmake} +@ref{1b,,Building with gnatmake} @item -@ref{1e,,Compiling with gcc} +@ref{1c,,Compiling with gcc} @item -@ref{1f,,Binding with gnatbind} +@ref{1d,,Binding with gnatbind} @item -@ref{20,,Linking with gnatlink} +@ref{1e,,Linking with gnatlink} @item -@ref{21,,Using the GNU make Utility} +@ref{1f,,Using the GNU make Utility} @end itemize @item -@ref{d,,GNAT Utility Programs} is a new chapter consolidating the information about several +@ref{b,,GNAT Utility Programs} is a new chapter consolidating the information about several GNAT tools: @@ -886,60 +775,60 @@ GNAT tools: @itemize - @item -@ref{22,,The File Cleanup Utility gnatclean} +@ref{20,,The File Cleanup Utility gnatclean} @item -@ref{23,,The GNAT Library Browser gnatls} +@ref{21,,The GNAT Library Browser gnatls} @item -@ref{24,,The Cross-Referencing Tools gnatxref and gnatfind} +@ref{22,,The Cross-Referencing Tools gnatxref and gnatfind} @item -@ref{25,,The Ada to HTML Converter gnathtml} +@ref{23,,The Ada to HTML Converter gnathtml} @end itemize @item -@ref{e,,GNAT and Program Execution} is a new chapter consolidating the following: +@ref{c,,GNAT and Program Execution} is a new chapter consolidating the following: @itemize - @item -@ref{26,,Running and Debugging Ada Programs} +@ref{24,,Running and Debugging Ada Programs} @item -@ref{27,,Code Coverage and Profiling} +@ref{25,,Code Coverage and Profiling} @item -@ref{28,,Improving Performance} +@ref{26,,Improving Performance} @item -@ref{29,,Overflow Check Handling in GNAT} +@ref{27,,Overflow Check Handling in GNAT} @item -@ref{2a,,Performing Dimensionality Analysis in GNAT} +@ref{28,,Performing Dimensionality Analysis in GNAT} @item -@ref{2b,,Stack Related Facilities} +@ref{29,,Stack Related Facilities} @item -@ref{2c,,Memory Management Issues} +@ref{2a,,Memory Management Issues} @end itemize @item -@ref{f,,Platform-Specific Information} is a new appendix consolidating the following: +@ref{d,,Platform-Specific Information} is a new appendix consolidating the following: @itemize - @item -@ref{2d,,Run-Time Libraries} +@ref{2b,,Run-Time Libraries} @item -@ref{2e,,Microsoft Windows Topics} +@ref{2c,,Microsoft Windows Topics} @item -@ref{2f,,Mac OS Topics} +@ref{2d,,Mac OS Topics} @end itemize @item @@ -950,7 +839,7 @@ a separate chapter in the @cite{GNAT User's Guide}. @end itemize @node Conventions,,A Note to Readers of Previous Versions of the Manual,About This Guide -@anchor{gnat_ugn/about_this_guide conventions}@anchor{30} +@anchor{gnat_ugn/about_this_guide conventions}@anchor{2e} @section Conventions @@ -1003,7 +892,7 @@ the '\' character should be used instead. @end itemize @node Getting Started with GNAT,The GNAT Compilation Model,About This Guide,Top -@anchor{gnat_ugn/getting_started_with_gnat getting-started-with-gnat}@anchor{8}@anchor{gnat_ugn/getting_started_with_gnat doc}@anchor{31}@anchor{gnat_ugn/getting_started_with_gnat id1}@anchor{32} +@anchor{gnat_ugn/getting_started_with_gnat getting-started-with-gnat}@anchor{8}@anchor{gnat_ugn/getting_started_with_gnat doc}@anchor{2f}@anchor{gnat_ugn/getting_started_with_gnat id1}@anchor{30} @chapter Getting Started with GNAT @@ -1026,7 +915,7 @@ For information on GPS please refer to @end menu @node Running GNAT,Running a Simple Ada Program,,Getting Started with GNAT -@anchor{gnat_ugn/getting_started_with_gnat running-gnat}@anchor{33}@anchor{gnat_ugn/getting_started_with_gnat id2}@anchor{34} +@anchor{gnat_ugn/getting_started_with_gnat running-gnat}@anchor{31}@anchor{gnat_ugn/getting_started_with_gnat id2}@anchor{32} @section Running GNAT @@ -1051,7 +940,7 @@ utility program that, given the name of the main program, automatically performs the necessary compilation, binding and linking steps. @node Running a Simple Ada Program,Running a Program with Multiple Units,Running GNAT,Getting Started with GNAT -@anchor{gnat_ugn/getting_started_with_gnat running-a-simple-ada-program}@anchor{35}@anchor{gnat_ugn/getting_started_with_gnat id3}@anchor{36} +@anchor{gnat_ugn/getting_started_with_gnat running-a-simple-ada-program}@anchor{33}@anchor{gnat_ugn/getting_started_with_gnat id3}@anchor{34} @section Running a Simple Ada Program @@ -1080,12 +969,12 @@ extension is @code{ads} for a spec and @code{adb} for a body. You can override this default file naming convention by use of the special pragma @cite{Source_File_Name} (for further information please -see @ref{37,,Using Other File Names}). +see @ref{35,,Using Other File Names}). Alternatively, if you want to rename your files according to this default convention, which is probably more convenient if you will be using GNAT for all your compilations, then the @cite{gnatchop} utility can be used to generate correctly-named source files -(see @ref{38,,Renaming Files with gnatchop}). +(see @ref{36,,Renaming Files with gnatchop}). You can compile the program using the following command (@cite{$} is used as the command prompt in the examples in this document): @@ -1156,7 +1045,7 @@ Hello WORLD! appear in response to this command. @node Running a Program with Multiple Units,Using the gnatmake Utility,Running a Simple Ada Program,Getting Started with GNAT -@anchor{gnat_ugn/getting_started_with_gnat id4}@anchor{39}@anchor{gnat_ugn/getting_started_with_gnat running-a-program-with-multiple-units}@anchor{3a} +@anchor{gnat_ugn/getting_started_with_gnat id4}@anchor{37}@anchor{gnat_ugn/getting_started_with_gnat running-a-program-with-multiple-units}@anchor{38} @section Running a Program with Multiple Units @@ -1245,7 +1134,7 @@ In the next section we discuss the advantages of using @emph{gnatmake} in more detail. @node Using the gnatmake Utility,,Running a Program with Multiple Units,Getting Started with GNAT -@anchor{gnat_ugn/getting_started_with_gnat using-the-gnatmake-utility}@anchor{3b}@anchor{gnat_ugn/getting_started_with_gnat id5}@anchor{3c} +@anchor{gnat_ugn/getting_started_with_gnat using-the-gnatmake-utility}@anchor{39}@anchor{gnat_ugn/getting_started_with_gnat id5}@anchor{3a} @section Using the @emph{gnatmake} Utility @@ -1298,7 +1187,7 @@ dependencies from scratch each time it is run. @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit @node The GNAT Compilation Model,Building Executable Programs with GNAT,Getting Started with GNAT,Top -@anchor{gnat_ugn/the_gnat_compilation_model doc}@anchor{3d}@anchor{gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model}@anchor{9}@anchor{gnat_ugn/the_gnat_compilation_model id1}@anchor{3e} +@anchor{gnat_ugn/the_gnat_compilation_model doc}@anchor{3b}@anchor{gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model}@anchor{9}@anchor{gnat_ugn/the_gnat_compilation_model id1}@anchor{3c} @chapter The GNAT Compilation Model @@ -1322,44 +1211,44 @@ Topics related to source file makeup and naming @itemize * @item -@ref{3f,,Source Representation} +@ref{3d,,Source Representation} @item -@ref{40,,Foreign Language Representation} +@ref{3e,,Foreign Language Representation} @item -@ref{41,,File Naming Topics and Utilities} +@ref{3f,,File Naming Topics and Utilities} @end itemize @item -@ref{16,,Configuration Pragmas} +@ref{14,,Configuration Pragmas} @item -@ref{42,,Generating Object Files} +@ref{40,,Generating Object Files} @item -@ref{43,,Source Dependencies} +@ref{41,,Source Dependencies} @item -@ref{44,,The Ada Library Information Files} +@ref{42,,The Ada Library Information Files} @item -@ref{45,,Binding an Ada Program} +@ref{43,,Binding an Ada Program} @item -@ref{17,,GNAT and Libraries} +@ref{15,,GNAT and Libraries} @item -@ref{18,,Conditional Compilation} +@ref{16,,Conditional Compilation} @item -@ref{46,,Mixed Language Programming} +@ref{44,,Mixed Language Programming} @item -@ref{47,,GNAT and Other Compilation Models} +@ref{45,,GNAT and Other Compilation Models} @item -@ref{1c,,Using GNAT Files with External Tools} +@ref{1a,,Using GNAT Files with External Tools} @end itemize @menu @@ -1380,7 +1269,7 @@ Topics related to source file makeup and naming @end menu @node Source Representation,Foreign Language Representation,,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model source-representation}@anchor{3f}@anchor{gnat_ugn/the_gnat_compilation_model id2}@anchor{48} +@anchor{gnat_ugn/the_gnat_compilation_model source-representation}@anchor{3d}@anchor{gnat_ugn/the_gnat_compilation_model id2}@anchor{46} @section Source Representation @@ -1395,7 +1284,7 @@ Topics related to source file makeup and naming Ada source programs are represented in standard text files, using Latin-1 coding. Latin-1 is an 8-bit code that includes the familiar 7-bit ASCII set, plus additional characters used for -representing foreign languages (see @ref{40,,Foreign Language Representation} +representing foreign languages (see @ref{3e,,Foreign Language Representation} for support of non-USA character sets). The format effector characters are represented using their standard ASCII encodings, as follows: @@ -1506,13 +1395,13 @@ compilation units) is represented using a sequence of files. Similarly, you will place each subunit or child unit in a separate file. @node Foreign Language Representation,File Naming Topics and Utilities,Source Representation,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model foreign-language-representation}@anchor{40}@anchor{gnat_ugn/the_gnat_compilation_model id3}@anchor{49} +@anchor{gnat_ugn/the_gnat_compilation_model foreign-language-representation}@anchor{3e}@anchor{gnat_ugn/the_gnat_compilation_model id3}@anchor{47} @section Foreign Language Representation GNAT supports the standard character sets defined in Ada as well as several other non-standard character sets for use in localized versions -of the compiler (@ref{4a,,Character Set Control}). +of the compiler (@ref{48,,Character Set Control}). @menu * Latin-1:: @@ -1523,7 +1412,7 @@ of the compiler (@ref{4a,,Character Set Control}). @end menu @node Latin-1,Other 8-Bit Codes,,Foreign Language Representation -@anchor{gnat_ugn/the_gnat_compilation_model id4}@anchor{4b}@anchor{gnat_ugn/the_gnat_compilation_model latin-1}@anchor{4c} +@anchor{gnat_ugn/the_gnat_compilation_model id4}@anchor{49}@anchor{gnat_ugn/the_gnat_compilation_model latin-1}@anchor{4a} @subsection Latin-1 @@ -1546,7 +1435,7 @@ string literals. In addition, the extended characters that represent letters can be used in identifiers. @node Other 8-Bit Codes,Wide_Character Encodings,Latin-1,Foreign Language Representation -@anchor{gnat_ugn/the_gnat_compilation_model other-8-bit-codes}@anchor{4d}@anchor{gnat_ugn/the_gnat_compilation_model id5}@anchor{4e} +@anchor{gnat_ugn/the_gnat_compilation_model other-8-bit-codes}@anchor{4b}@anchor{gnat_ugn/the_gnat_compilation_model id5}@anchor{4c} @subsection Other 8-Bit Codes @@ -1663,7 +1552,7 @@ the GNAT compiler sources. You will need to obtain a full source release of GNAT to obtain this file. @node Wide_Character Encodings,Wide_Wide_Character Encodings,Other 8-Bit Codes,Foreign Language Representation -@anchor{gnat_ugn/the_gnat_compilation_model id6}@anchor{4f}@anchor{gnat_ugn/the_gnat_compilation_model wide-character-encodings}@anchor{50} +@anchor{gnat_ugn/the_gnat_compilation_model id6}@anchor{4d}@anchor{gnat_ugn/the_gnat_compilation_model wide-character-encodings}@anchor{4e} @subsection Wide_Character Encodings @@ -1774,7 +1663,7 @@ use of the upper half of the Latin-1 set. @end cartouche @node Wide_Wide_Character Encodings,,Wide_Character Encodings,Foreign Language Representation -@anchor{gnat_ugn/the_gnat_compilation_model id7}@anchor{51}@anchor{gnat_ugn/the_gnat_compilation_model wide-wide-character-encodings}@anchor{52} +@anchor{gnat_ugn/the_gnat_compilation_model id7}@anchor{4f}@anchor{gnat_ugn/the_gnat_compilation_model wide-wide-character-encodings}@anchor{50} @subsection Wide_Wide_Character Encodings @@ -1826,7 +1715,7 @@ ACATS (Ada Conformity Assessment Test Suite) test suite distributions. @end table @node File Naming Topics and Utilities,Configuration Pragmas,Foreign Language Representation,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model id8}@anchor{53}@anchor{gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities}@anchor{41} +@anchor{gnat_ugn/the_gnat_compilation_model id8}@anchor{51}@anchor{gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities}@anchor{3f} @section File Naming Topics and Utilities @@ -1845,7 +1734,7 @@ source files correspond to the Ada compilation units that they contain. @end menu @node File Naming Rules,Using Other File Names,,File Naming Topics and Utilities -@anchor{gnat_ugn/the_gnat_compilation_model file-naming-rules}@anchor{54}@anchor{gnat_ugn/the_gnat_compilation_model id9}@anchor{55} +@anchor{gnat_ugn/the_gnat_compilation_model file-naming-rules}@anchor{52}@anchor{gnat_ugn/the_gnat_compilation_model id9}@anchor{53} @subsection File Naming Rules @@ -1954,7 +1843,7 @@ unit names are long (for example, if child units or subunits are heavily nested). An option is available to shorten such long file names (called file name 'krunching'). This may be particularly useful when programs being developed with GNAT are to be used on operating systems -with limited file name lengths. @ref{56,,Using gnatkr}. +with limited file name lengths. @ref{54,,Using gnatkr}. Of course, no file shortening algorithm can guarantee uniqueness over all possible unit names; if file name krunching is used, it is your @@ -1963,7 +1852,7 @@ can specify the exact file names that you want used, as described in the next section. Finally, if your Ada programs are migrating from a compiler with a different naming convention, you can use the gnatchop utility to produce source files that follow the GNAT naming conventions. -(For details see @ref{38,,Renaming Files with gnatchop}.) +(For details see @ref{36,,Renaming Files with gnatchop}.) Note: in the case of Windows or Mac OS operating systems, case is not significant. So for example on @cite{Windows} if the canonical name is @@ -1973,7 +1862,7 @@ if you want to use other than canonically cased file names on a Unix system, you need to follow the procedures described in the next section. @node Using Other File Names,Alternative File Naming Schemes,File Naming Rules,File Naming Topics and Utilities -@anchor{gnat_ugn/the_gnat_compilation_model id10}@anchor{57}@anchor{gnat_ugn/the_gnat_compilation_model using-other-file-names}@anchor{37} +@anchor{gnat_ugn/the_gnat_compilation_model id10}@anchor{55}@anchor{gnat_ugn/the_gnat_compilation_model using-other-file-names}@anchor{35} @subsection Using Other File Names @@ -2011,7 +1900,7 @@ normally it will be placed in the @code{gnat.adc} file used to hold configuration pragmas that apply to a complete compilation environment. For more details on how the @code{gnat.adc} file is created and used -see @ref{58,,Handling of Configuration Pragmas}. +see @ref{56,,Handling of Configuration Pragmas}. @geindex gnat.adc @@ -2033,7 +1922,7 @@ then it must be included in the @cite{gnatmake} command, it may not be omitted. @node Alternative File Naming Schemes,Handling Arbitrary File Naming Conventions with gnatname,Using Other File Names,File Naming Topics and Utilities -@anchor{gnat_ugn/the_gnat_compilation_model id11}@anchor{59}@anchor{gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes}@anchor{5a} +@anchor{gnat_ugn/the_gnat_compilation_model id11}@anchor{57}@anchor{gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes}@anchor{58} @subsection Alternative File Naming Schemes @@ -2177,7 +2066,7 @@ pragma Source_File_Name @geindex gnatname @node Handling Arbitrary File Naming Conventions with gnatname,File Name Krunching with gnatkr,Alternative File Naming Schemes,File Naming Topics and Utilities -@anchor{gnat_ugn/the_gnat_compilation_model handling-arbitrary-file-naming-conventions-with-gnatname}@anchor{5b}@anchor{gnat_ugn/the_gnat_compilation_model id12}@anchor{5c} +@anchor{gnat_ugn/the_gnat_compilation_model handling-arbitrary-file-naming-conventions-with-gnatname}@anchor{59}@anchor{gnat_ugn/the_gnat_compilation_model id12}@anchor{5a} @subsection Handling Arbitrary File Naming Conventions with @cite{gnatname} @@ -2192,7 +2081,7 @@ pragma Source_File_Name @end menu @node Arbitrary File Naming Conventions,Running gnatname,,Handling Arbitrary File Naming Conventions with gnatname -@anchor{gnat_ugn/the_gnat_compilation_model arbitrary-file-naming-conventions}@anchor{5d}@anchor{gnat_ugn/the_gnat_compilation_model id13}@anchor{5e} +@anchor{gnat_ugn/the_gnat_compilation_model arbitrary-file-naming-conventions}@anchor{5b}@anchor{gnat_ugn/the_gnat_compilation_model id13}@anchor{5c} @subsubsection Arbitrary File Naming Conventions @@ -2203,11 +2092,11 @@ does not need additional information. When the source file names do not follow the standard GNAT default file naming conventions, the GNAT compiler must be given additional information through -a configuration pragmas file (@ref{16,,Configuration Pragmas}) +a configuration pragmas file (@ref{14,,Configuration Pragmas}) or a project file. When the non-standard file naming conventions are well-defined, a small number of pragmas @cite{Source_File_Name} specifying a naming pattern -(@ref{5a,,Alternative File Naming Schemes}) may be sufficient. However, +(@ref{58,,Alternative File Naming Schemes}) may be sufficient. However, if the file naming conventions are irregular or arbitrary, a number of pragma @cite{Source_File_Name} for individual compilation units must be defined. @@ -2217,7 +2106,7 @@ GNAT provides a tool @cite{gnatname} to generate the required pragmas for a set of files. @node Running gnatname,Switches for gnatname,Arbitrary File Naming Conventions,Handling Arbitrary File Naming Conventions with gnatname -@anchor{gnat_ugn/the_gnat_compilation_model running-gnatname}@anchor{5f}@anchor{gnat_ugn/the_gnat_compilation_model id14}@anchor{60} +@anchor{gnat_ugn/the_gnat_compilation_model running-gnatname}@anchor{5d}@anchor{gnat_ugn/the_gnat_compilation_model id14}@anchor{5e} @subsubsection Running @cite{gnatname} @@ -2268,7 +2157,7 @@ with pragmas @cite{Source_File_Name} for each file that contains a valid Ada unit. @node Switches for gnatname,Examples of gnatname Usage,Running gnatname,Handling Arbitrary File Naming Conventions with gnatname -@anchor{gnat_ugn/the_gnat_compilation_model id15}@anchor{61}@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatname}@anchor{62} +@anchor{gnat_ugn/the_gnat_compilation_model id15}@anchor{5f}@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatname}@anchor{60} @subsubsection Switches for @cite{gnatname} @@ -2451,7 +2340,7 @@ except those whose names end with @code{_nt.ada}. @end table @node Examples of gnatname Usage,,Switches for gnatname,Handling Arbitrary File Naming Conventions with gnatname -@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatname-usage}@anchor{63}@anchor{gnat_ugn/the_gnat_compilation_model id16}@anchor{64} +@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatname-usage}@anchor{61}@anchor{gnat_ugn/the_gnat_compilation_model id16}@anchor{62} @subsubsection Examples of @cite{gnatname} Usage @@ -2477,13 +2366,13 @@ even in conjunction with one or several switches are used in this example. @node File Name Krunching with gnatkr,Renaming Files with gnatchop,Handling Arbitrary File Naming Conventions with gnatname,File Naming Topics and Utilities -@anchor{gnat_ugn/the_gnat_compilation_model file-name-krunching-with-gnatkr}@anchor{65}@anchor{gnat_ugn/the_gnat_compilation_model id17}@anchor{66} +@anchor{gnat_ugn/the_gnat_compilation_model file-name-krunching-with-gnatkr}@anchor{63}@anchor{gnat_ugn/the_gnat_compilation_model id17}@anchor{64} @subsection File Name Krunching with @cite{gnatkr} @geindex gnatkr -This chapter discusses the method used by the compiler to shorten +This section discusses the method used by the compiler to shorten the default file names chosen for Ada units so that they do not exceed the maximum length permitted. It also describes the @cite{gnatkr} utility that can be used to determine the result of @@ -2498,7 +2387,7 @@ applying this shortening. @end menu @node About gnatkr,Using gnatkr,,File Name Krunching with gnatkr -@anchor{gnat_ugn/the_gnat_compilation_model id18}@anchor{67}@anchor{gnat_ugn/the_gnat_compilation_model about-gnatkr}@anchor{68} +@anchor{gnat_ugn/the_gnat_compilation_model id18}@anchor{65}@anchor{gnat_ugn/the_gnat_compilation_model about-gnatkr}@anchor{66} @subsubsection About @cite{gnatkr} @@ -2536,7 +2425,7 @@ The @cite{gnatkr} utility can be used to determine the krunched name for a given file, when krunched to a specified maximum length. @node Using gnatkr,Krunching Method,About gnatkr,File Name Krunching with gnatkr -@anchor{gnat_ugn/the_gnat_compilation_model id19}@anchor{69}@anchor{gnat_ugn/the_gnat_compilation_model using-gnatkr}@anchor{56} +@anchor{gnat_ugn/the_gnat_compilation_model id19}@anchor{67}@anchor{gnat_ugn/the_gnat_compilation_model using-gnatkr}@anchor{54} @subsubsection Using @cite{gnatkr} @@ -2573,7 +2462,7 @@ The output is the krunched name. The output has an extension only if the original argument was a file name with an extension. @node Krunching Method,Examples of gnatkr Usage,Using gnatkr,File Name Krunching with gnatkr -@anchor{gnat_ugn/the_gnat_compilation_model id20}@anchor{6a}@anchor{gnat_ugn/the_gnat_compilation_model krunching-method}@anchor{6b} +@anchor{gnat_ugn/the_gnat_compilation_model id20}@anchor{68}@anchor{gnat_ugn/the_gnat_compilation_model krunching-method}@anchor{69} @subsubsection Krunching Method @@ -2703,7 +2592,7 @@ program @cite{gnatkr} is supplied for conveniently determining the krunched name of a file. @node Examples of gnatkr Usage,,Krunching Method,File Name Krunching with gnatkr -@anchor{gnat_ugn/the_gnat_compilation_model id21}@anchor{6c}@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage}@anchor{6d} +@anchor{gnat_ugn/the_gnat_compilation_model id21}@anchor{6a}@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage}@anchor{6b} @subsubsection Examples of @cite{gnatkr} Usage @@ -2717,13 +2606,13 @@ $ gnatkr very_long_unit_name.ads/count=0 --> very_long_unit_name.ads @end example @node Renaming Files with gnatchop,,File Name Krunching with gnatkr,File Naming Topics and Utilities -@anchor{gnat_ugn/the_gnat_compilation_model id22}@anchor{6e}@anchor{gnat_ugn/the_gnat_compilation_model renaming-files-with-gnatchop}@anchor{38} +@anchor{gnat_ugn/the_gnat_compilation_model id22}@anchor{6c}@anchor{gnat_ugn/the_gnat_compilation_model renaming-files-with-gnatchop}@anchor{36} @subsection Renaming Files with @cite{gnatchop} @geindex gnatchop -This chapter discusses how to handle files with multiple units by using +This section discusses how to handle files with multiple units by using the @cite{gnatchop} utility. This utility is also useful in renaming files to meet the standard GNAT default file naming conventions. @@ -2737,7 +2626,7 @@ files to meet the standard GNAT default file naming conventions. @end menu @node Handling Files with Multiple Units,Operating gnatchop in Compilation Mode,,Renaming Files with gnatchop -@anchor{gnat_ugn/the_gnat_compilation_model id23}@anchor{6f}@anchor{gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units}@anchor{70} +@anchor{gnat_ugn/the_gnat_compilation_model id23}@anchor{6d}@anchor{gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units}@anchor{6e} @subsubsection Handling Files with Multiple Units @@ -2769,7 +2658,7 @@ will each start with a copy of this BOM, meaning that they can be compiled automatically in UTF-8 mode without needing to specify an explicit encoding. @node Operating gnatchop in Compilation Mode,Command Line for gnatchop,Handling Files with Multiple Units,Renaming Files with gnatchop -@anchor{gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode}@anchor{71}@anchor{gnat_ugn/the_gnat_compilation_model id24}@anchor{72} +@anchor{gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode}@anchor{6f}@anchor{gnat_ugn/the_gnat_compilation_model id24}@anchor{70} @subsubsection Operating gnatchop in Compilation Mode @@ -2802,7 +2691,7 @@ should apply to all subsequent compilations in the same compilation environment. Using GNAT, the current directory, possibly containing a @code{gnat.adc} file is the representation of a compilation environment. For more information on the -@code{gnat.adc} file, see @ref{58,,Handling of Configuration Pragmas}. +@code{gnat.adc} file, see @ref{56,,Handling of Configuration Pragmas}. Second, in compilation mode, if @cite{gnatchop} is given a file that starts with @@ -2829,7 +2718,7 @@ switch provides the required behavior, and is for example the mode in which GNAT processes the ACVC tests. @node Command Line for gnatchop,Switches for gnatchop,Operating gnatchop in Compilation Mode,Renaming Files with gnatchop -@anchor{gnat_ugn/the_gnat_compilation_model id25}@anchor{73}@anchor{gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop}@anchor{74} +@anchor{gnat_ugn/the_gnat_compilation_model id25}@anchor{71}@anchor{gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop}@anchor{72} @subsubsection Command Line for @cite{gnatchop} @@ -2903,7 +2792,7 @@ no source files written @end example @node Switches for gnatchop,Examples of gnatchop Usage,Command Line for gnatchop,Renaming Files with gnatchop -@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatchop}@anchor{75}@anchor{gnat_ugn/the_gnat_compilation_model id26}@anchor{76} +@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatchop}@anchor{73}@anchor{gnat_ugn/the_gnat_compilation_model id26}@anchor{74} @subsubsection Switches for @cite{gnatchop} @@ -3069,7 +2958,7 @@ no attempt is made to add the prefix to the GNAT parser executable. @end table @node Examples of gnatchop Usage,,Switches for gnatchop,Renaming Files with gnatchop -@anchor{gnat_ugn/the_gnat_compilation_model id27}@anchor{77}@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage}@anchor{78} +@anchor{gnat_ugn/the_gnat_compilation_model id27}@anchor{75}@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage}@anchor{76} @subsubsection Examples of @cite{gnatchop} Usage @@ -3110,7 +2999,7 @@ be the one that is output, and earlier duplicate occurrences for a given unit will be skipped. @node Configuration Pragmas,Generating Object Files,File Naming Topics and Utilities,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model id28}@anchor{79}@anchor{gnat_ugn/the_gnat_compilation_model configuration-pragmas}@anchor{16} +@anchor{gnat_ugn/the_gnat_compilation_model id28}@anchor{77}@anchor{gnat_ugn/the_gnat_compilation_model configuration-pragmas}@anchor{14} @section Configuration Pragmas @@ -3206,7 +3095,7 @@ Wide_Character_Encoding @end menu @node Handling of Configuration Pragmas,The Configuration Pragmas Files,,Configuration Pragmas -@anchor{gnat_ugn/the_gnat_compilation_model id29}@anchor{7a}@anchor{gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas}@anchor{58} +@anchor{gnat_ugn/the_gnat_compilation_model id29}@anchor{78}@anchor{gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas}@anchor{56} @subsection Handling of Configuration Pragmas @@ -3217,7 +3106,7 @@ all compilations performed in a given compilation environment. GNAT also provides the @cite{gnatchop} utility to provide an automatic way to handle configuration pragmas following the semantics for compilations (that is, files with multiple units), described in the RM. -See @ref{71,,Operating gnatchop in Compilation Mode} for details. +See @ref{6f,,Operating gnatchop in Compilation Mode} for details. However, for most purposes, it will be more convenient to edit the @code{gnat.adc} file that contains configuration pragmas directly, as described in the following section. @@ -3247,7 +3136,7 @@ relevant units). It can appear on a subunit only if it has previously appeared in the body of spec. @node The Configuration Pragmas Files,,Handling of Configuration Pragmas,Configuration Pragmas -@anchor{gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files}@anchor{7b}@anchor{gnat_ugn/the_gnat_compilation_model id30}@anchor{7c} +@anchor{gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files}@anchor{79}@anchor{gnat_ugn/the_gnat_compilation_model id30}@anchor{7a} @subsection The Configuration Pragmas Files @@ -3288,11 +3177,13 @@ depend on a file that no longer exists. Such tools include @emph{gprbuild}, @emph{gnatmake}, and @emph{gnatcheck}. If you are using project file, a separate mechanism is provided using -project attributes, see @ref{7d,,Specifying Configuration Pragmas} for more -details. +project attributes. + +@c --Comment: +@c See :ref:`Specifying_Configuration_Pragmas` for more details. @node Generating Object Files,Source Dependencies,Configuration Pragmas,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model generating-object-files}@anchor{42}@anchor{gnat_ugn/the_gnat_compilation_model id31}@anchor{7e} +@anchor{gnat_ugn/the_gnat_compilation_model generating-object-files}@anchor{40}@anchor{gnat_ugn/the_gnat_compilation_model id31}@anchor{7b} @section Generating Object Files @@ -3363,7 +3254,7 @@ part of the process of building a program. To compile a file in this checking mode, use the @emph{-gnatc} switch. @node Source Dependencies,The Ada Library Information Files,Generating Object Files,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model id32}@anchor{7f}@anchor{gnat_ugn/the_gnat_compilation_model source-dependencies}@anchor{43} +@anchor{gnat_ugn/the_gnat_compilation_model id32}@anchor{7c}@anchor{gnat_ugn/the_gnat_compilation_model source-dependencies}@anchor{41} @section Source Dependencies @@ -3458,7 +3349,7 @@ recompilations is done automatically when one uses @emph{gnatmake}. @end itemize @node The Ada Library Information Files,Binding an Ada Program,Source Dependencies,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model id33}@anchor{80}@anchor{gnat_ugn/the_gnat_compilation_model the-ada-library-information-files}@anchor{44} +@anchor{gnat_ugn/the_gnat_compilation_model id33}@anchor{7d}@anchor{gnat_ugn/the_gnat_compilation_model the-ada-library-information-files}@anchor{42} @section The Ada Library Information Files @@ -3526,7 +3417,7 @@ see the source of the body of unit @cite{Lib.Writ}, contained in file @code{lib-writ.adb} in the GNAT compiler sources. @node Binding an Ada Program,GNAT and Libraries,The Ada Library Information Files,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model id34}@anchor{81}@anchor{gnat_ugn/the_gnat_compilation_model binding-an-ada-program}@anchor{45} +@anchor{gnat_ugn/the_gnat_compilation_model id34}@anchor{7e}@anchor{gnat_ugn/the_gnat_compilation_model binding-an-ada-program}@anchor{43} @section Binding an Ada Program @@ -3562,16 +3453,16 @@ using the object from the main program from the bind step as well as the object files for the Ada units of the program. @node GNAT and Libraries,Conditional Compilation,Binding an Ada Program,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model gnat-and-libraries}@anchor{17}@anchor{gnat_ugn/the_gnat_compilation_model id35}@anchor{82} +@anchor{gnat_ugn/the_gnat_compilation_model gnat-and-libraries}@anchor{15}@anchor{gnat_ugn/the_gnat_compilation_model id35}@anchor{7f} @section GNAT and Libraries @geindex Library building and using -This chapter describes how to build and use libraries with GNAT, and also shows +This section describes how to build and use libraries with GNAT, and also shows how to recompile the GNAT run-time library. You should be familiar with the -Project Manager facility (@ref{b,,GNAT Project Manager}) before reading this -chapter. +Project Manager facility (see the @emph{GNAT_Project_Manager} chapter of the +@emph{GPRbuild User's Guide}) before reading this chapter. @menu * Introduction to Libraries in GNAT:: @@ -3582,7 +3473,7 @@ chapter. @end menu @node Introduction to Libraries in GNAT,General Ada Libraries,,GNAT and Libraries -@anchor{gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat}@anchor{83}@anchor{gnat_ugn/the_gnat_compilation_model id36}@anchor{84} +@anchor{gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat}@anchor{80}@anchor{gnat_ugn/the_gnat_compilation_model id36}@anchor{81} @subsection Introduction to Libraries in GNAT @@ -3609,7 +3500,7 @@ In the GNAT environment, a library has three types of components: Source files, @item -@code{ALI} files (see @ref{44,,The Ada Library Information Files}), and +@code{ALI} files (see @ref{42,,The Ada Library Information Files}), and @item Object files, an archive or a shared library. @@ -3621,7 +3512,7 @@ an external user to make use of the library. That is to say, the specs reflecting the library services along with all the units needed to compile those specs, which can include generic bodies or any body implementing an inlined routine. In the case of @emph{stand-alone libraries} those exposed -units are called @emph{interface units} (@ref{85,,Stand-alone Ada Libraries}). +units are called @emph{interface units} (@ref{82,,Stand-alone Ada Libraries}). All compilation units comprising an application, including those in a library, need to be elaborated in an order partially defined by Ada's semantics. GNAT @@ -3632,7 +3523,7 @@ library elaboration routine is produced independently of the application(s) using the library. @node General Ada Libraries,Stand-alone Ada Libraries,Introduction to Libraries in GNAT,GNAT and Libraries -@anchor{gnat_ugn/the_gnat_compilation_model general-ada-libraries}@anchor{86}@anchor{gnat_ugn/the_gnat_compilation_model id37}@anchor{87} +@anchor{gnat_ugn/the_gnat_compilation_model general-ada-libraries}@anchor{83}@anchor{gnat_ugn/the_gnat_compilation_model id37}@anchor{84} @subsection General Ada Libraries @@ -3644,13 +3535,14 @@ using the library. @end menu @node Building a library,Installing a library,,General Ada Libraries -@anchor{gnat_ugn/the_gnat_compilation_model building-a-library}@anchor{88}@anchor{gnat_ugn/the_gnat_compilation_model id38}@anchor{89} +@anchor{gnat_ugn/the_gnat_compilation_model building-a-library}@anchor{85}@anchor{gnat_ugn/the_gnat_compilation_model id38}@anchor{86} @subsubsection Building a library The easiest way to build a library is to use the Project Manager, which supports a special type of project called a @emph{Library Project} -(see @ref{8a,,Library Projects}). +(see the @emph{Library Projects} section in the @emph{GNAT Project Manager} +chapter of the @emph{GPRbuild User's Guide}). A project is considered a library project, when two project-level attributes are defined in it: @cite{Library_Name} and @cite{Library_Dir}. In order to @@ -3725,7 +3617,7 @@ for this task. In special cases where this is not desired, the necessary steps are discussed below. There are various possibilities for compiling the units that make up the -library: for example with a Makefile (@ref{21,,Using the GNU make Utility}) or +library: for example with a Makefile (@ref{1f,,Using the GNU make Utility}) or with a conventional script. For simple libraries, it is also possible to create a dummy main program which depends upon all the packages that comprise the interface of the library. This dummy main program can then be given to @@ -3776,7 +3668,7 @@ or @code{lib@emph{xxx}.so} (or @code{lib@emph{xxx}.dll} on Windows) in order to be accessed by the directive @code{-l@emph{xxx}} at link time. @node Installing a library,Using a library,Building a library,General Ada Libraries -@anchor{gnat_ugn/the_gnat_compilation_model installing-a-library}@anchor{8b}@anchor{gnat_ugn/the_gnat_compilation_model id39}@anchor{8c} +@anchor{gnat_ugn/the_gnat_compilation_model installing-a-library}@anchor{87}@anchor{gnat_ugn/the_gnat_compilation_model id39}@anchor{88} @subsubsection Installing a library @@ -3785,12 +3677,13 @@ be accessed by the directive @code{-l@emph{xxx}} at link time. @geindex GPR_PROJECT_PATH If you use project files, library installation is part of the library build -process (@ref{8d,,Installing a library with project files}). +process (see the @emph{Installing a Library with Project Files} section of the +@emph{GNAT Project Manager} chapter of the @emph{GPRbuild User's Guide}). When project files are not an option, it is also possible, but not recommended, to install the library so that the sources needed to use the library are on the Ada source path and the ALI files & libraries be on the Ada Object path (see -@ref{8e,,Search Paths and the Run-Time Library (RTL)}. Alternatively, the system +@ref{89,,Search Paths and the Run-Time Library (RTL)}. Alternatively, the system administrator can place general-purpose libraries in the default compiler paths, by specifying the libraries' location in the configuration files @code{ada_source_path} and @code{ada_object_path}. These configuration files @@ -3832,7 +3725,7 @@ library must be installed before the GNAT library if it redefines any part of it. @node Using a library,,Installing a library,General Ada Libraries -@anchor{gnat_ugn/the_gnat_compilation_model using-a-library}@anchor{8f}@anchor{gnat_ugn/the_gnat_compilation_model id40}@anchor{90} +@anchor{gnat_ugn/the_gnat_compilation_model using-a-library}@anchor{8a}@anchor{gnat_ugn/the_gnat_compilation_model id40}@anchor{8b} @subsubsection Using a library @@ -3871,8 +3764,8 @@ left to the tools having visibility over project dependence information. In order to use an Ada library manually, you need to make sure that this library is on both your source and object path -(see @ref{8e,,Search Paths and the Run-Time Library (RTL)} -and @ref{91,,Search Paths for gnatbind}). Furthermore, when the objects are grouped +(see @ref{89,,Search Paths and the Run-Time Library (RTL)} +and @ref{8c,,Search Paths for gnatbind}). Furthermore, when the objects are grouped in an archive or a shared library, you need to specify the desired library at link time. @@ -3926,7 +3819,7 @@ in the directory @code{share/examples/gnat/plugins} within the GNAT install area. @node Stand-alone Ada Libraries,Rebuilding the GNAT Run-Time Library,General Ada Libraries,GNAT and Libraries -@anchor{gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries}@anchor{85}@anchor{gnat_ugn/the_gnat_compilation_model id41}@anchor{92} +@anchor{gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries}@anchor{82}@anchor{gnat_ugn/the_gnat_compilation_model id41}@anchor{8d} @subsection Stand-alone Ada Libraries @@ -3941,7 +3834,7 @@ install area. @end menu @node Introduction to Stand-alone Libraries,Building a Stand-alone Library,,Stand-alone Ada Libraries -@anchor{gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries}@anchor{93}@anchor{gnat_ugn/the_gnat_compilation_model id42}@anchor{94} +@anchor{gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries}@anchor{8e}@anchor{gnat_ugn/the_gnat_compilation_model id42}@anchor{8f} @subsubsection Introduction to Stand-alone Libraries @@ -3976,16 +3869,18 @@ Stand-alone libraries are also well suited to be used in an executable whose main routine is not written in Ada. @node Building a Stand-alone Library,Creating a Stand-alone Library to be used in a non-Ada context,Introduction to Stand-alone Libraries,Stand-alone Ada Libraries -@anchor{gnat_ugn/the_gnat_compilation_model id43}@anchor{95}@anchor{gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library}@anchor{96} +@anchor{gnat_ugn/the_gnat_compilation_model id43}@anchor{90}@anchor{gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library}@anchor{91} @subsubsection Building a Stand-alone Library GNAT's Project facility provides a simple way of building and installing -stand-alone libraries; see @ref{97,,Stand-alone Library Projects}. +stand-alone libraries; see the @emph{Stand-alone Library Projects} section +in the @emph{GNAT Project Manager} chapter of the @emph{GPRbuild User's Guide}. To be a Stand-alone Library Project, in addition to the two attributes that make a project a Library Project (@cite{Library_Name} and -@cite{Library_Dir}; see @ref{8a,,Library Projects}), the attribute -@cite{Library_Interface} must be defined. For example: +@cite{Library_Dir}; see the @emph{Library Projects} section in the +@emph{GNAT Project Manager} chapter of the @emph{GPRbuild User's Guide}), +the attribute @cite{Library_Interface} must be defined. For example: @example for Library_Dir use "lib_dir"; @@ -4093,10 +3988,10 @@ read-only. @end itemize Using SALs is not different from using other libraries -(see @ref{8f,,Using a library}). +(see @ref{8a,,Using a library}). @node Creating a Stand-alone Library to be used in a non-Ada context,Restrictions in Stand-alone Libraries,Building a Stand-alone Library,Stand-alone Ada Libraries -@anchor{gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context}@anchor{98}@anchor{gnat_ugn/the_gnat_compilation_model id44}@anchor{99} +@anchor{gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context}@anchor{92}@anchor{gnat_ugn/the_gnat_compilation_model id44}@anchor{93} @subsubsection Creating a Stand-alone Library to be used in a non-Ada context @@ -4181,7 +4076,7 @@ must be ensured at the application level using a specific operating system services like a mutex or a critical-section. @node Restrictions in Stand-alone Libraries,,Creating a Stand-alone Library to be used in a non-Ada context,Stand-alone Ada Libraries -@anchor{gnat_ugn/the_gnat_compilation_model id45}@anchor{9a}@anchor{gnat_ugn/the_gnat_compilation_model restrictions-in-stand-alone-libraries}@anchor{9b} +@anchor{gnat_ugn/the_gnat_compilation_model id45}@anchor{94}@anchor{gnat_ugn/the_gnat_compilation_model restrictions-in-stand-alone-libraries}@anchor{95} @subsubsection Restrictions in Stand-alone Libraries @@ -4227,7 +4122,7 @@ In practice these attributes are rarely used, so this is unlikely to be a consideration. @node Rebuilding the GNAT Run-Time Library,,Stand-alone Ada Libraries,GNAT and Libraries -@anchor{gnat_ugn/the_gnat_compilation_model id46}@anchor{9c}@anchor{gnat_ugn/the_gnat_compilation_model rebuilding-the-gnat-run-time-library}@anchor{9d} +@anchor{gnat_ugn/the_gnat_compilation_model id46}@anchor{96}@anchor{gnat_ugn/the_gnat_compilation_model rebuilding-the-gnat-run-time-library}@anchor{97} @subsection Rebuilding the GNAT Run-Time Library @@ -4261,7 +4156,7 @@ to use it. @geindex Conditional compilation @node Conditional Compilation,Mixed Language Programming,GNAT and Libraries,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model id47}@anchor{9e}@anchor{gnat_ugn/the_gnat_compilation_model conditional-compilation}@anchor{18} +@anchor{gnat_ugn/the_gnat_compilation_model id47}@anchor{98}@anchor{gnat_ugn/the_gnat_compilation_model conditional-compilation}@anchor{16} @section Conditional Compilation @@ -4278,7 +4173,7 @@ gnatprep preprocessor utility. @end menu @node Modeling Conditional Compilation in Ada,Preprocessing with gnatprep,,Conditional Compilation -@anchor{gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada}@anchor{9f}@anchor{gnat_ugn/the_gnat_compilation_model id48}@anchor{a0} +@anchor{gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada}@anchor{99}@anchor{gnat_ugn/the_gnat_compilation_model id48}@anchor{9a} @subsection Modeling Conditional Compilation in Ada @@ -4329,7 +4224,7 @@ be achieved using Ada in general, and GNAT in particular. @end menu @node Use of Boolean Constants,Debugging - A Special Case,,Modeling Conditional Compilation in Ada -@anchor{gnat_ugn/the_gnat_compilation_model id49}@anchor{a1}@anchor{gnat_ugn/the_gnat_compilation_model use-of-boolean-constants}@anchor{a2} +@anchor{gnat_ugn/the_gnat_compilation_model id49}@anchor{9b}@anchor{gnat_ugn/the_gnat_compilation_model use-of-boolean-constants}@anchor{9c} @subsubsection Use of Boolean Constants @@ -4373,7 +4268,7 @@ Then any other unit requiring conditional compilation can do a @emph{with} of @cite{Config} to make the constants visible. @node Debugging - A Special Case,Conditionalizing Declarations,Use of Boolean Constants,Modeling Conditional Compilation in Ada -@anchor{gnat_ugn/the_gnat_compilation_model debugging-a-special-case}@anchor{a3}@anchor{gnat_ugn/the_gnat_compilation_model id50}@anchor{a4} +@anchor{gnat_ugn/the_gnat_compilation_model debugging-a-special-case}@anchor{9d}@anchor{gnat_ugn/the_gnat_compilation_model id50}@anchor{9e} @subsubsection Debugging - A Special Case @@ -4486,7 +4381,7 @@ end if; @end example @node Conditionalizing Declarations,Use of Alternative Implementations,Debugging - A Special Case,Modeling Conditional Compilation in Ada -@anchor{gnat_ugn/the_gnat_compilation_model conditionalizing-declarations}@anchor{a5}@anchor{gnat_ugn/the_gnat_compilation_model id51}@anchor{a6} +@anchor{gnat_ugn/the_gnat_compilation_model conditionalizing-declarations}@anchor{9f}@anchor{gnat_ugn/the_gnat_compilation_model id51}@anchor{a0} @subsubsection Conditionalizing Declarations @@ -4551,7 +4446,7 @@ constant was introduced as @cite{System.Default_Bit_Order}, so you do not need to define this one yourself). @node Use of Alternative Implementations,Preprocessing,Conditionalizing Declarations,Modeling Conditional Compilation in Ada -@anchor{gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations}@anchor{a7}@anchor{gnat_ugn/the_gnat_compilation_model id52}@anchor{a8} +@anchor{gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations}@anchor{a1}@anchor{gnat_ugn/the_gnat_compilation_model id52}@anchor{a2} @subsubsection Use of Alternative Implementations @@ -4685,7 +4580,7 @@ The same idea can also be implemented using tagged types and dispatching calls. @node Preprocessing,,Use of Alternative Implementations,Modeling Conditional Compilation in Ada -@anchor{gnat_ugn/the_gnat_compilation_model preprocessing}@anchor{a9}@anchor{gnat_ugn/the_gnat_compilation_model id53}@anchor{aa} +@anchor{gnat_ugn/the_gnat_compilation_model preprocessing}@anchor{a3}@anchor{gnat_ugn/the_gnat_compilation_model id53}@anchor{a4} @subsubsection Preprocessing @@ -4708,7 +4603,7 @@ The preprocessor may be used in two separate modes. It can be used quite separately from the compiler, to generate a separate output source file that is then fed to the compiler as a separate step. This is the @cite{gnatprep} utility, whose use is fully described in -@ref{19,,Preprocessing with gnatprep}. +@ref{17,,Preprocessing with gnatprep}. The preprocessing language allows such constructs as @@ -4728,10 +4623,10 @@ often more convenient. In this approach the preprocessing is integrated into the compilation process. The compiler is fed the preprocessor input which includes @cite{#if} lines etc, and then the compiler carries out the preprocessing internally and processes the resulting output. -For more details on this approach, see @ref{1a,,Integrated Preprocessing}. +For more details on this approach, see @ref{18,,Integrated Preprocessing}. @node Preprocessing with gnatprep,Integrated Preprocessing,Modeling Conditional Compilation in Ada,Conditional Compilation -@anchor{gnat_ugn/the_gnat_compilation_model id54}@anchor{ab}@anchor{gnat_ugn/the_gnat_compilation_model preprocessing-with-gnatprep}@anchor{19} +@anchor{gnat_ugn/the_gnat_compilation_model id54}@anchor{a5}@anchor{gnat_ugn/the_gnat_compilation_model preprocessing-with-gnatprep}@anchor{17} @subsection Preprocessing with @cite{gnatprep} @@ -4744,7 +4639,7 @@ preprocessing. Although designed for use with GNAT, @cite{gnatprep} does not depend on any special GNAT features. For further discussion of conditional compilation in general, see -@ref{18,,Conditional Compilation}. +@ref{16,,Conditional Compilation}. @menu * Preprocessing Symbols:: @@ -4756,7 +4651,7 @@ For further discussion of conditional compilation in general, see @end menu @node Preprocessing Symbols,Using gnatprep,,Preprocessing with gnatprep -@anchor{gnat_ugn/the_gnat_compilation_model id55}@anchor{ac}@anchor{gnat_ugn/the_gnat_compilation_model preprocessing-symbols}@anchor{ad} +@anchor{gnat_ugn/the_gnat_compilation_model id55}@anchor{a6}@anchor{gnat_ugn/the_gnat_compilation_model preprocessing-symbols}@anchor{a7} @subsubsection Preprocessing Symbols @@ -4766,7 +4661,7 @@ normal Ada (case-insensitive) rules for its syntax, with the restriction that all characters need to be in the ASCII set (no accented letters). @node Using gnatprep,Switches for gnatprep,Preprocessing Symbols,Preprocessing with gnatprep -@anchor{gnat_ugn/the_gnat_compilation_model using-gnatprep}@anchor{ae}@anchor{gnat_ugn/the_gnat_compilation_model id56}@anchor{af} +@anchor{gnat_ugn/the_gnat_compilation_model using-gnatprep}@anchor{a8}@anchor{gnat_ugn/the_gnat_compilation_model id56}@anchor{a9} @subsubsection Using @cite{gnatprep} @@ -4824,7 +4719,7 @@ optional, and can be replaced by the use of the @emph{-D} switch. @end itemize @node Switches for gnatprep,Form of Definitions File,Using gnatprep,Preprocessing with gnatprep -@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatprep}@anchor{b0}@anchor{gnat_ugn/the_gnat_compilation_model id57}@anchor{b1} +@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatprep}@anchor{aa}@anchor{gnat_ugn/the_gnat_compilation_model id57}@anchor{ab} @subsubsection Switches for @cite{gnatprep} @@ -4975,7 +4870,7 @@ deleted lines are completely removed from the output, unless -r is specified, in which case -b is assumed. @node Form of Definitions File,Form of Input Text for gnatprep,Switches for gnatprep,Preprocessing with gnatprep -@anchor{gnat_ugn/the_gnat_compilation_model form-of-definitions-file}@anchor{b2}@anchor{gnat_ugn/the_gnat_compilation_model id58}@anchor{b3} +@anchor{gnat_ugn/the_gnat_compilation_model form-of-definitions-file}@anchor{ac}@anchor{gnat_ugn/the_gnat_compilation_model id58}@anchor{ad} @subsubsection Form of Definitions File @@ -5005,7 +4900,7 @@ the usual @code{--}, and comments may be added to the definitions lines. @node Form of Input Text for gnatprep,,Form of Definitions File,Preprocessing with gnatprep -@anchor{gnat_ugn/the_gnat_compilation_model id59}@anchor{b4}@anchor{gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep}@anchor{b5} +@anchor{gnat_ugn/the_gnat_compilation_model id59}@anchor{ae}@anchor{gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep}@anchor{af} @subsubsection Form of Input Text for @cite{gnatprep} @@ -5137,7 +5032,7 @@ Header : String := $XYZ; and then the substitution will occur as desired. @node Integrated Preprocessing,,Preprocessing with gnatprep,Conditional Compilation -@anchor{gnat_ugn/the_gnat_compilation_model id60}@anchor{b6}@anchor{gnat_ugn/the_gnat_compilation_model integrated-preprocessing}@anchor{1a} +@anchor{gnat_ugn/the_gnat_compilation_model id60}@anchor{b0}@anchor{gnat_ugn/the_gnat_compilation_model integrated-preprocessing}@anchor{18} @subsection Integrated Preprocessing @@ -5168,7 +5063,7 @@ because @emph{gnatmake} cannot compute the checksum of the source after preprocessing. The actual preprocessing function is described in detail in section -@ref{19,,Preprocessing with gnatprep}. This section only describes how integrated +@ref{17,,Preprocessing with gnatprep}. This section only describes how integrated preprocessing is triggered and parameterized. @geindex -gnatep (gcc) @@ -5207,7 +5102,7 @@ lines starting with the character '*'. After the file name or the character '*', another optional literal string indicating the file name of the definition file to be used for preprocessing -(@ref{b2,,Form of Definitions File}). The definition files are found by the +(@ref{ac,,Form of Definitions File}). The definition files are found by the compiler in one of the source directories. In some cases, when compiling a source in a directory other than the current directory, if the definition file is in the current directory, it may be necessary to add the current @@ -5310,7 +5205,7 @@ the source text, write the result of this preprocessing into a file @end table @node Mixed Language Programming,GNAT and Other Compilation Models,Conditional Compilation,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model mixed-language-programming}@anchor{46}@anchor{gnat_ugn/the_gnat_compilation_model id61}@anchor{b7} +@anchor{gnat_ugn/the_gnat_compilation_model mixed-language-programming}@anchor{44}@anchor{gnat_ugn/the_gnat_compilation_model id61}@anchor{b1} @section Mixed Language Programming @@ -5329,7 +5224,7 @@ with a focus on combining Ada with C or C++. @end menu @node Interfacing to C,Calling Conventions,,Mixed Language Programming -@anchor{gnat_ugn/the_gnat_compilation_model interfacing-to-c}@anchor{b8}@anchor{gnat_ugn/the_gnat_compilation_model id62}@anchor{b9} +@anchor{gnat_ugn/the_gnat_compilation_model interfacing-to-c}@anchor{b2}@anchor{gnat_ugn/the_gnat_compilation_model id62}@anchor{b3} @subsection Interfacing to C @@ -5440,7 +5335,7 @@ $ gnatmake my_main.adb -largs file1.o file2.o If the main program is in a language other than Ada, then you may have more than one entry point into the Ada subsystem. You must use a special binder option to generate callable routines that initialize and -finalize the Ada units (@ref{ba,,Binding with Non-Ada Main Programs}). +finalize the Ada units (@ref{b4,,Binding with Non-Ada Main Programs}). Calls to the initialization and finalization routines must be inserted in the main program, or some other appropriate point in the code. The call to initialize the Ada units must occur before the first Ada @@ -5556,7 +5451,7 @@ GNAT linker not to include the standard startup objects by passing the @code{-nostartfiles} switch to @cite{gnatlink}. @node Calling Conventions,Building Mixed Ada and C++ Programs,Interfacing to C,Mixed Language Programming -@anchor{gnat_ugn/the_gnat_compilation_model calling-conventions}@anchor{bb}@anchor{gnat_ugn/the_gnat_compilation_model id63}@anchor{bc} +@anchor{gnat_ugn/the_gnat_compilation_model calling-conventions}@anchor{b5}@anchor{gnat_ugn/the_gnat_compilation_model id63}@anchor{b6} @subsection Calling Conventions @@ -5880,7 +5775,7 @@ identifier (for example in an @cite{Import} pragma) with the same meaning as Fortran. @node Building Mixed Ada and C++ Programs,Generating Ada Bindings for C and C++ headers,Calling Conventions,Mixed Language Programming -@anchor{gnat_ugn/the_gnat_compilation_model id64}@anchor{bd}@anchor{gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs}@anchor{be} +@anchor{gnat_ugn/the_gnat_compilation_model id64}@anchor{b7}@anchor{gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs}@anchor{b8} @subsection Building Mixed Ada and C++ Programs @@ -5898,7 +5793,7 @@ challenge. This section gives a few hints that should make this task easier. @end menu @node Interfacing to C++,Linking a Mixed C++ & Ada Program,,Building Mixed Ada and C++ Programs -@anchor{gnat_ugn/the_gnat_compilation_model id65}@anchor{bf}@anchor{gnat_ugn/the_gnat_compilation_model id66}@anchor{c0} +@anchor{gnat_ugn/the_gnat_compilation_model id65}@anchor{b9}@anchor{gnat_ugn/the_gnat_compilation_model id66}@anchor{ba} @subsubsection Interfacing to C++ @@ -5910,7 +5805,7 @@ Interfacing can be done at 3 levels: simple data, subprograms, and classes. In the first two cases, GNAT offers a specific @cite{Convention C_Plus_Plus} (or @cite{CPP}) that behaves exactly like @cite{Convention C}. Usually, C++ mangles the names of subprograms. To generate proper mangled -names automatically, see @ref{1b,,Generating Ada Bindings for C and C++ headers}). +names automatically, see @ref{19,,Generating Ada Bindings for C and C++ headers}). This problem can also be addressed manually in two ways: @@ -5929,7 +5824,7 @@ Interfacing at the class level can be achieved by using the GNAT specific pragmas such as @cite{CPP_Constructor}. See the @cite{GNAT_Reference_Manual} for additional information. @node Linking a Mixed C++ & Ada Program,A Simple Example,Interfacing to C++,Building Mixed Ada and C++ Programs -@anchor{gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-ada-program}@anchor{c1}@anchor{gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-and-ada-program}@anchor{c2} +@anchor{gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-ada-program}@anchor{bb}@anchor{gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-and-ada-program}@anchor{bc} @subsubsection Linking a Mixed C++ & Ada Program @@ -6044,7 +5939,7 @@ which has a large knowledge base and knows how to link Ada and C++ code together automatically in most cases. @node A Simple Example,Interfacing with C++ constructors,Linking a Mixed C++ & Ada Program,Building Mixed Ada and C++ Programs -@anchor{gnat_ugn/the_gnat_compilation_model id67}@anchor{c3}@anchor{gnat_ugn/the_gnat_compilation_model a-simple-example}@anchor{c4} +@anchor{gnat_ugn/the_gnat_compilation_model id67}@anchor{bd}@anchor{gnat_ugn/the_gnat_compilation_model a-simple-example}@anchor{be} @subsubsection A Simple Example @@ -6173,7 +6068,7 @@ end Simple_Cpp_Interface; @end example @node Interfacing with C++ constructors,Interfacing with C++ at the Class Level,A Simple Example,Building Mixed Ada and C++ Programs -@anchor{gnat_ugn/the_gnat_compilation_model id68}@anchor{c5}@anchor{gnat_ugn/the_gnat_compilation_model interfacing-with-c-constructors}@anchor{c6} +@anchor{gnat_ugn/the_gnat_compilation_model id68}@anchor{bf}@anchor{gnat_ugn/the_gnat_compilation_model interfacing-with-c-constructors}@anchor{c0} @subsubsection Interfacing with C++ constructors @@ -6200,8 +6095,8 @@ public: For this purpose we can write the following package spec (further information on how to build this spec is available in -@ref{c7,,Interfacing with C++ at the Class Level} and -@ref{1b,,Generating Ada Bindings for C and C++ headers}). +@ref{c1,,Interfacing with C++ at the Class Level} and +@ref{19,,Generating Ada Bindings for C and C++ headers}). @example with Interfaces.C; use Interfaces.C; @@ -6370,7 +6265,7 @@ by means of a limited aggregate. Any further action associated with the constructor can be placed inside the construct. @node Interfacing with C++ at the Class Level,,Interfacing with C++ constructors,Building Mixed Ada and C++ Programs -@anchor{gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level}@anchor{c7}@anchor{gnat_ugn/the_gnat_compilation_model id69}@anchor{c8} +@anchor{gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level}@anchor{c1}@anchor{gnat_ugn/the_gnat_compilation_model id69}@anchor{c2} @subsubsection Interfacing with C++ at the Class Level @@ -6616,7 +6511,7 @@ int main () @end example @node Generating Ada Bindings for C and C++ headers,Generating C Headers for Ada Specifications,Building Mixed Ada and C++ Programs,Mixed Language Programming -@anchor{gnat_ugn/the_gnat_compilation_model id70}@anchor{c9}@anchor{gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers}@anchor{1b} +@anchor{gnat_ugn/the_gnat_compilation_model id70}@anchor{c3}@anchor{gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers}@anchor{19} @subsection Generating Ada Bindings for C and C++ headers @@ -6666,7 +6561,7 @@ easier to interface with other languages than previous versions of Ada. @end menu @node Running the Binding Generator,Generating Bindings for C++ Headers,,Generating Ada Bindings for C and C++ headers -@anchor{gnat_ugn/the_gnat_compilation_model id71}@anchor{ca}@anchor{gnat_ugn/the_gnat_compilation_model running-the-binding-generator}@anchor{cb} +@anchor{gnat_ugn/the_gnat_compilation_model id71}@anchor{c4}@anchor{gnat_ugn/the_gnat_compilation_model running-the-binding-generator}@anchor{c5} @subsubsection Running the Binding Generator @@ -6760,7 +6655,7 @@ $ g++ -c -fdump-ada-spec readline1.h @end example @node Generating Bindings for C++ Headers,Switches,Running the Binding Generator,Generating Ada Bindings for C and C++ headers -@anchor{gnat_ugn/the_gnat_compilation_model id72}@anchor{cc}@anchor{gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers}@anchor{cd} +@anchor{gnat_ugn/the_gnat_compilation_model id72}@anchor{c6}@anchor{gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers}@anchor{c7} @subsubsection Generating Bindings for C++ Headers @@ -6861,7 +6756,7 @@ use Class_Dog; @end example @node Switches,,Generating Bindings for C++ Headers,Generating Ada Bindings for C and C++ headers -@anchor{gnat_ugn/the_gnat_compilation_model switches}@anchor{ce}@anchor{gnat_ugn/the_gnat_compilation_model switches-for-ada-binding-generation}@anchor{cf} +@anchor{gnat_ugn/the_gnat_compilation_model switches}@anchor{c8}@anchor{gnat_ugn/the_gnat_compilation_model switches-for-ada-binding-generation}@anchor{c9} @subsubsection Switches @@ -6909,7 +6804,7 @@ Extract comments from headers and generate Ada comments in the Ada spec files. @end table @node Generating C Headers for Ada Specifications,,Generating Ada Bindings for C and C++ headers,Mixed Language Programming -@anchor{gnat_ugn/the_gnat_compilation_model generating-c-headers-for-ada-specifications}@anchor{d0}@anchor{gnat_ugn/the_gnat_compilation_model id73}@anchor{d1} +@anchor{gnat_ugn/the_gnat_compilation_model generating-c-headers-for-ada-specifications}@anchor{ca}@anchor{gnat_ugn/the_gnat_compilation_model id73}@anchor{cb} @subsection Generating C Headers for Ada Specifications @@ -6952,7 +6847,7 @@ Subprogram declarations @end menu @node Running the C Header Generator,,,Generating C Headers for Ada Specifications -@anchor{gnat_ugn/the_gnat_compilation_model running-the-c-header-generator}@anchor{d2} +@anchor{gnat_ugn/the_gnat_compilation_model running-the-c-header-generator}@anchor{cc} @subsubsection Running the C Header Generator @@ -7020,7 +6915,7 @@ You can then @cite{include} @code{pack1.h} from a C source file and use the type call subprograms, reference objects, and constants. @node GNAT and Other Compilation Models,Using GNAT Files with External Tools,Mixed Language Programming,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model id74}@anchor{d3}@anchor{gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models}@anchor{47} +@anchor{gnat_ugn/the_gnat_compilation_model id74}@anchor{cd}@anchor{gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models}@anchor{45} @section GNAT and Other Compilation Models @@ -7036,7 +6931,7 @@ used for Ada 83. @end menu @node Comparison between GNAT and C/C++ Compilation Models,Comparison between GNAT and Conventional Ada Library Models,,GNAT and Other Compilation Models -@anchor{gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-c-c-compilation-models}@anchor{d4}@anchor{gnat_ugn/the_gnat_compilation_model id75}@anchor{d5} +@anchor{gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-c-c-compilation-models}@anchor{ce}@anchor{gnat_ugn/the_gnat_compilation_model id75}@anchor{cf} @subsection Comparison between GNAT and C/C++ Compilation Models @@ -7070,7 +6965,7 @@ elaboration, a C++ compiler would simply construct a program that malfunctioned at run time. @node Comparison between GNAT and Conventional Ada Library Models,,Comparison between GNAT and C/C++ Compilation Models,GNAT and Other Compilation Models -@anchor{gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-conventional-ada-library-models}@anchor{d6}@anchor{gnat_ugn/the_gnat_compilation_model id76}@anchor{d7} +@anchor{gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-conventional-ada-library-models}@anchor{d0}@anchor{gnat_ugn/the_gnat_compilation_model id76}@anchor{d1} @subsection Comparison between GNAT and Conventional Ada Library Models @@ -7138,7 +7033,7 @@ of rules saying what source files must be present when a file is compiled. @node Using GNAT Files with External Tools,,GNAT and Other Compilation Models,The GNAT Compilation Model -@anchor{gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools}@anchor{1c}@anchor{gnat_ugn/the_gnat_compilation_model id77}@anchor{d8} +@anchor{gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools}@anchor{1a}@anchor{gnat_ugn/the_gnat_compilation_model id77}@anchor{d2} @section Using GNAT Files with External Tools @@ -7152,7 +7047,7 @@ used with tools designed for other languages. @end menu @node Using Other Utility Programs with GNAT,The External Symbol Naming Scheme of GNAT,,Using GNAT Files with External Tools -@anchor{gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat}@anchor{d9}@anchor{gnat_ugn/the_gnat_compilation_model id78}@anchor{da} +@anchor{gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat}@anchor{d3}@anchor{gnat_ugn/the_gnat_compilation_model id78}@anchor{d4} @subsection Using Other Utility Programs with GNAT @@ -7167,7 +7062,7 @@ gprof (a profiling program), gdb (the FSF debugger), and utilities such as Purify. @node The External Symbol Naming Scheme of GNAT,,Using Other Utility Programs with GNAT,Using GNAT Files with External Tools -@anchor{gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat}@anchor{db}@anchor{gnat_ugn/the_gnat_compilation_model id79}@anchor{dc} +@anchor{gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat}@anchor{d5}@anchor{gnat_ugn/the_gnat_compilation_model id79}@anchor{d6} @subsection The External Symbol Naming Scheme of GNAT @@ -7225,24 +7120,25 @@ the external name of this procedure will be @cite{_ada_hello}. @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit -@node Building Executable Programs with GNAT,GNAT Project Manager,The GNAT Compilation Model,Top -@anchor{gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat}@anchor{a}@anchor{gnat_ugn/building_executable_programs_with_gnat doc}@anchor{dd}@anchor{gnat_ugn/building_executable_programs_with_gnat id1}@anchor{de} +@node Building Executable Programs with GNAT,GNAT Utility Programs,The GNAT Compilation Model,Top +@anchor{gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat}@anchor{a}@anchor{gnat_ugn/building_executable_programs_with_gnat doc}@anchor{d7}@anchor{gnat_ugn/building_executable_programs_with_gnat id1}@anchor{d8} @chapter Building Executable Programs with GNAT This chapter describes first the gnatmake tool -(@ref{1d,,Building with gnatmake}), +(@ref{1b,,Building with gnatmake}), which automatically determines the set of sources needed by an Ada compilation unit and executes the necessary (re)compilations, binding and linking. It also explains how to use each tool individually: the -compiler (gcc, see @ref{1e,,Compiling with gcc}), -binder (gnatbind, see @ref{1f,,Binding with gnatbind}), -and linker (gnatlink, see @ref{20,,Linking with gnatlink}) +compiler (gcc, see @ref{1c,,Compiling with gcc}), +binder (gnatbind, see @ref{1d,,Binding with gnatbind}), +and linker (gnatlink, see @ref{1e,,Linking with gnatlink}) to build executable programs. Finally, this chapter provides examples of how to make use of the general GNU make mechanism -in a GNAT context (see @ref{21,,Using the GNU make Utility}). +in a GNAT context (see @ref{1f,,Using the GNU make Utility}). + @menu * Building with gnatmake:: @@ -7255,7 +7151,7 @@ in a GNAT context (see @ref{21,,Using the GNU make Utility}). @end menu @node Building with gnatmake,Compiling with gcc,,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake}@anchor{1d}@anchor{gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake}@anchor{df} +@anchor{gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake}@anchor{1b}@anchor{gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake}@anchor{d9} @section Building with @emph{gnatmake} @@ -7302,8 +7198,9 @@ changes to the source program cause corresponding changes in dependencies, they will always be tracked exactly correctly by @emph{gnatmake}. -Note that for advanced description of project structure, we recommend creating -a project file as explained in @ref{b,,GNAT Project Manager} and use the +Note that for advanced forms of project structure, we recommend creating +a project file as explained in the @emph{GNAT_Project_Manager} chapter in the +@emph{GPRbuild User's Guide}, and using the @emph{gprbuild} tool which supports building with project files and works similarly to @emph{gnatmake}. @@ -7318,7 +7215,7 @@ to @emph{gnatmake}. @end menu @node Running gnatmake,Switches for gnatmake,,Building with gnatmake -@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatmake}@anchor{e0}@anchor{gnat_ugn/building_executable_programs_with_gnat id2}@anchor{e1} +@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatmake}@anchor{da}@anchor{gnat_ugn/building_executable_programs_with_gnat id2}@anchor{db} @subsection Running @emph{gnatmake} @@ -7346,14 +7243,14 @@ be searched for in the specified directory only. Otherwise, the input source file will first be searched in the directory where @emph{gnatmake} was invoked and if it is not found, it will be search on the source path of the compiler as described in -@ref{8e,,Search Paths and the Run-Time Library (RTL)}. +@ref{89,,Search Paths and the Run-Time Library (RTL)}. All @emph{gnatmake} output (except when you specify @emph{-M}) is sent to @code{stderr}. The output produced by the @emph{-M} switch is sent to @code{stdout}. @node Switches for gnatmake,Mode Switches for gnatmake,Running gnatmake,Building with gnatmake -@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake}@anchor{e2}@anchor{gnat_ugn/building_executable_programs_with_gnat id3}@anchor{e3} +@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake}@anchor{dc}@anchor{gnat_ugn/building_executable_programs_with_gnat id3}@anchor{dd} @subsection Switches for @emph{gnatmake} @@ -7727,7 +7624,7 @@ then instead object files and ALI files that already exist are overwritten in place. This means that once a large project is organized into separate directories in the desired manner, then @emph{gnatmake} will automatically maintain and update this organization. If no ALI files are found on the -Ada object path (see @ref{8e,,Search Paths and the Run-Time Library (RTL)}), +Ada object path (see @ref{89,,Search Paths and the Run-Time Library (RTL)}), the new object and ALI files are created in the directory containing the source being compiled. If another organization is desired, where objects and sources are kept in different directories, @@ -7888,9 +7785,11 @@ Same as @code{--create-missing-dirs} @item @code{-P@emph{project}} Use project file @cite{project}. Only one such switch can be used. -@ref{e4,,gnatmake and Project Files}. @end table +@c -- Comment: +@c :ref:`gnatmake_and_Project_Files`. + @geindex -q (gnatmake) @@ -7929,10 +7828,12 @@ This switch is recommended when Integrated Preprocessing is used. Unique. Recompile at most the main files. It implies -c. Combined with -f, it is equivalent to calling the compiler directly. Note that using --u with a project file and no main has a special meaning -(@ref{e5,,Project Files and Main Subprograms}). +-u with a project file and no main has a special meaning. @end table +@c --Comment: +@c (See :ref:`Project_Files_and_Main_Subprograms`.) + @geindex -U (gnatmake) @@ -7989,7 +7890,7 @@ Verbosity level High. Equivalent to -v. @item @code{-vP@emph{x}} Indicate the verbosity of the parsing of GNAT project files. -See @ref{e6,,Switches Related to Project Files}. +See @ref{de,,Switches Related to Project Files}. @end table @geindex -x (gnatmake) @@ -8013,7 +7914,7 @@ command line need to be sources of a project file. Indicate that external variable @cite{name} has the value @cite{value}. The Project Manager will use this value for occurrences of @cite{external(name)} when parsing the project file. -@ref{e6,,Switches Related to Project Files}. +@ref{de,,Switches Related to Project Files}. @end table @geindex -z (gnatmake) @@ -8047,7 +7948,7 @@ is passed to @emph{gcc} (e.g., @emph{-O}, @emph{-gnato,} etc.) When looking for source files also look in directory @cite{dir}. The order in which source files search is undertaken is -described in @ref{8e,,Search Paths and the Run-Time Library (RTL)}. +described in @ref{89,,Search Paths and the Run-Time Library (RTL)}. @end table @geindex -aL (gnatmake) @@ -8079,7 +7980,7 @@ ALI files. When searching for library and object files, look in directory @cite{dir}. The order in which library files are searched is described in -@ref{91,,Search Paths for gnatbind}. +@ref{8c,,Search Paths for gnatbind}. @end table @geindex Search paths @@ -8184,7 +8085,7 @@ The selected path is handled like a normal RTS path. @end table @node Mode Switches for gnatmake,Notes on the Command Line,Switches for gnatmake,Building with gnatmake -@anchor{gnat_ugn/building_executable_programs_with_gnat id4}@anchor{e7}@anchor{gnat_ugn/building_executable_programs_with_gnat mode-switches-for-gnatmake}@anchor{e8} +@anchor{gnat_ugn/building_executable_programs_with_gnat id4}@anchor{df}@anchor{gnat_ugn/building_executable_programs_with_gnat mode-switches-for-gnatmake}@anchor{e0} @subsection Mode Switches for @emph{gnatmake} @@ -8244,7 +8145,7 @@ or @emph{-largs}. @end table @node Notes on the Command Line,How gnatmake Works,Mode Switches for gnatmake,Building with gnatmake -@anchor{gnat_ugn/building_executable_programs_with_gnat id5}@anchor{e9}@anchor{gnat_ugn/building_executable_programs_with_gnat notes-on-the-command-line}@anchor{ea} +@anchor{gnat_ugn/building_executable_programs_with_gnat id5}@anchor{e1}@anchor{gnat_ugn/building_executable_programs_with_gnat notes-on-the-command-line}@anchor{e2} @subsection Notes on the Command Line @@ -8314,7 +8215,7 @@ that the debugging information may be out of date. @end itemize @node How gnatmake Works,Examples of gnatmake Usage,Notes on the Command Line,Building with gnatmake -@anchor{gnat_ugn/building_executable_programs_with_gnat id6}@anchor{eb}@anchor{gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works}@anchor{ec} +@anchor{gnat_ugn/building_executable_programs_with_gnat id6}@anchor{e3}@anchor{gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works}@anchor{e4} @subsection How @emph{gnatmake} Works @@ -8354,14 +8255,14 @@ When invoking @emph{gnatmake} with several @cite{file_names}, if a unit is imported by several of the executables, it will be recompiled at most once. Note: when using non-standard naming conventions -(@ref{37,,Using Other File Names}), changing through a configuration pragmas +(@ref{35,,Using Other File Names}), changing through a configuration pragmas file the version of a source and invoking @emph{gnatmake} to recompile may have no effect, if the previous version of the source is still accessible by @emph{gnatmake}. It may be necessary to use the switch -f. @node Examples of gnatmake Usage,,How gnatmake Works,Building with gnatmake -@anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatmake-usage}@anchor{ed}@anchor{gnat_ugn/building_executable_programs_with_gnat id7}@anchor{ee} +@anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatmake-usage}@anchor{e5}@anchor{gnat_ugn/building_executable_programs_with_gnat id7}@anchor{e6} @subsection Examples of @emph{gnatmake} Usage @@ -8393,7 +8294,7 @@ displaying commands it is executing. @end table @node Compiling with gcc,Compiler Switches,Building with gnatmake,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-with-gcc}@anchor{1e}@anchor{gnat_ugn/building_executable_programs_with_gnat id8}@anchor{ef} +@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-with-gcc}@anchor{1c}@anchor{gnat_ugn/building_executable_programs_with_gnat id8}@anchor{e7} @section Compiling with @emph{gcc} @@ -8410,7 +8311,7 @@ that can be used to control the behavior of the compiler. @end menu @node Compiling Programs,Search Paths and the Run-Time Library RTL,,Compiling with gcc -@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-programs}@anchor{f0}@anchor{gnat_ugn/building_executable_programs_with_gnat id9}@anchor{f1} +@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-programs}@anchor{e8}@anchor{gnat_ugn/building_executable_programs_with_gnat id9}@anchor{e9} @subsection Compiling Programs @@ -8521,11 +8422,11 @@ calls @cite{gnat1} (the Ada compiler) twice to compile @code{x.adb} and The compiler generates two object files @code{x.o} and @code{y.o} and the two ALI files @code{x.ali} and @code{y.ali}. -Any switches apply to all the files listed, see @ref{f2,,Compiler Switches} for a +Any switches apply to all the files listed, see @ref{ea,,Compiler Switches} for a list of available @emph{gcc} switches. @node Search Paths and the Run-Time Library RTL,Order of Compilation Issues,Compiling Programs,Compiling with gcc -@anchor{gnat_ugn/building_executable_programs_with_gnat id10}@anchor{f3}@anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-and-the-run-time-library-rtl}@anchor{8e} +@anchor{gnat_ugn/building_executable_programs_with_gnat id10}@anchor{eb}@anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-and-the-run-time-library-rtl}@anchor{89} @subsection Search Paths and the Run-Time Library (RTL) @@ -8582,7 +8483,7 @@ names separated by colons (semicolons when working with the NT version). The content of the @code{ada_source_path} file which is part of the GNAT installation tree and is used to store standard libraries such as the GNAT Run Time Library (RTL) source files. -@ref{8b,,Installing a library} +@ref{87,,Installing a library} @end itemize Specifying the switch @emph{-I-} @@ -8624,7 +8525,7 @@ in compiling sources from multiple directories. This can make development environments much more flexible. @node Order of Compilation Issues,Examples,Search Paths and the Run-Time Library RTL,Compiling with gcc -@anchor{gnat_ugn/building_executable_programs_with_gnat id11}@anchor{f4}@anchor{gnat_ugn/building_executable_programs_with_gnat order-of-compilation-issues}@anchor{f5} +@anchor{gnat_ugn/building_executable_programs_with_gnat id11}@anchor{ec}@anchor{gnat_ugn/building_executable_programs_with_gnat order-of-compilation-issues}@anchor{ed} @subsection Order of Compilation Issues @@ -8652,7 +8553,7 @@ source files on which it depends. @item There is no library as such, apart from the ALI files -(@ref{44,,The Ada Library Information Files}, for information on the format +(@ref{42,,The Ada Library Information Files}, for information on the format of these files). For now we find it convenient to create separate ALI files, but eventually the information therein may be incorporated into the object file directly. @@ -8665,7 +8566,7 @@ described above), or you will receive a fatal error message. @end itemize @node Examples,,Order of Compilation Issues,Compiling with gcc -@anchor{gnat_ugn/building_executable_programs_with_gnat id12}@anchor{f6}@anchor{gnat_ugn/building_executable_programs_with_gnat examples}@anchor{f7} +@anchor{gnat_ugn/building_executable_programs_with_gnat id12}@anchor{ee}@anchor{gnat_ugn/building_executable_programs_with_gnat examples}@anchor{ef} @subsection Examples @@ -8693,7 +8594,7 @@ Compile the subunit in file @code{abc-def.adb} in semantic-checking-only mode. @node Compiler Switches,Binding with gnatbind,Compiling with gcc,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat compiler-switches}@anchor{f8}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gcc}@anchor{f2} +@anchor{gnat_ugn/building_executable_programs_with_gnat compiler-switches}@anchor{f0}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gcc}@anchor{ea} @section Compiler Switches @@ -8732,7 +8633,7 @@ compilation units. @end menu @node Alphabetical List of All Switches,Output and Error Message Control,,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id13}@anchor{f9}@anchor{gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches}@anchor{fa} +@anchor{gnat_ugn/building_executable_programs_with_gnat id13}@anchor{f1}@anchor{gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches}@anchor{f2} @subsection Alphabetical List of All Switches @@ -8918,7 +8819,7 @@ and thus producing inferior code. Causes the compiler to avoid assumptions regarding non-aliasing of objects of different types. See -@ref{fb,,Optimization and Strict Aliasing} for details. +@ref{f3,,Optimization and Strict Aliasing} for details. @end table @geindex -fno-strict-overflow (gcc) @@ -8944,7 +8845,7 @@ for very peculiar cases of low-level programming. @item @code{-fstack-check} Activates stack checking. -See @ref{fc,,Stack Overflow Checking} for details. +See @ref{f4,,Stack Overflow Checking} for details. @end table @geindex -fstack-usage (gcc) @@ -8955,7 +8856,7 @@ See @ref{fc,,Stack Overflow Checking} for details. @item @code{-fstack-usage} Makes the compiler output stack usage information for the program, on a -per-subprogram basis. See @ref{fd,,Static Stack Usage Analysis} for details. +per-subprogram basis. See @ref{f5,,Static Stack Usage Analysis} for details. @end table @geindex -g (gcc) @@ -9085,7 +8986,7 @@ Generate brief messages to @code{stderr} even if verbose mode set. @item @code{-gnatB} Assume no invalid (bad) values except for 'Valid attribute use -(@ref{fe,,Validity Checking}). +(@ref{f6,,Validity Checking}). @end table @geindex -gnatc (gcc) @@ -9200,7 +9101,7 @@ not share the memory location of @cite{Obj}. Specify a configuration pragma file (the equal sign is optional) -(@ref{7b,,The Configuration Pragmas Files}). +(@ref{79,,The Configuration Pragmas Files}). @end table @geindex -gnateC (gcc) @@ -9233,7 +9134,7 @@ Disable atomic synchronization @item @code{-gnateDsymbol[=@emph{value}]} Defines a symbol, associated with @cite{value}, for preprocessing. -(@ref{1a,,Integrated Preprocessing}). +(@ref{18,,Integrated Preprocessing}). @end table @geindex -gnateE (gcc) @@ -9282,7 +9183,7 @@ for unconstrained predefined types. See description of pragma The @cite{-gnatc} switch must always be specified before this switch, e.g. @cite{-gnatceg}. Generate a C header from the Ada input file. See -@ref{d0,,Generating C Headers for Ada Specifications} for more +@ref{ca,,Generating C Headers for Ada Specifications} for more information. @end quotation @@ -9356,7 +9257,7 @@ This switch turns off the info messages about implicit elaboration pragmas. Specify a mapping file (the equal sign is optional) -(@ref{ff,,Units to Sources Mapping Files}). +(@ref{f7,,Units to Sources Mapping Files}). @end table @geindex -gnatep (gcc) @@ -9368,7 +9269,7 @@ Specify a mapping file Specify a preprocessing data file (the equal sign is optional) -(@ref{1a,,Integrated Preprocessing}). +(@ref{18,,Integrated Preprocessing}). @end table @geindex -gnateP (gcc) @@ -9538,7 +9439,7 @@ support this switch. @item @code{-gnateV} Check that all actual parameters of a subprogram call are valid according to -the rules of validity checking (@ref{fe,,Validity Checking}). +the rules of validity checking (@ref{f6,,Validity Checking}). @end table @geindex -gnateY (gcc) @@ -9631,7 +9532,7 @@ Output usage information. The output is written to @code{stdout}. Identifier character set (@cite{c} = 1/2/3/4/8/9/p/f/n/w). For details of the possible selections for @cite{c}, -see @ref{4a,,Character Set Control}. +see @ref{48,,Character Set Control}. @end table @geindex -gnatI (gcc) @@ -9832,7 +9733,7 @@ overflow checking is enabled. Note that division by zero is a separate check that is not controlled by this switch (divide-by-zero checking is on by default). -See also @ref{100,,Specifying the Desired Mode}. +See also @ref{f8,,Specifying the Desired Mode}. @end table @geindex -gnatp (gcc) @@ -9842,7 +9743,7 @@ See also @ref{100,,Specifying the Desired Mode}. @item @code{-gnatp} -Suppress all checks. See @ref{101,,Run-Time Checks} for details. This switch +Suppress all checks. See @ref{f9,,Run-Time Checks} for details. This switch has no effect if cancelled by a subsequent @emph{-gnat-p} switch. @end table @@ -9994,7 +9895,7 @@ Verbose mode. Full error output with source lines to @code{stdout}. @item @code{-gnatV} -Control level of validity checking (@ref{fe,,Validity Checking}). +Control level of validity checking (@ref{f6,,Validity Checking}). @end table @geindex -gnatw (gcc) @@ -10007,7 +9908,7 @@ Control level of validity checking (@ref{fe,,Validity Checking}). Warning mode where @cite{xxx} is a string of option letters that denotes the exact warnings that -are enabled or disabled (@ref{102,,Warning Message Control}). +are enabled or disabled (@ref{fa,,Warning Message Control}). @end table @geindex -gnatW (gcc) @@ -10048,7 +9949,7 @@ Enable GNAT implementation extensions and latest Ada version. @item @code{-gnaty} -Enable built-in style checks (@ref{103,,Style Checking}). +Enable built-in style checks (@ref{fb,,Style Checking}). @end table @geindex -gnatz (gcc) @@ -10073,7 +9974,7 @@ Distribution stub generation and compilation Direct GNAT to search the @cite{dir} directory for source files needed by the current compilation -(see @ref{8e,,Search Paths and the Run-Time Library (RTL)}). +(see @ref{89,,Search Paths and the Run-Time Library (RTL)}). @end table @geindex -I- (gcc) @@ -10087,7 +9988,7 @@ the current compilation Except for the source file named in the command line, do not look for source files in the directory containing the source file named in the command line -(see @ref{8e,,Search Paths and the Run-Time Library (RTL)}). +(see @ref{89,,Search Paths and the Run-Time Library (RTL)}). @end table @geindex -o (gcc) @@ -10191,7 +10092,7 @@ Optimize space usage @end multitable -See also @ref{104,,Optimization Levels}. +See also @ref{fc,,Optimization Levels}. @end table @geindex -pass-exit-codes (gcc) @@ -10213,7 +10114,7 @@ exit status. @item @code{--RTS=@emph{rts-path}} Specifies the default location of the runtime library. Same meaning as the -equivalent @emph{gnatmake} flag (@ref{e2,,Switches for gnatmake}). +equivalent @emph{gnatmake} flag (@ref{dc,,Switches for gnatmake}). @end table @geindex -S (gcc) @@ -10339,7 +10240,7 @@ as warning mode modifiers (see description of @emph{-gnatw}). @item Once a 'V' appears in the string (that is a use of the @emph{-gnatV} switch), then all further characters in the switch are interpreted -as validity checking options (@ref{fe,,Validity Checking}). +as validity checking options (@ref{f6,,Validity Checking}). @item Option 'em', 'ec', 'ep', 'l=' and 'R' must be the last options in @@ -10347,7 +10248,7 @@ a combined list of options. @end itemize @node Output and Error Message Control,Warning Message Control,Alphabetical List of All Switches,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id14}@anchor{105}@anchor{gnat_ugn/building_executable_programs_with_gnat output-and-error-message-control}@anchor{106} +@anchor{gnat_ugn/building_executable_programs_with_gnat id14}@anchor{fd}@anchor{gnat_ugn/building_executable_programs_with_gnat output-and-error-message-control}@anchor{fe} @subsection Output and Error Message Control @@ -10650,7 +10551,7 @@ since ALI files are never generated if @emph{-gnats} is set. @end table @node Warning Message Control,Debugging and Assertion Control,Output and Error Message Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat warning-message-control}@anchor{102}@anchor{gnat_ugn/building_executable_programs_with_gnat id15}@anchor{107} +@anchor{gnat_ugn/building_executable_programs_with_gnat warning-message-control}@anchor{fa}@anchor{gnat_ugn/building_executable_programs_with_gnat id15}@anchor{ff} @subsection Warning Message Control @@ -12545,7 +12446,7 @@ used in conjunction with an optimization level greater than zero. @item @code{-Wstack-usage=@emph{len}} Warn if the stack usage of a subprogram might be larger than @cite{len} bytes. -See @ref{fd,,Static Stack Usage Analysis} for details. +See @ref{f5,,Static Stack Usage Analysis} for details. @end table @geindex -Wall (gcc) @@ -12713,7 +12614,7 @@ When no switch @emph{-gnatw} is used, this is equivalent to: @end quotation @node Debugging and Assertion Control,Validity Checking,Warning Message Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control}@anchor{108}@anchor{gnat_ugn/building_executable_programs_with_gnat id16}@anchor{109} +@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control}@anchor{100}@anchor{gnat_ugn/building_executable_programs_with_gnat id16}@anchor{101} @subsection Debugging and Assertion Control @@ -12802,7 +12703,7 @@ is @cite{False}, the exception @cite{Assert_Failure} is raised. @end table @node Validity Checking,Style Checking,Debugging and Assertion Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat validity-checking}@anchor{fe}@anchor{gnat_ugn/building_executable_programs_with_gnat id17}@anchor{10a} +@anchor{gnat_ugn/building_executable_programs_with_gnat validity-checking}@anchor{f6}@anchor{gnat_ugn/building_executable_programs_with_gnat id17}@anchor{102} @subsection Validity Checking @@ -13091,7 +12992,7 @@ the validity checking mode at the program source level, and also allows for temporary disabling of validity checks. @node Style Checking,Run-Time Checks,Validity Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id18}@anchor{10b}@anchor{gnat_ugn/building_executable_programs_with_gnat style-checking}@anchor{103} +@anchor{gnat_ugn/building_executable_programs_with_gnat id18}@anchor{103}@anchor{gnat_ugn/building_executable_programs_with_gnat style-checking}@anchor{fb} @subsection Style Checking @@ -13799,7 +13700,7 @@ built-in standard style check options are enabled. The switch @code{-gnatyN} clears any previously set style checks. @node Run-Time Checks,Using gcc for Syntax Checking,Style Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat run-time-checks}@anchor{101}@anchor{gnat_ugn/building_executable_programs_with_gnat id19}@anchor{10c} +@anchor{gnat_ugn/building_executable_programs_with_gnat run-time-checks}@anchor{f9}@anchor{gnat_ugn/building_executable_programs_with_gnat id19}@anchor{104} @subsection Run-Time Checks @@ -13993,7 +13894,7 @@ on subprogram calls and generic instantiations. Note that @emph{-gnatE} is not necessary for safety, because in the default mode, GNAT ensures statically that the checks would not fail. For full details of the effect and use of this switch, -@ref{1e,,Compiling with gcc}. +@ref{1c,,Compiling with gcc}. @end table @geindex -fstack-check (gcc) @@ -14009,7 +13910,7 @@ For full details of the effect and use of this switch, @item @code{-fstack-check} Activates stack overflow checking. For full details of the effect and use of -this switch see @ref{fc,,Stack Overflow Checking}. +this switch see @ref{f4,,Stack Overflow Checking}. @end table @geindex Unsuppress @@ -14020,7 +13921,7 @@ checks) or @cite{Unsuppress} (to add back suppressed checks) pragmas in the program source. @node Using gcc for Syntax Checking,Using gcc for Semantic Checking,Run-Time Checks,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id20}@anchor{10d}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking}@anchor{10e} +@anchor{gnat_ugn/building_executable_programs_with_gnat id20}@anchor{105}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking}@anchor{106} @subsection Using @emph{gcc} for Syntax Checking @@ -14073,11 +13974,11 @@ Normally, GNAT allows only a single unit in a source file. However, this restriction does not apply in syntax-check-only mode, and it is possible to check a file containing multiple compilation units concatenated together. This is primarily used by the @cite{gnatchop} utility -(@ref{38,,Renaming Files with gnatchop}). +(@ref{36,,Renaming Files with gnatchop}). @end table @node Using gcc for Semantic Checking,Compiling Different Versions of Ada,Using gcc for Syntax Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id21}@anchor{10f}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking}@anchor{110} +@anchor{gnat_ugn/building_executable_programs_with_gnat id21}@anchor{107}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking}@anchor{108} @subsection Using @emph{gcc} for Semantic Checking @@ -14102,13 +14003,13 @@ semantic restrictions on file structuring to operate in this mode: @item The needed source files must be accessible -(see @ref{8e,,Search Paths and the Run-Time Library (RTL)}). +(see @ref{89,,Search Paths and the Run-Time Library (RTL)}). @item Each file must contain only one compilation unit. @item -The file name and unit name must match (@ref{54,,File Naming Rules}). +The file name and unit name must match (@ref{52,,File Naming Rules}). @end itemize The output consists of error messages as appropriate. No object file is @@ -14124,7 +14025,7 @@ and specifications where a separate body is present). @end table @node Compiling Different Versions of Ada,Character Set Control,Using gcc for Semantic Checking,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada}@anchor{6}@anchor{gnat_ugn/building_executable_programs_with_gnat id22}@anchor{111} +@anchor{gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada}@anchor{6}@anchor{gnat_ugn/building_executable_programs_with_gnat id22}@anchor{109} @subsection Compiling Different Versions of Ada @@ -14258,7 +14159,7 @@ extensions, see the GNAT reference manual. @end table @node Character Set Control,File Naming Control,Compiling Different Versions of Ada,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id23}@anchor{112}@anchor{gnat_ugn/building_executable_programs_with_gnat character-set-control}@anchor{4a} +@anchor{gnat_ugn/building_executable_programs_with_gnat id23}@anchor{10a}@anchor{gnat_ugn/building_executable_programs_with_gnat character-set-control}@anchor{48} @subsection Character Set Control @@ -14369,7 +14270,7 @@ allowed in identifiers @end multitable -See @ref{40,,Foreign Language Representation} for full details on the +See @ref{3e,,Foreign Language Representation} for full details on the implementation of these character sets. @end table @@ -14437,7 +14338,7 @@ Brackets encoding only (default value) For full details on these encoding -methods see @ref{50,,Wide_Character Encodings}. +methods see @ref{4e,,Wide_Character Encodings}. Note that brackets coding is always accepted, even if one of the other options is specified, so for example @emph{-gnatW8} specifies that both brackets and UTF-8 encodings will be recognized. The units that are @@ -14485,7 +14386,7 @@ comments are ended by an appropriate (CR, or CR/LF, or LF) line terminator. This is a common mode for many programs with foreign language comments. @node File Naming Control,Subprogram Inlining Control,Character Set Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat file-naming-control}@anchor{113}@anchor{gnat_ugn/building_executable_programs_with_gnat id24}@anchor{114} +@anchor{gnat_ugn/building_executable_programs_with_gnat file-naming-control}@anchor{10b}@anchor{gnat_ugn/building_executable_programs_with_gnat id24}@anchor{10c} @subsection File Naming Control @@ -14501,11 +14402,11 @@ Activates file name 'krunching'. @cite{n}, a decimal integer in the range including the @code{.ads} or @code{.adb} extension). The default is not to enable file name krunching. -For the source file naming rules, @ref{54,,File Naming Rules}. +For the source file naming rules, @ref{52,,File Naming Rules}. @end table @node Subprogram Inlining Control,Auxiliary Output Control,File Naming Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control}@anchor{115}@anchor{gnat_ugn/building_executable_programs_with_gnat id25}@anchor{116} +@anchor{gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control}@anchor{10d}@anchor{gnat_ugn/building_executable_programs_with_gnat id25}@anchor{10e} @subsection Subprogram Inlining Control @@ -14538,7 +14439,7 @@ If you specify this switch the compiler will access these bodies, creating an extra source dependency for the resulting object file, and where possible, the call will be inlined. For further details on when inlining is possible -see @ref{117,,Inlining of Subprograms}. +see @ref{10f,,Inlining of Subprograms}. @end table @geindex -gnatN (gcc) @@ -14559,7 +14460,7 @@ inlining, but that is no longer the case. @end table @node Auxiliary Output Control,Debugging Control,Subprogram Inlining Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control}@anchor{118}@anchor{gnat_ugn/building_executable_programs_with_gnat id26}@anchor{119} +@anchor{gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control}@anchor{110}@anchor{gnat_ugn/building_executable_programs_with_gnat id26}@anchor{111} @subsection Auxiliary Output Control @@ -14651,7 +14552,7 @@ An object file has been generated for every source file. @end table @node Debugging Control,Exception Handling Control,Auxiliary Output Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-control}@anchor{11a}@anchor{gnat_ugn/building_executable_programs_with_gnat id27}@anchor{11b} +@anchor{gnat_ugn/building_executable_programs_with_gnat debugging-control}@anchor{112}@anchor{gnat_ugn/building_executable_programs_with_gnat id27}@anchor{113} @subsection Debugging Control @@ -14950,7 +14851,7 @@ speed up compilation, but means that these tools cannot be used. @end table @node Exception Handling Control,Units to Sources Mapping Files,Debugging Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id28}@anchor{11c}@anchor{gnat_ugn/building_executable_programs_with_gnat exception-handling-control}@anchor{11d} +@anchor{gnat_ugn/building_executable_programs_with_gnat id28}@anchor{114}@anchor{gnat_ugn/building_executable_programs_with_gnat exception-handling-control}@anchor{115} @subsection Exception Handling Control @@ -15018,11 +14919,11 @@ is available for the target in use, otherwise it will generate an error. The same option @emph{--RTS} must be used both for @emph{gcc} and @emph{gnatbind}. Passing this option to @emph{gnatmake} -(@ref{e2,,Switches for gnatmake}) will ensure the required consistency +(@ref{dc,,Switches for gnatmake}) will ensure the required consistency through the compilation and binding steps. @node Units to Sources Mapping Files,Code Generation Control,Exception Handling Control,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat id29}@anchor{11e}@anchor{gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files}@anchor{ff} +@anchor{gnat_ugn/building_executable_programs_with_gnat id29}@anchor{116}@anchor{gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files}@anchor{f7} @subsection Units to Sources Mapping Files @@ -15074,7 +14975,7 @@ mapping file and communicates it to the compiler using this switch. @end table @node Code Generation Control,,Units to Sources Mapping Files,Compiler Switches -@anchor{gnat_ugn/building_executable_programs_with_gnat code-generation-control}@anchor{11f}@anchor{gnat_ugn/building_executable_programs_with_gnat id30}@anchor{120} +@anchor{gnat_ugn/building_executable_programs_with_gnat code-generation-control}@anchor{117}@anchor{gnat_ugn/building_executable_programs_with_gnat id30}@anchor{118} @subsection Code Generation Control @@ -15103,7 +15004,7 @@ there is no point in using @emph{-m} switches to improve performance unless you actually see a performance improvement. @node Binding with gnatbind,Linking with gnatlink,Compiler Switches,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind}@anchor{1f}@anchor{gnat_ugn/building_executable_programs_with_gnat id31}@anchor{121} +@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind}@anchor{1d}@anchor{gnat_ugn/building_executable_programs_with_gnat id31}@anchor{119} @section Binding with @cite{gnatbind} @@ -15113,7 +15014,7 @@ This chapter describes the GNAT binder, @cite{gnatbind}, which is used to bind compiled GNAT objects. Note: to invoke @cite{gnatbind} with a project file, use the @cite{gnat} -driver (see @ref{122,,The GNAT Driver and Project Files}). +driver (see @emph{The_GNAT_Driver_and_Project_Files}). The @cite{gnatbind} program performs four separate functions: @@ -15157,7 +15058,7 @@ to be read by the @emph{gnatlink} utility used to link the Ada application. @end menu @node Running gnatbind,Switches for gnatbind,,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatbind}@anchor{123}@anchor{gnat_ugn/building_executable_programs_with_gnat id32}@anchor{124} +@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatbind}@anchor{11a}@anchor{gnat_ugn/building_executable_programs_with_gnat id32}@anchor{11b} @subsection Running @cite{gnatbind} @@ -15232,7 +15133,7 @@ error: "p.ads" has been modified and must be recompiled Now both files must be recompiled as indicated, and then the bind can succeed, generating a main program. You need not normally be concerned with the contents of this file, but for reference purposes a sample -binder output file is given in @ref{10,,Example of Binder Output File}. +binder output file is given in @ref{e,,Example of Binder Output File}. In most normal usage, the default mode of @emph{gnatbind} which is to generate the main package in Ada, as described in the previous section. @@ -15242,7 +15143,7 @@ Ada code provided the @emph{-g} switch is used for @emph{gnatbind} and @emph{gnatlink}. @node Switches for gnatbind,Command-Line Access,Running gnatbind,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id33}@anchor{125}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind}@anchor{126} +@anchor{gnat_ugn/building_executable_programs_with_gnat id33}@anchor{11c}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind}@anchor{11d} @subsection Switches for @emph{gnatbind} @@ -15460,7 +15361,7 @@ Output usage (help) information. @item @code{-H32} Use 32-bit allocations for @cite{__gnat_malloc} (and thus for access types). -For further details see @ref{127,,Dynamic Allocation Control}. +For further details see @ref{11e,,Dynamic Allocation Control}. @geindex -H64 (gnatbind) @@ -15469,7 +15370,7 @@ For further details see @ref{127,,Dynamic Allocation Control}. @item @code{-H64} Use 64-bit allocations for @cite{__gnat_malloc} (and thus for access types). -For further details see @ref{127,,Dynamic Allocation Control}. +For further details see @ref{11e,,Dynamic Allocation Control}. @geindex -I (gnatbind) @@ -15496,7 +15397,7 @@ Output chosen elaboration order. @item @code{-L@emph{xxx}} Bind the units for library building. In this case the adainit and -adafinal procedures (@ref{ba,,Binding with Non-Ada Main Programs}) +adafinal procedures (@ref{b4,,Binding with Non-Ada Main Programs}) are renamed to @cite{xxx`init and `xxx`final. Implies -n. (:ref:`GNAT_and_Libraries}, for more details.) @geindex -M (gnatbind) @@ -15542,7 +15443,7 @@ Do not look for library files in the system default directory. @item @code{--RTS=@emph{rts-path}} Specifies the default location of the runtime library. Same meaning as the -equivalent @emph{gnatmake} flag (@ref{e2,,Switches for gnatmake}). +equivalent @emph{gnatmake} flag (@ref{dc,,Switches for gnatmake}). @geindex -o (gnatbind) @@ -15696,7 +15597,7 @@ Enable dynamic stack usage, with @cite{n} results stored and displayed at program termination. A result is generated when a task terminates. Results that can't be stored are displayed on the fly, at task termination. This option is currently not supported on Itanium -platforms. (See @ref{128,,Dynamic Stack Usage Analysis} for details.) +platforms. (See @ref{11f,,Dynamic Stack Usage Analysis} for details.) @geindex -v (gnatbind) @@ -15765,7 +15666,7 @@ no arguments. @end menu @node Consistency-Checking Modes,Binder Error Message Control,,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes}@anchor{129}@anchor{gnat_ugn/building_executable_programs_with_gnat id34}@anchor{12a} +@anchor{gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes}@anchor{120}@anchor{gnat_ugn/building_executable_programs_with_gnat id34}@anchor{121} @subsubsection Consistency-Checking Modes @@ -15819,7 +15720,7 @@ case the checking against sources has already been performed by @end table @node Binder Error Message Control,Elaboration Control,Consistency-Checking Modes,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id35}@anchor{12b}@anchor{gnat_ugn/building_executable_programs_with_gnat binder-error-message-control}@anchor{12c} +@anchor{gnat_ugn/building_executable_programs_with_gnat id35}@anchor{122}@anchor{gnat_ugn/building_executable_programs_with_gnat binder-error-message-control}@anchor{123} @subsubsection Binder Error Message Control @@ -15929,12 +15830,12 @@ with extreme care. @end table @node Elaboration Control,Output Control,Binder Error Message Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id36}@anchor{12d}@anchor{gnat_ugn/building_executable_programs_with_gnat elaboration-control}@anchor{12e} +@anchor{gnat_ugn/building_executable_programs_with_gnat id36}@anchor{124}@anchor{gnat_ugn/building_executable_programs_with_gnat elaboration-control}@anchor{125} @subsubsection Elaboration Control The following switches provide additional control over the elaboration -order. For full details see @ref{11,,Elaboration Order Handling in GNAT}. +order. For full details see @ref{f,,Elaboration Order Handling in GNAT}. @quotation @@ -15968,7 +15869,7 @@ production use; it is more for debugging/experimental use. @end table @node Output Control,Dynamic Allocation Control,Elaboration Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat output-control}@anchor{12f}@anchor{gnat_ugn/building_executable_programs_with_gnat id37}@anchor{130} +@anchor{gnat_ugn/building_executable_programs_with_gnat output-control}@anchor{126}@anchor{gnat_ugn/building_executable_programs_with_gnat id37}@anchor{127} @subsubsection Output Control @@ -16049,7 +15950,7 @@ be used to improve code generation in some cases. @end table @node Dynamic Allocation Control,Binding with Non-Ada Main Programs,Output Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control}@anchor{127}@anchor{gnat_ugn/building_executable_programs_with_gnat id38}@anchor{131} +@anchor{gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control}@anchor{11e}@anchor{gnat_ugn/building_executable_programs_with_gnat id38}@anchor{128} @subsubsection Dynamic Allocation Control @@ -16075,7 +15976,7 @@ unless explicitly overridden by a @cite{'Size} clause on the access type. These switches are only effective on VMS platforms. @node Binding with Non-Ada Main Programs,Binding Programs with No Main Subprogram,Dynamic Allocation Control,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs}@anchor{ba}@anchor{gnat_ugn/building_executable_programs_with_gnat id39}@anchor{132} +@anchor{gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs}@anchor{b4}@anchor{gnat_ugn/building_executable_programs_with_gnat id39}@anchor{129} @subsubsection Binding with Non-Ada Main Programs @@ -16084,7 +15985,7 @@ program is in Ada, and that the task of the binder is to generate a corresponding function @cite{main} that invokes this Ada main program. GNAT also supports the building of executable programs where the main program is not in Ada, but some of the called routines are -written in Ada and compiled using GNAT (@ref{46,,Mixed Language Programming}). +written in Ada and compiled using GNAT (@ref{44,,Mixed Language Programming}). The following switch is used in this situation: @quotation @@ -16171,7 +16072,7 @@ side effect is that this could be the wrong mode for the foreign code where floating point computation could be broken after this call. @node Binding Programs with No Main Subprogram,,Binding with Non-Ada Main Programs,Switches for gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram}@anchor{133}@anchor{gnat_ugn/building_executable_programs_with_gnat id40}@anchor{134} +@anchor{gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram}@anchor{12a}@anchor{gnat_ugn/building_executable_programs_with_gnat id40}@anchor{12b} @subsubsection Binding Programs with No Main Subprogram @@ -16202,7 +16103,7 @@ the binder switch @end table @node Command-Line Access,Search Paths for gnatbind,Switches for gnatbind,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat id41}@anchor{135}@anchor{gnat_ugn/building_executable_programs_with_gnat command-line-access}@anchor{136} +@anchor{gnat_ugn/building_executable_programs_with_gnat id41}@anchor{12c}@anchor{gnat_ugn/building_executable_programs_with_gnat command-line-access}@anchor{12d} @subsection Command-Line Access @@ -16232,7 +16133,7 @@ required, your main program must set @cite{gnat_argc} and it. @node Search Paths for gnatbind,Examples of gnatbind Usage,Command-Line Access,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind}@anchor{91}@anchor{gnat_ugn/building_executable_programs_with_gnat id42}@anchor{137} +@anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind}@anchor{8c}@anchor{gnat_ugn/building_executable_programs_with_gnat id42}@anchor{12e} @subsection Search Paths for @cite{gnatbind} @@ -16240,7 +16141,7 @@ The binder takes the name of an ALI file as its argument and needs to locate source files as well as other ALI files to verify object consistency. For source files, it follows exactly the same search rules as @emph{gcc} -(see @ref{8e,,Search Paths and the Run-Time Library (RTL)}). For ALI files the +(see @ref{89,,Search Paths and the Run-Time Library (RTL)}). For ALI files the directories searched are: @@ -16289,7 +16190,7 @@ of GNAT). The content of the @code{ada_object_path} file which is part of the GNAT installation tree and is used to store standard libraries such as the GNAT Run Time Library (RTL) unless the switch @emph{-nostdlib} is -specified. See @ref{8b,,Installing a library} +specified. See @ref{87,,Installing a library} @end itemize @geindex -I (gnatbind) @@ -16336,7 +16237,7 @@ in compiling sources from multiple directories. This can make development environments much more flexible. @node Examples of gnatbind Usage,,Search Paths for gnatbind,Binding with gnatbind -@anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage}@anchor{138}@anchor{gnat_ugn/building_executable_programs_with_gnat id43}@anchor{139} +@anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage}@anchor{12f}@anchor{gnat_ugn/building_executable_programs_with_gnat id43}@anchor{130} @subsection Examples of @cite{gnatbind} Usage @@ -16365,7 +16266,7 @@ since gnatlink will not be able to find the generated file. @end quotation @node Linking with gnatlink,Using the GNU make Utility,Binding with gnatbind,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat id44}@anchor{13a}@anchor{gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink}@anchor{20} +@anchor{gnat_ugn/building_executable_programs_with_gnat id44}@anchor{131}@anchor{gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink}@anchor{1e} @section Linking with @emph{gnatlink} @@ -16380,7 +16281,7 @@ references for the Ada part of a program. It uses the binder file generated by the @emph{gnatbind} to determine this list. Note: to invoke @cite{gnatlink} with a project file, use the @cite{gnat} -driver (see @ref{122,,The GNAT Driver and Project Files}). +driver (see @emph{The_GNAT_Driver_and_Project_Files}). @menu * Running gnatlink:: @@ -16389,7 +16290,7 @@ driver (see @ref{122,,The GNAT Driver and Project Files}). @end menu @node Running gnatlink,Switches for gnatlink,,Linking with gnatlink -@anchor{gnat_ugn/building_executable_programs_with_gnat id45}@anchor{13b}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatlink}@anchor{13c} +@anchor{gnat_ugn/building_executable_programs_with_gnat id45}@anchor{132}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatlink}@anchor{133} @subsection Running @emph{gnatlink} @@ -16448,8 +16349,8 @@ $ gnatlink my_prog -Wl,-Map,MAPFILE Using @cite{linker options} it is possible to set the program stack and heap size. -See @ref{13d,,Setting Stack Size from gnatlink} and -@ref{13e,,Setting Heap Size from gnatlink}. +See @ref{134,,Setting Stack Size from gnatlink} and +@ref{135,,Setting Heap Size from gnatlink}. @emph{gnatlink} determines the list of objects required by the Ada program and prepends them to the list of objects passed to the linker. @@ -16458,7 +16359,7 @@ program and prepends them to the list of objects passed to the linker. presented to the linker. @node Switches for gnatlink,,Running gnatlink,Linking with gnatlink -@anchor{gnat_ugn/building_executable_programs_with_gnat id46}@anchor{13f}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink}@anchor{140} +@anchor{gnat_ugn/building_executable_programs_with_gnat id46}@anchor{136}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink}@anchor{137} @subsection Switches for @emph{gnatlink} @@ -16665,7 +16566,7 @@ switch. @end table @node Using the GNU make Utility,,Linking with gnatlink,Building Executable Programs with GNAT -@anchor{gnat_ugn/building_executable_programs_with_gnat id47}@anchor{141}@anchor{gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility}@anchor{21} +@anchor{gnat_ugn/building_executable_programs_with_gnat id47}@anchor{138}@anchor{gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility}@anchor{1f} @section Using the GNU @cite{make} Utility @@ -16674,7 +16575,7 @@ switch. This chapter offers some examples of makefiles that solve specific problems. It does not explain how to write a makefile, nor does it try to replace the -@emph{gnatmake} utility (@ref{1d,,Building with gnatmake}). +@emph{gnatmake} utility (@ref{1b,,Building with gnatmake}). All the examples in this section are specific to the GNU version of make. Although @emph{make} is a standard utility, and the basic language @@ -16690,7 +16591,7 @@ is the same, these examples use some advanced features found only in @end menu @node Using gnatmake in a Makefile,Automatically Creating a List of Directories,,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile}@anchor{142}@anchor{gnat_ugn/building_executable_programs_with_gnat id48}@anchor{143} +@anchor{gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile}@anchor{139}@anchor{gnat_ugn/building_executable_programs_with_gnat id48}@anchor{13a} @subsection Using gnatmake in a Makefile @@ -16709,7 +16610,7 @@ the appropriate directories. Note that you should also read the example on how to automatically create the list of directories -(@ref{144,,Automatically Creating a List of Directories}) +(@ref{13b,,Automatically Creating a List of Directories}) which might help you in case your project has a lot of subdirectories. @example @@ -16789,7 +16690,7 @@ clean:: @end example @node Automatically Creating a List of Directories,Generating the Command Line Switches,Using gnatmake in a Makefile,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories}@anchor{144}@anchor{gnat_ugn/building_executable_programs_with_gnat id49}@anchor{145} +@anchor{gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories}@anchor{13b}@anchor{gnat_ugn/building_executable_programs_with_gnat id49}@anchor{13c} @subsection Automatically Creating a List of Directories @@ -16862,12 +16763,12 @@ DIRS := $@{shell find $@{ROOT_DIRECTORY@} -type d -print@} @end example @node Generating the Command Line Switches,Overcoming Command Line Length Limits,Automatically Creating a List of Directories,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat id50}@anchor{146}@anchor{gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches}@anchor{147} +@anchor{gnat_ugn/building_executable_programs_with_gnat id50}@anchor{13d}@anchor{gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches}@anchor{13e} @subsection Generating the Command Line Switches Once you have created the list of directories as explained in the -previous section (@ref{144,,Automatically Creating a List of Directories}), +previous section (@ref{13b,,Automatically Creating a List of Directories}), you can easily generate the command line arguments to pass to gnatmake. For the sake of completeness, this example assumes that the source path @@ -16888,7 +16789,7 @@ all: @end example @node Overcoming Command Line Length Limits,,Generating the Command Line Switches,Using the GNU make Utility -@anchor{gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits}@anchor{148}@anchor{gnat_ugn/building_executable_programs_with_gnat id51}@anchor{149} +@anchor{gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits}@anchor{13f}@anchor{gnat_ugn/building_executable_programs_with_gnat id51}@anchor{140} @subsection Overcoming Command Line Length Limits @@ -16903,7 +16804,7 @@ even none on most systems). It assumes that you have created a list of directories in your Makefile, using one of the methods presented in -@ref{144,,Automatically Creating a List of Directories}. +@ref{13b,,Automatically Creating a List of Directories}. For the sake of completeness, we assume that the object path (where the ALI files are found) is different from the sources patch. @@ -16945,6390 +16846,8 @@ all: gnatmake main_unit @end example -@c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit - -@node GNAT Project Manager,Tools Supporting Project Files,Building Executable Programs with GNAT,Top -@anchor{gnat_ugn/gnat_project_manager doc}@anchor{14a}@anchor{gnat_ugn/gnat_project_manager gnat-project-manager}@anchor{b}@anchor{gnat_ugn/gnat_project_manager id1}@anchor{14b} -@chapter GNAT Project Manager - - -@menu -* Introduction:: -* Building With Projects:: -* Organizing Projects into Subsystems:: -* Scenarios in Projects:: -* Library Projects:: -* Project Extension:: -* Aggregate Projects:: -* Aggregate Library Projects:: -* Project File Reference:: - -@end menu - -@node Introduction,Building With Projects,,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager introduction}@anchor{14c}@anchor{gnat_ugn/gnat_project_manager gnat-project-manager-introduction}@anchor{14d} -@section Introduction - - -This chapter describes GNAT's @emph{Project Manager}, a facility that allows -you to manage complex builds involving a number of source files, directories, -and options for different system configurations. In particular, -project files allow you to specify: - - -@itemize * - -@item -The directory or set of directories containing the source files, and/or the -names of the specific source files themselves - -@item -The directory in which the compiler's output -(@code{ALI} files, object files, tree files, etc.) is to be placed - -@item -The directory in which the executable programs are to be placed - -@item -Switch settings for any of the project-enabled tools; -you can apply these settings either globally or to individual compilation units. - -@item -The source files containing the main subprogram(s) to be built - -@item -The source programming language(s) - -@item -Source file naming conventions; you can specify these either globally or for -individual compilation units (see @ref{14e,,Naming Schemes}). - -@item -Change any of the above settings depending on external values, thus enabling -the reuse of the projects in various @strong{scenarios} (see @ref{14f,,Scenarios in Projects}). - -@item -Automatically build libraries as part of the build process -(see @ref{8a,,Library Projects}). -@end itemize - -Project files are written in a syntax close to that of Ada, using familiar -notions such as packages, context clauses, declarations, default values, -assignments, and inheritance (see @ref{150,,Project File Reference}). - -Project files can be built hierarchically from other project files, simplifying -complex system integration and project reuse (see @ref{151,,Organizing Projects into Subsystems}). - - -@itemize * - -@item -One project can import other projects containing needed source files. -More generally, the Project Manager lets you structure large development -efforts into hierarchical subsystems, where build decisions are delegated -to the subsystem level, and thus different compilation environments -(switch settings) used for different subsystems. - -@item -You can organize GNAT projects in a hierarchy: a child project -can extend a parent project, inheriting the parent's source files and -optionally overriding any of them with alternative versions -(see @ref{152,,Project Extension}). -@end itemize - -Several tools support project files, generally in addition to specifying -the information on the command line itself). They share common switches -to control the loading of the project (in particular -@code{-P@emph{projectfile}} and -@code{-X@emph{vbl}=@emph{value}}). - -The Project Manager supports a wide range of development strategies, -for systems of all sizes. Here are some typical practices that are -easily handled: - - -@itemize * - -@item -Using a common set of source files and generating object files in different -directories via different switch settings. It can be used for instance, for -generating separate sets of object files for debugging and for production. - -@item -Using a mostly-shared set of source files with different versions of -some units or subunits. It can be used for instance, for grouping and hiding -all OS dependencies in a small number of implementation units. -@end itemize - -Project files can be used to achieve some of the effects of a source -versioning system (for example, defining separate projects for -the different sets of sources that comprise different releases) but the -Project Manager is independent of any source configuration management tool -that might be used by the developers. - -The various sections below introduce the different concepts related to -projects. Each section starts with examples and use cases, and then goes into -the details of related project file capabilities. - -@node Building With Projects,Organizing Projects into Subsystems,Introduction,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager building-with-projects}@anchor{153}@anchor{gnat_ugn/gnat_project_manager id2}@anchor{154} -@section Building With Projects - - -In its simplest form, a unique project is used to build a single executable. -This section concentrates on such a simple setup. Later sections will extend -this basic model to more complex setups. - -The following concepts are the foundation of project files, and will be further -detailed later in this documentation. They are summarized here as a reference. - - -@table @asis - -@item @strong{Project file}: - -A text file using an Ada-like syntax, generally using the @code{.gpr} -extension. It defines build-related characteristics of an application. -The characteristics include the list of sources, the location of those -sources, the location for the generated object files, the name of -the main program, and the options for the various tools involved in the -build process. - -@item @strong{Project attribute}: - -A specific project characteristic is defined by an attribute clause. Its -value is a string or a sequence of strings. All settings in a project -are defined through a list of predefined attributes with precise -semantics. See @ref{155,,Attributes}. - -@item @strong{Package in a project}: - -Global attributes are defined at the top level of a project. -Attributes affecting specific tools are grouped in a -package whose name is related to tool's function. The most common -packages are @cite{Builder}, @cite{Compiler}, @cite{Binder}, -and @cite{Linker}. See @ref{156,,Packages}. - -@item @strong{Project variables}: - -In addition to attributes, a project can use variables to store intermediate -values and avoid duplication in complex expressions. It can be initialized -with a value coming from the environment. -A frequent use of variables is to define scenarios. -See @ref{157,,External Values}, @ref{14f,,Scenarios in Projects}, and @ref{158,,Variables}. - -@item @strong{Source files} and @strong{source directories}: - -A source file is associated with a language through a naming convention. For -instance, @cite{foo.c} is typically the name of a C source file; -@cite{bar.ads} or @cite{bar.1.ada} are two common naming conventions for a -file containing an Ada spec. A compilation unit is often composed of a main -source file and potentially several auxiliary ones, such as header files in C. -The naming conventions can be user defined @ref{14e,,Naming Schemes}, and will -drive the builder to call the appropriate compiler for the given source file. -Source files are searched for in the source directories associated with the -project through the @strong{Source_Dirs} attribute. By default, all the files (in -these source directories) following the naming conventions associated with the -declared languages are considered to be part of the project. It is also -possible to limit the list of source files using the @strong{Source_Files} or -@strong{Source_List_File} attributes. Note that those last two attributes only -accept basenames with no directory information. - -@item @strong{Object files} and @strong{object directory}: - -An object file is an intermediate file produced by the compiler from a -compilation unit. It is used by post-compilation tools to produce -final executables or libraries. Object files produced in the context of -a given project are stored in a single directory that can be specified by the -@strong{Object_Dir} attribute. In order to store objects in -two or more object directories, the system must be split into -distinct subsystems with their own project file. -@end table - -The following subsections introduce gradually all the attributes of interest -for simple build needs. Here is the simple setup that will be used in the -following examples. - -The Ada source files @code{pack.ads}, @code{pack.adb}, and @code{proc.adb} are in -the @code{common/} directory. The file @code{proc.adb} contains an Ada main -subprogram @cite{Proc} that @emph{with}s package @cite{Pack}. We want to compile -these source files with the switch -@emph{-O2}, and put the resulting files in -the directory @code{obj/}. - -@example -common/ - pack.ads - pack.adb - proc.adb -common/obj/ - proc.ali, proc.o pack.ali, pack.o -@end example - -Our project is to be called @emph{Build}. The name of the -file is the name of the project (case-insensitive) with the -@code{.gpr} extension, therefore the project file name is @code{build.gpr}. This -is not mandatory, but a warning is issued when this convention is not followed. - -This is a very simple example, and as stated above, a single project -file is enough for it. We will thus create a new file, that for now -should contain the following code: - -@example -project Build is -end Build; -@end example - -@menu -* Source Files and Directories:: -* Duplicate Sources in Projects:: -* Object and Exec Directory:: -* Main Subprograms:: -* Tools Options in Project Files:: -* Compiling with Project Files:: -* Executable File Names:: -* Avoid Duplication With Variables:: -* Naming Schemes:: -* Installation:: -* Distributed support:: - -@end menu - -@node Source Files and Directories,Duplicate Sources in Projects,,Building With Projects -@anchor{gnat_ugn/gnat_project_manager id3}@anchor{159}@anchor{gnat_ugn/gnat_project_manager source-files-and-directories}@anchor{15a} -@subsection Source Files and Directories - - -When you create a new project, the first thing to describe is how to find the -corresponding source files. These are the only settings that are needed by all -the tools that will use this project (builder, compiler, binder and linker for -the compilation, IDEs to edit the source files,...). - -@geindex Source directories (GNAT Project Manager) - -The first step is to declare the source directories, which are the directories -to be searched to find source files. In the case of the example, -the @code{common} directory is the only source directory. - -@geindex Source_Dirs (GNAT Project Manager) - -There are several ways of defining source directories: - - -@itemize * - -@item -When the attribute @strong{Source_Dirs} is not used, a project contains a -single source directory which is the one where the project file itself -resides. In our example, if @code{build.gpr} is placed in the @code{common} -directory, the project has the needed implicit source directory. - -@item -The attribute @strong{Source_Dirs} can be set to a list of path names, one -for each of the source directories. Such paths can either be absolute -names (for instance @code{"/usr/local/common/"} on UNIX), or relative to the -directory in which the project file resides (for instance "." if -@code{build.gpr} is inside @code{common/}, or "common" if it is one level up). -Each of the source directories must exist and be readable. - -@geindex portability of path names (GNAT Project Manager) - -The syntax for directories is platform specific. For portability, however, -the project manager will always properly translate UNIX-like path names to -the native format of the specific platform. For instance, when the same -project file is to be used both on Unix and Windows, "/" should be used as -the directory separator rather than "\". - -@item -The attribute @strong{Source_Dirs} can automatically include subdirectories -using a special syntax inspired by some UNIX shells. If any of the paths in -the list ends with "@code{**}", then that path and all its subdirectories -(recursively) are included in the list of source directories. For instance, -@code{**} and @code{./**} represent the complete directory tree rooted at -the directory in which the project file resides. - -@geindex Source directories (GNAT Project Manager) - -@geindex Excluded_Source_Dirs (GNAT Project Manager) - -When using that construct, it can sometimes be convenient to also use the -attribute @strong{Excluded_Source_Dirs}, which is also a list of paths. Each entry -specifies a directory whose immediate content, not including subdirs, is to -be excluded. It is also possible to exclude a complete directory subtree -using the "**" notation. - -@geindex Ignore_Source_Sub_Dirs (GNAT Project Manager) - -It is often desirable to remove, from the source directories, directory -subtrees rooted at some subdirectories. An example is the subdirectories -created by a Version Control System such as Subversion that creates directory -subtrees rooted at subdirectories ".svn". To do that, attribute -@strong{Ignore_Source_Sub_Dirs} can be used. It specifies the list of simple -file names for the roots of these undesirable directory subtrees. - -@example -for Source_Dirs use ("./**"); -for Ignore_Source_Sub_Dirs use (".svn"); -@end example -@end itemize - -When applied to the simple example, and because we generally prefer to have -the project file at the toplevel directory rather than mixed with the sources, -we will create the following file - -@example -build.gpr -project Build is - for Source_Dirs use ("common"); -- <<<< -end Build; -@end example - -Once source directories have been specified, one may need to indicate -source files of interest. By default, all source files present in the source -directories are considered by the project manager. When this is not desired, -it is possible to specify the list of sources to consider explicitly. -In such a case, only source file base names are indicated and not -their absolute or relative path names. The project manager is in charge of -locating the specified source files in the specified source directories. - - -@itemize * - -@item -By default, the project manager searches for all source files of all -specified languages in all the source directories. - -Since the project manager was initially developed for Ada environments, the -default language is usually Ada and the above project file is complete: it -defines without ambiguity the sources composing the project: that is to say, -all the sources in subdirectory "common" for the default language (Ada) using -the default naming convention. - -@geindex Languages (GNAT Project Manager) - -However, when compiling a multi-language application, or a pure C -application, the project manager must be told which languages are of -interest, which is done by setting the @strong{Languages} attribute to a list of -strings, each of which is the name of a language. - -@geindex Naming scheme (GNAT Project Manager) - -Even when using only Ada, the default naming might not be suitable. Indeed, -how does the project manager recognizes an "Ada file" from any other -file? Project files can describe the naming scheme used for source files, -and override the default (see @ref{14e,,Naming Schemes}). The default is the -standard GNAT extension (@code{.adb} for bodies and @code{.ads} for -specs), which is what is used in our example, explaining why no naming scheme -is explicitly specified. -See @ref{14e,,Naming Schemes}. - -@geindex Source_Files (GNAT Project Manager) - -@item -@cite{Source_Files}. -In some cases, source directories might contain files that should not be -included in a project. One can specify the explicit list of file names to -be considered through the @strong{Source_Files} attribute. -When this attribute is defined, instead of looking at every file in the -source directories, the project manager takes only those names into -consideration reports errors if they cannot be found in the source -directories or does not correspond to the naming scheme. - -@item -For various reasons, it is sometimes useful to have a project with no -sources (most of the time because the attributes defined in the project -file will be reused in other projects, as explained in -@ref{151,,Organizing Projects into Subsystems}. To do this, the attribute -@emph{Source_Files} is set to the empty list, i.e. @cite{()}. Alternatively, -@emph{Source_Dirs} can be set to the empty list, with the same -result. - -@geindex Source_List_File (GNAT Project Manager) - -@item -@cite{Source_List_File}. -If there is a great number of files, it might be more convenient to use -the attribute @strong{Source_List_File}, which specifies the full path of a file. -This file must contain a list of source file names (one per line, no -directory information) that are searched as if they had been defined -through @emph{Source_Files}. Such a file can easily be created through -external tools. - -A warning is issued if both attributes @cite{Source_Files} and -@cite{Source_List_File} are given explicit values. In this case, the -attribute @cite{Source_Files} prevails. - -@geindex Excluded_Source_Files (GNAT Project Manager) - -@geindex Locally_Removed_Files (GNAT Project Manager) - -@geindex Excluded_Source_List_File (GNAT Project Manager) - -@item -@cite{Excluded_Source_Files}. -Specifying an explicit list of files is not always convenient.It might be -more convenient to use the default search rules with specific exceptions. -This can be done thanks to the attribute @strong{Excluded_Source_Files} -(or its synonym @strong{Locally_Removed_Files}). -Its value is the list of file names that should not be taken into account. -This attribute is often used when extending a project, -see @ref{152,,Project Extension}. A similar attribute -@strong{Excluded_Source_List_File} plays the same -role but takes the name of file containing file names similarly to -@cite{Source_List_File}. -@end itemize - -In most simple cases, such as the above example, the default source file search -behavior provides the expected result, and we do not need to add anything after -setting @cite{Source_Dirs}. The project manager automatically finds -@code{pack.ads}, @code{pack.adb}, and @code{proc.adb} as source files of the -project. - -Note that by default a warning is issued when a project has no sources attached -to it and this is not explicitly indicated in the project file. - -@node Duplicate Sources in Projects,Object and Exec Directory,Source Files and Directories,Building With Projects -@anchor{gnat_ugn/gnat_project_manager duplicate-sources-in-projects}@anchor{15b}@anchor{gnat_ugn/gnat_project_manager id4}@anchor{15c} -@subsection Duplicate Sources in Projects - - -If the order of the source directories is known statically, that is if -@cite{"/**"} is not used in the string list @cite{Source_Dirs}, then there may -be several files with the same name sitting in different directories of the -project. In this case, only the file in the first directory is considered as a -source of the project and the others are hidden. If @cite{"/**"} is used in the -string list @cite{Source_Dirs}, it is an error to have several files with the -same name in the same directory @cite{"/**"} subtree, since there would be an -ambiguity as to which one should be used. However, two files with the same name -may exist in two single directories or directory subtrees. In this case, the -one in the first directory or directory subtree is a source of the project. - -If there are two sources in different directories of the same @cite{"/**"} -subtree, one way to resolve the problem is to exclude the directory of the -file that should not be used as a source of the project. - -@node Object and Exec Directory,Main Subprograms,Duplicate Sources in Projects,Building With Projects -@anchor{gnat_ugn/gnat_project_manager object-and-exec-directory}@anchor{15d}@anchor{gnat_ugn/gnat_project_manager id5}@anchor{15e} -@subsection Object and Exec Directory - - -The next step when writing a project is to indicate where the compiler should -put the object files. In fact, the compiler and other tools might create -several different kind of files (for GNAT, there is the object file and the ALI -file for instance). One of the important concepts in projects is that most -tools may consider source directories as read-only and do not attempt to create -new or temporary files there. Instead, all files are created in the object -directory. It is of course not true for project-aware IDEs, whose purpose it is -to create the source files. - -@geindex Object_Dir (GNAT Project Manager) - -The object directory is specified through the @strong{Object_Dir} attribute. -Its value is the path to the object directory, either absolute or -relative to the directory containing the project file. This -directory must already exist and be readable and writable, although -some tools have a switch to create the directory if needed (See -the switch @cite{-p} for @emph{gprbuild}). - -If the attribute @cite{Object_Dir} is not specified, it defaults to -the project directory, that is the directory containing the project file. - -For our example, we can specify the object dir in this way: - -@example -project Build is - for Source_Dirs use ("common"); - for Object_Dir use "obj"; -- <<<< -end Build; -@end example - -As mentioned earlier, there is a single object directory per project. As a -result, if you have an existing system where the object files are spread across -several directories, you can either move all of them into the same directory if -you want to build it with a single project file, or study the section on -subsystems (see @ref{151,,Organizing Projects into Subsystems}) to see how each -separate object directory can be associated with one of the subsystems -constituting the application. - -When the @emph{linker} is called, it usually creates an executable. By -default, this executable is placed in the object directory of the project. It -might be convenient to store it in its own directory. - -@geindex Exec_Dir (GNAT Project Manager) - -This can be done through the @cite{Exec_Dir} attribute, which, like -@emph{Object_Dir} contains a single absolute or relative path and must point to -an existing and writable directory, unless you ask the tool to create it on -your behalf. When not specified, It defaults to the object directory and -therefore to the project file's directory if neither @emph{Object_Dir} nor -@emph{Exec_Dir} was specified. - -In the case of the example, let's place the executable in the root -of the hierarchy, ie the same directory as @code{build.gpr}. Hence -the project file is now - -@example -project Build is - for Source_Dirs use ("common"); - for Object_Dir use "obj"; - for Exec_Dir use "."; -- <<<< -end Build; -@end example - -@node Main Subprograms,Tools Options in Project Files,Object and Exec Directory,Building With Projects -@anchor{gnat_ugn/gnat_project_manager id6}@anchor{15f}@anchor{gnat_ugn/gnat_project_manager main-subprograms}@anchor{160} -@subsection Main Subprograms - - -In the previous section, executables were mentioned. The project manager needs -to be taught what they are. In a project file, an executable is indicated by -pointing to the source file of a main subprogram. In C this is the file that -contains the @cite{main} function, and in Ada the file that contains the main -unit. - -There can be any number of such main files within a given project, and thus -several executables can be built in the context of a single project file. Of -course, one given executable might not (and in fact will not) need all the -source files referenced by the project. As opposed to other build environments -such as @emph{makefile}, one does not need to specify the list of -dependencies of each executable, the project-aware builder knows enough of the -semantics of the languages to build and link only the necessary elements. - -@geindex Main (GNAT Project Manager) - -The list of main files is specified via the @strong{Main} attribute. It contains -a list of file names (no directories). If a project defines this -attribute, it is not necessary to identify main files on the -command line when invoking a builder, and editors like -@emph{GPS} will be able to create extra menus to spawn or debug the -corresponding executables. - -@example -project Build is - for Source_Dirs use ("common"); - for Object_Dir use "obj"; - for Exec_Dir use "."; - for Main use ("proc.adb"); -- <<<< -end Build; -@end example - -If this attribute is defined in the project, then spawning the builder -with a command such as - -@example -gprbuild -Pbuild -@end example - -automatically builds all the executables corresponding to the files -listed in the @emph{Main} attribute. It is possible to specify one -or more executables on the command line to build a subset of them. - -@node Tools Options in Project Files,Compiling with Project Files,Main Subprograms,Building With Projects -@anchor{gnat_ugn/gnat_project_manager tools-options-in-project-files}@anchor{161}@anchor{gnat_ugn/gnat_project_manager id7}@anchor{162} -@subsection Tools Options in Project Files - - -We now have a project file that fully describes our environment, and can be -used to build the application with a simple @emph{gprbuild} command as seen -in the previous section. In fact, the empty project we showed immediately at -the beginning (with no attribute at all) could already fulfill that need if it -was put in the @code{common} directory. - -Of course, we might want more control. This section shows you how to specify -the compilation switches that the various tools involved in the building of the -executable should use. - -@geindex command line length (GNAT Project Manager) - -Since source names and locations are described in the project file, it is not -necessary to use switches on the command line for this purpose (switches such -as -I for gcc). This removes a major source of command line length overflow. -Clearly, the builders will have to communicate this information one way or -another to the underlying compilers and tools they call but they usually use -response files for this and thus are not subject to command line overflows. - -Several tools participate to the creation of an executable: the compiler -produces object files from the source files; the binder (in the Ada case) -creates a "source" file that takes care, among other things, of elaboration -issues and global variable initialization; and the linker gathers everything -into a single executable that users can execute. All these tools are known to -the project manager and will be called with user defined switches from the -project files. However, we need to introduce a new project file concept to -express the switches to be used for any of the tools involved in the build. - -@geindex project file packages (GNAT Project Manager) - -A project file is subdivided into zero or more @strong{packages}, each of which -contains the attributes specific to one tool (or one set of tools). Project -files use an Ada-like syntax for packages. Package names permitted in project -files are restricted to a predefined set (see @ref{156,,Packages}), and the contents -of packages are limited to a small set of constructs and attributes -(see @ref{155,,Attributes}). - -Our example project file can be extended with the following empty packages. At -this stage, they could all be omitted since they are empty, but they show which -packages would be involved in the build process. - -@example -project Build is - for Source_Dirs use ("common"); - for Object_Dir use "obj"; - for Exec_Dir use "."; - for Main use ("proc.adb"); - - package Builder is --<<< for gprbuild - end Builder; - - package Compiler is --<<< for the compiler - end Compiler; - - package Binder is --<<< for the binder - end Binder; - - package Linker is --<<< for the linker - end Linker; -end Build; -@end example - -Let's first examine the compiler switches. As stated in the initial description -of the example, we want to compile all files with @emph{-O2}. This is a -compiler switch, although it is usual, on the command line, to pass it to the -builder which then passes it to the compiler. It is recommended to use directly -the right package, which will make the setup easier to understand for other -people. - -Several attributes can be used to specify the switches: - -@geindex Default_Switches (GNAT Project Manager) - -@strong{Default_Switches}: - -@quotation - -This is the first mention in this manual of an @strong{indexed attribute}. When -this attribute is defined, one must supply an @emph{index} in the form of a -literal string. -In the case of @emph{Default_Switches}, the index is the name of the -language to which the switches apply (since a different compiler will -likely be used for each language, and each compiler has its own set of -switches). The value of the attribute is a list of switches. - -In this example, we want to compile all Ada source files with the switch -@emph{-O2}, and the resulting project file is as follows -(only the @cite{Compiler} package is shown): - -@example -package Compiler is - for Default_Switches ("Ada") use ("-O2"); -end Compiler; -@end example -@end quotation - -@geindex Switches (GNAT Project Manager) - -@strong{Switches}: - -@quotation - -In some cases, we might want to use specific switches -for one or more files. For instance, compiling @code{proc.adb} might not be -possible at high level of optimization because of a compiler issue. -In such a case, the @emph{Switches} -attribute (indexed on the file name) can be used and will override the -switches defined by @emph{Default_Switches}. Our project file would -become: - -@example -package Compiler is - for Default_Switches ("Ada") - use ("-O2"); - for Switches ("proc.adb") - use ("-O0"); -end Compiler; -@end example - -@cite{Switches} may take a pattern as an index, such as in: - -@example -package Compiler is - for Default_Switches ("Ada") - use ("-O2"); - for Switches ("pkg*") - use ("-O0"); -end Compiler; -@end example - -Sources @code{pkg.adb} and @code{pkg-child.adb} would be compiled with -O0, -not -O2. - -@cite{Switches} can also be given a language name as index instead of a file -name in which case it has the same semantics as @emph{Default_Switches}. -However, indexes with wild cards are never valid for language name. -@end quotation - -@geindex Local_Configuration_Pragmas (GNAT Project Manager) - -@strong{Local_Configuration_Pragmas}: - -@quotation - -This attribute may specify the path -of a file containing configuration pragmas for use by the Ada compiler, -such as @cite{pragma Restrictions (No_Tasking)}. These pragmas will be -used for all the sources of the project. -@end quotation - -The switches for the other tools are defined in a similar manner through the -@strong{Default_Switches} and @strong{Switches} attributes, respectively in the -@emph{Builder} package (for @emph{gprbuild}), -the @emph{Binder} package (binding Ada executables) and the @emph{Linker} -package (for linking executables). - -@node Compiling with Project Files,Executable File Names,Tools Options in Project Files,Building With Projects -@anchor{gnat_ugn/gnat_project_manager compiling-with-project-files}@anchor{163}@anchor{gnat_ugn/gnat_project_manager id8}@anchor{164} -@subsection Compiling with Project Files - - -Now that our project files are written, let's build our executable. -Here is the command we would use from the command line: - -@example -gprbuild -Pbuild -@end example - -This will automatically build the executables specified through the -@emph{Main} attribute: for each, it will compile or recompile the -sources for which the object file does not exist or is not up-to-date; it -will then run the binder; and finally run the linker to create the -executable itself. - -The @emph{gprbuild} builder, can automatically manage C files the -same way: create the file @code{utils.c} in the @code{common} directory, -set the attribute @emph{Languages} to @cite{"(Ada@comma{} C)"}, and re-run - -@example -gprbuild -Pbuild -@end example - -Gprbuild knows how to recompile the C files and will -recompile them only if one of their dependencies has changed. No direct -indication on how to build the various elements is given in the -project file, which describes the project properties rather than a -set of actions to be executed. Here is the invocation of -@emph{gprbuild} when building a multi-language program: - -@example -$ gprbuild -Pbuild -gcc -c proc.adb -gcc -c pack.adb -gcc -c utils.c -gprbind proc -... -gcc proc.o -o proc -@end example - -Notice the three steps described earlier: - - -@itemize * - -@item -The first three gcc commands correspond to the compilation phase. - -@item -The gprbind command corresponds to the post-compilation phase. - -@item -The last gcc command corresponds to the final link. -@end itemize - -@geindex -v option (for GPRbuild) - -The default output of GPRbuild's execution is kept reasonably simple and easy -to understand. In particular, some of the less frequently used commands are not -shown, and some parameters are abbreviated. So it is not possible to rerun the -effect of the @emph{gprbuild} command by cut-and-pasting its output. -GPRbuild's option @cite{-v} provides a much more verbose output which includes, -among other information, more complete compilation, post-compilation and link -commands. - -@node Executable File Names,Avoid Duplication With Variables,Compiling with Project Files,Building With Projects -@anchor{gnat_ugn/gnat_project_manager executable-file-names}@anchor{165}@anchor{gnat_ugn/gnat_project_manager id9}@anchor{166} -@subsection Executable File Names - - -@geindex Executable (GNAT Project Manager) - -By default, the executable name corresponding to a main file is -computed from the main source file name. Through the attribute -@strong{Builder.Executable}, it is possible to change this default. - -For instance, instead of building @emph{proc} (or @emph{proc.exe} -on Windows), we could configure our project file to build "proc1" -(resp proc1.exe) with the following addition: - -@example -project Build is - ... -- same as before - package Builder is - for Executable ("proc.adb") use "proc1"; - end Builder -end Build; -@end example - -@geindex Executable_Suffix (GNAT Project Manager) - -Attribute @strong{Executable_Suffix}, when specified, may change the suffix -of the executable files, when no attribute @cite{Executable} applies: -its value replaces the platform-specific executable suffix. -The default executable suffix is empty on UNIX and ".exe" on Windows. - -It is also possible to change the name of the produced executable by using the -command line switch @emph{-o}. When several mains are defined in the project, -it is not possible to use the @emph{-o} switch and the only way to change the -names of the executable is provided by Attributes @cite{Executable} and -@cite{Executable_Suffix}. - -@node Avoid Duplication With Variables,Naming Schemes,Executable File Names,Building With Projects -@anchor{gnat_ugn/gnat_project_manager id10}@anchor{167}@anchor{gnat_ugn/gnat_project_manager avoid-duplication-with-variables}@anchor{168} -@subsection Avoid Duplication With Variables - - -To illustrate some other project capabilities, here is a slightly more complex -project using similar sources and a main program in C: - -@example -project C_Main is - for Languages use ("Ada", "C"); - for Source_Dirs use ("common"); - for Object_Dir use "obj"; - for Main use ("main.c"); - package Compiler is - C_Switches := ("-pedantic"); - for Default_Switches ("C") use C_Switches; - for Default_Switches ("Ada") use ("-gnaty"); - for Switches ("main.c") use C_Switches & ("-g"); - end Compiler; -end C_Main; -@end example - -This project has many similarities with the previous one. -As expected, its @cite{Main} attribute now refers to a C source. -The attribute @emph{Exec_Dir} is now omitted, thus the resulting -executable will be put in the directory @code{obj}. - -The most noticeable difference is the use of a variable in the -@emph{Compiler} package to store settings used in several attributes. -This avoids text duplication, and eases maintenance (a single place to -modify if we want to add new switches for C files). We will revisit -the use of variables in the context of scenarios (see @ref{14f,,Scenarios in Projects}). - -In this example, we see how the file @code{main.c} can be compiled with -the switches used for all the other C files, plus @emph{-g}. -In this specific situation the use of a variable could have been -replaced by a reference to the @cite{Default_Switches} attribute: - -@example -for Switches ("c_main.c") use Compiler'Default_Switches ("C") & ("-g"); -@end example - -Note the tick (@emph{'}) used to refer to attributes defined in a package. - -Here is the output of the GPRbuild command using this project: - -@example -$ gprbuild -Pc_main -gcc -c -pedantic -g main.c -gcc -c -gnaty proc.adb -gcc -c -gnaty pack.adb -gcc -c -pedantic utils.c -gprbind main.bexch -... -gcc main.o -o main -@end example - -The default switches for Ada sources, -the default switches for C sources (in the compilation of @code{lib.c}), -and the specific switches for @code{main.c} have all been taken into -account. - -@node Naming Schemes,Installation,Avoid Duplication With Variables,Building With Projects -@anchor{gnat_ugn/gnat_project_manager id11}@anchor{169}@anchor{gnat_ugn/gnat_project_manager naming-schemes}@anchor{14e} -@subsection Naming Schemes - - -Sometimes an Ada software system is ported from one compilation environment to -another (say GNAT), and the file are not named using the default GNAT -conventions. Instead of changing all the file names, which for a variety of -reasons might not be possible, you can define the relevant file naming scheme -in the @strong{Naming} package of your project file. - -The naming scheme has two distinct goals for the project manager: it -allows finding of source files when searching in the source -directories, and given a source file name it makes it possible to guess -the associated language, and thus the compiler to use. - -Note that the use by the Ada compiler of pragmas Source_File_Name is not -supported when using project files. You must use the features described in this -paragraph. You can however specify other configuration pragmas. - -The following attributes can be defined in package @cite{Naming}: - -@geindex Casing (GNAT Project Manager) - -@strong{Casing}: - -@quotation - -Its value must be one of @cite{"lowercase"} (the default if -unspecified), @cite{"uppercase"} or @cite{"mixedcase"}. It describes the -casing of file names with regards to the Ada unit name. Given an Ada unit -My_Unit, the file name will respectively be @code{my_unit.adb} (lowercase), -@code{MY_UNIT.ADB} (uppercase) or @code{My_Unit.adb} (mixedcase). -On Windows, file names are case insensitive, so this attribute is -irrelevant. -@end quotation - -@geindex Dot_Replacement (GNAT Project Manager) - -@strong{Dot_Replacement}: - -@quotation - -This attribute specifies the string that should replace the "." in unit -names. Its default value is @cite{"-"} so that a unit -@cite{Parent.Child} is expected to be found in the file -@code{parent-child.adb}. The replacement string must satisfy the following -requirements to avoid ambiguities in the naming scheme: - - -@itemize * - -@item -It must not be empty - -@item -It cannot start or end with an alphanumeric character - -@item -It cannot be a single underscore - -@item -It cannot start with an underscore followed by an alphanumeric - -@item -It cannot contain a dot @cite{'.'} except if the entire string is @cite{"."} -@end itemize -@end quotation - -@geindex Spec_Suffix (GNAT Project Manager) - -@geindex Specification_Suffix (GNAT Project Manager) - -@strong{Spec_Suffix} and @strong{Specification_Suffix}: - -@quotation - -For Ada, these attributes give the suffix used in file names that contain -specifications. For other languages, they give the extension for files -that contain declaration (header files in C for instance). The attribute -is indexed on the language. -The two attributes are equivalent, but the latter is obsolescent. - -If the value of the attribute is the empty string, it indicates to the -Project Manager that the only specifications/header files for the language -are those specified with attributes @cite{Spec} or -@cite{Specification_Exceptions}. - -If @cite{Spec_Suffix ("Ada")} is not specified, then the default is -@cite{".ads"}. - -A non empty value must satisfy the following requirements: - - -@itemize * - -@item -It must include at least one dot - -@item -If @cite{Dot_Replacement} is a single dot, then it cannot include -more than one dot. -@end itemize -@end quotation - -@geindex Body_Suffix (GNAT Project Manager) - -@geindex Implementation_Suffix (GNAT Project Manager) - -@strong{Body_Suffix} and @strong{Implementation_Suffix}: - -@quotation - -These attributes give the extension used for file names that contain -code (bodies in Ada). They are indexed on the language. The second -version is obsolescent and fully replaced by the first attribute. - -For each language of a project, one of these two attributes need to be -specified, either in the project itself or in the configuration project file. - -If the value of the attribute is the empty string, it indicates to the -Project Manager that the only source files for the language -are those specified with attributes @cite{Body} or -@cite{Implementation_Exceptions}. - -These attributes must satisfy the same requirements as @cite{Spec_Suffix}. -In addition, they must be different from any of the values in -@cite{Spec_Suffix}. -If @cite{Body_Suffix ("Ada")} is not specified, then the default is -@cite{".adb"}. - -If @cite{Body_Suffix ("Ada")} and @cite{Spec_Suffix ("Ada")} end with the -same string, then a file name that ends with the longest of these two -suffixes will be a body if the longest suffix is @cite{Body_Suffix ("Ada")} -or a spec if the longest suffix is @cite{Spec_Suffix ("Ada")}. - -If the suffix does not start with a '.', a file with a name exactly equal to -the suffix will also be part of the project (for instance if you define the -suffix as @cite{Makefile.in}, a file called @code{Makefile.in} will be part -of the project. This capability is usually not interesting when building. -However, it might become useful when a project is also used to -find the list of source files in an editor, like the GNAT Programming System -(GPS). -@end quotation - -@geindex Separate_Suffix (GNAT Project Manager) - -@strong{Separate_Suffix}: - -@quotation - -This attribute is specific to Ada. It denotes the suffix used in file names -that contain separate bodies. If it is not specified, then it defaults to -same value as @cite{Body_Suffix ("Ada")}. - -The value of this attribute cannot be the empty string. - -Otherwise, the same rules apply as for the -@cite{Body_Suffix} attribute. The only accepted index is "Ada". -@end quotation - -@strong{Spec} or @strong{Specification}: - -@quotation - -@geindex Spec (GNAT Project Manager) - -@geindex Specification (GNAT Project Manager) - -This attribute @cite{Spec} can be used to define the source file name for a -given Ada compilation unit's spec. The index is the literal name of the Ada -unit (case insensitive). The value is the literal base name of the file that -contains this unit's spec (case sensitive or insensitive depending on the -operating system). This attribute allows the definition of exceptions to the -general naming scheme, in case some files do not follow the usual -convention. - -When a source file contains several units, the relative position of the unit -can be indicated. The first unit in the file is at position 1 - -@example -for Spec ("MyPack.MyChild") use "mypack.mychild.spec"; -for Spec ("top") use "foo.a" at 1; -for Spec ("foo") use "foo.a" at 2; -@end example -@end quotation - -@geindex Body (GNAT Project Manager) - -@geindex Implementation (GNAT Project Manager) - -@strong{Body} or @strong{Implementation}: - -@quotation - -These attribute play the same role as @emph{Spec} for Ada bodies. -@end quotation - -@geindex Specification_Exceptions (GNAT Project Manager) - -@geindex Implementation_Exceptions (GNAT Project Manager) - -@strong{Specification_Exceptions} and @strong{Implementation_Exceptions}: - -@quotation - -These attributes define exceptions to the naming scheme for languages -other than Ada. They are indexed on the language name, and contain -a list of file names respectively for headers and source code. -@end quotation - -For example, the following package models the Apex file naming rules: - -@example -package Naming is - for Casing use "lowercase"; - for Dot_Replacement use "."; - for Spec_Suffix ("Ada") use ".1.ada"; - for Body_Suffix ("Ada") use ".2.ada"; -end Naming; -@end example - -@node Installation,Distributed support,Naming Schemes,Building With Projects -@anchor{gnat_ugn/gnat_project_manager id12}@anchor{16a}@anchor{gnat_ugn/gnat_project_manager installation}@anchor{16b} -@subsection Installation - - -After building an application or a library it is often required to -install it into the development environment. For instance this step is -required if the library is to be used by another application. -The @emph{gprinstall} tool provides an easy way to install -libraries, executable or object code generated during the build. The -@strong{Install} package can be used to change the default locations. - -The following attributes can be defined in package @cite{Install}: - -@geindex Active (GNAT Project Manager) - - -@table @asis - -@item @strong{Active} - -Whether the project is to be installed, values are @cite{true} -(default) or @cite{false}. -@end table - -@geindex Artifacts (GNAT Project Manager) - -@strong{Artifacts} - -@quotation - -An array attribute to declare a set of files not part of the sources -to be installed. The array discriminant is the directory where the -file is to be installed. If a relative directory then Prefix (see -below) is prepended. Note also that if the same file name occurs -multiple time in the attribute list, the last one will be the one -installed. -@end quotation - -@geindex Prefix (GNAT Project Manager) - -@strong{Prefix}: - -@quotation - -Root directory for the installation. -@end quotation - -@strong{Exec_Subdir} - -@quotation - -Subdirectory of @strong{Prefix} where executables are to be -installed. Default is @strong{bin}. -@end quotation - -@strong{Lib_Subdir} - -@quotation - -Subdirectory of @strong{Prefix} where directory with the library or object -files is to be installed. Default is @strong{lib}. -@end quotation - -@strong{Sources_Subdir} - -@quotation - -Subdirectory of @strong{Prefix} where directory with sources is to be -installed. Default is @strong{include}. -@end quotation - -@strong{Project_Subdir} - -@quotation - -Subdirectory of @strong{Prefix} where the generated project file is to be -installed. Default is @strong{share/gpr}. -@end quotation - -@strong{Mode} - -@quotation - -The installation mode, it is either @strong{dev} (default) or @strong{usage}. -See @strong{gprbuild} user's guide for details. -@end quotation - -@strong{Install_Name} - -@quotation - -Specify the name to use for recording the installation. The default is -the project name without the extension. -@end quotation - -@node Distributed support,,Installation,Building With Projects -@anchor{gnat_ugn/gnat_project_manager id13}@anchor{16c}@anchor{gnat_ugn/gnat_project_manager distributed-support}@anchor{16d} -@subsection Distributed support - - -For large projects the compilation time can become a limitation in -the development cycle. To cope with that, GPRbuild supports -distributed compilation. - -The following attributes can be defined in package @cite{Remote}: - -@geindex Root_Dir (GNAT Project Manager) - -@strong{Root_Dir}: - -@quotation - -Root directory of the project's sources. The default value is the -project's directory. -@end quotation - -@node Organizing Projects into Subsystems,Scenarios in Projects,Building With Projects,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager organizing-projects-into-subsystems}@anchor{151}@anchor{gnat_ugn/gnat_project_manager id14}@anchor{16e} -@section Organizing Projects into Subsystems - - -A @strong{subsystem} is a coherent part of the complete system to be built. It is -represented by a set of sources and one single object directory. A system can -be composed of a single subsystem when it is simple as we have seen in the -first section. Complex systems are usually composed of several interdependent -subsystems. A subsystem is dependent on another subsystem if knowledge of the -other one is required to build it, and in particular if visibility on some of -the sources of this other subsystem is required. Each subsystem is usually -represented by its own project file. - -In this section, the previous example is being extended. Let's assume some -sources of our @cite{Build} project depend on other sources. -For instance, when building a graphical interface, it is usual to depend upon -a graphical library toolkit such as GtkAda. Furthermore, we also need -sources from a logging module we had previously written. - -@menu -* Project Dependencies:: -* Cyclic Project Dependencies:: -* Sharing Between Projects:: -* Global Attributes:: - -@end menu - -@node Project Dependencies,Cyclic Project Dependencies,,Organizing Projects into Subsystems -@anchor{gnat_ugn/gnat_project_manager project-dependencies}@anchor{16f}@anchor{gnat_ugn/gnat_project_manager id15}@anchor{170} -@subsection Project Dependencies - - -GtkAda comes with its own project file (appropriately called -@code{gtkada.gpr}), and we will assume we have already built a project -called @code{logging.gpr} for the logging module. With the information provided -so far in @code{build.gpr}, building the application would fail with an error -indicating that the gtkada and logging units that are relied upon by the sources -of this project cannot be found. - -This is solved by adding the following @strong{with} clauses at the beginning of our -project: - -@example -with "gtkada.gpr"; -with "a/b/logging.gpr"; -project Build is - ... -- as before -end Build; -@end example - -@geindex Externally_Built (GNAT Project Manager) - -When such a project is compiled, @emph{gprbuild} will automatically check -the other projects and recompile their sources when needed. It will also -recompile the sources from @cite{Build} when needed, and finally create the -executable. In some cases, the implementation units needed to recompile a -project are not available, or come from some third party and you do not want to -recompile it yourself. In this case, set the attribute @strong{Externally_Built} to -"true", indicating to the builder that this project can be assumed to be -up-to-date, and should not be considered for recompilation. In Ada, if the -sources of this externally built project were compiled with another version of -the compiler or with incompatible options, the binder will issue an error. - -The project's @emph{with} clause has several effects. It provides source -visibility between projects during the compilation process. It also guarantees -that the necessary object files from @cite{Logging} and @cite{GtkAda} are -available when linking @cite{Build}. - -As can be seen in this example, the syntax for importing projects is similar -to the syntax for importing compilation units in Ada. However, project files -use literal strings instead of names, and the @emph{with} clause identifies -project files rather than packages. - -Each literal string after @emph{with} is the path -(absolute or relative) to a project file. The @cite{.gpr} extension is -optional, although we recommend adding it. If no extension is specified, -and no project file with the @code{.gpr} extension is found, then -the file is searched for exactly as written in the @emph{with} clause, -that is with no extension. - -As mentioned above, the path after a @emph{with} has to be a literal -string, and you cannot use concatenation, or lookup the value of external -variables to change the directories from which a project is loaded. -A solution if you need something like this is to use aggregate projects -(see @ref{171,,Aggregate Projects}). - -@geindex project path (GNAT Project Manager) - -When a relative path or a base name is used, the -project files are searched relative to each of the directories in the -@strong{project path}. This path includes all the directories found with the -following algorithm, in this order; the first matching file is used: - - -@itemize * - -@item -First, the file is searched relative to the directory that contains the -current project file. - -@geindex GPR_PROJECT_PATH_FILE (GNAT Project Manager) - -@geindex GPR_PROJECT_PATH (GNAT Project Manager) - -@geindex ADA_PROJECT_PATH (GNAT Project Manager) - -@item -Then it is searched relative to all the directories specified in the -environment variables @strong{GPR_PROJECT_PATH_FILE}, -@strong{GPR_PROJECT_PATH} and @strong{ADA_PROJECT_PATH} (in that order) if they exist. -The value of @strong{GPR_PROJECT_PATH_FILE}, when defined, is the path name of -a text file that contains project directory path names, one per line. -@strong{GPR_PROJECT_PATH} and @strong{ADA_PROJECT_PATH}, when defined, contain -project directory path names separated by directory separators. -@strong{ADA_PROJECT_PATH} is used for compatibility, it is recommended to -use @strong{GPR_PROJECT_PATH_FILE} or @strong{GPR_PROJECT_PATH}. - -@item -Finally, it is searched relative to the default project directories. -Such directories depend on the tool used. The locations searched in the -specified order are: - - -@itemize * - -@item -@code{//lib/gnat} if option @emph{--target} is specified - -@item -@code{//share/gpr} if option @emph{--target} is specified - -@item -@code{/share/gpr/} - -@item -@code{/lib/gnat/} -@end itemize - -In our example, @code{gtkada.gpr} is found in the predefined directory if -it was installed at the same root as GNAT. -@end itemize - -Some tools also support extending the project path from the command line, -generally through the @emph{-aP}. You can see the value of the project -path by using the @emph{gnatls -v} command. - -Any symbolic link will be fully resolved in the directory of the -importing project file before the imported project file is examined. - -Any source file in the imported project can be used by the sources of the -importing project, transitively. -Thus if @cite{A} imports @cite{B}, which imports @cite{C}, the sources of -@cite{A} may depend on the sources of @cite{C}, even if @cite{A} does not -import @cite{C} explicitly. However, this is not recommended, because if -and when @cite{B} ceases to import @cite{C}, some sources in @cite{A} will -no longer compile. @emph{gprbuild} has a switch @emph{--no-indirect-imports} -that will report such indirect dependencies. - -@cartouche -@quotation Note -One very important aspect of a project hierarchy is that -@strong{a given source can only belong to one project} (otherwise the project manager -would not know which settings apply to it and when to recompile it). It means -that different project files do not usually share source directories or -when they do, they need to specify precisely which project owns which sources -using attribute @cite{Source_Files} or equivalent. By contrast, 2 projects -can each own a source with the same base file name as long as they live in -different directories. The latter is not true for Ada Sources because of the -correlation between source files and Ada units. -@end quotation -@end cartouche - -@node Cyclic Project Dependencies,Sharing Between Projects,Project Dependencies,Organizing Projects into Subsystems -@anchor{gnat_ugn/gnat_project_manager id16}@anchor{172}@anchor{gnat_ugn/gnat_project_manager cyclic-project-dependencies}@anchor{173} -@subsection Cyclic Project Dependencies - - -Cyclic dependencies are mostly forbidden: -if @cite{A} imports @cite{B} (directly or indirectly) then @cite{B} -is not allowed to import @cite{A}. However, there are cases when cyclic -dependencies would be beneficial. For these cases, another form of import -between projects exists: the @strong{limited with}. A project @cite{A} that -imports a project @cite{B} with a straight @emph{with} may also be imported, -directly or indirectly, by @cite{B} through a @cite{limited with}. - -The difference between straight @emph{with} and @cite{limited with} is that -the name of a project imported with a @cite{limited with} cannot be used in the -project importing it. In particular, its packages cannot be renamed and -its variables cannot be referred to. - -@example -with "b.gpr"; -with "c.gpr"; -project A is - for Exec_Dir use B'Exec_Dir; -- ok -end A; - -limited with "a.gpr"; -- Cyclic dependency: A -> B -> A -project B is - for Exec_Dir use A'Exec_Dir; -- not ok -end B; - -with "d.gpr"; -project C is -end C; - -limited with "a.gpr"; -- Cyclic dependency: A -> C -> D -> A -project D is - for Exec_Dir use A'Exec_Dir; -- not ok -end D; -@end example - -@node Sharing Between Projects,Global Attributes,Cyclic Project Dependencies,Organizing Projects into Subsystems -@anchor{gnat_ugn/gnat_project_manager sharing-between-projects}@anchor{174}@anchor{gnat_ugn/gnat_project_manager id17}@anchor{175} -@subsection Sharing Between Projects - - -When building an application, it is common to have similar needs in several of -the projects corresponding to the subsystems under construction. For instance, -they will all have the same compilation switches. - -As seen before (see @ref{161,,Tools Options in Project Files}), setting compilation -switches for all sources of a subsystem is simple: it is just a matter of -adding a @cite{Compiler.Default_Switches} attribute to each project files with -the same value. Of course, that means duplication of data, and both places need -to be changed in order to recompile the whole application with different -switches. It can become a real problem if there are many subsystems and thus -many project files to edit. - -There are two main approaches to avoiding this duplication: - - -@itemize * - -@item -Since @code{build.gpr} imports @code{logging.gpr}, we could change it -to reference the attribute in Logging, either through a package renaming, -or by referencing the attribute. The following example shows both cases: - -@example -project Logging is - package Compiler is - for Switches ("Ada") - use ("-O2"); - end Compiler; - package Binder is - for Switches ("Ada") - use ("-E"); - end Binder; -end Logging; - -with "logging.gpr"; -project Build is - package Compiler renames Logging.Compiler; - package Binder is - for Switches ("Ada") use Logging.Binder'Switches ("Ada"); - end Binder; -end Build; -@end example - -The solution used for @cite{Compiler} gets the same value for all -attributes of the package, but you cannot modify anything from the -package (adding extra switches or some exceptions). The second -version is more flexible, but more verbose. - -If you need to refer to the value of a variable in an imported -project, rather than an attribute, the syntax is similar but uses -a "." rather than an apostrophe. For instance: - -@example -with "imported"; -project Main is - Var1 := Imported.Var; -end Main; -@end example - -@item -The second approach is to define the switches in a third project. -That project is set up without any sources (so that, as opposed to -the first example, none of the project plays a special role), and -will only be used to define the attributes. Such a project is -typically called @code{shared.gpr}. - -@example -abstract project Shared is - for Source_Files use (); -- no sources - package Compiler is - for Switches ("Ada") - use ("-O2"); - end Compiler; -end Shared; - -with "shared.gpr"; -project Logging is - package Compiler renames Shared.Compiler; -end Logging; - -with "shared.gpr"; -project Build is - package Compiler renames Shared.Compiler; -end Build; -@end example - -As for the first example, we could have chosen to set the attributes -one by one rather than to rename a package. The reason we explicitly -indicate that @cite{Shared} has no sources is so that it can be created -in any directory and we are sure it shares no sources with @cite{Build} -or @cite{Logging}, which of course would be invalid. - -@geindex project qualifier (GNAT Project Manager) - -Note the additional use of the @strong{abstract} qualifier in @code{shared.gpr}. -This qualifier is optional, but helps convey the message that we do not -intend this project to have sources (see @ref{176,,Qualified Projects} for -more qualifiers). -@end itemize - -@node Global Attributes,,Sharing Between Projects,Organizing Projects into Subsystems -@anchor{gnat_ugn/gnat_project_manager global-attributes}@anchor{177}@anchor{gnat_ugn/gnat_project_manager id18}@anchor{178} -@subsection Global Attributes - - -We have already seen many examples of attributes used to specify a special -option of one of the tools involved in the build process. Most of those -attributes are project specific. That it to say, they only affect the invocation -of tools on the sources of the project where they are defined. - -There are a few additional attributes that apply to all projects in a -hierarchy as long as they are defined on the "main" project. -The main project is the project explicitly mentioned on the command-line. -The project hierarchy is the "with"-closure of the main project. - -Here is a list of commonly used global attributes: - -@geindex Global_Configuration_Pragmas (GNAT Project Manager) - -@strong{Builder.Global_Configuration_Pragmas}: - -@quotation - -This attribute points to a file that contains configuration pragmas -to use when building executables. These pragmas apply for all -executables built from this project hierarchy. As we have seen before, -additional pragmas can be specified on a per-project basis by setting the -@cite{Compiler.Local_Configuration_Pragmas} attribute. -@end quotation - -@geindex Global_Compilation_Switches (GNAT Project Manager) - -@strong{Builder.Global_Compilation_Switches}: - -@quotation - -This attribute is a list of compiler switches to use when compiling any -source file in the project hierarchy. These switches are used in addition -to the ones defined in the @cite{Compiler} package, which only apply to -the sources of the corresponding project. This attribute is indexed on -the name of the language. -@end quotation - -Using such global capabilities is convenient. It can also lead to unexpected -behavior. Especially when several subsystems are shared among different main -projects and the different global attributes are not -compatible. Note that using aggregate projects can be a safer and more powerful -replacement to global attributes. - -@node Scenarios in Projects,Library Projects,Organizing Projects into Subsystems,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager id19}@anchor{179}@anchor{gnat_ugn/gnat_project_manager scenarios-in-projects}@anchor{14f} -@section Scenarios in Projects - - -Various aspects of the projects can be modified based on @strong{scenarios}. These -are user-defined modes that change the behavior of a project. Typical -examples are the setup of platform-specific compiler options, or the use of -a debug and a release mode (the former would activate the generation of debug -information, while the second will focus on improving code optimization). - -Let's enhance our example to support debug and release modes. The issue is to -let the user choose what kind of system he is building: use @emph{-g} as -compiler switches in debug mode and @emph{-O2} in release mode. We will also -set up the projects so that we do not share the same object directory in both -modes; otherwise switching from one to the other might trigger more -recompilations than needed or mix objects from the two modes. - -One naive approach is to create two different project files, say -@code{build_debug.gpr} and @code{build_release.gpr}, that set the appropriate -attributes as explained in previous sections. This solution does not scale -well, because in the presence of multiple projects depending on each other, you -will also have to duplicate the complete hierarchy and adapt the project files -to point to the right copies. - -@geindex scenarios (GNAT Project Manager) - -Instead, project files support the notion of scenarios controlled -by external values. Such values can come from several sources (in decreasing -order of priority): - -@geindex -X (usage with GNAT Project Manager) - - -@table @asis - -@item @strong{Command line}: - -When launching @emph{gprbuild}, the user can pass -extra @emph{-X} switches to define the external value. In -our case, the command line might look like - -@example -gprbuild -Pbuild.gpr -Xmode=release -@end example - -@item @strong{Environment variables}: - -When the external value does not come from the command line, it can come from -the value of environment variables of the appropriate name. -In our case, if an environment variable called "mode" -exists, its value will be taken into account. -@end table - -@geindex external (GNAT Project Manager) - -@strong{External function second parameter}. - -We now need to get that value in the project. The general form is to use -the predefined function @strong{external} which returns the current value of -the external. For instance, we could set up the object directory to point to -either @code{obj/debug} or @code{obj/release} by changing our project to - -@example -project Build is - for Object_Dir use "obj/" & external ("mode", "debug"); - ... -- as before -end Build; -@end example - -The second parameter to @cite{external} is optional, and is the default -value to use if "mode" is not set from the command line or the environment. - -In order to set the switches according to the different scenarios, other -constructs have to be introduced such as typed variables and case constructions. - -@geindex typed variable (GNAT Project Manager) - -@geindex case construction (GNAT Project Manager) - -A @strong{typed variable} is a variable that -can take only a limited number of values, similar to an enumeration in Ada. -Such a variable can then be used in a @strong{case construction} and create conditional -sections in the project. The following example shows how this can be done: - -@example -project Build is - type Mode_Type is ("debug", "release"); -- all possible values - Mode : Mode_Type := external ("mode", "debug"); -- a typed variable - - package Compiler is - case Mode is - when "debug" => - for Switches ("Ada") - use ("-g"); - when "release" => - for Switches ("Ada") - use ("-O2"); - end case; - end Compiler; -end Build; -@end example - -The project has suddenly grown in size, but has become much more flexible. -@cite{Mode_Type} defines the only valid values for the @cite{mode} variable. If -any other value is read from the environment, an error is reported and the -project is considered as invalid. - -The @cite{Mode} variable is initialized with an external value -defaulting to @cite{"debug"}. This default could be omitted and that would -force the user to define the value. Finally, we can use a case construction to set the -switches depending on the scenario the user has chosen. - -Most aspects of the projects can depend on scenarios. The notable exception -are project dependencies (@emph{with} clauses), which cannot depend on a scenario. - -Scenarios work the same way with @strong{project hierarchies}: you can either -duplicate a variable similar to @cite{Mode} in each of the project (as long -as the first argument to @cite{external} is always the same and the type is -the same), or simply set the variable in the @code{shared.gpr} project -(see @ref{174,,Sharing Between Projects}). - -@node Library Projects,Project Extension,Scenarios in Projects,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager library-projects}@anchor{8a}@anchor{gnat_ugn/gnat_project_manager id20}@anchor{17a} -@section Library Projects - - -So far, we have seen examples of projects that create executables. However, -it is also possible to create libraries instead. A @strong{library} is a specific -type of subsystem where, for convenience, objects are grouped together -using system-specific means such as archives or windows DLLs. - -Library projects provide a system- and language-independent way of building -both @strong{static} and @strong{dynamic} libraries. They also support the concept of -@strong{standalone libraries} (SAL) which offer two significant properties: the -elaboration (e.g. initialization) of the library is either automatic or -very simple; a change in the -implementation part of the library implies minimal post-compilation actions on -the complete system and potentially no action at all for the rest of the -system in the case of dynamic SALs. - -There is a restriction on shared library projects: by default, they are only -allowed to import other shared library projects. They are not allowed to -import non library projects or static library projects. - -The GNAT Project Manager takes complete care of the library build, rebuild and -installation tasks, including recompilation of the source files for which -objects do not exist or are not up to date, assembly of the library archive, and -installation of the library (i.e., copying associated source, object and -@code{ALI} files to the specified location). - -@menu -* Building Libraries:: -* Using Library Projects:: -* Stand-alone Library Projects:: -* Installing a library with project files:: - -@end menu - -@node Building Libraries,Using Library Projects,,Library Projects -@anchor{gnat_ugn/gnat_project_manager id21}@anchor{17b}@anchor{gnat_ugn/gnat_project_manager building-libraries}@anchor{17c} -@subsection Building Libraries - - -Let's enhance our example and transform the @cite{logging} subsystem into a -library. In order to do so, a few changes need to be made to -@code{logging.gpr}. Some attributes need to be defined: at least -@cite{Library_Name} and @cite{Library_Dir}; in addition, some other attributes -can be used to specify specific aspects of the library. For readability, it is -also recommended (although not mandatory), to use the qualifier @cite{library} -in front of the @cite{project} keyword. - -@geindex Library_Name (GNAT Project Manager) - -@strong{Library_Name}: - -@quotation - -This attribute is the name of the library to be built. There is no -restriction on the name of a library imposed by the project manager, except -for stand-alone libraries whose names must follow the syntax of Ada -identifiers; however, there may be system-specific restrictions on the name. -In general, it is recommended to stick to alphanumeric characters (and -possibly single underscores) to help portability. -@end quotation - -@geindex Library_Dir (GNAT Project Manager) - -@strong{Library_Dir}: - -@quotation - -This attribute is the path (absolute or relative) of the directory where -the library is to be installed. In the process of building a library, -the sources are compiled, the object files end up in the explicit or -implicit @cite{Object_Dir} directory. When all sources of a library -are compiled, some of the compilation artifacts, including the library itself, -are copied to the library_dir directory. This directory must exist and be -writable. It must also be different from the object directory so that cleanup -activities in the Library_Dir do not affect recompilation needs. -@end quotation - -Here is the new version of @code{logging.gpr} that makes it a library: - -@example -library project Logging is -- "library" is optional - for Library_Name use "logging"; -- will create "liblogging.a" on Unix - for Object_Dir use "obj"; - for Library_Dir use "lib"; -- different from object_dir -end Logging; -@end example - -Once the above two attributes are defined, the library project is valid and -is enough for building a library with default characteristics. -Other library-related attributes can be used to change the defaults: - -@geindex Library_Kind (GNAT Project Manager) - -@strong{Library_Kind}: - -@quotation - -The value of this attribute must be either @cite{"static"}, @cite{"dynamic"} or -@cite{"relocatable"} (the latter is a synonym for dynamic). It indicates -which kind of library should be built (the default is to build a -static library, that is an archive of object files that can potentially -be linked into a static executable). When the library is set to be dynamic, -a separate image is created that will be loaded independently, usually -at the start of the main program execution. Support for dynamic libraries is -very platform specific, for instance on Windows it takes the form of a DLL -while on GNU/Linux, it is a dynamic elf image whose suffix is usually -@code{.so}. Library project files, on the other hand, can be written in -a platform independent way so that the same project file can be used to build -a library on different operating systems. - -If you need to build both a static and a dynamic library, it is recommended -to use two different object directories, since in some cases some extra code -needs to be generated for the latter. For such cases, one can either define -two different project files, or a single one that uses scenarios to indicate -the various kinds of library to be built and their corresponding object_dir. -@end quotation - -@geindex Library_ALI_Dir (GNAT Project Manager) - -@strong{Library_ALI_Dir}: - -@quotation - -This attribute may be specified to indicate the directory where the ALI -files of the library are installed. By default, they are copied into the -@cite{Library_Dir} directory, but as for the executables where we have a -separate @cite{Exec_Dir} attribute, you might want to put them in a separate -directory since there can be hundreds of them. The same restrictions as for -the @cite{Library_Dir} attribute apply. -@end quotation - -@geindex Library_Version (GNAT Project Manager) - -@strong{Library_Version}: - -@quotation - -This attribute is platform dependent, and has no effect on Windows. -On Unix, it is used only for dynamic libraries as the internal -name of the library (the @cite{"soname"}). If the library file name (built -from the @cite{Library_Name}) is different from the @cite{Library_Version}, -then the library file will be a symbolic link to the actual file whose name -will be @cite{Library_Version}. This follows the usual installation schemes -for dynamic libraries on many Unix systems. - -@example -project Logging is - Version := "1"; - for Library_Dir use "lib"; - for Library_Name use "logging"; - for Library_Kind use "dynamic"; - for Library_Version use "liblogging.so." & Version; -end Logging; -@end example - -After the compilation, the directory @code{lib} will contain both a -@code{libdummy.so.1} library and a symbolic link to it called -@code{libdummy.so}. -@end quotation - -@geindex Library_GCC (GNAT Project Manager) - -@strong{Library_GCC}: - -@quotation - -This attribute is the name of the tool to use instead of "gcc" to link shared -libraries. A common use of this attribute is to define a wrapper script that -accomplishes specific actions before calling gcc (which itself calls the -linker to build the library image). -@end quotation - -@geindex Library_Options (GNAT Project Manager) - -@strong{Library_Options}: - -@quotation - -This attribute may be used to specify additional switches (last switches) -when linking a shared library. - -It may also be used to add foreign object files to a static library. -Each string in Library_Options is an absolute or relative path of an object -file. When a relative path, it is relative to the object directory. -@end quotation - -@geindex Leading_Library_Options (GNAT Project Manager) - -@strong{Leading_Library_Options}: - -@quotation - -This attribute, that is taken into account only by @emph{gprbuild}, may be -used to specified leading options (first switches) when linking a shared -library. -@end quotation - -@geindex Linker_Options (GNAT Project Manager) - -@strong{Linker.Linker_Options}: - -@quotation - -This attribute specifies additional switches to be given to the linker when -linking an executable. It is ignored when defined in the main project and -taken into account in all other projects that are imported directly or -indirectly. These switches complement the @cite{Linker.Switches} -defined in the main project. This is useful when a particular subsystem -depends on an external library: adding this dependency as a -@cite{Linker_Options} in the project of the subsystem is more convenient than -adding it to all the @cite{Linker.Switches} of the main projects that depend -upon this subsystem. -@end quotation - -@node Using Library Projects,Stand-alone Library Projects,Building Libraries,Library Projects -@anchor{gnat_ugn/gnat_project_manager id22}@anchor{17d}@anchor{gnat_ugn/gnat_project_manager using-library-projects}@anchor{17e} -@subsection Using Library Projects - - -When the builder detects that a project file is a library project file, it -recompiles all sources of the project that need recompilation and rebuild the -library if any of the sources have been recompiled. It then groups all object -files into a single file, which is a shared or a static library. This library -can later on be linked with multiple executables. Note that the use -of shard libraries reduces the size of the final executable and can also reduce -the memory footprint at execution time when the library is shared among several -executables. - -@emph{gprbuild also allows to build **multi-language libraries*} when specifying -sources from multiple languages. - -A non-library project can import a library project. When the builder is invoked -on the former, the library of the latter is only rebuilt when absolutely -necessary. For instance, if a unit of the library is not up-to-date but none of -the executables need this unit, then the unit is not recompiled and the library -is not reassembled. For instance, let's assume in our example that logging has -the following sources: @code{log1.ads}, @code{log1.adb}, @code{log2.ads} and -@code{log2.adb}. If @code{log1.adb} has been modified, then the library -@code{liblogging} will be rebuilt when compiling all the sources of -@cite{Build} only if @code{proc.ads}, @code{pack.ads} or @code{pack.adb} -include a @cite{"with Log1"}. - -To ensure that all the sources in the @cite{Logging} library are -up to date, and that all the sources of @cite{Build} are also up to date, -the following two commands need to be used: - -@example -gprbuild -Plogging.gpr -gprbuild -Pbuild.gpr -@end example - -All @code{ALI} files will also be copied from the object directory to the -library directory. To build executables, @emph{gprbuild} will use the -library rather than the individual object files. - -Library projects can also be useful to describe a library that needs to be used -but, for some reason, cannot be rebuilt. For instance, it is the case when some -of the library sources are not available. Such library projects need to use the -@cite{Externally_Built} attribute as in the example below: - -@example -library project Extern_Lib is - for Languages use ("Ada", "C"); - for Source_Dirs use ("lib_src"); - for Library_Dir use "lib2"; - for Library_Kind use "dynamic"; - for Library_Name use "l2"; - for Externally_Built use "true"; -- <<<< -end Extern_Lib; -@end example - -In the case of externally built libraries, the @cite{Object_Dir} -attribute does not need to be specified because it will never be -used. - -The main effect of using such an externally built library project is mostly to -affect the linker command in order to reference the desired library. It can -also be achieved by using @cite{Linker.Linker_Options} or @cite{Linker.Switches} -in the project corresponding to the subsystem needing this external library. -This latter method is more straightforward in simple cases but when several -subsystems depend upon the same external library, finding the proper place -for the @cite{Linker.Linker_Options} might not be easy and if it is -not placed properly, the final link command is likely to present ordering issues. -In such a situation, it is better to use the externally built library project -so that all other subsystems depending on it can declare this dependency thanks -to a project @emph{with} clause, which in turn will trigger the builder to find -the proper order of libraries in the final link command. - -@node Stand-alone Library Projects,Installing a library with project files,Using Library Projects,Library Projects -@anchor{gnat_ugn/gnat_project_manager id23}@anchor{17f}@anchor{gnat_ugn/gnat_project_manager stand-alone-library-projects}@anchor{97} -@subsection Stand-alone Library Projects - - -@geindex standalone libraries (usage with GNAT Project Manager) - -A @strong{stand-alone library} is a library that contains the necessary code to -elaborate the Ada units that are included in the library. A stand-alone -library is a convenient way to add an Ada subsystem to a more global system -whose main is not in Ada since it makes the elaboration of the Ada part mostly -transparent. However, stand-alone libraries are also useful when the main is in -Ada: they provide a means for minimizing relinking & redeployment of complex -systems when localized changes are made. - -The name of a stand-alone library, specified with attribute -@cite{Library_Name}, must have the syntax of an Ada identifier. - -The most prominent characteristic of a stand-alone library is that it offers a -distinction between interface units and implementation units. Only the former -are visible to units outside the library. A stand-alone library project is thus -characterised by a third attribute, usually @strong{Library_Interface}, in addition -to the two attributes that make a project a Library Project -(@cite{Library_Name} and @cite{Library_Dir}). This third attribute may also be -@strong{Interfaces}. @strong{Library_Interface} only works when the interface is in Ada -and takes a list of units as parameter. @strong{Interfaces} works for any supported -language and takes a list of sources as parameter. - -@geindex Library_Interface (GNAT Project Manager) - -@strong{Library_Interface}: - -@quotation - -This attribute defines an explicit subset of the units of the project. Units -from projects importing this library project may only "with" units whose -sources are listed in the @cite{Library_Interface}. Other sources are -considered implementation units. - -@example -for Library_Dir use "lib"; -for Library_Name use "logging"; -for Library_Interface use ("lib1", "lib2"); -- unit names -@end example -@end quotation - -@strong{Interfaces} - -@quotation - -This attribute defines an explicit subset of the source files of a project. -Sources from projects importing this project, can only depend on sources from -this subset. This attribute can be used on non library projects. It can also -be used as a replacement for attribute @cite{Library_Interface}, in which -case, units have to be replaced by source files. For multi-language library -projects, it is the only way to make the project a Stand-Alone Library project -whose interface is not purely Ada. -@end quotation - -@geindex Library_Standalone (GNAT Project Manager) - -@strong{Library_Standalone}: - -@quotation - -This attribute defines the kind of standalone library to -build. Values are either @cite{standard} (the default), @cite{no} or -@cite{encapsulated}. When @cite{standard} is used the code to elaborate and -finalize the library is embedded, when @cite{encapsulated} is used the -library can furthermore depend only on static libraries (including -the GNAT runtime). This attribute can be set to @cite{no} to make it clear -that the library should not be standalone in which case the -@cite{Library_Interface} should not defined. Note that this attribute -only applies to shared libraries, so @cite{Library_Kind} must be set -to @cite{dynamic}. - -@example -for Library_Dir use "lib"; -for Library_Name use "logging"; -for Library_Kind use "dynamic"; -for Library_Interface use ("lib1", "lib2"); -- unit names -for Library_Standalone use "encapsulated"; -@end example -@end quotation - -In order to include the elaboration code in the stand-alone library, the binder -is invoked on the closure of the library units creating a package whose name -depends on the library name (b~logging.ads/b in the example). -This binder-generated package includes @strong{initialization} and @strong{finalization} -procedures whose names depend on the library name (@cite{logginginit} and -@cite{loggingfinal} in the example). The object corresponding to this package is -included in the library. - -@geindex Library_Auto_Init (GNAT Project Manager) - -@strong{Library_Auto_Init}: - -@quotation - -A dynamic stand-alone Library is automatically initialized -if automatic initialization of Stand-alone Libraries is supported on the -platform and if attribute @strong{Library_Auto_Init} is not specified or -is specified with the value "true". A static Stand-alone Library is never -automatically initialized. Specifying "false" for this attribute -prevents automatic initialization. - -When a non-automatically initialized stand-alone library is used in an -executable, its initialization procedure must be called before any service of -the library is used. When the main subprogram is in Ada, it may mean that the -initialization procedure has to be called during elaboration of another -package. -@end quotation - -@geindex Library_Dir (GNAT Project Manager) - -@strong{Library_Dir}: - -@quotation - -For a stand-alone library, only the @code{ALI} files of the interface units -(those that are listed in attribute @cite{Library_Interface}) are copied to -the library directory. As a consequence, only the interface units may be -imported from Ada units outside of the library. If other units are imported, -the binding phase will fail. -@end quotation - -@strong{Binder.Default_Switches}: - -@quotation - -When a stand-alone library is bound, the switches that are specified in -the attribute @strong{Binder.Default_Switches ("Ada")} are -used in the call to @emph{gnatbind}. -@end quotation - -@geindex Library_Src_Dir (GNAT Project Manager) - -@strong{Library_Src_Dir}: - -@quotation - -This attribute defines the location (absolute or relative to the project -directory) where the sources of the interface units are copied at -installation time. -These sources includes the specs of the interface units along with the -closure of sources necessary to compile them successfully. That may include -bodies and subunits, when pragmas @cite{Inline} are used, or when there are -generic units in specs. This directory cannot point to the object directory -or one of the source directories, but it can point to the library directory, -which is the default value for this attribute. -@end quotation - -@geindex Library_Symbol_Policy (GNAT Project Manager) - -@strong{Library_Symbol_Policy}: - -@quotation - -This attribute controls the export of symbols and, on some platforms (like -VMS) that have the notions of major and minor IDs built in the library -files, it controls the setting of these IDs. It is not supported on all -platforms (where it will just have no effect). It may have one of the -following values: - - -@itemize * - -@item -@cite{"autonomous"} or @cite{"default"}: exported symbols are not controlled - -@item -@cite{"compliant"}: if attribute @strong{Library_Reference_Symbol_File} -is not defined, then it is equivalent to policy "autonomous". If there -are exported symbols in the reference symbol file that are not in the -object files of the interfaces, the major ID of the library is increased. -If there are symbols in the object files of the interfaces that are not -in the reference symbol file, these symbols are put at the end of the list -in the newly created symbol file and the minor ID is increased. - -@item -@cite{"controlled"}: the attribute @strong{Library_Reference_Symbol_File} must be -defined. The library will fail to build if the exported symbols in the -object files of the interfaces do not match exactly the symbol in the -symbol file. - -@item -@cite{"restricted"}: The attribute @strong{Library_Symbol_File} must be defined. -The library will fail to build if there are symbols in the symbol file that -are not in the exported symbols of the object files of the interfaces. -Additional symbols in the object files are not added to the symbol file. - -@item -@cite{"direct"}: The attribute @strong{Library_Symbol_File} must be defined and -must designate an existing file in the object directory. This symbol file -is passed directly to the underlying linker without any symbol processing. -@end itemize -@end quotation - -@geindex Library_Reference_Symbol_File (GNAT Project Manager) - -@strong{Library_Reference_Symbol_File} - -@quotation - -This attribute may define the path name of a reference symbol file that is -read when the symbol policy is either "compliant" or "controlled", on -platforms that support symbol control, such as VMS, when building a -stand-alone library. The path may be an absolute path or a path relative -to the project directory. -@end quotation - -@geindex Library_Symbol_File (GNAT Project Manager) - -@strong{Library_Symbol_File} - -@quotation - -This attribute may define the name of the symbol file to be created when -building a stand-alone library when the symbol policy is either "compliant", -"controlled" or "restricted", on platforms that support symbol control, -such as VMS. When symbol policy is "direct", then a file with this name -must exist in the object directory. -@end quotation - -@node Installing a library with project files,,Stand-alone Library Projects,Library Projects -@anchor{gnat_ugn/gnat_project_manager installing-a-library-with-project-files}@anchor{8d}@anchor{gnat_ugn/gnat_project_manager id24}@anchor{180} -@subsection Installing a library with project files - - -When using project files, a usable version of the library is created in the -directory specified by the @cite{Library_Dir} attribute of the library -project file. Thus no further action is needed in order to make use of -the libraries that are built as part of the general application build. - -You may want to install a library in a context different from where the library -is built. This situation arises with third party suppliers, who may want -to distribute a library in binary form where the user is not expected to be -able to recompile the library. The simplest option in this case is to provide -a project file slightly different from the one used to build the library, by -using the @cite{externally_built} attribute. See @ref{17e,,Using Library Projects} - -Another option is to use @emph{gprinstall} to install the library in a -different context than the build location. @emph{gprinstall} automatically -generates a project to use this library, and also copies the minimum set of -sources needed to use the library to the install location. -@ref{16b,,Installation} - -@node Project Extension,Aggregate Projects,Library Projects,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager id25}@anchor{181}@anchor{gnat_ugn/gnat_project_manager project-extension}@anchor{152} -@section Project Extension - - -During development of a large system, it is sometimes necessary to use -modified versions of some of the source files, without changing the original -sources. This can be achieved through the @strong{project extension} facility. - -Suppose for instance that our example @cite{Build} project is built every night -for the whole team, in some shared directory. A developer usually needs to work -on a small part of the system, and might not want to have a copy of all the -sources and all the object files (mostly because that would require too much -disk space, time to recompile everything). He prefers to be able to override -some of the source files in his directory, while taking advantage of all the -object files generated at night. - -Another example can be taken from large software systems, where it is common to have -multiple implementations of a common interface; in Ada terms, multiple -versions of a package body for the same spec. For example, one implementation -might be safe for use in tasking programs, while another might be used only -in sequential applications. This can be modeled in GNAT using the concept -of @emph{project extension}. If one project (the 'child') @emph{extends} -another project (the 'parent') then by default all source files of the -parent project are inherited by the child, but the child project can -override any of the parent's source files with new versions, and can also -add new files or remove unnecessary ones. -This facility is the project analog of a type extension in -object-oriented programming. Project hierarchies are permitted (an extending -project may itself be extended), and a project that -extends a project can also import other projects. - -A third example is that of using project extensions to provide different -versions of the same system. For instance, assume that a @cite{Common} -project is used by two development branches. One of the branches has now -been frozen, and no further change can be done to it or to @cite{Common}. -However, the other development branch still needs evolution of @cite{Common}. -Project extensions provide a flexible solution to create a new version -of a subsystem while sharing and reusing as much as possible from the original -one. - -A project extension implicitly inherits all the sources and objects from the -project it extends. It is possible to create a new version of some of the -sources in one of the additional source directories of the extending -project. Those new versions hide the original versions. Adding new sources or -removing existing ones is also possible. Here is an example on how to extend -the project @cite{Build} from previous examples: - -@example -project Work extends "../bld/build.gpr" is -end Work; -@end example - -The project after @strong{extends} is the one being extended. As usual, it can be -specified using an absolute path, or a path relative to any of the directories -in the project path (see @ref{16f,,Project Dependencies}). This project does not -specify source or object directories, so the default values for these -attributes will be used that is to say the current directory (where project -@cite{Work} is placed). We can compile that project with - -@example -gprbuild -Pwork -@end example - -If no sources have been placed in the current directory, this command -won't do anything, since this project does not change the -sources it inherited from @cite{Build}, therefore all the object files -in @cite{Build} and its dependencies are still valid and are reused -automatically. - -Suppose we now want to supply an alternate version of @code{pack.adb} but use -the existing versions of @code{pack.ads} and @code{proc.adb}. We can create -the new file in Work's current directory (likely by copying the one from the -@cite{Build} project and making changes to it. If new packages are needed at -the same time, we simply create new files in the source directory of the -extending project. - -When we recompile, @emph{gprbuild} will now automatically recompile -this file (thus creating @code{pack.o} in the current directory) and -any file that depends on it (thus creating @code{proc.o}). Finally, the -executable is also linked locally. - -Note that we could have obtained the desired behavior using project import -rather than project inheritance. A @cite{base} project would contain the -sources for @code{pack.ads} and @code{proc.adb}, and @cite{Work} would -import @cite{base} and add @code{pack.adb}. In this scenario, @cite{base} -cannot contain the original version of @code{pack.adb} otherwise there would be -2 versions of the same unit in the closure of the project and this is not -allowed. Generally speaking, it is not recommended to put the spec and the -body of a unit in different projects since this affects their autonomy and -reusability. - -In a project file that extends another project, it is possible to -indicate that an inherited source is @strong{not part} of the sources of the -extending project. This is necessary sometimes when a package spec has -been overridden and no longer requires a body: in this case, it is -necessary to indicate that the inherited body is not part of the sources -of the project, otherwise there will be a compilation error -when compiling the spec. - -@geindex Excluded_Source_Files (GNAT Project Manager) - -@geindex Excluded_Source_List_File (GNAT Project Manager) - -For that purpose, the attribute @strong{Excluded_Source_Files} is used. -Its value is a list of file names. -It is also possible to use attribute @cite{Excluded_Source_List_File}. -Its value is the path of a text file containing one file name per -line. - -@example -project Work extends "../bld/build.gpr" is - for Source_Files use ("pack.ads"); - -- New spec of Pkg does not need a completion - for Excluded_Source_Files use ("pack.adb"); -end Work; -@end example - -All packages that are not declared in the extending project are inherited from -the project being extended, with their attributes, with the exception of -@cite{Linker'Linker_Options} which is never inherited. In particular, an -extending project retains all the switches specified in the project being -extended. - -At the project level, if they are not declared in the extending project, some -attributes are inherited from the project being extended. They are: -@cite{Languages}, @cite{Main} (for a root non library project) and -@cite{Library_Name} (for a project extending a library project). - -@menu -* Project Hierarchy Extension:: - -@end menu - -@node Project Hierarchy Extension,,,Project Extension -@anchor{gnat_ugn/gnat_project_manager project-hierarchy-extension}@anchor{182}@anchor{gnat_ugn/gnat_project_manager id26}@anchor{183} -@subsection Project Hierarchy Extension - - -One of the fundamental restrictions in project extension is the following: -@strong{A project is not allowed to import directly or indirectly at the same time an extending project and one of its ancestors}. - -For example, consider the following hierarchy of projects. - -@example -a.gpr contains package A1 -b.gpr, imports a.gpr and contains B1, which depends on A1 -c.gpr, imports b.gpr and contains C1, which depends on B1 -@end example - -If we want to locally extend the packages @cite{A1} and @cite{C1}, we need to -create several extending projects: - -@example -a_ext.gpr which extends a.gpr, and overrides A1 -b_ext.gpr which extends b.gpr and imports a_ext.gpr -c_ext.gpr which extends c.gpr, imports b_ext.gpr and overrides C1 -@end example - -@example -project A_Ext extends "a.gpr" is - for Source_Files use ("a1.adb", "a1.ads"); -end A_Ext; - -with "a_ext.gpr"; -project B_Ext extends "b.gpr" is -end B_Ext; - -with "b_ext.gpr"; -project C_Ext extends "c.gpr" is - for Source_Files use ("c1.adb"); -end C_Ext; -@end example - -The extension @code{b_ext.gpr} is required, even though we are not overriding -any of the sources of @code{b.gpr} because otherwise @code{c_expr.gpr} would -import @code{b.gpr} which itself knows nothing about @code{a_ext.gpr}. - -@geindex extends all (GNAT Project Manager) - -When extending a large system spanning multiple projects, it is often -inconvenient to extend every project in the hierarchy that is impacted by a -small change introduced in a low layer. In such cases, it is possible to create -an @strong{implicit extension} of an entire hierarchy using @strong{extends all} -relationship. - -When the project is extended using @cite{extends all} inheritance, all projects -that are imported by it, both directly and indirectly, are considered virtually -extended. That is, the project manager creates implicit projects -that extend every project in the hierarchy; all these implicit projects do not -control sources on their own and use the object directory of -the "extending all" project. - -It is possible to explicitly extend one or more projects in the hierarchy -in order to modify the sources. These extending projects must be imported by -the "extending all" project, which will replace the corresponding virtual -projects with the explicit ones. - -When building such a project hierarchy extension, the project manager will -ensure that both modified sources and sources in implicit extending projects -that depend on them are recompiled. - -Thus, in our example we could create the following projects instead: - -@example -a_ext.gpr, extends a.gpr and overrides A1 -c_ext.gpr, "extends all" c.gpr, imports a_ext.gpr and overrides C1 -@end example - -@example -project A_Ext extends "a.gpr" is - for Source_Files use ("a1.adb", "a1.ads"); -end A_Ext; - -with "a_ext.gpr"; -project C_Ext extends all "c.gpr" is - for Source_Files use ("c1.adb"); -end C_Ext; -@end example - -When building project @code{c_ext.gpr}, the entire modified project space is -considered for recompilation, including the sources of @code{b.gpr} that are -impacted by the changes in @cite{A1} and @cite{C1}. - -@node Aggregate Projects,Aggregate Library Projects,Project Extension,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager aggregate-projects}@anchor{171}@anchor{gnat_ugn/gnat_project_manager id27}@anchor{184} -@section Aggregate Projects - - -Aggregate projects are an extension of the project paradigm, and are -meant to solve a few specific use cases that cannot be solved directly -using standard projects. This section will go over a few of these use -cases to try to explain what you can use aggregate projects for. - -@menu -* Building all main programs from a single project tree:: -* Building a set of projects with a single command:: -* Define a build environment:: -* Performance improvements in builder:: -* Syntax of aggregate projects:: -* package Builder in aggregate projects:: - -@end menu - -@node Building all main programs from a single project tree,Building a set of projects with a single command,,Aggregate Projects -@anchor{gnat_ugn/gnat_project_manager id28}@anchor{185}@anchor{gnat_ugn/gnat_project_manager building-all-main-programs-from-a-single-project-tree}@anchor{186} -@subsection Building all main programs from a single project tree - - -Most often, an application is organized into modules and submodules, -which are very conveniently represented as a project tree or graph -(the root project A @emph{with}s the projects for each modules (say B and C), -which in turn @emph{with} projects for submodules. - -Very often, modules will build their own executables (for testing -purposes for instance), or libraries (for easier reuse in various -contexts). - -However, if you build your project through @emph{gprbuild}, using a syntax similar to - -@example -gprbuild -PA.gpr -@end example - -this will only rebuild the main programs of project A, not those of the -imported projects B and C. Therefore you have to spawn several -@emph{gprbuild} commands, one per project, to build all executables. -This is a little inconvenient, but more importantly is inefficient -because @emph{gprbuild} needs to do duplicate work to ensure that sources are -up-to-date, and cannot easily compile things in parallel when using -the -j switch. - -Also libraries are always rebuilt when building a project. - -You could therefore define an aggregate project Agg that groups A, B -and C. Then, when you build with - -@example -gprbuild -PAgg.gpr -@end example - -this will build all mains from A, B and C. - -@example -aggregate project Agg is - for Project_Files use ("a.gpr", "b.gpr", "c.gpr"); -end Agg; -@end example - -If B or C do not define any main program (through their Main -attribute), all their sources are built. When you do not group them -in the aggregate project, only those sources that are needed by A -will be built. - -If you add a main to a project P not already explicitly referenced in the -aggregate project, you will need to add "p.gpr" in the list of project -files for the aggregate project, or the main will not be built when -building the aggregate project. - -@node Building a set of projects with a single command,Define a build environment,Building all main programs from a single project tree,Aggregate Projects -@anchor{gnat_ugn/gnat_project_manager building-a-set-of-projects-with-a-single-command}@anchor{187}@anchor{gnat_ugn/gnat_project_manager id29}@anchor{188} -@subsection Building a set of projects with a single command - - -One other case is when you have multiple applications and libraries -that are built independently from each other (but can be built in -parallel). For instance, you have a project tree rooted at A, and -another one (which might share some subprojects) rooted at B. - -Using only @emph{gprbuild}, you could do - -@example -gprbuild -PA.gpr -gprbuild -PB.gpr -@end example - -to build both. But again, @emph{gprbuild} has to do some duplicate work for -those files that are shared between the two, and cannot truly build -things in parallel efficiently. - -If the two projects are really independent, share no sources other -than through a common subproject, and have no source files with a -common basename, you could create a project C that imports A and -B. But these restrictions are often too strong, and one has to build -them independently. An aggregate project does not have these -limitations and can aggregate two project trees that have common -sources. - -This scenario is particularly useful in environments like VxWorks 653 -where the applications running in the multiple partitions can be built -in parallel through a single @emph{gprbuild} command. This also works nicely -with Annex E. - -@node Define a build environment,Performance improvements in builder,Building a set of projects with a single command,Aggregate Projects -@anchor{gnat_ugn/gnat_project_manager id30}@anchor{189}@anchor{gnat_ugn/gnat_project_manager define-a-build-environment}@anchor{18a} -@subsection Define a build environment - - -The environment variables at the time you launch @emph{gprbuild} -will influence the view these tools have of the project -(PATH to find the compiler, ADA_PROJECT_PATH or GPR_PROJECT_PATH to find the -projects, environment variables that are referenced in project files -through the "external" built-in function, ...). Several command line switches -can be used to override those (-X or -aP), but on some systems and -with some projects, this might make the command line too long, and on -all systems often make it hard to read. - -An aggregate project can be used to set the environment for all -projects built through that aggregate. One of the nice aspects is that -you can put the aggregate project under configuration management, and -make sure all your user have a consistent environment when -building. The syntax looks like - -@example -aggregate project Agg is - for Project_Files use ("A.gpr", "B.gpr"); - for Project_Path use ("../dir1", "../dir1/dir2"); - for External ("BUILD") use "PRODUCTION"; - - package Builder is - for Global_Compilation_Switches ("Ada") use ("-g"); - end Builder; -end Agg; -@end example - -One of the often requested features in projects is to be able to -reference external variables in @emph{with} declarations, as in - -@example -with external("SETUP") & "path/prj.gpr"; -- ILLEGAL -project MyProject is - ... -end MyProject; -@end example - -For various reasons, this is not allowed. But using aggregate projects provide -an elegant solution. For instance, you could use a project file like: - -@example -aggregate project Agg is - for Project_Path use (external("SETUP") & "path"); - for Project_Files use ("myproject.gpr"); -end Agg; - -with "prj.gpr"; -- searched on Agg'Project_Path -project MyProject is - ... -end MyProject; -@end example - -@node Performance improvements in builder,Syntax of aggregate projects,Define a build environment,Aggregate Projects -@anchor{gnat_ugn/gnat_project_manager performance-improvements-in-builder}@anchor{18b}@anchor{gnat_ugn/gnat_project_manager id31}@anchor{18c} -@subsection Performance improvements in builder - - -The loading of aggregate projects is optimized in @emph{gprbuild}, -so that all files are searched for only once on the disk -(thus reducing the number of system calls and contributing to faster -compilation times, especially on systems with sources on remote -servers). As part of the loading, @emph{gprbuild} -computes how and where a source file should be compiled, and even if it is -found several times in the aggregated projects it will be compiled only -once. - -Since there is no ambiguity as to which switches should be used, files -can be compiled in parallel (through the usual -j switch) and this can -be done while maximizing the use of CPUs (compared to launching -multiple @emph{gprbuild} commands in parallel). - -@node Syntax of aggregate projects,package Builder in aggregate projects,Performance improvements in builder,Aggregate Projects -@anchor{gnat_ugn/gnat_project_manager id32}@anchor{18d}@anchor{gnat_ugn/gnat_project_manager syntax-of-aggregate-projects}@anchor{18e} -@subsection Syntax of aggregate projects - - -An aggregate project follows the general syntax of project files. The -recommended extension is still @code{.gpr}. However, a special -@cite{aggregate} qualifier must be put before the keyword -@cite{project}. - -An aggregate project cannot @emph{with} any other project (standard or -aggregate), except an abstract project which can be used to share attribute -values. Also, aggregate projects cannot be extended or imported though a -@emph{with} clause by any other project. Building other aggregate projects from -an aggregate project is done through the Project_Files attribute (see below). - -An aggregate project does not have any source files directly (only -through other standard projects). Therefore a number of the standard -attributes and packages are forbidden in an aggregate project. Here is the -(non exhaustive) list: - - -@itemize * - -@item -Languages - -@item -Source_Files, Source_List_File and other attributes dealing with -list of sources. - -@item -Source_Dirs, Exec_Dir and Object_Dir - -@item -Library_Dir, Library_Name and other library-related attributes - -@item -Main - -@item -Roots - -@item -Externally_Built - -@item -Inherit_Source_Path - -@item -Excluded_Source_Dirs - -@item -Locally_Removed_Files - -@item -Excluded_Source_Files - -@item -Excluded_Source_List_File - -@item -Interfaces -@end itemize - -The only package that is authorized (albeit optional) is -Builder. Other packages (in particular Compiler, Binder and Linker) -are forbidden. - -The following three attributes can be used only in an aggregate project: - -@geindex Project_Files (GNAT Project Manager) - -@strong{Project_Files}: - -@quotation - -This attribute is compulsory (or else we are not aggregating any project, -and thus not doing anything). It specifies a list of @code{.gpr} files -that are grouped in the aggregate. The list may be empty. The project -files can be either other aggregate projects, or standard projects. When -grouping standard projects, you can have both the root of a project tree -(and you do not need to specify all its imported projects), and any project -within the tree. - -Basically, the idea is to specify all those projects that have -main programs you want to build and link, or libraries you want to -build. You can even specify projects that do not use the Main -attribute nor the @cite{Library_*} attributes, and the result will be to -build all their source files (not just the ones needed by other -projects). - -The file can include paths (absolute or relative). Paths are relative to -the location of the aggregate project file itself (if you use a base name, -we expect to find the .gpr file in the same directory as the aggregate -project file). The environment variables @cite{ADA_PROJECT_PATH}, -@cite{GPR_PROJECT_PATH} and @cite{GPR_PROJECT_PATH_FILE} are not used to find -the project files. The extension @code{.gpr} is mandatory, since this attribute -contains file names, not project names. - -Paths can also include the @cite{"*"} and @cite{"**"} globbing patterns. The -latter indicates that any subdirectory (recursively) will be -searched for matching files. The latter (@cite{"**"}) can only occur at the -last position in the directory part (ie @cite{"a/**/*.gpr"} is supported, but -not @cite{"**/a/*.gpr"}). Starting the pattern with @cite{"**"} is equivalent -to starting with @cite{"./**"}. - -For now, the pattern @cite{"*"} is only allowed in the filename part, not -in the directory part. This is mostly for efficiency reasons to limit the -number of system calls that are needed. - -Here are a few valid examples: - -@example -for Project_Files use ("a.gpr", "subdir/b.gpr"); --- two specific projects relative to the directory of agg.gpr - -for Project_Files use ("/.gpr"); --- all projects recursively -@end example -@end quotation - -@geindex Project_Path (GNAT Project Manager) - -@strong{Project_Path}: - -@quotation - -This attribute can be used to specify a list of directories in -which to look for project files in @emph{with} declarations. - -When you specify a project in Project_Files (say @cite{x/y/a.gpr}), and -@cite{a.gpr} imports a project @cite{b.gpr}, only @cite{b.gpr} is searched in -the project path. @cite{a.gpr} must be exactly at -@cite{/x/y/a.gpr}. - -This attribute, however, does not affect the search for the aggregated -project files specified with @cite{Project_Files}. - -Each aggregate project has its own @cite{Project_Path} (that is if -@cite{agg1.gpr} includes @cite{agg2.gpr}, they can potentially both have a -different @cite{Project_Path}). - -This project path is defined as the concatenation, in that order, of: - - -@itemize * - -@item -the current directory; - -@item -followed by the command line -aP switches; - -@item -then the directories from the GPR_PROJECT_PATH and ADA_PROJECT_PATH environment -variables; - -@item -then the directories from the Project_Path attribute; - -@item -and finally the predefined directories. -@end itemize - -In the example above, agg2.gpr's project path is not influenced by -the attribute agg1'Project_Path, nor is agg1 influenced by -agg2'Project_Path. - -This can potentially lead to errors. Consider the following example: - -@example --- --- +---------------+ +----------------+ --- | Agg1.gpr |-=--includes--=-->| Agg2.gpr | --- | 'project_path| | 'project_path | --- | | | | --- +---------------+ +----------------+ --- : : --- includes includes --- : : --- v v --- +-------+ +---------+ --- | P.gpr |<---------- withs --------| Q.gpr | --- +-------+---------\ +---------+ --- | | --- withs | --- | | --- v v --- +-------+ +---------+ --- | R.gpr | | R'.gpr | --- +-------+ +---------+ -@end example - -When looking for p.gpr, both aggregates find the same physical file on -the disk. However, it might happen that with their different project -paths, both aggregate projects would in fact find a different r.gpr. -Since we have a common project (p.gpr) "with"ing two different r.gpr, -this will be reported as an error by the builder. - -Directories are relative to the location of the aggregate project file. - -Example: - -@example -for Project_Path use ("/usr/local/gpr", "gpr/"); -@end example -@end quotation - -@geindex External (GNAT Project Manager) - -@strong{External}: - -@quotation - -This attribute can be used to set the value of environment -variables as retrieved through the @cite{external} function -in projects. It does not affect the environment variables -themselves (so for instance you cannot use it to change the value -of your PATH as seen from the spawned compiler). - -This attribute affects the external values as seen in the rest of -the aggregate project, and in the aggregated projects. - -The exact value of external a variable comes from one of three -sources (each level overrides the previous levels): - - -@itemize * - -@item -An External attribute in aggregate project, for instance -@cite{for External ("BUILD_MODE") use "DEBUG"}; - -@item -Environment variables. -These override the value given by the attribute, so that -users can override the value set in the (presumably shared -with others team members) aggregate project. - -@item -The -X command line switch to @emph{gprbuild}. -This always takes precedence. -@end itemize - -This attribute is only taken into account in the main aggregate -project (i.e. the one specified on the command line to @emph{gprbuild}), -and ignored in other aggregate projects. It is invalid -in standard projects. -The goal is to have a consistent value in all -projects that are built through the aggregate, which would not -be the case in the diamond case: A groups the aggregate -projects B and C, which both (either directly or indirectly) -build the project P. If B and C could set different values for -the environment variables, we would have two different views of -P, which in particular might impact the list of source files in P. -@end quotation - -@node package Builder in aggregate projects,,Syntax of aggregate projects,Aggregate Projects -@anchor{gnat_ugn/gnat_project_manager package-builder-in-aggregate-projects}@anchor{18f}@anchor{gnat_ugn/gnat_project_manager id33}@anchor{190} -@subsection package Builder in aggregate projects - - -As mentioned above, only the package Builder can be specified in -an aggregate project. In this package, only the following attributes -are valid: - -@geindex Switches (GNAT Project Manager) - -@strong{Switches}: - -@quotation - -This attribute gives the list of switches to use for @emph{gprbuild}. -Because no mains can be specified for aggregate projects, the only possible -index for attribute @cite{Switches} is @cite{others}. All other indexes will -be ignored. - -Example: - -@example -for Switches (others) use ("-v", "-k", "-j8"); -@end example - -These switches are only read from the main aggregate project (the -one passed on the command line), and ignored in all other aggregate -projects or projects. - -It can only contain builder switches, not compiler switches. -@end quotation - -@geindex Global_Compilation_Switches (GNAT Project Manager) - -@strong{Global_Compilation_Switches} - -@quotation - -This attribute gives the list of compiler switches for the various -languages. For instance, - -@example -for Global_Compilation_Switches ("Ada") use ("O1", "-g"); -for Global_Compilation_Switches ("C") use ("-O2"); -@end example - -This attribute is only taken into account in the aggregate project -specified on the command line, not in other aggregate projects. - -In the projects grouped by that aggregate, the attribute -Builder.Global_Compilation_Switches is also ignored. However, the -attribute Compiler.Default_Switches will be taken into account (but -that of the aggregate have higher priority). The attribute -Compiler.Switches is also taken into account and can be used to -override the switches for a specific file. As a result, it always -has priority. - -The rules are meant to avoid ambiguities when compiling. For -instance, aggregate project Agg groups the projects A and B, that -both depend on C. Here is an extra for all of these projects: - -@example -aggregate project Agg is - for Project_Files use ("a.gpr", "b.gpr"); - package Builder is - for Global_Compilation_Switches ("Ada") use ("-O2"); - end Builder; -end Agg; - -with "c.gpr"; -project A is - package Builder is - for Global_Compilation_Switches ("Ada") use ("-O1"); - -- ignored - end Builder; - - package Compiler is - for Default_Switches ("Ada") - use ("-O1", "-g"); - for Switches ("a_file1.adb") - use ("-O0"); - end Compiler; -end A; - -with "c.gpr"; -project B is - package Compiler is - for Default_Switches ("Ada") use ("-O0"); - end Compiler; -end B; - -project C is - package Compiler is - for Default_Switches ("Ada") - use ("-O3", - "-gnatn"); - for Switches ("c_file1.adb") - use ("-O0", "-g"); - end Compiler; -end C; -@end example - -then the following switches are used: - - -@itemize * - -@item -all files from project A except a_file1.adb are compiled -with "-O2 -g", since the aggregate project has priority. - -@item -the file a_file1.adb is compiled with -"-O0", since the Compiler.Switches has priority - -@item -all files from project B are compiled with -"-O2", since the aggregate project has priority - -@item -all files from C are compiled with "-O2 -gnatn", except for -c_file1.adb which is compiled with "-O0 -g" -@end itemize - -Even though C is seen through two paths (through A and through -B), the switches used by the compiler are unambiguous. -@end quotation - -@geindex Global_Configuration_Pragmas (GNAT Project Manager) - -@strong{Global_Configuration_Pragmas} - -@quotation - -This attribute can be used to specify a file containing -configuration pragmas, to be passed to the Ada compiler. Since we -ignore the package Builder in other aggregate projects and projects, -only those pragmas defined in the main aggregate project will be -taken into account. - -Projects can locally add to those by using the -@cite{Compiler.Local_Configuration_Pragmas} attribute if they need. -@end quotation - -@geindex Global_Config_File (GNAT Project Manager) - -@strong{Global_Config_File} - -@quotation - -This attribute, indexed with a language name, can be used to specify a config -when compiling sources of the language. For Ada, these files are configuration -pragmas files. -@end quotation - -For projects that are built through the aggregate, the package Builder -is ignored, except for the Executable attribute which specifies the -name of the executables resulting from the link of the main programs, and -for the Executable_Suffix. - -@node Aggregate Library Projects,Project File Reference,Aggregate Projects,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager id34}@anchor{191}@anchor{gnat_ugn/gnat_project_manager aggregate-library-projects}@anchor{192} -@section Aggregate Library Projects - - -Aggregate library projects make it possible to build a single library -using object files built using other standard or library -projects. This gives the flexibility to describe an application as -having multiple modules (a GUI, database access, ...) using different -project files (so possibly built with different compiler options) and -yet create a single library (static or relocatable) out of the -corresponding object files. - -@menu -* Building aggregate library projects:: -* Syntax of aggregate library projects:: - -@end menu - -@node Building aggregate library projects,Syntax of aggregate library projects,,Aggregate Library Projects -@anchor{gnat_ugn/gnat_project_manager building-aggregate-library-projects}@anchor{193}@anchor{gnat_ugn/gnat_project_manager id35}@anchor{194} -@subsection Building aggregate library projects - - -For example, we can define an aggregate project Agg that groups A, B -and C: - -@example -aggregate library project Agg is - for Project_Files use ("a.gpr", "b.gpr", "c.gpr"); - for Library_Name use ("agg"); - for Library_Dir use ("lagg"); -end Agg; -@end example - -Then, when you build with: - -@example -gprbuild agg.gpr -@end example - -This will build all units from projects A, B and C and will create a -static library named @code{libagg.a} in the @code{lagg} -directory. An aggregate library project has the same set of -restriction as a standard library project. - -Note that a shared aggregate library project cannot aggregate a -static library project. In platforms where a compiler option is -required to create relocatable object files, a Builder package in the -aggregate library project may be used: - -@example -aggregate library project Agg is - for Project_Files use ("a.gpr", "b.gpr", "c.gpr"); - for Library_Name use ("agg"); - for Library_Dir use ("lagg"); - for Library_Kind use "relocatable"; - - package Builder is - for Global_Compilation_Switches ("Ada") use ("-fPIC"); - end Builder; -end Agg; -@end example - -With the above aggregate library Builder package, the @cite{-fPIC} -option will be passed to the compiler when building any source code -from projects @code{a.gpr}, @code{b.gpr} and @code{c.gpr}. - -@node Syntax of aggregate library projects,,Building aggregate library projects,Aggregate Library Projects -@anchor{gnat_ugn/gnat_project_manager syntax-of-aggregate-library-projects}@anchor{195}@anchor{gnat_ugn/gnat_project_manager id36}@anchor{196} -@subsection Syntax of aggregate library projects - - -An aggregate library project follows the general syntax of project -files. The recommended extension is still @code{.gpr}. However, a special -@cite{aggregate library} qualifier must be put before the keyword -@cite{project}. - -An aggregate library project cannot @emph{with} any other project -(standard or aggregate), except an abstract project which can be used -to share attribute values. - -An aggregate library project does not have any source files directly (only -through other standard projects). Therefore a number of the standard -attributes and packages are forbidden in an aggregate library -project. Here is the (non exhaustive) list: - - -@itemize * - -@item -Languages - -@item -Source_Files, Source_List_File and other attributes dealing with -list of sources. - -@item -Source_Dirs, Exec_Dir and Object_Dir - -@item -Main - -@item -Roots - -@item -Externally_Built - -@item -Inherit_Source_Path - -@item -Excluded_Source_Dirs - -@item -Locally_Removed_Files - -@item -Excluded_Source_Files - -@item -Excluded_Source_List_File - -@item -Interfaces -@end itemize - -The only package that is authorized (albeit optional) is Builder. - -The Project_Files attribute (See @ref{171,,Aggregate Projects}) is used to -described the aggregated projects whose object files have to be -included into the aggregate library. The environment variables -@cite{ADA_PROJECT_PATH}, @cite{GPR_PROJECT_PATH} and -@cite{GPR_PROJECT_PATH_FILE} are not used to find the project files. - -@node Project File Reference,,Aggregate Library Projects,GNAT Project Manager -@anchor{gnat_ugn/gnat_project_manager id37}@anchor{197}@anchor{gnat_ugn/gnat_project_manager project-file-reference}@anchor{150} -@section Project File Reference - - -This section describes the syntactic structure of project files, the various -constructs that can be used. Finally, it ends with a summary of all available -attributes. - -@menu -* Project Declaration:: -* Qualified Projects:: -* Declarations:: -* Packages:: -* Expressions:: -* External Values:: -* Typed String Declaration:: -* Variables:: -* Case Constructions:: -* Attributes:: - -@end menu - -@node Project Declaration,Qualified Projects,,Project File Reference -@anchor{gnat_ugn/gnat_project_manager id38}@anchor{198}@anchor{gnat_ugn/gnat_project_manager project-declaration}@anchor{199} -@subsection Project Declaration - - -Project files have an Ada-like syntax. The minimal project file is: - -@example -project Empty is -end Empty; -@end example - -The identifier @cite{Empty} is the name of the project. -This project name must be present after the reserved -word @cite{end} at the end of the project file, followed by a semi-colon. - -@strong{Identifiers} (i.e., the user-defined names such as project or variable names) -have the same syntax as Ada identifiers: they must start with a letter, -and be followed by zero or more letters, digits or underscore characters; -it is also illegal to have two underscores next to each other. Identifiers -are always case-insensitive ("Name" is the same as "name"). - -@example -simple_name ::= identifier -name ::= simple_name @{ . simple_name @} -@end example - -@strong{Strings} are used for values of attributes or as indexes for these -attributes. They are in general case sensitive, except when noted -otherwise (in particular, strings representing file names will be case -insensitive on some systems, so that "file.adb" and "File.adb" both -represent the same file). - -@strong{Reserved words} are the same as for standard Ada 95, and cannot -be used for identifiers. In particular, the following words are currently -used in project files, but others could be added later on. In bold are the -extra reserved words in project files: -@code{all}, @code{at}, @code{case}, @code{end}, @code{for}, @code{is}, @code{limited}, -@code{null}, @code{others}, @code{package}, @code{renames}, @code{type}, @code{use}, @code{when}, -@code{with}, @strong{extends}, @strong{external}, @strong{project}. - -@strong{Comments} in project files have the same syntax as in Ada, two consecutive -hyphens through the end of the line. - -A project may be an @strong{independent project}, entirely defined by a single -project file. Any source file in an independent project depends only -on the predefined library and other source files in the same project. -But a project may also depend on other projects, either by importing them -through @strong{with clauses}, or by @strong{extending} at most one other project. Both -types of dependency can be used in the same project. - -A path name denotes a project file. It can be absolute or relative. -An absolute path name includes a sequence of directories, in the syntax of -the host operating system, that identifies uniquely the project file in the -file system. A relative path name identifies the project file, relative -to the directory that contains the current project, or relative to a -directory listed in the environment variables ADA_PROJECT_PATH and -GPR_PROJECT_PATH. Path names are case sensitive if file names in the host -operating system are case sensitive. As a special case, the directory -separator can always be "/" even on Windows systems, so that project files -can be made portable across architectures. -The syntax of the environment variables ADA_PROJECT_PATH and -GPR_PROJECT_PATH is a list of directory names separated by colons on UNIX and -semicolons on Windows. - -A given project name can appear only once in a context clause. - -It is illegal for a project imported by a context clause to refer, directly -or indirectly, to the project in which this context clause appears (the -dependency graph cannot contain cycles), except when one of the with clauses -in the cycle is a @strong{limited with}. - -@example -with "other_project.gpr"; -project My_Project extends "extended.gpr" is -end My_Project; -@end example - -These dependencies form a @strong{directed graph}, potentially cyclic when using -@strong{limited with}. The subgraph reflecting the @strong{extends} relations is a tree. - -A project's @strong{immediate sources} are the source files directly defined by -that project, either implicitly by residing in the project source directories, -or explicitly through any of the source-related attributes. -More generally, a project's @strong{sources} are the immediate sources of the -project together with the immediate sources (unless overridden) of any project -on which it depends directly or indirectly. - -A @strong{project hierarchy} can be created, where projects are children of -other projects. The name of such a child project must be @cite{Parent.Child}, -where @cite{Parent} is the name of the parent project. In particular, this -makes all @emph{with} clauses of the parent project automatically visible -in the child project. - -@example -project ::= context_clause project_declaration - -context_clause ::= @{with_clause@} -with_clause ::= *with* path_name @{ , path_name @} ; -path_name ::= string_literal - -project_declaration ::= simple_project_declaration | project_extension -simple_project_declaration ::= - project name is - @{declarative_item@} - end simple_name; -@end example - -@node Qualified Projects,Declarations,Project Declaration,Project File Reference -@anchor{gnat_ugn/gnat_project_manager qualified-projects}@anchor{176}@anchor{gnat_ugn/gnat_project_manager id39}@anchor{19a} -@subsection Qualified Projects - - -Before the reserved @cite{project}, there may be one or two @strong{qualifiers}, that -is identifiers or reserved words, to qualify the project. -The current list of qualifiers is: - - -@table @asis - -@item @strong{abstract}: - -Qualifies a project with no sources. -Such a project must either have no declaration of attributes @cite{Source_Dirs}, -@cite{Source_Files}, @cite{Languages} or @cite{Source_List_File}, or one of -@cite{Source_Dirs}, @cite{Source_Files}, or @cite{Languages} must be declared -as empty. If it extends another project, the project it extends must also be a -qualified abstract project. - -@item @strong{standard}: - -A standard project is a non library project with sources. -This is the default (implicit) qualifier. - -@item @strong{aggregate}: - -A project whose sources are aggregated from other project files. - -@item @strong{aggregate library}: - -A library whose sources are aggregated from other project -or library project files. - -@item @strong{library}: - -A library project must declare both attributes -Library_Name` and @cite{Library_Dir}. - -@item @strong{configuration}: - -A configuration project cannot be in a project tree. -It describes compilers and other tools to @emph{gprbuild}. -@end table - -@node Declarations,Packages,Qualified Projects,Project File Reference -@anchor{gnat_ugn/gnat_project_manager declarations}@anchor{19b}@anchor{gnat_ugn/gnat_project_manager id40}@anchor{19c} -@subsection Declarations - - -Declarations introduce new entities that denote types, variables, attributes, -and packages. Some declarations can only appear immediately within a project -declaration. Others can appear within a project or within a package. - -@example -declarative_item ::= simple_declarative_item - | typed_string_declaration - | package_declaration - -simple_declarative_item ::= variable_declaration - | typed_variable_declaration - | attribute_declaration - | case_construction - | empty_declaration - -empty_declaration ::= *null* ; -@end example - -An empty declaration is allowed anywhere a declaration is allowed. It has -no effect. - -@node Packages,Expressions,Declarations,Project File Reference -@anchor{gnat_ugn/gnat_project_manager packages}@anchor{156}@anchor{gnat_ugn/gnat_project_manager id41}@anchor{19d} -@subsection Packages - - -A project file may contain @strong{packages}, that group attributes (typically -all the attributes that are used by one of the GNAT tools). - -A package with a given name may only appear once in a project file. -The following packages are currently supported in project files -(See @ref{155,,Attributes} for the list of attributes that each can contain). - - -@table @asis - -@item @emph{Binder} - -This package specifies characteristics useful when invoking the binder either -directly via the @emph{gnat} driver or when using @emph{gprbuild}. -See @ref{160,,Main Subprograms}. - -@item @emph{Builder} - -This package specifies the compilation options used when building an -executable or a library for a project. Most of the options should be -set in one of @cite{Compiler}, @cite{Binder} or @cite{Linker} packages, -but there are some general options that should be defined in this -package. See @ref{160,,Main Subprograms}, and @ref{165,,Executable File Names} in -particular. -@end table - - - -@table @asis - -@item @emph{Clean} - -This package specifies the options used when cleaning a project or a project -tree using the tools @emph{gnatclean} or @emph{gprclean}. - -@item @emph{Compiler} - -This package specifies the compilation options used by the compiler for -each languages. See @ref{161,,Tools Options in Project Files}. - -@item @emph{Cross_Reference} - -This package specifies the options used when calling the library tool -@emph{gnatxref} via the @emph{gnat} driver. Its attributes -@strong{Default_Switches} and @strong{Switches} have the same semantics as for the -package @cite{Builder}. -@end table - - - -@table @asis - -@item @emph{Finder} - -This package specifies the options used when calling the search tool -@emph{gnatfind} via the @emph{gnat} driver. Its attributes -@strong{Default_Switches} and @strong{Switches} have the same semantics as for the -package @cite{Builder}. - -@item @emph{Gnatls} - -This package specifies the options to use when invoking @emph{gnatls} -via the @emph{gnat} driver. -@end table - - - -@table @asis - -@item @emph{IDE} - -This package specifies the options used when starting an integrated -development environment, for instance @emph{GPS} or @emph{Gnatbench}. - -@item @emph{Install} - -This package specifies the options used when installing a project -with @emph{gprinstall}. See @ref{16b,,Installation}. - -@item @emph{Linker} - -This package specifies the options used by the linker. -See @ref{160,,Main Subprograms}. -@end table - - - -@table @asis - -@item @emph{Naming} - -@quotation - -This package specifies the naming conventions that apply -to the source files in a project. In particular, these conventions are -used to automatically find all source files in the source directories, -or given a file name to find out its language for proper processing. -See @ref{14e,,Naming Schemes}. -@end quotation - - -@item @emph{Remote} - -This package is used by @emph{gprbuild} to describe how distributed -compilation should be done. - -@item @emph{Stack} - -This package specifies the options used when calling the tool -@emph{gnatstack} via the @emph{gnat} driver. Its attributes -@strong{Default_Switches} and @strong{Switches} have the same semantics as for the -package @cite{Builder}. - -@item @emph{Synchronize} - -This package specifies the options used when calling the tool -@emph{gnatsync} via the @emph{gnat} driver. -@end table - -In its simplest form, a package may be empty: - -@example -project Simple is - package Builder is - end Builder; -end Simple; -@end example - -A package may contain @strong{attribute declarations}, -@strong{variable declarations} and @strong{case constructions}, as will be -described below. - -When there is ambiguity between a project name and a package name, -the name always designates the project. To avoid possible confusion, it is -always a good idea to avoid naming a project with one of the -names allowed for packages or any name that starts with @cite{gnat}. - -A package can also be defined by a @strong{renaming declaration}. The new package -renames a package declared in a different project file, and has the same -attributes as the package it renames. The name of the renamed package -must be the same as the name of the renaming package. The project must -contain a package declaration with this name, and the project -must appear in the context clause of the current project, or be its parent -project. It is not possible to add or override attributes to the renaming -project. If you need to do so, you should use an @strong{extending declaration} -(see below). - -Packages that are renamed in other project files often come from project files -that have no sources: they are just used as templates. Any modification in the -template will be reflected automatically in all the project files that rename -a package from the template. This is a very common way to share settings -between projects. - -Finally, a package can also be defined by an @strong{extending declaration}. This is -similar to a @strong{renaming declaration}, except that it is possible to add or -override attributes. - -@example -package_declaration ::= package_spec | package_renaming | package_extension -package_spec ::= - package simple_name is - @{simple_declarative_item@} - end package_identifier ; -package_renaming ::== - package simple_name renames simple_name.package_identifier ; -package_extension ::== - package simple_name extends simple_name.package_identifier is - @{simple_declarative_item@} - end package_identifier ; -@end example - -@node Expressions,External Values,Packages,Project File Reference -@anchor{gnat_ugn/gnat_project_manager expressions}@anchor{19e}@anchor{gnat_ugn/gnat_project_manager id42}@anchor{19f} -@subsection Expressions - - -An expression is any value that can be assigned to an attribute or a -variable. It is either a literal value, or a construct requiring runtime -computation by the project manager. In a project file, the computed value of -an expression is either a string or a list of strings. - -A string value is one of: - - -@itemize * - -@item -A literal string, for instance @cite{"comm/my_proj.gpr"} - -@item -The name of a variable that evaluates to a string (see @ref{158,,Variables}) - -@item -The name of an attribute that evaluates to a string (see @ref{155,,Attributes}) - -@item -An external reference (see @ref{157,,External Values}) - -@item -A concatenation of the above, as in @cite{"prefix_" & Var}. -@end itemize - -A list of strings is one of the following: - - -@itemize * - -@item -A parenthesized comma-separated list of zero or more string expressions, for -instance @cite{(File_Name@comma{} "gnat.adc"@comma{} File_Name & ".orig")} or @cite{()}. - -@item -The name of a variable that evaluates to a list of strings - -@item -The name of an attribute that evaluates to a list of strings - -@item -A concatenation of a list of strings and a string (as defined above), for -instance @cite{("A"@comma{} "B") & "C"} - -@item -A concatenation of two lists of strings -@end itemize - -The following is the grammar for expressions - -@example -string_literal ::= "@{string_element@}" -- Same as Ada -string_expression ::= string_literal - | *variable_*name - | external_value - | attribute_reference - | ( string_expression @{ & string_expression @} ) -string_list ::= ( string_expression @{ , string_expression @} ) - | *string_variable*_name - | *string_*attribute_reference -term ::= string_expression | string_list -expression ::= term @{ & term @} -- Concatenation -@end example - -Concatenation involves strings and list of strings. As soon as a list of -strings is involved, the result of the concatenation is a list of strings. The -following Ada declarations show the existing operators: - -@example -function "&" (X : String; Y : String) return String; -function "&" (X : String_List; Y : String) return String_List; -function "&" (X : String_List; Y : String_List) return String_List; -@end example - -Here are some specific examples: - -@example -List := () & File_Name; -- One string in this list -List2 := List & (File_Name & ".orig"); -- Two strings -Big_List := List & Lists2; -- Three strings -Illegal := "gnat.adc" & List2; -- Illegal, must start with list -@end example - -@node External Values,Typed String Declaration,Expressions,Project File Reference -@anchor{gnat_ugn/gnat_project_manager external-values}@anchor{157}@anchor{gnat_ugn/gnat_project_manager id43}@anchor{1a0} -@subsection External Values - - -An external value is an expression whose value is obtained from the command -that invoked the processing of the current project file (typically a -@emph{gprbuild} command). - -There are two kinds of external values, one that returns a single string, and -one that returns a string list. - -The syntax of a single string external value is: - -@example -external_value ::= *external* ( string_literal [, string_literal] ) -@end example - -The first string_literal is the string to be used on the command line or -in the environment to specify the external value. The second string_literal, -if present, is the default to use if there is no specification for this -external value either on the command line or in the environment. - -Typically, the external value will either exist in the -environment variables -or be specified on the command line through the -@code{-X@emph{vbl}=@emph{value}} switch. If both -are specified, then the command line value is used, so that a user can more -easily override the value. - -The function @cite{external} always returns a string. It is an error if the -value was not found in the environment and no default was specified in the -call to @cite{external}. - -An external reference may be part of a string expression or of a string -list expression, and can therefore appear in a variable declaration or -an attribute declaration. - -Most of the time, this construct is used to initialize typed variables, which -are then used in @strong{case} constructions to control the value assigned to -attributes in various scenarios. Thus such variables are often called -@strong{scenario variables}. - -The syntax for a string list external value is: - -@example -external_value ::= *external_as_list* ( string_literal , string_literal ) -@end example - -The first string_literal is the string to be used on the command line or -in the environment to specify the external value. The second string_literal is -the separator between each component of the string list. - -If the external value does not exist in the environment or on the command line, -the result is an empty list. This is also the case, if the separator is an -empty string or if the external value is only one separator. - -Any separator at the beginning or at the end of the external value is -discarded. Then, if there is no separator in the external value, the result is -a string list with only one string. Otherwise, any string between the beginning -and the first separator, between two consecutive separators and between the -last separator and the end are components of the string list. - -@example -*external_as_list* ("SWITCHES", ",") -@end example - -If the external value is "-O2,-g", -the result is ("-O2", "-g"). - -If the external value is ",-O2,-g,", -the result is also ("-O2", "-g"). - -if the external value is "-gnatv", -the result is ("-gnatv"). - -If the external value is ",,", the result is (""). - -If the external value is ",", the result is (), the empty string list. - -@node Typed String Declaration,Variables,External Values,Project File Reference -@anchor{gnat_ugn/gnat_project_manager id44}@anchor{1a1}@anchor{gnat_ugn/gnat_project_manager typed-string-declaration}@anchor{1a2} -@subsection Typed String Declaration - - -A @strong{type declaration} introduces a discrete set of string literals. -If a string variable is declared to have this type, its value -is restricted to the given set of literals. These are the only named -types in project files. A string type may only be declared at the project -level, not inside a package. - -@example -typed_string_declaration ::= - *type* **_simple_name *is* ( string_literal @{, string_literal@} ); -@end example - -The string literals in the list are case sensitive and must all be different. -They may include any graphic characters allowed in Ada, including spaces. -Here is an example of a string type declaration: - -@example -type OS is ("NT", "nt", "Unix", "GNU/Linux", "other OS"); -@end example - -Variables of a string type are called @strong{typed variables}; all other -variables are called @strong{untyped variables}. Typed variables are -particularly useful in @cite{case} constructions, to support conditional -attribute declarations. (See @ref{1a3,,Case Constructions}). - -A string type may be referenced by its name if it has been declared in the same -project file, or by an expanded name whose prefix is the name of the project -in which it is declared. - -@node Variables,Case Constructions,Typed String Declaration,Project File Reference -@anchor{gnat_ugn/gnat_project_manager variables}@anchor{158}@anchor{gnat_ugn/gnat_project_manager id45}@anchor{1a4} -@subsection Variables - - -@strong{Variables} store values (strings or list of strings) and can appear -as part of an expression. The declaration of a variable creates the -variable and assigns the value of the expression to it. The name of the -variable is available immediately after the assignment symbol, if you -need to reuse its old value to compute the new value. Before the completion -of its first declaration, the value of a variable defaults to the empty -string (""). - -A @strong{typed} variable can be used as part of a @strong{case} expression to -compute the value, but it can only be declared once in the project file, -so that all case constructions see the same value for the variable. This -provides more consistency and makes the project easier to understand. -The syntax for its declaration is identical to the Ada syntax for an -object declaration. In effect, a typed variable acts as a constant. - -An @strong{untyped} variable can be declared and overridden multiple times -within the same project. It is declared implicitly through an Ada -assignment. The first declaration establishes the kind of the variable -(string or list of strings) and successive declarations must respect -the initial kind. Assignments are executed in the order in which they -appear, so the new value replaces the old one and any subsequent reference -to the variable uses the new value. - -A variable may be declared at the project file level, or within a package. - -@example -typed_variable_declaration ::= - **simple_name : **name := string_expression; - -variable_declaration ::= **simple_name := expression; -@end example - -Here are some examples of variable declarations: - -@example -This_OS : OS := external ("OS"); -- a typed variable declaration -That_OS := "GNU/Linux"; -- an untyped variable declaration - -Name := "readme.txt"; -Save_Name := Name & ".saved"; - -Empty_List := (); -List_With_One_Element := ("-gnaty"); -List_With_Two_Elements := List_With_One_Element & "-gnatg"; -Long_List := ("main.ada", "pack1_.ada", "pack1.ada", "pack2_.ada"); -@end example - -A @strong{variable reference} may take several forms: - - -@itemize * - -@item -The simple variable name, for a variable in the current package (if any) -or in the current project - -@item -An expanded name, whose prefix is a context name. -@end itemize - -A @strong{context} may be one of the following: - - -@itemize * - -@item -The name of an existing package in the current project - -@item -The name of an imported project of the current project - -@item -The name of an ancestor project (i.e., a project extended by the current -project, either directly or indirectly) - -@item -An expanded name whose prefix is an imported/parent project name, and -whose selector is a package name in that project. -@end itemize - -@node Case Constructions,Attributes,Variables,Project File Reference -@anchor{gnat_ugn/gnat_project_manager id46}@anchor{1a5}@anchor{gnat_ugn/gnat_project_manager case-constructions}@anchor{1a3} -@subsection Case Constructions - - -A @strong{case} construction is used in a project file to effect conditional -behavior. Through this construction, you can set the value of attributes -and variables depending on the value previously assigned to a typed -variable. - -All choices in a choice list must be distinct. Unlike Ada, the choice -lists of all alternatives do not need to include all values of the type. -An @cite{others} choice must appear last in the list of alternatives. - -The syntax of a @cite{case} construction is based on the Ada case construction -(although the @cite{null} declaration for empty alternatives is optional). - -The case expression must be a string variable, either typed or not, whose value -is often given by an external reference (see @ref{157,,External Values}). - -Each alternative starts with the reserved word @cite{when}, either a list of -literal strings separated by the @cite{"|"} character or the reserved word -@cite{others}, and the @cite{"=>"} token. -When the case expression is a typed string variable, each literal string must -belong to the string type that is the type of the case variable. -After each @cite{=>}, there are zero or more declarations. The only -declarations allowed in a case construction are other case constructions, -attribute declarations and variable declarations. String type declarations and -package declarations are not allowed. Variable declarations are restricted to -variables that have already been declared before the case construction. - -@example -case_construction ::= - *case* **name *is* @{case_item@} *end case* ; - -case_item ::= - *when* discrete_choice_list => - @{case_declaration - | attribute_declaration - | variable_declaration - | empty_declaration@} - -discrete_choice_list ::= string_literal @{| string_literal@} | *others* -@end example - -Here is a typical example, with a typed string variable: - -@example -project MyProj is - type OS_Type is ("GNU/Linux", "Unix", "NT", "VMS"); - OS : OS_Type := external ("OS", "GNU/Linux"); - - package Compiler is - case OS is - when "GNU/Linux" | "Unix" => - for Switches ("Ada") - use ("-gnath"); - when "NT" => - for Switches ("Ada") - use ("-gnatP"); - when others => - null; - end case; - end Compiler; -end MyProj; -@end example - -@node Attributes,,Case Constructions,Project File Reference -@anchor{gnat_ugn/gnat_project_manager id47}@anchor{1a6}@anchor{gnat_ugn/gnat_project_manager attributes}@anchor{155} -@subsection Attributes - - -A project (and its packages) may have @strong{attributes} that define -the project's properties. Some attributes have values that are strings; -others have values that are string lists. - -@example -attribute_declaration ::= - simple_attribute_declaration | indexed_attribute_declaration - -simple_attribute_declaration ::= *for* attribute_designator *use* expression ; - -indexed_attribute_declaration ::= - *for* **simple_name ( string_literal) *use* expression ; - -attribute_designator ::= - **simple_name - | **simple_name ( string_literal ) -@end example - -There are two categories of attributes: @strong{simple attributes} -and @strong{indexed attributes}. -Each simple attribute has a default value: the empty string (for string -attributes) and the empty list (for string list attributes). -An attribute declaration defines a new value for an attribute, and overrides -the previous value. The syntax of a simple attribute declaration is similar to -that of an attribute definition clause in Ada. - -Some attributes are indexed. These attributes are mappings whose -domain is a set of strings. They are declared one association -at a time, by specifying a point in the domain and the corresponding image -of the attribute. -Like untyped variables and simple attributes, indexed attributes -may be declared several times. Each declaration supplies a new value for the -attribute, and replaces the previous setting. - -Here are some examples of attribute declarations: - -@example --- simple attributes -for Object_Dir use "objects"; -for Source_Dirs use ("units", "test/drivers"); - --- indexed attributes -for Body ("main") use "Main.ada"; -for Switches ("main.ada") - use ("-v", "-gnatv"); -for Switches ("main.ada") use Builder'Switches ("main.ada") & "-g"; - --- indexed attributes copy (from package Builder in project Default) --- The package name must always be specified, even if it is the current --- package. -for Default_Switches use Default.Builder'Default_Switches; -@end example - -Attributes references may appear anywhere in expressions, and are used -to retrieve the value previously assigned to the attribute. If an attribute -has not been set in a given package or project, its value defaults to the -empty string or the empty list, with some exceptions. - -@example -attribute_reference ::= - attribute_prefix ' *_*simple_name [ (string_literal) ] -attribute_prefix ::= *project* - | **simple_name - | package_identifier - | **simple_name . package_identifier -@end example - -Examples are: - -@example -'Object_Dir -Naming'Dot_Replacement -Imported_Project'Source_Dirs -Imported_Project.Naming'Casing -Builder'Default_Switches ("Ada") -@end example - -The exceptions to the empty defaults are: - - -@itemize * - -@item -Object_Dir: default is "." - -@item -Exec_Dir: default is 'Object_Dir, that is the value of attribute -Object_Dir in the same project, declared or defaulted. - -@item -Source_Dirs: default is (".") -@end itemize - -The prefix of an attribute may be: - - -@itemize * - -@item -@cite{project} for an attribute of the current project - -@item -The name of an existing package of the current project - -@item -The name of an imported project - -@item -The name of a parent project that is extended by the current project - -@item -An expanded name whose prefix is imported/parent project name, -and whose selector is a package name -@end itemize - -In the following sections, all predefined attributes are succinctly described, -first the project level attributes, that is those attributes that are not in a -package, then the attributes in the different packages. - -It is possible for different tools to dynamically create new packages with -attributes, or new attributes in predefined packages. These attributes are -not documented here. - -The attributes under Configuration headings are usually found only in -configuration project files. - -The characteristics of each attribute are indicated as follows: - - -@itemize * - -@item -@strong{Type of value} - -The value of an attribute may be a single string, indicated by the word -"single", or a string list, indicated by the word "list". - -@item -@strong{Read-only} - -When the attribute is read-only, that is when it is not allowed to declare -the attribute, this is indicated by the words "read-only". - -@item -@strong{Optional index} - -If it is allowed in the value of the attribute (both single and list) to have -an optional index, this is indicated by the words "optional index". - -@item -@strong{Indexed attribute} - -When it is an indexed attribute, this is indicated by the word "indexed". - -@item -@strong{Case-sensitivity of the index} - -For an indexed attribute, if the index is case-insensitive, this is indicated -by the words "case-insensitive index". - -@item -@strong{File name index} - -For an indexed attribute, when the index is a file name, this is indicated by -the words "file name index". The index may or may not be case-sensitive, -depending on the platform. - -@item -@strong{others allowed in index} - -For an indexed attribute, if it is allowed to use @strong{others} as the index, -this is indicated by the words "others allowed". - -When @strong{others} is used as the index of an indexed attribute, the value of -the attribute indexed by @strong{others} is used when no other index would apply. -@end itemize - -@menu -* Project Level Attributes:: -* Package Binder Attributes:: -* Package Builder Attributes:: -* Package Clean Attributes:: -* Package Compiler Attributes:: -* Package Cross_Reference Attributes:: -* Package Finder Attributes:: -* Package gnatls Attributes:: -* Package IDE Attributes:: -* Package Install Attributes:: -* Package Linker Attributes:: -* Package Naming Attributes:: -* Package Remote Attributes:: -* Package Stack Attributes:: -* Package Synchronize Attributes:: - -@end menu - -@node Project Level Attributes,Package Binder Attributes,,Attributes -@anchor{gnat_ugn/gnat_project_manager project-level-attributes}@anchor{1a7}@anchor{gnat_ugn/gnat_project_manager id48}@anchor{1a8} -@subsubsection Project Level Attributes - - - -@itemize * - -@item -@strong{General} - - -@itemize * - -@item -@strong{Name}: single, read-only - -The name of the project. - -@item -@strong{Project_Dir}: single, read-only - -The path name of the project directory. - -@item -@strong{Main}: list, optional index - -The list of main sources for the executables. - -@item -@strong{Languages}: list - -The list of languages of the sources of the project. - -@item -@strong{Roots}: list, indexed, file name index - -The index is the file name of an executable source. Indicates the list of units -from the main project that need to be bound and linked with their closures -with the executable. The index is either a file name, a language name or "*". -The roots for an executable source are those in @strong{Roots} with an index that -is the executable source file name, if declared. Otherwise, they are those in -@strong{Roots} with an index that is the language name of the executable source, -if present. Otherwise, they are those in @strong{Roots ("*")}, if declared. If none -of these three possibilities are declared, then there are no roots for the -executable source. - -@item -@strong{Externally_Built}: single - -Indicates if the project is externally built. -Only case-insensitive values allowed are "true" and "false", the default. -@end itemize - -@item -@strong{Directories} - - -@itemize * - -@item -@strong{Object_Dir}: single - -Indicates the object directory for the project. - -@item -@strong{Exec_Dir}: single - -Indicates the exec directory for the project, that is the directory where the -executables are. - -@item -@strong{Source_Dirs}: list - -The list of source directories of the project. - -@item -@strong{Inherit_Source_Path}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of language names. Indicates that -in the source search path of the index language the source directories of -the languages in the list should be included. - -Example: - -@example -for Inherit_Source_Path ("C++") use ("C"); -@end example - -@item -@strong{Exclude_Source_Dirs}: list - -The list of directories that are included in Source_Dirs but are not source -directories of the project. - -@item -@strong{Ignore_Source_Sub_Dirs}: list - -Value is a list of simple names for subdirectories that are removed from the -list of source directories, including theur subdirectories. -@end itemize - -@item -@strong{Source Files} - - -@itemize * - -@item -@strong{Source_Files}: list - -Value is a list of source file simple names. - -@item -@strong{Locally_Removed_Files}: list - -Obsolescent. Equivalent to Excluded_Source_Files. - -@item -@strong{Excluded_Source_Files}: list - -Value is a list of simple file names that are not sources of the project. -Allows to remove sources that are inherited or found in the source directories -and that match the naming scheme. - -@item -@strong{Source_List_File}: single - -Value is a text file name that contains a list of source file simple names, -one on each line. - -@item -@strong{Excluded_Source_List_File}: single - -Value is a text file name that contains a list of file simple names that -are not sources of the project. - -@item -@strong{Interfaces}: list - -Value is a list of file names that constitutes the interfaces of the project. -@end itemize - -@item -@strong{Aggregate Projects} - - -@itemize * - -@item -@strong{Project_Files}: list - -Value is the list of aggregated projects. - -@item -@strong{Project_Path}: list - -Value is a list of directories that are added to the project search path when -looking for the aggregated projects. - -@item -@strong{External}: single, indexed - -Index is the name of an external reference. Value is the value of the -external reference to be used when parsing the aggregated projects. -@end itemize - -@item -@strong{Libraries} - - -@itemize * - -@item -@strong{Library_Dir}: single - -Value is the name of the library directory. This attribute needs to be -declared for each library project. - -@item -@strong{Library_Name}: single - -Value is the name of the library. This attribute needs to be declared or -inherited for each library project. - -@item -@strong{Library_Kind}: single - -Specifies the kind of library: static library (archive) or shared library. -Case-insensitive values must be one of "static" for archives (the default) or -"dynamic" or "relocatable" for shared libraries. - -@item -@strong{Library_Version}: single - -Value is the name of the library file. - -@item -@strong{Library_Interface}: list - -Value is the list of unit names that constitutes the interfaces -of a Stand-Alone Library project. - -@item -@strong{Library_Standalone}: single - -Specifies if a Stand-Alone Library (SAL) is encapsulated or not. -Only authorized case-insensitive values are "standard" for non encapsulated -SALs, "encapsulated" for encapsulated SALs or "no" for non SAL library project. - -@item -@strong{Library_Encapsulated_Options}: list - -Value is a list of options that need to be used when linking an encapsulated -Stand-Alone Library. - -@item -@strong{Library_Encapsulated_Supported}: single - -Indicates if encapsulated Stand-Alone Libraries are supported. Only -authorized case-insensitive values are "true" and "false" (the default). - -@item -@strong{Library_Auto_Init}: single - -Indicates if a Stand-Alone Library is auto-initialized. Only authorized -case-insentive values are "true" and "false". - -@item -@strong{Leading_Library_Options}: list - -Value is a list of options that are to be used at the beginning of -the command line when linking a shared library. - -@item -@strong{Library_Options}: list - -Value is a list of options that are to be used when linking a shared library. - -@item -@strong{Library_Rpath_Options}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of options for an invocation of the -compiler of the language. This invocation is done for a shared library project -with sources of the language. The output of the invocation is the path name -of a shared library file. The directory name is to be put in the run path -option switch when linking the shared library for the project. - -@item -@strong{Library_Src_Dir}: single - -Value is the name of the directory where copies of the sources of the -interfaces of a Stand-Alone Library are to be copied. - -@item -@strong{Library_ALI_Dir}: single - -Value is the name of the directory where the ALI files of the interfaces -of a Stand-Alone Library are to be copied. When this attribute is not declared, -the directory is the library directory. - -@item -@strong{Library_gcc}: single - -Obsolescent attribute. Specify the linker driver used to link a shared library. -Use instead attribute Linker'Driver. - -@item -@strong{Library_Symbol_File}: single - -Value is the name of the library symbol file. - -@item -@strong{Library_Symbol_Policy}: single - -Indicates the symbol policy kind. Only authorized case-insensitive values are -"autonomous", "default", "compliant", "controlled" or "direct". - -@item -@strong{Library_Reference_Symbol_File}: single - -Value is the name of the reference symbol file. -@end itemize - -@item -@strong{Configuration - General} - - -@itemize * - -@item -@strong{Default_Language}: single - -Value is the case-insensitive name of the language of a project when attribute -Languages is not specified. - -@item -@strong{Run_Path_Option}: list - -Value is the list of switches to be used when specifying the run path option -in an executable. - -@item -@strong{Run_Path_Origin}: single - -Value is the the string that may replace the path name of the executable -directory in the run path options. - -@item -@strong{Separate_Run_Path_Options}: single - -Indicates if there may be several run path options specified when linking an -executable. Only authorized case-insensitive values are "true" or "false" (the -default). - -@item -@strong{Toolchain_Version}: single, indexed, case-insensitive index - -Index is a language name. Specify the version of a toolchain for a language. - -@item -@strong{Toolchain_Description}: single, indexed, case-insensitive index - -Obsolescent. No longer used. - -@item -@strong{Object_Generated}: single, indexed, case-insensitive index - -Index is a language name. Indicates if invoking the compiler for a language -produces an object file. Only authorized case-insensitive values are "false" -and "true" (the default). - -@item -@strong{Objects_Linked}: single, indexed, case-insensitive index - -Index is a language name. Indicates if the object files created by the compiler -for a language need to be linked in the executable. Only authorized -case-insensitive values are "false" and "true" (the default). - -@item -@strong{Target}: single - -Value is the name of the target platform. Taken into account only in the main -project. - -Note that when the target is specified on the command line (usually with -a switch --target=), the value of attribute reference 'Target is the one -specified on the command line. - -@item -@strong{Runtime}: single, indexed, case-insensitive index - -Index is a language name. Indicates the runtime directory that is to be used -when using the compiler of the language. Taken into account only in the main -project. - -Note that when the runtime is specified for a language on the command line -(usually with a switch --RTS), the value of attribute reference 'Runtime -for this language is the one specified on the command line. -@end itemize - -@item -@strong{Configuration - Libraries} - - -@itemize * - -@item -@strong{Library_Builder}: single - -Value is the path name of the application that is to be used to build -libraries. Usually the path name of "gprlib". - -@item -@strong{Library_Support}: single - -Indicates the level of support of libraries. Only authorized case-insensitive -values are "static_only", "full" or "none" (the default). -@end itemize - -@item -@strong{Configuration - Archives} - - -@itemize * - -@item -@strong{Archive_Builder}: list - -Value is the name of the application to be used to create a static library -(archive), followed by the options to be used. - -@item -@strong{Archive_Builder_Append_Option}: list - -Value is the list of options to be used when invoking the archive builder -to add project files into an archive. - -@item -@strong{Archive_Indexer}: list - -Value is the name of the archive indexer, followed by the required options. - -@item -@strong{Archive_Suffix}: single - -Value is the extension of archives. When not declared, the extension is ".a". - -@item -@strong{Library_Partial_Linker}: list - -Value is the name of the partial linker executable, followed by the required -options. -@end itemize - -@item -@strong{Configuration - Shared Libraries} - - -@itemize * - -@item -@strong{Shared_Library_Prefix}: single - -Value is the prefix in the name of shared library files. When not declared, -the prefix is "lib". - -@item -@strong{Shared_Library_Suffix}: single - -Value is the the extension of the name of shared library files. When not -declared, the extension is ".so". - -@item -@strong{Symbolic_Link_Supported}: single - -Indicates if symbolic links are supported on the platform. Only authorized -case-insensitive values are "true" and "false" (the default). - -@item -@strong{Library_Major_Minor_Id_Supported}: single - -Indicates if major and minor ids for shared library names are supported on -the platform. Only authorized case-insensitive values are "true" and "false" -(the default). - -@item -@strong{Library_Auto_Init_Supported}: single - -Indicates if auto-initialization of Stand-Alone Libraries is supported. Only -authorized case-insensitive values are "true" and "false" (the default). - -@item -@strong{Shared_Library_Minimum_Switches}: list - -Value is the list of required switches when linking a shared library. - -@item -@strong{Library_Version_Switches}: list - -Value is the list of switches to specify a internal name for a shared library. - -@item -@strong{Library_Install_Name_Option}: single - -Value is the name of the option that needs to be used, concatenated with the -path name of the library file, when linking a shared library. - -@item -@strong{Runtime_Library_Dir}: single, indexed, case-insensitive index - -Index is a language name. Value is the path name of the directory where the -runtime libraries are located. - -@item -@strong{Runtime_Source_Dir}: single, indexed, case-insensitive index - -Index is a language name. Value is the path name of the directory where the -sources of runtime libraries are located. -@end itemize -@end itemize - -@node Package Binder Attributes,Package Builder Attributes,Project Level Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-binder-attributes}@anchor{1a9}@anchor{gnat_ugn/gnat_project_manager id49}@anchor{1aa} -@subsubsection Package Binder Attributes - - - -@itemize * - -@item -@strong{General} - - -@itemize * - -@item -@strong{Default_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to be used when binding -code of the language, if there is no applicable attribute Switches. - -@item -@strong{Switches}: list, optional index, indexed, -case-insensitive index, others allowed - -Index is either a language name or a source file name. Value is the list of -switches to be used when binding code. Index is either the source file name -of the executable to be bound or the language name of the code to be bound. -@end itemize - -@item -@strong{Configuration - Binding} - - -@itemize * - -@item -@strong{Driver}: single, indexed, case-insensitive index - -Index is a language name. Value is the name of the application to be used when -binding code of the language. - -@item -@strong{Required_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of the required switches to be -used when binding code of the language. - -@item -@strong{Prefix}: single, indexed, case-insensitive index - -Index is a language name. Value is a prefix to be used for the binder exchange -file name for the language. Used to have different binder exchange file names -when binding different languages. - -@item -@strong{Objects_Path}: single,indexed, case-insensitive index - -Index is a language name. Value is the name of the environment variable that -contains the path for the object directories. - -@item -@strong{Object_Path_File}: single,indexed, case-insensitive index - -Index is a language name. Value is the name of the environment variable. The -value of the environment variable is the path name of a text file that -contains the list of object directories. -@end itemize -@end itemize - -@node Package Builder Attributes,Package Clean Attributes,Package Binder Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-builder-attributes}@anchor{1ab}@anchor{gnat_ugn/gnat_project_manager id50}@anchor{1ac} -@subsubsection Package Builder Attributes - - - -@itemize * - -@item -@strong{Default_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of builder switches to be used when -building an executable of the language, if there is no applicable attribute -Switches. - -@item -@strong{Switches}: list, optional index, indexed, case-insensitive index, -others allowed - -Index is either a language name or a source file name. Value is the list of -builder switches to be used when building an executable. Index is either the -source file name of the executable to be built or its language name. - -@item -@strong{Global_Compilation_Switches}: list, optional index, indexed, -case-insensitive index - -Index is a language name. Value is the list of compilation switches to be -used when building an executable. Index is either the source file name of -the executable to be built or its language name. - -@item -@strong{Executable}: single, indexed, case-insensitive index - -Index is an executable source file name. Value is the simple file name of the -executable to be built. - -@item -@strong{Executable_Suffix}: single - -Value is the extension of the file names of executable. When not specified, -the extension is the default extension of executables on the platform. - -@item -@strong{Global_Configuration_Pragmas}: single - -Value is the file name of a configuration pragmas file that is specified to -the Ada compiler when compiling any Ada source in the project tree. - -@item -@strong{Global_Config_File}: single, indexed, case-insensitive index - -Index is a language name. Value is the file name of a configuration file that -is specified to the compiler when compiling any source of the language in the -project tree. -@end itemize - - -@node Package Clean Attributes,Package Compiler Attributes,Package Builder Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-clean-attributes}@anchor{1ad}@anchor{gnat_ugn/gnat_project_manager id52}@anchor{1ae} -@subsubsection Package Clean Attributes - - - -@itemize * - -@item -@strong{Switches}: list - -Value is a list of switches to be used by the cleaning application. - -@item -@strong{Source_Artifact_Extensions}: list, indexed, case-insensitive index - -Index is a language names. Value is the list of extensions for file names -derived from object file names that need to be cleaned in the object -directory of the project. - -@item -@strong{Object_Artifact_Extensions}: list, indexed, case-insensitive index - -Index is a language names. Value is the list of extensions for file names -derived from source file names that need to be cleaned in the object -directory of the project. - -@item -@strong{Artifacts_In_Object_Dir}: single - -Value is a list of file names expressed as regular expressions that are to be -deleted by gprclean in the object directory of the project. - -@item -@strong{Artifacts_In_Exec_Dir}: single - -Value is list of file names expressed as regular expressions that are to be -deleted by gprclean in the exec directory of the main project. -@end itemize - -@node Package Compiler Attributes,Package Cross_Reference Attributes,Package Clean Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager id53}@anchor{1af}@anchor{gnat_ugn/gnat_project_manager package-compiler-attributes}@anchor{1b0} -@subsubsection Package Compiler Attributes - - - -@itemize * - -@item -@strong{General} - - -@itemize * - -@item -@strong{Default_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of switches to be used when invoking -the compiler for the language for a source of the project, if there is no -applicable attribute Switches. - -@item -@strong{Switches}: list, optional index, indexed, case-insensitive index, -others allowed - -Index is a source file name or a language name. Value is the list of switches -to be used when invoking the compiler for the source or for its language. - -@item -@strong{Local_Configuration_Pragmas}: single - -Value is the file name of a configuration pragmas file that is specified to -the Ada compiler when compiling any Ada source in the project. - -@item -@strong{Local_Config_File}: single, indexed, case-insensitive index - -Index is a language name. Value is the file name of a configuration file that -is specified to the compiler when compiling any source of the language in the -project. -@end itemize - -@item -@strong{Configuration - Compiling} - - -@itemize * - -@item -@strong{Driver}: single, indexed, case-insensitive index - -Index is a language name. Value is the name of the executable for the compiler -of the language. - -@item -@strong{Language_Kind}: single, indexed, case-insensitive index - -Index is a language name. Indicates the kind of the language, either file based -or unit based. Only authorized case-insensitive values are "unit_based" and -"file_based" (the default). - -@item -@strong{Dependency_Kind}: single, indexed, case-insensitive index - -Index is a language name. Indicates how the dependencies are handled for the -language. Only authorized case-insensitive values are "makefile", "ali_file", -"ali_closure" or "none" (the default). - -@item -@strong{Required_Switches}: list, indexed, case-insensitive index - -Equivalent to attribute Leading_Required_Switches. - -@item -@strong{Leading_Required_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of the minimum switches to be used -at the beginning of the command line when invoking the compiler for the -language. - -@item -@strong{Trailing_Required_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of the minimum switches to be used -at the end of the command line when invoking the compiler for the language. - -@item -@strong{PIC_Option}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to be used when -compiling a source of the language when the project is a shared library -project. - -@item -@strong{Path_Syntax}: single, indexed, case-insensitive index - -Index is a language name. Value is the kind of path syntax to be used when -invoking the compiler for the language. Only authorized case-insensitive -values are "canonical" and "host" (the default). - -@item -@strong{Source_File_Switches}: single, indexed, case-insensitive index - -Index is a language name. Value is a list of switches to be used just before -the path name of the source to compile when invoking the compiler for a source -of the language. - -@item -@strong{Object_File_Suffix}: single, indexed, case-insensitive index - -Index is a language name. Value is the extension of the object files created -by the compiler of the language. When not specified, the extension is the -default one for the platform. - -@item -@strong{Object_File_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to be used by the -compiler of the language to specify the path name of the object file. When not -specified, the switch used is "-o". - -@item -@strong{Multi_Unit_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to be used to compile -a unit in a multi unit source of the language. The index of the unit in the -source is concatenated with the last switches in the list. - -@item -@strong{Multi_Unit_Object_Separator}: single, indexed, case-insensitive index - -Index is a language name. Value is the string to be used in the object file -name before the index of the unit, when compiling a unit in a multi unit source -of the language. -@end itemize - -@item -@strong{Configuration - Mapping Files} - - -@itemize * - -@item -@strong{Mapping_File_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to be used to specify -a mapping file when invoking the compiler for a source of the language. - -@item -@strong{Mapping_Spec_Suffix}: single, indexed, case-insensitive index - -Index is a language name. Value is the suffix to be used in a mapping file -to indicate that the source is a spec. - -@item -@strong{Mapping_Body_Suffix}: single, indexed, case-insensitive index - -Index is a language name. Value is the suffix to be used in a mapping file -to indicate that the source is a body. -@end itemize - -@item -@strong{Configuration - Config Files} - - -@itemize * - -@item -@strong{Config_File_Switches}: list: single, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to specify to the -compiler of the language a configuration file. - -@item -@strong{Config_Body_File_Name}: single, indexed, case-insensitive index - -Index is a language name. Value is the template to be used to indicate a -configuration specific to a body of the language in a configuration -file. - -@item -@strong{Config_Body_File_Name_Index}: single, indexed, case-insensitive index - -Index is a language name. Value is the template to be used to indicate a -configuration specific to the body a unit in a multi unit source of the -language in a configuration file. - -@item -@strong{Config_Body_File_Name_Pattern}: single, indexed, -case-insensitive index - -Index is a language name. Value is the template to be used to indicate a -configuration for all bodies of the languages in a configuration file. - -@item -@strong{Config_Spec_File_Name}: single, indexed, case-insensitive index - -Index is a language name. Value is the template to be used to indicate a -configuration specific to a spec of the language in a configuration -file. - -@item -@strong{Config_Spec_File_Name_Index}: single, indexed, case-insensitive index - -Index is a language name. Value is the template to be used to indicate a -configuration specific to the spec a unit in a multi unit source of the -language in a configuration file. - -@item -@strong{Config_Spec_File_Name_Pattern}: single, indexed, -case-insensitive index - -Index is a language name. Value is the template to be used to indicate a -configuration for all specs of the languages in a configuration file. - -@item -@strong{Config_File_Unique}: single, indexed, case-insensitive index - -Index is a language name. Indicates if there should be only one configuration -file specified to the compiler of the language. Only authorized -case-insensitive values are "true" and "false" (the default). -@end itemize - -@item -@strong{Configuration - Dependencies} - - -@itemize * - -@item -@strong{Dependency_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to be used to specify -to the compiler the dependency file when the dependency kind of the language is -file based, and when Dependency_Driver is not specified for the language. - -@item -@strong{Dependency_Driver}: list, indexed, case-insensitive index - -Index is a language name. Value is the name of the executable to be used to -create the dependency file for a source of the language, followed by the -required switches. -@end itemize - -@item -@strong{Configuration - Search Paths} - - -@itemize * - -@item -@strong{Include_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to specify to the -compiler of the language to indicate a directory to look for sources. - -@item -@strong{Include_Path}: single, indexed, case-insensitive index - -Index is a language name. Value is the name of an environment variable that -contains the path of all the directories that the compiler of the language -may search for sources. - -@item -@strong{Include_Path_File}: single, indexed, case-insensitive index - -Index is a language name. Value is the name of an environment variable the -value of which is the path name of a text file that contains the directories -that the compiler of the language may search for sources. - -@item -@strong{Object_Path_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is the list of switches to specify to the -compiler of the language the name of a text file that contains the list of -object directories. When this attribute is not declared, the text file is -not created. -@end itemize -@end itemize - -@node Package Cross_Reference Attributes,Package Finder Attributes,Package Compiler Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager id54}@anchor{1b1}@anchor{gnat_ugn/gnat_project_manager package-cross-reference-attributes}@anchor{1b2} -@subsubsection Package Cross_Reference Attributes - - - -@itemize * - -@item -@strong{Default_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of switches to be used when invoking -@cite{gnatxref} for a source of the language, if there is no applicable -attribute Switches. - -@item -@strong{Switches}: list, optional index, indexed, case-insensitive index, -others allowed - -Index is a source file name. Value is the list of switches to be used when -invoking @cite{gnatxref} for the source. -@end itemize - - -@node Package Finder Attributes,Package gnatls Attributes,Package Cross_Reference Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager id56}@anchor{1b3}@anchor{gnat_ugn/gnat_project_manager package-finder-attributes}@anchor{1b4} -@subsubsection Package Finder Attributes - - - -@itemize * - -@item -@strong{Default_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of switches to be used when invoking -@cite{gnatfind} for a source of the language, if there is no applicable -attribute Switches. - -@item -@strong{Switches}: list, optional index, indexed, case-insensitive index, -others allowed - -Index is a source file name. Value is the list of switches to be used when -invoking @cite{gnatfind} for the source. -@end itemize - -@node Package gnatls Attributes,Package IDE Attributes,Package Finder Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-gnatls-attributes}@anchor{1b5}@anchor{gnat_ugn/gnat_project_manager id57}@anchor{1b6} -@subsubsection Package gnatls Attributes - - - -@itemize * - -@item -@strong{Switches}: list - -Value is a list of switches to be used when invoking @cite{gnatls}. -@end itemize - - -@node Package IDE Attributes,Package Install Attributes,Package gnatls Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager id58}@anchor{1b7}@anchor{gnat_ugn/gnat_project_manager package-ide-attributes}@anchor{1b8} -@subsubsection Package IDE Attributes - - - -@itemize * - -@item -@strong{Default_Switches}: list, indexed - -Index is the name of an external tool that the GNAT Programming System (GPS) -is supporting. Value is a list of switches to use when invoking that tool. - -@item -@strong{Remote_Host}: single - -Value is a string that designates the remote host in a cross-compilation -environment, to be used for remote compilation and debugging. This attribute -should not be specified when running on the local machine. - -@item -@strong{Program_Host}: single - -Value is a string that specifies the name of IP address of the embedded target -in a cross-compilation environment, on which the program should execute. - -@item -@strong{Communication_Protocol}: single - -Value is the name of the protocol to use to communicate with the target -in a cross-compilation environment, for example @cite{"wtx"} or -@cite{"vxworks"}. - -@item -@strong{Compiler_Command}: single, indexed, case-insensitive index - -Index is a language Name. Value is a string that denotes the command to be -used to invoke the compiler. For historical reasons, the value of -@cite{Compiler_Command ("Ada")} is expected to be a reference to @emph{gnatmake} or -@emph{cross-gnatmake}. - -@item -@strong{Debugger_Command}: single - -Value is a string that specifies the name of the debugger to be used, such as -gdb, powerpc-wrs-vxworks-gdb or gdb-4. - -@item -@strong{gnatlist}: single - -Value is a string that specifies the name of the @emph{gnatls} utility -to be used to retrieve information about the predefined path; for example, -@cite{"gnatls"}, @cite{"powerpc-wrs-vxworks-gnatls"}. - -@item -@strong{VCS_Kind}: single - -Value is a string used to specify the Version Control System (VCS) to be used -for this project, for example "Subversion", "ClearCase". If the -value is set to "Auto", the IDE will try to detect the actual VCS used -on the list of supported ones. - -@item -@strong{VCS_File_Check}: single - -Value is a string that specifies the command used by the VCS to check -the validity of a file, either when the user explicitly asks for a check, -or as a sanity check before doing the check-in. - -@item -@strong{VCS_Log_Check}: single - -Value is a string that specifies the command used by the VCS to check -the validity of a log file. - -@item -@strong{Documentation_Dir}: single - -Value is the directory used to generate the documentation of source code. -@end itemize - -@node Package Install Attributes,Package Linker Attributes,Package IDE Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-install-attributes}@anchor{1b9}@anchor{gnat_ugn/gnat_project_manager id59}@anchor{1ba} -@subsubsection Package Install Attributes - - - -@itemize * - -@item -@strong{Artifacts}: list, indexed - -An array attribute to declare a set of files not part of the sources -to be installed. The array discriminant is the directory where the -file is to be installed. If a relative directory then Prefix (see -below) is prepended. Note also that if the same file name occurs -multiple time in the attribute list, the last one will be the one -installed. - -@item -@strong{Prefix}: single - -Value is the install destination directory. - -@item -@strong{Sources_Subdir}: single - -Value is the sources directory or subdirectory of Prefix. - -@item -@strong{Exec_Subdir}: single - -Value is the executables directory or subdirectory of Prefix. - -@item -@strong{Lib_Subdir}: single - -Value is library directory or subdirectory of Prefix. - -@item -@strong{Project_Subdir}: single - -Value is the project directory or subdirectory of Prefix. - -@item -@strong{Active}: single - -Indicates that the project is to be installed or not. Case-insensitive value -"false" means that the project is not to be installed, all other values mean -that the project is to be installed. - -@item -@strong{Mode}: single - -Value is the installation mode, it is either @strong{dev} (default) or @strong{usage}. - -@item -@strong{Install_Name}: single - -Specify the name to use for recording the installation. The default is -the project name without the extension. -@end itemize - -@node Package Linker Attributes,Package Naming Attributes,Package Install Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager id60}@anchor{1bb}@anchor{gnat_ugn/gnat_project_manager package-linker-attributes}@anchor{1bc} -@subsubsection Package Linker Attributes - - - -@itemize * - -@item -@strong{General} - - -@itemize * - -@item -@strong{Required_Switches}: list - -Value is a list of switches that are required when invoking the linker to link -an executable. - -@item -@strong{Default_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of switches for the linker when -linking an executable for a main source of the language, when there is no -applicable Switches. - -@item -@strong{Leading_Switches}: list, optional index, indexed, -case-insensitive index, others allowed - -Index is a source file name or a language name. Value is the list of switches -to be used at the beginning of the command line when invoking the linker to -build an executable for the source or for its language. - -@item -@strong{Switches}: list, optional index, indexed, case-insensitive index, -others allowed - -Index is a source file name or a language name. Value is the list of switches -to be used when invoking the linker to build an executable for the source or -for its language. - -@item -@strong{Trailing_Switches}: list, optional index, indexed, -case-insensitive index, others allowed - -Index is a source file name or a language name. Value is the list of switches -to be used at the end of the command line when invoking the linker to -build an executable for the source or for its language. These switches may -override the Required_Switches. - -@item -@strong{Linker_Options}: list - -Value is a list of switches/options that are to be added when linking an -executable from a project importing the current project directly or indirectly. -Linker_Options are not used when linking an executable from the current -project. - -@item -@strong{Map_File_Option}: single - -Value is the switch to specify the map file name that the linker needs to -create. -@end itemize - -@item -@strong{Configuration - Linking} - - -@itemize * - -@item -@strong{Driver}: single - -Value is the name of the linker executable. -@end itemize - -@item -@strong{Configuration - Response Files} - - -@itemize * - -@item -@strong{Max_Command_Line_Length}: single - -Value is the maximum number of character in the command line when invoking -the linker to link an executable. - -@item -@strong{Response_File_Format}: single - -Indicates the kind of response file to create when the length of the linking -command line is too large. Only authorized case-insensitive values are "none", -"gnu", "object_list", "gcc_gnu", "gcc_option_list" and "gcc_object_list". - -@item -@strong{Response_File_Switches}: list - -Value is the list of switches to specify a response file to the linker. -@end itemize -@end itemize - -@c only PRO or GPL -@c -@c .. _Package_Metrics_Attribute: -@c -@c Package Metrics Attribute -@c ^^^^^^^^^^^^^^^^^^^^^^^^^ -@c -@c * **Default_Switches**: list, indexed, case-insensitive index -@c -@c Index is a language name. Value is a list of switches to be used when invoking -@c `gnatmetric` for a source of the language, if there is no applicable -@c attribute Switches. -@c -@c * **Switches**: list, optional index, indexed, case-insensitive index, -@c others allowed -@c -@c Index is a source file name. Value is the list of switches to be used when -@c invoking `gnatmetric` for the source. - -@node Package Naming Attributes,Package Remote Attributes,Package Linker Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-naming-attributes}@anchor{1bd}@anchor{gnat_ugn/gnat_project_manager id61}@anchor{1be} -@subsubsection Package Naming Attributes - - - -@itemize * - -@item -@strong{Specification_Suffix}: single, indexed, case-insensitive index - -Equivalent to attribute Spec_Suffix. - -@item -@strong{Spec_Suffix}: single, indexed, case-insensitive index - -Index is a language name. Value is the extension of file names for specs of -the language. - -@item -@strong{Implementation_Suffix}: single, indexed, case-insensitive index - -Equivalent to attribute Body_Suffix. - -@item -@strong{Body_Suffix}: single, indexed, case-insensitive index - -Index is a language name. Value is the extension of file names for bodies of -the language. - -@item -@strong{Separate_Suffix}: single - -Value is the extension of file names for subunits of Ada. - -@item -@strong{Casing}: single - -Indicates the casing of sources of the Ada language. Only authorized -case-insensitive values are "lowercase", "uppercase" and "mixedcase". - -@item -@strong{Dot_Replacement}: single - -Value is the string that replace the dot of unit names in the source file names -of the Ada language. - -@item -@strong{Specification}: single, optional index, indexed, -case-insensitive index - -Equivalent to attribute Spec. - -@item -@strong{Spec}: single, optional index, indexed, case-insensitive index - -Index is a unit name. Value is the file name of the spec of the unit. - -@item -@strong{Implementation}: single, optional index, indexed, -case-insensitive index - -Equivalent to attribute Body. - -@item -@strong{Body}: single, optional index, indexed, case-insensitive index - -Index is a unit name. Value is the file name of the body of the unit. - -@item -@strong{Specification_Exceptions}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of specs for the language that do not -necessarily follow the naming scheme for the language and that may or may not -be found in the source directories of the project. - -@item -@strong{Implementation_Exceptions}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of bodies for the language that do not -necessarily follow the naming scheme for the language and that may or may not -be found in the source directories of the project. -@end itemize - - -@node Package Remote Attributes,Package Stack Attributes,Package Naming Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-remote-attributes}@anchor{1bf}@anchor{gnat_ugn/gnat_project_manager id63}@anchor{1c0} -@subsubsection Package Remote Attributes - - - -@itemize * - -@item -@strong{Included_Patterns}: list - -If this attribute is defined it sets the patterns to -synchronized from the master to the slaves. It is exclusive -with Excluded_Patterns, that is it is an error to define -both. - -@item -@strong{Included_Artifact_Patterns}: list - -If this attribute is defined it sets the patterns of compilation -artifacts to synchronized from the slaves to the build master. -This attribute replace the default hard-coded patterns. - -@item -@strong{Excluded_Patterns}: list - -Set of patterns to ignore when synchronizing sources from the build -master to the slaves. A set of predefined patterns are supported -(e.g. *.o, *.ali, *.exe, etc.), this attributes make it possible to -add some more patterns. - -@item -@strong{Root_Dir}: single - -Value is the root directory used by the slave machines. -@end itemize - -@node Package Stack Attributes,Package Synchronize Attributes,Package Remote Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager id64}@anchor{1c1}@anchor{gnat_ugn/gnat_project_manager package-stack-attributes}@anchor{1c2} -@subsubsection Package Stack Attributes - - - -@itemize * - -@item -@strong{Switches}: list - -Value is the list of switches to be used when invoking @cite{gnatstack}. -@end itemize - -@node Package Synchronize Attributes,,Package Stack Attributes,Attributes -@anchor{gnat_ugn/gnat_project_manager package-synchronize-attributes}@anchor{1c3} -@subsubsection Package Synchronize Attributes - - - -@itemize * - -@item -@strong{Default_Switches}: list, indexed, case-insensitive index - -Index is a language name. Value is a list of switches to be used when invoking -@cite{gnatsync} for a source of the language, if there is no applicable -attribute Switches. - -@item -@strong{Switches}: list, optional index, indexed, case-insensitive index, -others allowed - -Index is a source file name. Value is the list of switches to be used when -invoking @cite{gnatsync} for the source. -@end itemize - -@node Tools Supporting Project Files,GNAT Utility Programs,GNAT Project Manager,Top -@anchor{gnat_ugn/tools_supporting_project_files doc}@anchor{1c4}@anchor{gnat_ugn/tools_supporting_project_files tools-supporting-project-files}@anchor{c}@anchor{gnat_ugn/tools_supporting_project_files id1}@anchor{1c5} -@chapter Tools Supporting Project Files - - -This section describes how project files can be used in conjunction with a number of -GNAT tools. - -@menu -* gnatmake and Project Files:: -* The GNAT Driver and Project Files:: - -@end menu - -@node gnatmake and Project Files,The GNAT Driver and Project Files,,Tools Supporting Project Files -@anchor{gnat_ugn/tools_supporting_project_files id2}@anchor{1c6}@anchor{gnat_ugn/tools_supporting_project_files gnatmake-and-project-files}@anchor{e4} -@section gnatmake and Project Files - - -This section covers several topics related to @emph{gnatmake} and -project files: defining switches for @emph{gnatmake} -and for the tools that it invokes; specifying configuration pragmas; -the use of the @cite{Main} attribute; building and rebuilding library project -files. - -@menu -* Switches Related to Project Files:: -* Switches and Project Files:: -* Specifying Configuration Pragmas:: -* Project Files and Main Subprograms:: -* Library Project Files:: - -@end menu - -@node Switches Related to Project Files,Switches and Project Files,,gnatmake and Project Files -@anchor{gnat_ugn/tools_supporting_project_files switches-related-to-project-files}@anchor{e6}@anchor{gnat_ugn/tools_supporting_project_files id3}@anchor{1c7} -@subsection Switches Related to Project Files - - -The following switches are used by GNAT tools that support project files: - -@quotation - -@geindex -P (any project-aware tool) -@end quotation - - -@table @asis - -@item @code{-P@emph{project}} - -Indicates the name of a project file. This project file will be parsed with -the verbosity indicated by @emph{-vP*x*}, -if any, and using the external references indicated -by @emph{-X} switches, if any. -There may zero, one or more spaces between @emph{-P} and @cite{project}. - -There must be only one @emph{-P} switch on the command line. - -Since the Project Manager parses the project file only after all the switches -on the command line are checked, the order of the switches -@emph{-P}, -@emph{-vP*x*} -or @emph{-X} is not significant. - -@geindex -X (any project-aware tool) - -@item @code{-X@emph{name}=@emph{value}} - -Indicates that external variable @cite{name} has the value @cite{value}. -The Project Manager will use this value for occurrences of -@cite{external(name)} when parsing the project file. - -If @cite{name} or @cite{value} includes a space, then @cite{name=value} should be -put between quotes. - -@example --XOS=NT --X"user=John Doe" -@end example - -Several @emph{-X} switches can be used simultaneously. -If several @emph{-X} switches specify the same -@cite{name}, only the last one is used. - -An external variable specified with a @emph{-X} switch -takes precedence over the value of the same name in the environment. - -@geindex -vP (any project-aware tool) - -@item @code{-vP@emph{x}} - -Indicates the verbosity of the parsing of GNAT project files. - -@emph{-vP0} means Default; -@emph{-vP1} means Medium; -@emph{-vP2} means High. - -The default is Default: no output for syntactically correct -project files. -If several @emph{-vP*x*} switches are present, -only the last one is used. - -@geindex -aP (any project-aware tool) - -@item @code{-aP@emph{dir}} - -Add directory @cite{dir} at the beginning of the project search path, in order, -after the current working directory. - -@geindex -eL (any project-aware tool) - -@item @code{-eL} - -Follow all symbolic links when processing project files. - -@geindex --subdirs= (gnatmake and gnatclean) - -@item @code{--subdirs=@emph{subdir}} - -This switch is recognized by @emph{gnatmake} and @emph{gnatclean}. It -indicate that the real directories (except the source directories) are the -subdirectories @cite{subdir} of the directories specified in the project files. -This applies in particular to object directories, library directories and -exec directories. If the subdirectories do not exist, they are created -automatically. -@end table - -@node Switches and Project Files,Specifying Configuration Pragmas,Switches Related to Project Files,gnatmake and Project Files -@anchor{gnat_ugn/tools_supporting_project_files id4}@anchor{1c8}@anchor{gnat_ugn/tools_supporting_project_files switches-and-project-files}@anchor{1c9} -@subsection Switches and Project Files - - -For each of the packages @cite{Builder}, @cite{Compiler}, @cite{Binder}, and -@cite{Linker}, you can specify a @cite{Default_Switches} -attribute, a @cite{Switches} attribute, or both; -as their names imply, these switch-related -attributes affect the switches that are used for each of these GNAT -components when -@emph{gnatmake} is invoked. As will be explained below, these -component-specific switches precede -the switches provided on the @emph{gnatmake} command line. - -The @cite{Default_Switches} attribute is an attribute -indexed by language name (case insensitive) whose value is a string list. -For example: - -@quotation - -@example -package Compiler is - for Default_Switches ("Ada") - use ("-gnaty", - "-v"); -end Compiler; -@end example -@end quotation - -The @cite{Switches} attribute is indexed on a file name (which may or may -not be case sensitive, depending -on the operating system) whose value is a string list. For example: - -@quotation - -@example -package Builder is - for Switches ("main1.adb") - use ("-O2"); - for Switches ("main2.adb") - use ("-g"); -end Builder; -@end example -@end quotation - -For the @cite{Builder} package, the file names must designate source files -for main subprograms. For the @cite{Binder} and @cite{Linker} packages, the -file names must designate @code{ALI} or source files for main subprograms. -In each case just the file name without an explicit extension is acceptable. - -For each tool used in a program build (@emph{gnatmake}, the compiler, the -binder, and the linker), the corresponding package @@dfn@{contributes@} a set of -switches for each file on which the tool is invoked, based on the -switch-related attributes defined in the package. -In particular, the switches -that each of these packages contributes for a given file @cite{f} comprise: - - -@itemize * - -@item -the value of attribute @cite{Switches (`f})`, -if it is specified in the package for the given file, - -@item -otherwise, the value of @cite{Default_Switches ("Ada")}, -if it is specified in the package. -@end itemize - -If neither of these attributes is defined in the package, then the package does -not contribute any switches for the given file. - -When @emph{gnatmake} is invoked on a file, the switches comprise -two sets, in the following order: those contributed for the file -by the @cite{Builder} package; -and the switches passed on the command line. - -When @emph{gnatmake} invokes a tool (compiler, binder, linker) on a file, -the switches passed to the tool comprise three sets, -in the following order: - - -@itemize * - -@item -the applicable switches contributed for the file -by the @cite{Builder} package in the project file supplied on the command line; - -@item -those contributed for the file by the package (in the relevant project file -- -see below) corresponding to the tool; and - -@item -the applicable switches passed on the command line. -@end itemize - -The term @emph{applicable switches} reflects the fact that -@emph{gnatmake} switches may or may not be passed to individual -tools, depending on the individual switch. - -@emph{gnatmake} may invoke the compiler on source files from different -projects. The Project Manager will use the appropriate project file to -determine the @cite{Compiler} package for each source file being compiled. -Likewise for the @cite{Binder} and @cite{Linker} packages. - -As an example, consider the following package in a project file: - -@quotation - -@example -project Proj1 is - package Compiler is - for Default_Switches ("Ada") - use ("-g"); - for Switches ("a.adb") - use ("-O1"); - for Switches ("b.adb") - use ("-O2", - "-gnaty"); - end Compiler; -end Proj1; -@end example -@end quotation - -If @emph{gnatmake} is invoked with this project file, and it needs to -compile, say, the files @code{a.adb}, @code{b.adb}, and @code{c.adb}, then -@code{a.adb} will be compiled with the switch @emph{-O1}, -@code{b.adb} with switches @emph{-O2} and @emph{-gnaty}, -and @code{c.adb} with @emph{-g}. - -The following example illustrates the ordering of the switches -contributed by different packages: - -@quotation - -@example -project Proj2 is - package Builder is - for Switches ("main.adb") - use ("-g", - "-O1", - "-f"); - end Builder; - - package Compiler is - for Switches ("main.adb") - use ("-O2"); - end Compiler; -end Proj2; -@end example -@end quotation - -If you issue the command: - -@quotation - -@example -$ gnatmake -Pproj2 -O0 main -@end example -@end quotation - -then the compiler will be invoked on @code{main.adb} with the following -sequence of switches - -@quotation - -@example --g -O1 -O2 -O0 -@end example -@end quotation - -with the last @emph{-O} -switch having precedence over the earlier ones; -several other switches -(such as @emph{-c}) are added implicitly. - -The switches @emph{-g} -and @emph{-O1} are contributed by package -@cite{Builder}, @emph{-O2} is contributed -by the package @cite{Compiler} -and @emph{-O0} comes from the command line. - -The @emph{-g} switch will also be passed in the invocation of -@emph{Gnatlink.} - -A final example illustrates switch contributions from packages in different -project files: - -@quotation - -@example -project Proj3 is - for Source_Files use ("pack.ads", "pack.adb"); - package Compiler is - for Default_Switches ("Ada") - use ("-gnata"); - end Compiler; -end Proj3; - -with "Proj3"; -project Proj4 is - for Source_Files use ("foo_main.adb", "bar_main.adb"); - package Builder is - for Switches ("foo_main.adb") - use ("-s", - "-g"); - end Builder; -end Proj4; -@end example - -@example --- Ada source file: -with Pack; -procedure Foo_Main is - ... -end Foo_Main; -@end example -@end quotation - -If the command is - -@quotation - -@example -$ gnatmake -PProj4 foo_main.adb -cargs -gnato -@end example -@end quotation - -then the switches passed to the compiler for @code{foo_main.adb} are -@emph{-g} (contributed by the package @cite{Proj4.Builder}) and -@emph{-gnato} (passed on the command line). -When the imported package @cite{Pack} is compiled, the switches used -are @emph{-g} from @cite{Proj4.Builder}, -@emph{-gnata} (contributed from package @cite{Proj3.Compiler}, -and @emph{-gnato} from the command line. - -When using @emph{gnatmake} with project files, some switches or -arguments may be expressed as relative paths. As the working directory where -compilation occurs may change, these relative paths are converted to absolute -paths. For the switches found in a project file, the relative paths -are relative to the project file directory, for the switches on the command -line, they are relative to the directory where @emph{gnatmake} is invoked. -The switches for which this occurs are: --I, --A, --L, --aO, --aL, --aI, as well as all arguments that are not switches (arguments to -switch --o, object files specified in package @cite{Linker} or after --largs on the command line). The exception to this rule is the switch ---RTS= for which a relative path argument is never converted. - -@node Specifying Configuration Pragmas,Project Files and Main Subprograms,Switches and Project Files,gnatmake and Project Files -@anchor{gnat_ugn/tools_supporting_project_files id5}@anchor{1ca}@anchor{gnat_ugn/tools_supporting_project_files specifying-configuration-pragmas}@anchor{7d} -@subsection Specifying Configuration Pragmas - - -When using @emph{gnatmake} with project files, if there exists a file -@code{gnat.adc} that contains configuration pragmas, this file will be -ignored. - -Configuration pragmas can be defined by means of the following attributes in -project files: @cite{Global_Configuration_Pragmas} in package @cite{Builder} -and @cite{Local_Configuration_Pragmas} in package @cite{Compiler}. - -Both these attributes are single string attributes. Their values is the path -name of a file containing configuration pragmas. If a path name is relative, -then it is relative to the project directory of the project file where the -attribute is defined. - -When compiling a source, the configuration pragmas used are, in order, -those listed in the file designated by attribute -@cite{Global_Configuration_Pragmas} in package @cite{Builder} of the main -project file, if it is specified, and those listed in the file designated by -attribute @cite{Local_Configuration_Pragmas} in package @cite{Compiler} of -the project file of the source, if it exists. - -@node Project Files and Main Subprograms,Library Project Files,Specifying Configuration Pragmas,gnatmake and Project Files -@anchor{gnat_ugn/tools_supporting_project_files id6}@anchor{1cb}@anchor{gnat_ugn/tools_supporting_project_files project-files-and-main-subprograms}@anchor{e5} -@subsection Project Files and Main Subprograms - - -When using a project file, you can invoke @emph{gnatmake} -with one or several main subprograms, by specifying their source files on the -command line. - -@quotation - -@example -$ gnatmake -Pprj main1.adb main2.adb main3.adb -@end example -@end quotation - -Each of these needs to be a source file of the same project, except -when the switch @cite{-u} is used. - -When @cite{-u} is not used, all the mains need to be sources of the -same project, one of the project in the tree rooted at the project specified -on the command line. The package @cite{Builder} of this common project, the -"main project" is the one that is considered by @emph{gnatmake}. - -When @cite{-u} is used, the specified source files may be in projects -imported directly or indirectly by the project specified on the command line. -Note that if such a source file is not part of the project specified on the -command line, the switches found in package @cite{Builder} of the -project specified on the command line, if any, that are transmitted -to the compiler will still be used, not those found in the project file of -the source file. - -When using a project file, you can also invoke @emph{gnatmake} without -explicitly specifying any main, and the effect depends on whether you have -defined the @cite{Main} attribute. This attribute has a string list value, -where each element in the list is the name of a source file (the file -extension is optional) that contains a unit that can be a main subprogram. - -If the @cite{Main} attribute is defined in a project file as a non-empty -string list and the switch @emph{-u} is not used on the command -line, then invoking @emph{gnatmake} with this project file but without any -main on the command line is equivalent to invoking @emph{gnatmake} with all -the file names in the @cite{Main} attribute on the command line. - -Example: - -@quotation - -@example -project Prj is - for Main use ("main1.adb", "main2.adb", "main3.adb"); -end Prj; -@end example -@end quotation - -With this project file, @cite{"gnatmake -Pprj"} -is equivalent to -@cite{"gnatmake -Pprj main1.adb main2.adb main3.adb"}. - -When the project attribute @cite{Main} is not specified, or is specified -as an empty string list, or when the switch @emph{-u} is used on the command -line, then invoking @emph{gnatmake} with no main on the command line will -result in all immediate sources of the project file being checked, and -potentially recompiled. Depending on the presence of the switch @emph{-u}, -sources from other project files on which the immediate sources of the main -project file depend are also checked and potentially recompiled. In other -words, the @emph{-u} switch is applied to all of the immediate sources of the -main project file. - -When no main is specified on the command line and attribute @cite{Main} exists -and includes several mains, or when several mains are specified on the -command line, the default switches in package @cite{Builder} will -be used for all mains, even if there are specific switches -specified for one or several mains. - -But the switches from package @cite{Binder} or @cite{Linker} will be -the specific switches for each main, if they are specified. - -@node Library Project Files,,Project Files and Main Subprograms,gnatmake and Project Files -@anchor{gnat_ugn/tools_supporting_project_files id7}@anchor{1cc}@anchor{gnat_ugn/tools_supporting_project_files library-project-files}@anchor{1cd} -@subsection Library Project Files - - -When @emph{gnatmake} is invoked with a main project file that is a library -project file, it is not allowed to specify one or more mains on the command -line. - -When a library project file is specified, switches @cite{-b} and -@cite{-l} have special meanings. - - -@itemize * - -@item -@cite{-b} is only allowed for stand-alone libraries. It indicates -to @emph{gnatmake} that @emph{gnatbind} should be invoked for the -library. - -@item -@cite{-l} may be used for all library projects. It indicates -to @emph{gnatmake} that the binder generated file should be compiled -(in the case of a stand-alone library) and that the library should be built. -@end itemize - -@node The GNAT Driver and Project Files,,gnatmake and Project Files,Tools Supporting Project Files -@anchor{gnat_ugn/tools_supporting_project_files id8}@anchor{1ce}@anchor{gnat_ugn/tools_supporting_project_files the-gnat-driver-and-project-files}@anchor{122} -@section The GNAT Driver and Project Files - - -A number of GNAT tools beyond @emph{gnatmake} -can benefit from project files: - - - -@itemize * - -@item -@emph{gnatbind} - -@item -@emph{gnatclean} - -@item -@emph{gnatfind} - -@item -@emph{gnatlink} - -@item -@emph{gnatls} - -@item -@emph{gnatxref} -@end itemize - -However, none of these tools can be invoked -directly with a project file switch (@emph{-P}). -They must be invoked through the @emph{gnat} driver. - -The @emph{gnat} driver is a wrapper that accepts a number of commands and -calls the corresponding tool. It was designed initially for VMS platforms (to -convert VMS qualifiers to Unix-style switches), but it is now available on all -GNAT platforms. - -On non-VMS platforms, the @emph{gnat} driver accepts the following commands -(case insensitive): - - - -@itemize * - -@item -BIND to invoke @emph{gnatbind} - -@item -CHOP to invoke @emph{gnatchop} - -@item -CLEAN to invoke @emph{gnatclean} - -@item -COMP or COMPILE to invoke the compiler - -@item -FIND to invoke @emph{gnatfind} - -@item -KR or KRUNCH to invoke @emph{gnatkr} - -@item -LINK to invoke @emph{gnatlink} - -@item -LS or LIST to invoke @emph{gnatls} - -@item -MAKE to invoke @emph{gnatmake} - -@item -NAME to invoke @emph{gnatname} - -@item -PREP or PREPROCESS to invoke @emph{gnatprep} - -@item -XREF to invoke @emph{gnatxref} -@end itemize - -Note that the command -@emph{gnatmake -c -f -u} is used to invoke the compiler. - -On non-VMS platforms, between @emph{gnat} and the command, two -special switches may be used: - - -@itemize * - -@item -@emph{-v} to display the invocation of the tool. - -@item -@emph{-dn} to prevent the @emph{gnat} driver from removing -the temporary files it has created. These temporary files are -configuration files and temporary file list files. -@end itemize - -The command may be followed by switches and arguments for the invoked -tool. - -@quotation - -@example -$ gnat bind -C main.ali -$ gnat ls -a main -$ gnat chop foo.txt -@end example -@end quotation - -Switches may also be put in text files, one switch per line, and the text -files may be specified with their path name preceded by '@@'. - -@quotation - -@example -$ gnat bind @@args.txt main.ali -@end example -@end quotation - -In addition, for the following commands the project file related switches -(@emph{-P}, @emph{-X} and @emph{-vPx}) may be used in addition to -the switches of the invoking tool: - - - -@itemize * - -@item -BIND - -@item -COMP or COMPILE - -@item -FIND - -@item -LS or LIST - -@item -LINK - -@item -XREF -@end itemize - - -For each of the following commands, there is optionally a corresponding -package in the main project. - - - -@itemize * - -@item -package @cite{Binder} for command BIND (invoking @cite{gnatbind}) - -@item -package @cite{Compiler} for command COMP or COMPILE (invoking the compiler) - -@item -package @cite{Cross_Reference} for command XREF (invoking @cite{gnatxref}) - -@item -package @cite{Finder} for command FIND (invoking @cite{gnatfind}) - -@item -package @cite{Gnatls} for command LS or LIST (invoking @cite{gnatls}) - -@item -package @cite{Linker} for command LINK (invoking @cite{gnatlink}) -@end itemize - -Package @cite{Gnatls} has a unique attribute @cite{Switches}, -a simple variable with a string list value. It contains switches -for the invocation of @cite{gnatls}. - -@quotation - -@example -project Proj1 is - package gnatls is - for Switches - use ("-a", - "-v"); - end gnatls; -end Proj1; -@end example -@end quotation - -All other packages have two attribute @cite{Switches} and -@cite{Default_Switches}. - -@cite{Switches} is an indexed attribute, indexed by the -source file name, that has a string list value: the switches to be -used when the tool corresponding to the package is invoked for the specific -source file. - -@cite{Default_Switches} is an attribute, -indexed by the programming language that has a string list value. -@cite{Default_Switches ("Ada")} contains the -switches for the invocation of the tool corresponding -to the package, except if a specific @cite{Switches} attribute -is specified for the source file. - -@quotation - -@example -project Proj is - - for Source_Dirs use (""); - - package gnatls is - for Switches use - ("-a", - "-v"); - end gnatls; - - package Compiler is - for Default_Switches ("Ada") - use ("-gnatv", - "-gnatwa"); - end Binder; - - package Binder is - for Default_Switches ("Ada") - use ("-C", - "-e"); - end Binder; - - package Linker is - for Default_Switches ("Ada") - use ("-C"); - for Switches ("main.adb") - use ("-C", - "-v", - "-v"); - end Linker; - - package Finder is - for Default_Switches ("Ada") - use ("-a", - "-f"); - end Finder; - - package Cross_Reference is - for Default_Switches ("Ada") - use ("-a", - "-f", - "-d", - "-u"); - end Cross_Reference; -end Proj; -@end example -@end quotation - -With the above project file, commands such as - -@quotation - -@example -$ gnat comp -Pproj main -$ gnat ls -Pproj main -$ gnat xref -Pproj main -$ gnat bind -Pproj main.ali -$ gnat link -Pproj main.ali -@end example -@end quotation - -will set up the environment properly and invoke the tool with the switches -found in the package corresponding to the tool: -@cite{Default_Switches ("Ada")} for all tools, -except @cite{Switches ("main.adb")} -for @cite{gnatlink}. - - -@node GNAT Utility Programs,GNAT and Program Execution,Tools Supporting Project Files,Top -@anchor{gnat_ugn/gnat_utility_programs doc}@anchor{1cf}@anchor{gnat_ugn/gnat_utility_programs gnat-utility-programs}@anchor{d}@anchor{gnat_ugn/gnat_utility_programs id1}@anchor{1d0} +@node GNAT Utility Programs,GNAT and Program Execution,Building Executable Programs with GNAT,Top +@anchor{gnat_ugn/gnat_utility_programs doc}@anchor{141}@anchor{gnat_ugn/gnat_utility_programs gnat-utility-programs}@anchor{b}@anchor{gnat_ugn/gnat_utility_programs id1}@anchor{142} @chapter GNAT Utility Programs @@ -23339,16 +16858,16 @@ This chapter describes a number of utility programs: @itemize * @item -@ref{22,,The File Cleanup Utility gnatclean} +@ref{20,,The File Cleanup Utility gnatclean} @item -@ref{23,,The GNAT Library Browser gnatls} +@ref{21,,The GNAT Library Browser gnatls} @item -@ref{24,,The Cross-Referencing Tools gnatxref and gnatfind} +@ref{22,,The Cross-Referencing Tools gnatxref and gnatfind} @item -@ref{25,,The Ada to HTML Converter gnathtml} +@ref{23,,The Ada to HTML Converter gnathtml} @end itemize Other GNAT utilities are described elsewhere in this manual: @@ -23357,16 +16876,16 @@ Other GNAT utilities are described elsewhere in this manual: @itemize * @item -@ref{5b,,Handling Arbitrary File Naming Conventions with gnatname} +@ref{59,,Handling Arbitrary File Naming Conventions with gnatname} @item -@ref{65,,File Name Krunching with gnatkr} +@ref{63,,File Name Krunching with gnatkr} @item -@ref{38,,Renaming Files with gnatchop} +@ref{36,,Renaming Files with gnatchop} @item -@ref{19,,Preprocessing with gnatprep} +@ref{17,,Preprocessing with gnatprep} @end itemize @menu @@ -23378,7 +16897,7 @@ Other GNAT utilities are described elsewhere in this manual: @end menu @node The File Cleanup Utility gnatclean,The GNAT Library Browser gnatls,,GNAT Utility Programs -@anchor{gnat_ugn/gnat_utility_programs id2}@anchor{1d1}@anchor{gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean}@anchor{22} +@anchor{gnat_ugn/gnat_utility_programs id2}@anchor{143}@anchor{gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean}@anchor{20} @section The File Cleanup Utility @emph{gnatclean} @@ -23398,7 +16917,7 @@ generated files and executable files. @end menu @node Running gnatclean,Switches for gnatclean,,The File Cleanup Utility gnatclean -@anchor{gnat_ugn/gnat_utility_programs running-gnatclean}@anchor{1d2}@anchor{gnat_ugn/gnat_utility_programs id3}@anchor{1d3} +@anchor{gnat_ugn/gnat_utility_programs running-gnatclean}@anchor{144}@anchor{gnat_ugn/gnat_utility_programs id3}@anchor{145} @subsection Running @cite{gnatclean} @@ -23422,7 +16941,7 @@ the linker. In informative-only mode, specified by switch normal mode is listed, but no file is actually deleted. @node Switches for gnatclean,,Running gnatclean,The File Cleanup Utility gnatclean -@anchor{gnat_ugn/gnat_utility_programs id4}@anchor{1d4}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatclean}@anchor{1d5} +@anchor{gnat_ugn/gnat_utility_programs id4}@anchor{146}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatclean}@anchor{147} @subsection Switches for @cite{gnatclean} @@ -23573,7 +17092,7 @@ Verbose mode. @item @code{-vP@emph{x}} Indicates the verbosity of the parsing of GNAT project files. -@ref{e6,,Switches Related to Project Files}. +@ref{de,,Switches Related to Project Files}. @end table @geindex -X (gnatclean) @@ -23586,7 +17105,7 @@ Indicates the verbosity of the parsing of GNAT project files. Indicates that external variable @cite{name} has the value @cite{value}. The Project Manager will use this value for occurrences of @cite{external(name)} when parsing the project file. -@ref{e6,,Switches Related to Project Files}. +@ref{de,,Switches Related to Project Files}. @end table @geindex -aO (gnatclean) @@ -23624,7 +17143,7 @@ where @cite{gnatclean} was invoked. @end table @node The GNAT Library Browser gnatls,The Cross-Referencing Tools gnatxref and gnatfind,The File Cleanup Utility gnatclean,GNAT Utility Programs -@anchor{gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls}@anchor{23}@anchor{gnat_ugn/gnat_utility_programs id5}@anchor{1d6} +@anchor{gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls}@anchor{21}@anchor{gnat_ugn/gnat_utility_programs id5}@anchor{148} @section The GNAT Library Browser @cite{gnatls} @@ -23638,7 +17157,7 @@ files. It can also be used to check the source dependencies of a unit as well as various characteristics. Note: to invoke @cite{gnatls} with a project file, use the @cite{gnat} -driver (see @ref{122,,The GNAT Driver and Project Files}). +driver (see @emph{The_GNAT_Driver_and_Project_Files}). @menu * Running gnatls:: @@ -23648,7 +17167,7 @@ driver (see @ref{122,,The GNAT Driver and Project Files}). @end menu @node Running gnatls,Switches for gnatls,,The GNAT Library Browser gnatls -@anchor{gnat_ugn/gnat_utility_programs id6}@anchor{1d7}@anchor{gnat_ugn/gnat_utility_programs running-gnatls}@anchor{1d8} +@anchor{gnat_ugn/gnat_utility_programs id6}@anchor{149}@anchor{gnat_ugn/gnat_utility_programs running-gnatls}@anchor{14a} @subsection Running @cite{gnatls} @@ -23662,7 +17181,7 @@ $ gnatls switches `object_or_ali_file` @end quotation The main argument is the list of object or @code{ali} files -(see @ref{44,,The Ada Library Information Files}) +(see @ref{42,,The Ada Library Information Files}) for which information is requested. In normal mode, without additional option, @cite{gnatls} produces a @@ -23728,7 +17247,7 @@ version of the same source that has been modified. @end table @node Switches for gnatls,Example of gnatls Usage,Running gnatls,The GNAT Library Browser gnatls -@anchor{gnat_ugn/gnat_utility_programs id7}@anchor{1d9}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatls}@anchor{1da} +@anchor{gnat_ugn/gnat_utility_programs id7}@anchor{14b}@anchor{gnat_ugn/gnat_utility_programs switches-for-gnatls}@anchor{14c} @subsection Switches for @cite{gnatls} @@ -23843,7 +17362,7 @@ Several such switches may be specified simultaneously. @item @code{-aO@emph{dir}}, @code{-aI@emph{dir}}, @code{-I@emph{dir}}, @code{-I-}, @code{-nostdinc} Source path manipulation. Same meaning as the equivalent @emph{gnatmake} -flags (@ref{e2,,Switches for gnatmake}). +flags (@ref{dc,,Switches for gnatmake}). @end table @geindex -aP (gnatls) @@ -23864,7 +17383,7 @@ Add @cite{dir} at the beginning of the project search dir. @item @code{--RTS=@emph{rts-path}`} Specifies the default location of the runtime library. Same meaning as the -equivalent @emph{gnatmake} flag (@ref{e2,,Switches for gnatmake}). +equivalent @emph{gnatmake} flag (@ref{dc,,Switches for gnatmake}). @end table @geindex -v (gnatls) @@ -23910,7 +17429,7 @@ by the user. @end table @node Example of gnatls Usage,,Switches for gnatls,The GNAT Library Browser gnatls -@anchor{gnat_ugn/gnat_utility_programs id8}@anchor{1db}@anchor{gnat_ugn/gnat_utility_programs example-of-gnatls-usage}@anchor{1dc} +@anchor{gnat_ugn/gnat_utility_programs id8}@anchor{14d}@anchor{gnat_ugn/gnat_utility_programs example-of-gnatls-usage}@anchor{14e} @subsection Example of @cite{gnatls} Usage @@ -23990,7 +17509,7 @@ instr.ads @end quotation @node The Cross-Referencing Tools gnatxref and gnatfind,The Ada to HTML Converter gnathtml,The GNAT Library Browser gnatls,GNAT Utility Programs -@anchor{gnat_ugn/gnat_utility_programs the-cross-referencing-tools-gnatxref-and-gnatfind}@anchor{24}@anchor{gnat_ugn/gnat_utility_programs id9}@anchor{1dd} +@anchor{gnat_ugn/gnat_utility_programs the-cross-referencing-tools-gnatxref-and-gnatfind}@anchor{22}@anchor{gnat_ugn/gnat_utility_programs id9}@anchor{14f} @section The Cross-Referencing Tools @cite{gnatxref} and @cite{gnatfind} @@ -24018,11 +17537,11 @@ cross-references. To use these tools, you must not compile your application using the @emph{-gnatx} switch on the @emph{gnatmake} command line -(see @ref{1d,,Building with gnatmake}). Otherwise, cross-referencing +(see @ref{1b,,Building with gnatmake}). Otherwise, cross-referencing information will not be generated. Note: to invoke @cite{gnatxref} or @cite{gnatfind} with a project file, -use the @cite{gnat} driver (see @ref{122,,The GNAT Driver and Project Files}). +use the @cite{gnat} driver (see @emph{The_GNAT_Driver_and_Project_Files}). @menu * gnatxref Switches:: @@ -24035,7 +17554,7 @@ use the @cite{gnat} driver (see @ref{122,,The GNAT Driver and Project Files}). @end menu @node gnatxref Switches,gnatfind Switches,,The Cross-Referencing Tools gnatxref and gnatfind -@anchor{gnat_ugn/gnat_utility_programs id10}@anchor{1de}@anchor{gnat_ugn/gnat_utility_programs gnatxref-switches}@anchor{1df} +@anchor{gnat_ugn/gnat_utility_programs id10}@anchor{150}@anchor{gnat_ugn/gnat_utility_programs gnatxref-switches}@anchor{151} @subsection @cite{gnatxref} Switches @@ -24170,7 +17689,7 @@ default, which means that only the new extension will be considered. @item @code{-RTS=@emph{rts-path}} Specifies the default location of the runtime library. Same meaning as the -equivalent @emph{gnatmake} flag (@ref{e2,,Switches for gnatmake}). +equivalent @emph{gnatmake} flag (@ref{dc,,Switches for gnatmake}). @end table @geindex -d (gnatxref) @@ -24225,7 +17744,8 @@ Equivalent to @code{-aODIR -aIDIR}. @item @code{p@emph{FILE}} -Specify a project file to use @ref{b,,GNAT Project Manager}. +Specify a project file to use (see the @emph{GNAT_Project_Manager} +chapter in the @emph{GPRbuild User's Guide}). If you need to use the @code{.gpr} project files, you should use gnatxref through the GNAT driver (@emph{gnat xref -Pproject}). @@ -24248,7 +17768,7 @@ display every unused entity and 'with'ed package. Instead of producing the default output, @cite{gnatxref} will generate a @code{tags} file that can be used by vi. For examples how to use this -feature, see @ref{1e0,,Examples of gnatxref Usage}. The tags file is output +feature, see @ref{152,,Examples of gnatxref Usage}. The tags file is output to the standard output, thus you will have to redirect it to a file. @end table @@ -24257,7 +17777,7 @@ appear after the file names. They need not be separated by spaces, thus you can say @code{gnatxref -ag} instead of @code{gnatxref -a -g}. @node gnatfind Switches,Project Files for gnatxref and gnatfind,gnatxref Switches,The Cross-Referencing Tools gnatxref and gnatfind -@anchor{gnat_ugn/gnat_utility_programs id11}@anchor{1e1}@anchor{gnat_ugn/gnat_utility_programs gnatfind-switches}@anchor{1e2} +@anchor{gnat_ugn/gnat_utility_programs id11}@anchor{153}@anchor{gnat_ugn/gnat_utility_programs gnatfind-switches}@anchor{154} @subsection @cite{gnatfind} Switches @@ -24279,7 +17799,7 @@ with the following iterpretation of the command arguments: @item @emph{pattern} An entity will be output only if it matches the regular expression found -in @cite{pattern}, see @ref{1e3,,Regular Expressions in gnatfind and gnatxref}. +in @cite{pattern}, see @ref{155,,Regular Expressions in gnatfind and gnatxref}. Omitting the pattern is equivalent to specifying @code{*}, which will match any entity. Note that if you do not provide a pattern, you @@ -24293,7 +17813,7 @@ for matching purposes. At the current time there is no support for @cite{gnatfind} will look for references, bodies or declarations of symbols referenced in @code{sourcefile}, at line @cite{line} -and column @cite{column}. See @ref{1e4,,Examples of gnatfind Usage} +and column @cite{column}. See @ref{156,,Examples of gnatfind Usage} for syntax examples. @item @emph{line} @@ -24432,7 +17952,7 @@ default, which means that only the new extension will be considered. @item @code{-RTS=@emph{rts-path}} Specifies the default location of the runtime library. Same meaning as the -equivalent @emph{gnatmake} flag (@ref{e2,,Switches for gnatmake}). +equivalent @emph{gnatmake} flag (@ref{dc,,Switches for gnatmake}). @end table @geindex -d (gnatfind) @@ -24499,7 +18019,8 @@ Equivalent to @code{-aODIR -aIDIR}. @item @code{p@emph{FILE}} -Specify a project file (@ref{b,,GNAT Project Manager}) to use. +Specify a project file (see the @emph{GNAT_Project_Manager} chapter in the +@emph{GPRbuild User's Guide}). By default, @cite{gnatxref} and @cite{gnatfind} will try to locate a project file in the current directory. @@ -24557,7 +18078,7 @@ search path. You can force it to look only in the current directory if you specify @cite{*} at the end of the command line. @node Project Files for gnatxref and gnatfind,Regular Expressions in gnatfind and gnatxref,gnatfind Switches,The Cross-Referencing Tools gnatxref and gnatfind -@anchor{gnat_ugn/gnat_utility_programs project-files-for-gnatxref-and-gnatfind}@anchor{1e5}@anchor{gnat_ugn/gnat_utility_programs id12}@anchor{1e6} +@anchor{gnat_ugn/gnat_utility_programs project-files-for-gnatxref-and-gnatfind}@anchor{157}@anchor{gnat_ugn/gnat_utility_programs id12}@anchor{158} @subsection Project Files for @emph{gnatxref} and @emph{gnatfind} @@ -24698,7 +18219,7 @@ Specifies the command used to debug the application @cite{src_dir} and @cite{obj_dir} lines, and ignore the others. @node Regular Expressions in gnatfind and gnatxref,Examples of gnatxref Usage,Project Files for gnatxref and gnatfind,The Cross-Referencing Tools gnatxref and gnatfind -@anchor{gnat_ugn/gnat_utility_programs id13}@anchor{1e7}@anchor{gnat_ugn/gnat_utility_programs regular-expressions-in-gnatfind-and-gnatxref}@anchor{1e3} +@anchor{gnat_ugn/gnat_utility_programs id13}@anchor{159}@anchor{gnat_ugn/gnat_utility_programs regular-expressions-in-gnatfind-and-gnatxref}@anchor{155} @subsection Regular Expressions in @cite{gnatfind} and @cite{gnatxref} @@ -24791,7 +18312,7 @@ least one character. @end itemize @node Examples of gnatxref Usage,Examples of gnatfind Usage,Regular Expressions in gnatfind and gnatxref,The Cross-Referencing Tools gnatxref and gnatfind -@anchor{gnat_ugn/gnat_utility_programs examples-of-gnatxref-usage}@anchor{1e0}@anchor{gnat_ugn/gnat_utility_programs id14}@anchor{1e8} +@anchor{gnat_ugn/gnat_utility_programs examples-of-gnatxref-usage}@anchor{152}@anchor{gnat_ugn/gnat_utility_programs id14}@anchor{15a} @subsection Examples of @cite{gnatxref} Usage @@ -24802,7 +18323,7 @@ least one character. @end menu @node General Usage,Using gnatxref with vi,,Examples of gnatxref Usage -@anchor{gnat_ugn/gnat_utility_programs general-usage}@anchor{1e9} +@anchor{gnat_ugn/gnat_utility_programs general-usage}@anchor{15b} @subsubsection General Usage @@ -24902,7 +18423,7 @@ of these. @end quotation @node Using gnatxref with vi,,General Usage,Examples of gnatxref Usage -@anchor{gnat_ugn/gnat_utility_programs using-gnatxref-with-vi}@anchor{1ea} +@anchor{gnat_ugn/gnat_utility_programs using-gnatxref-with-vi}@anchor{15c} @subsubsection Using gnatxref with vi @@ -24933,7 +18454,7 @@ From @emph{vi}, you can then use the command @code{:tag @emph{entity}} display a new file with the corresponding declaration of entity. @node Examples of gnatfind Usage,,Examples of gnatxref Usage,The Cross-Referencing Tools gnatxref and gnatfind -@anchor{gnat_ugn/gnat_utility_programs id15}@anchor{1eb}@anchor{gnat_ugn/gnat_utility_programs examples-of-gnatfind-usage}@anchor{1e4} +@anchor{gnat_ugn/gnat_utility_programs id15}@anchor{15d}@anchor{gnat_ugn/gnat_utility_programs examples-of-gnatfind-usage}@anchor{156} @subsection Examples of @cite{gnatfind} Usage @@ -25008,14 +18529,14 @@ point to any character in the middle of the identifier. @end itemize @node The Ada to HTML Converter gnathtml,,The Cross-Referencing Tools gnatxref and gnatfind,GNAT Utility Programs -@anchor{gnat_ugn/gnat_utility_programs the-ada-to-html-converter-gnathtml}@anchor{25}@anchor{gnat_ugn/gnat_utility_programs id16}@anchor{1ec} +@anchor{gnat_ugn/gnat_utility_programs the-ada-to-html-converter-gnathtml}@anchor{23}@anchor{gnat_ugn/gnat_utility_programs id16}@anchor{15e} @section The Ada to HTML Converter @cite{gnathtml} @geindex gnathtml @emph{gnathtml} is a Perl script that allows Ada source files to be browsed using -standard Web browsers. For installation information, see @ref{1ed,,Installing gnathtml}. +standard Web browsers. For installation information, see @ref{15f,,Installing gnathtml}. Ada reserved keywords are highlighted in a bold font and Ada comments in a blue font. Unless your program was compiled with the gcc @emph{-gnatx} @@ -25030,7 +18551,7 @@ be able to click on any identifier and go to its declaration. @end menu @node Invoking gnathtml,Installing gnathtml,,The Ada to HTML Converter gnathtml -@anchor{gnat_ugn/gnat_utility_programs invoking-gnathtml}@anchor{1ee}@anchor{gnat_ugn/gnat_utility_programs id17}@anchor{1ef} +@anchor{gnat_ugn/gnat_utility_programs invoking-gnathtml}@anchor{160}@anchor{gnat_ugn/gnat_utility_programs id17}@anchor{161} @subsection Invoking @emph{gnathtml} @@ -25196,7 +18717,7 @@ systems. @end table @node Installing gnathtml,,Invoking gnathtml,The Ada to HTML Converter gnathtml -@anchor{gnat_ugn/gnat_utility_programs installing-gnathtml}@anchor{1ed}@anchor{gnat_ugn/gnat_utility_programs id18}@anchor{1f0} +@anchor{gnat_ugn/gnat_utility_programs installing-gnathtml}@anchor{15f}@anchor{gnat_ugn/gnat_utility_programs id18}@anchor{162} @subsection Installing @cite{gnathtml} @@ -25236,10 +18757,11 @@ $ perl gnathtml.pl [`switches`] `files` + @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit @node GNAT and Program Execution,Platform-Specific Information,GNAT Utility Programs,Top -@anchor{gnat_ugn/gnat_and_program_execution gnat-and-program-execution}@anchor{e}@anchor{gnat_ugn/gnat_and_program_execution doc}@anchor{1f1}@anchor{gnat_ugn/gnat_and_program_execution id1}@anchor{1f2} +@anchor{gnat_ugn/gnat_and_program_execution gnat-and-program-execution}@anchor{c}@anchor{gnat_ugn/gnat_and_program_execution doc}@anchor{163}@anchor{gnat_ugn/gnat_and_program_execution id1}@anchor{164} @chapter GNAT and Program Execution @@ -25249,25 +18771,25 @@ This chapter covers several topics: @itemize * @item -@ref{1f3,,Running and Debugging Ada Programs} +@ref{165,,Running and Debugging Ada Programs} @item -@ref{1f4,,Code Coverage and Profiling} +@ref{166,,Code Coverage and Profiling} @item -@ref{1f5,,Improving Performance} +@ref{167,,Improving Performance} @item -@ref{1f6,,Overflow Check Handling in GNAT} +@ref{168,,Overflow Check Handling in GNAT} @item -@ref{1f7,,Performing Dimensionality Analysis in GNAT} +@ref{169,,Performing Dimensionality Analysis in GNAT} @item -@ref{1f8,,Stack Related Facilities} +@ref{16a,,Stack Related Facilities} @item -@ref{1f9,,Memory Management Issues} +@ref{16b,,Memory Management Issues} @end itemize @menu @@ -25282,7 +18804,7 @@ This chapter covers several topics: @end menu @node Running and Debugging Ada Programs,Code Coverage and Profiling,,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id2}@anchor{1f3}@anchor{gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs}@anchor{26} +@anchor{gnat_ugn/gnat_and_program_execution id2}@anchor{165}@anchor{gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs}@anchor{24} @section Running and Debugging Ada Programs @@ -25335,7 +18857,7 @@ the incorrect user program. @end menu @node The GNAT Debugger GDB,Running GDB,,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{1fa}@anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{1fb} +@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{16c}@anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{16d} @subsection The GNAT Debugger GDB @@ -25392,7 +18914,7 @@ the debugging information and can respond to user commands to inspect variables, and more generally to report on the state of execution. @node Running GDB,Introduction to GDB Commands,The GNAT Debugger GDB,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id4}@anchor{1fc}@anchor{gnat_ugn/gnat_and_program_execution running-gdb}@anchor{1fd} +@anchor{gnat_ugn/gnat_and_program_execution id4}@anchor{16e}@anchor{gnat_ugn/gnat_and_program_execution running-gdb}@anchor{16f} @subsection Running GDB @@ -25419,7 +18941,7 @@ exactly as if the debugger were not present. The following section describes some of the additional commands that can be given to @cite{GDB}. @node Introduction to GDB Commands,Using Ada Expressions,Running GDB,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{1fe}@anchor{gnat_ugn/gnat_and_program_execution id5}@anchor{1ff} +@anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{170}@anchor{gnat_ugn/gnat_and_program_execution id5}@anchor{171} @subsection Introduction to GDB Commands @@ -25627,7 +19149,7 @@ Note that most commands can be abbreviated (for example, c for continue, bt for backtrace). @node Using Ada Expressions,Calling User-Defined Subprograms,Introduction to GDB Commands,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id6}@anchor{200}@anchor{gnat_ugn/gnat_and_program_execution using-ada-expressions}@anchor{201} +@anchor{gnat_ugn/gnat_and_program_execution id6}@anchor{172}@anchor{gnat_ugn/gnat_and_program_execution using-ada-expressions}@anchor{173} @subsection Using Ada Expressions @@ -25665,7 +19187,7 @@ their packages, regardless of context. Where this causes ambiguity, For details on the supported Ada syntax, see @cite{Debugging with GDB}. @node Calling User-Defined Subprograms,Using the next Command in a Function,Using Ada Expressions,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{202}@anchor{gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms}@anchor{203} +@anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{174}@anchor{gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms}@anchor{175} @subsection Calling User-Defined Subprograms @@ -25724,7 +19246,7 @@ elements directly from GDB, you can write a callable procedure that prints the elements in the desired format. @node Using the next Command in a Function,Stopping When Ada Exceptions Are Raised,Calling User-Defined Subprograms,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{204}@anchor{gnat_ugn/gnat_and_program_execution id8}@anchor{205} +@anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{176}@anchor{gnat_ugn/gnat_and_program_execution id8}@anchor{177} @subsection Using the @emph{next} Command in a Function @@ -25747,7 +19269,7 @@ The value returned is always that from the first return statement that was stepped through. @node Stopping When Ada Exceptions Are Raised,Ada Tasks,Using the next Command in a Function,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{206}@anchor{gnat_ugn/gnat_and_program_execution id9}@anchor{207} +@anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{178}@anchor{gnat_ugn/gnat_and_program_execution id9}@anchor{179} @subsection Stopping When Ada Exceptions Are Raised @@ -25804,7 +19326,7 @@ argument, prints out only those exceptions whose name matches @cite{regexp}. @geindex Tasks (in gdb) @node Ada Tasks,Debugging Generic Units,Stopping When Ada Exceptions Are Raised,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution ada-tasks}@anchor{208}@anchor{gnat_ugn/gnat_and_program_execution id10}@anchor{209} +@anchor{gnat_ugn/gnat_and_program_execution ada-tasks}@anchor{17a}@anchor{gnat_ugn/gnat_and_program_execution id10}@anchor{17b} @subsection Ada Tasks @@ -25891,7 +19413,7 @@ see @cite{Debugging with GDB}. @geindex Generics @node Debugging Generic Units,Remote Debugging with gdbserver,Ada Tasks,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution debugging-generic-units}@anchor{20a}@anchor{gnat_ugn/gnat_and_program_execution id11}@anchor{20b} +@anchor{gnat_ugn/gnat_and_program_execution debugging-generic-units}@anchor{17c}@anchor{gnat_ugn/gnat_and_program_execution id11}@anchor{17d} @subsection Debugging Generic Units @@ -25950,7 +19472,7 @@ other units. @geindex Remote Debugging with gdbserver @node Remote Debugging with gdbserver,GNAT Abnormal Termination or Failure to Terminate,Debugging Generic Units,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{20c}@anchor{gnat_ugn/gnat_and_program_execution id12}@anchor{20d} +@anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{17e}@anchor{gnat_ugn/gnat_and_program_execution id12}@anchor{17f} @subsection Remote Debugging with gdbserver @@ -26008,7 +19530,7 @@ GNAT provides support for gdbserver on x86-linux, x86-windows and x86_64-linux. @geindex Abnormal Termination or Failure to Terminate @node GNAT Abnormal Termination or Failure to Terminate,Naming Conventions for GNAT Source Files,Remote Debugging with gdbserver,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate}@anchor{20e}@anchor{gnat_ugn/gnat_and_program_execution id13}@anchor{20f} +@anchor{gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate}@anchor{180}@anchor{gnat_ugn/gnat_and_program_execution id13}@anchor{181} @subsection GNAT Abnormal Termination or Failure to Terminate @@ -26063,7 +19585,7 @@ Finally, you can start @cite{gdb} directly on the @cite{gnat1} executable. @cite{gnat1} is the front-end of GNAT, and can be run independently (normally it is just called from @emph{gcc}). You can use @cite{gdb} on @cite{gnat1} as you -would on a C program (but @ref{1fa,,The GNAT Debugger GDB} for caveats). The +would on a C program (but @ref{16c,,The GNAT Debugger GDB} for caveats). The @cite{where} command is the first line of attack; the variable @cite{lineno} (seen by @cite{print lineno}), used by the second phase of @cite{gnat1} and by the @emph{gcc} backend, indicates the source line at @@ -26072,7 +19594,7 @@ the source file. @end itemize @node Naming Conventions for GNAT Source Files,Getting Internal Debugging Information,GNAT Abnormal Termination or Failure to Terminate,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{210}@anchor{gnat_ugn/gnat_and_program_execution id14}@anchor{211} +@anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{182}@anchor{gnat_ugn/gnat_and_program_execution id14}@anchor{183} @subsection Naming Conventions for GNAT Source Files @@ -26153,7 +19675,7 @@ the other @code{.c} files are modifications of common @emph{gcc} files. @end itemize @node Getting Internal Debugging Information,Stack Traceback,Naming Conventions for GNAT Source Files,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{212}@anchor{gnat_ugn/gnat_and_program_execution getting-internal-debugging-information}@anchor{213} +@anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{184}@anchor{gnat_ugn/gnat_and_program_execution getting-internal-debugging-information}@anchor{185} @subsection Getting Internal Debugging Information @@ -26181,7 +19703,7 @@ are replaced with run-time calls. @geindex stack unwinding @node Stack Traceback,,Getting Internal Debugging Information,Running and Debugging Ada Programs -@anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{214}@anchor{gnat_ugn/gnat_and_program_execution id16}@anchor{215} +@anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{186}@anchor{gnat_ugn/gnat_and_program_execution id16}@anchor{187} @subsection Stack Traceback @@ -26210,7 +19732,7 @@ is enabled, and no exception is raised during program execution. @end menu @node Non-Symbolic Traceback,Symbolic Traceback,,Stack Traceback -@anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{216}@anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{217} +@anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{188}@anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{189} @subsubsection Non-Symbolic Traceback @@ -26337,7 +19859,7 @@ From this traceback we can see that the exception was raised in @code{stb.adb} at line 5, which was reached from a procedure call in @code{stb.adb} at line 10, and so on. The @code{b~std.adb} is the binder file, which contains the call to the main program. -@ref{123,,Running gnatbind}. The remaining entries are assorted runtime routines, +@ref{11a,,Running gnatbind}. The remaining entries are assorted runtime routines, and the output will vary from platform to platform. It is also possible to use @cite{GDB} with these traceback addresses to debug @@ -26495,7 +20017,7 @@ need to be specified in C format, with a leading '0x'). @geindex symbolic @node Symbolic Traceback,,Non-Symbolic Traceback,Stack Traceback -@anchor{gnat_ugn/gnat_and_program_execution id18}@anchor{218}@anchor{gnat_ugn/gnat_and_program_execution symbolic-traceback}@anchor{219} +@anchor{gnat_ugn/gnat_and_program_execution id18}@anchor{18a}@anchor{gnat_ugn/gnat_and_program_execution symbolic-traceback}@anchor{18b} @subsubsection Symbolic Traceback @@ -26627,7 +20149,7 @@ program. @geindex Profiling @node Code Coverage and Profiling,Improving Performance,Running and Debugging Ada Programs,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id19}@anchor{1f4}@anchor{gnat_ugn/gnat_and_program_execution code-coverage-and-profiling}@anchor{27} +@anchor{gnat_ugn/gnat_and_program_execution id19}@anchor{166}@anchor{gnat_ugn/gnat_and_program_execution code-coverage-and-profiling}@anchor{25} @section Code Coverage and Profiling @@ -26643,7 +20165,7 @@ the @cite{gprof} profiler tool on Ada programs. @end menu @node Code Coverage of Ada Programs with gcov,Profiling an Ada Program with gprof,,Code Coverage and Profiling -@anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{21a}@anchor{gnat_ugn/gnat_and_program_execution code-coverage-of-ada-programs-with-gcov}@anchor{21b} +@anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{18c}@anchor{gnat_ugn/gnat_and_program_execution code-coverage-of-ada-programs-with-gcov}@anchor{18d} @subsection Code Coverage of Ada Programs with gcov @@ -26665,7 +20187,7 @@ details some GNAT-specific features. @end menu @node Quick startup guide,GNAT specifics,,Code Coverage of Ada Programs with gcov -@anchor{gnat_ugn/gnat_and_program_execution id21}@anchor{21c}@anchor{gnat_ugn/gnat_and_program_execution quick-startup-guide}@anchor{21d} +@anchor{gnat_ugn/gnat_and_program_execution id21}@anchor{18e}@anchor{gnat_ugn/gnat_and_program_execution quick-startup-guide}@anchor{18f} @subsubsection Quick startup guide @@ -26724,7 +20246,7 @@ This will create annotated source files with a @code{.gcov} extension: @code{my_main.adb} file will be analyzed in @code{my_main.adb.gcov}. @node GNAT specifics,,Quick startup guide,Code Coverage of Ada Programs with gcov -@anchor{gnat_ugn/gnat_and_program_execution gnat-specifics}@anchor{21e}@anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{21f} +@anchor{gnat_ugn/gnat_and_program_execution gnat-specifics}@anchor{190}@anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{191} @subsubsection GNAT specifics @@ -26749,7 +20271,7 @@ not supported as there can be unresolved symbols during the final link. @geindex Profiling @node Profiling an Ada Program with gprof,,Code Coverage of Ada Programs with gcov,Code Coverage and Profiling -@anchor{gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof}@anchor{220}@anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{221} +@anchor{gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof}@anchor{192}@anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{193} @subsection Profiling an Ada Program with gprof @@ -26806,7 +20328,7 @@ to interpret the results. @end menu @node Compilation for profiling,Program execution,,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{222}@anchor{gnat_ugn/gnat_and_program_execution compilation-for-profiling}@anchor{223} +@anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{194}@anchor{gnat_ugn/gnat_and_program_execution compilation-for-profiling}@anchor{195} @subsubsection Compilation for profiling @@ -26834,7 +20356,7 @@ be profiled; if you need to profile your whole project, use the @code{-f} gnatmake switch to force full recompilation. @node Program execution,Running gprof,Compilation for profiling,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{224}@anchor{gnat_ugn/gnat_and_program_execution id25}@anchor{225} +@anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{196}@anchor{gnat_ugn/gnat_and_program_execution id25}@anchor{197} @subsubsection Program execution @@ -26849,7 +20371,7 @@ generated in the directory where the program was launched from. If this file already exists, it will be overwritten. @node Running gprof,Interpretation of profiling results,Program execution,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{226}@anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{227} +@anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{198}@anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{199} @subsubsection Running gprof @@ -26962,7 +20484,7 @@ may be given; only one @cite{function_name} may be indicated with each @end table @node Interpretation of profiling results,,Running gprof,Profiling an Ada Program with gprof -@anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{228}@anchor{gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results}@anchor{229} +@anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{19a}@anchor{gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results}@anchor{19b} @subsubsection Interpretation of profiling results @@ -26979,7 +20501,7 @@ and the subprograms that it calls. It also provides an estimate of the time spent in each of those callers/called subprograms. @node Improving Performance,Overflow Check Handling in GNAT,Code Coverage and Profiling,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{28}@anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{1f5} +@anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{26}@anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{167} @section Improving Performance @@ -27001,7 +20523,7 @@ which can reduce the size of program executables. @end menu @node Performance Considerations,Text_IO Suggestions,,Improving Performance -@anchor{gnat_ugn/gnat_and_program_execution id29}@anchor{22a}@anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{22b} +@anchor{gnat_ugn/gnat_and_program_execution id29}@anchor{19c}@anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{19d} @subsection Performance Considerations @@ -27062,7 +20584,7 @@ some guidelines on debugging optimized code. @end menu @node Controlling Run-Time Checks,Use of Restrictions,,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{22c}@anchor{gnat_ugn/gnat_and_program_execution id30}@anchor{22d} +@anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{19e}@anchor{gnat_ugn/gnat_and_program_execution id30}@anchor{19f} @subsubsection Controlling Run-Time Checks @@ -27076,7 +20598,7 @@ necessary checking is done at compile time. @geindex -gnato (gcc) The gnat switch, @emph{-gnatp} allows this default to be modified. See -@ref{101,,Run-Time Checks}. +@ref{f9,,Run-Time Checks}. Our experience is that the default is suitable for most development purposes. @@ -27114,7 +20636,7 @@ remove checks) or @cite{pragma Unsuppress} (to add back suppressed checks) in the program source. @node Use of Restrictions,Optimization Levels,Controlling Run-Time Checks,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution use-of-restrictions}@anchor{22e}@anchor{gnat_ugn/gnat_and_program_execution id31}@anchor{22f} +@anchor{gnat_ugn/gnat_and_program_execution use-of-restrictions}@anchor{1a0}@anchor{gnat_ugn/gnat_and_program_execution id31}@anchor{1a1} @subsubsection Use of Restrictions @@ -27149,7 +20671,7 @@ that this also means that you can write code without worrying about the possibility of an immediate abort at any point. @node Optimization Levels,Debugging Optimized Code,Use of Restrictions,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id32}@anchor{230}@anchor{gnat_ugn/gnat_and_program_execution optimization-levels}@anchor{104} +@anchor{gnat_ugn/gnat_and_program_execution id32}@anchor{1a2}@anchor{gnat_ugn/gnat_and_program_execution optimization-levels}@anchor{fc} @subsubsection Optimization Levels @@ -27231,7 +20753,7 @@ the slowest compilation time. Full optimization as in @emph{-O2}; also uses more aggressive automatic inlining of subprograms within a unit -(@ref{117,,Inlining of Subprograms}) and attempts to vectorize loops. +(@ref{10f,,Inlining of Subprograms}) and attempts to vectorize loops. @end table @item @@ -27271,10 +20793,10 @@ levels. Note regarding the use of @emph{-O3}: The use of this optimization level is generally discouraged with GNAT, since it often results in larger executables which may run more slowly. See further discussion of this point -in @ref{117,,Inlining of Subprograms}. +in @ref{10f,,Inlining of Subprograms}. @node Debugging Optimized Code,Inlining of Subprograms,Optimization Levels,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id33}@anchor{231}@anchor{gnat_ugn/gnat_and_program_execution debugging-optimized-code}@anchor{232} +@anchor{gnat_ugn/gnat_and_program_execution id33}@anchor{1a3}@anchor{gnat_ugn/gnat_and_program_execution debugging-optimized-code}@anchor{1a4} @subsubsection Debugging Optimized Code @@ -27402,7 +20924,7 @@ on the resulting executable, which removes both debugging information and global symbols. @node Inlining of Subprograms,Floating_Point_Operations,Debugging Optimized Code,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id34}@anchor{233}@anchor{gnat_ugn/gnat_and_program_execution inlining-of-subprograms}@anchor{117} +@anchor{gnat_ugn/gnat_and_program_execution id34}@anchor{1a5}@anchor{gnat_ugn/gnat_and_program_execution inlining-of-subprograms}@anchor{10f} @subsubsection Inlining of Subprograms @@ -27545,7 +21067,7 @@ indeed you should use @emph{-O3} only if tests show that it actually improves performance for your program. @node Floating_Point_Operations,Vectorization of loops,Inlining of Subprograms,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution floating-point-operations}@anchor{234}@anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{235} +@anchor{gnat_ugn/gnat_and_program_execution floating-point-operations}@anchor{1a6}@anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{1a7} @subsubsection Floating_Point_Operations @@ -27593,7 +21115,7 @@ so it is permissible to mix units compiled with and without these switches. @node Vectorization of loops,Other Optimization Switches,Floating_Point_Operations,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id36}@anchor{236}@anchor{gnat_ugn/gnat_and_program_execution vectorization-of-loops}@anchor{237} +@anchor{gnat_ugn/gnat_and_program_execution id36}@anchor{1a8}@anchor{gnat_ugn/gnat_and_program_execution vectorization-of-loops}@anchor{1a9} @subsubsection Vectorization of loops @@ -27744,7 +21266,7 @@ placed immediately within the loop will tell the compiler that it can safely omit the non-vectorized version of the loop as well as the run-time test. @node Other Optimization Switches,Optimization and Strict Aliasing,Vectorization of loops,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{238}@anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{239} +@anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{1aa}@anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{1ab} @subsubsection Other Optimization Switches @@ -27761,7 +21283,7 @@ the @cite{Submodel Options} section in the @cite{Hardware Models and Configurati chapter of @cite{Using the GNU Compiler Collection (GCC)}. @node Optimization and Strict Aliasing,Aliased Variables and Optimization,Other Optimization Switches,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{fb}@anchor{gnat_ugn/gnat_and_program_execution id38}@anchor{23a} +@anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{f3}@anchor{gnat_ugn/gnat_and_program_execution id38}@anchor{1ac} @subsubsection Optimization and Strict Aliasing @@ -28001,7 +21523,7 @@ review any uses of unchecked conversion of access types, particularly if you are getting the warnings described above. @node Aliased Variables and Optimization,Atomic Variables and Optimization,Optimization and Strict Aliasing,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization}@anchor{23b}@anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{23c} +@anchor{gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization}@anchor{1ad}@anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{1ae} @subsubsection Aliased Variables and Optimization @@ -28059,7 +21581,7 @@ This means that the above example will in fact "work" reliably, that is, it will produce the expected results. @node Atomic Variables and Optimization,Passive Task Optimization,Aliased Variables and Optimization,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization}@anchor{23d}@anchor{gnat_ugn/gnat_and_program_execution id40}@anchor{23e} +@anchor{gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization}@anchor{1af}@anchor{gnat_ugn/gnat_and_program_execution id40}@anchor{1b0} @subsubsection Atomic Variables and Optimization @@ -28140,7 +21662,7 @@ such synchronization code is not required, it may be useful to disable it. @node Passive Task Optimization,,Atomic Variables and Optimization,Performance Considerations -@anchor{gnat_ugn/gnat_and_program_execution id41}@anchor{23f}@anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{240} +@anchor{gnat_ugn/gnat_and_program_execution id41}@anchor{1b1}@anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{1b2} @subsubsection Passive Task Optimization @@ -28185,7 +21707,7 @@ that typically clients of the tasks who call entries, will not have to be modified, only the task definition itself. @node Text_IO Suggestions,Reducing Size of Executables with Unused Subprogram/Data Elimination,Performance Considerations,Improving Performance -@anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{241}@anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{242} +@anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{1b3}@anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{1b4} @subsection @cite{Text_IO} Suggestions @@ -28208,7 +21730,7 @@ of the standard output file, or change the standard output file to be buffered using @cite{Interfaces.C_Streams.setvbuf}. @node Reducing Size of Executables with Unused Subprogram/Data Elimination,,Text_IO Suggestions,Improving Performance -@anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{243}@anchor{gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination}@anchor{244} +@anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{1b5}@anchor{gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination}@anchor{1b6} @subsection Reducing Size of Executables with Unused Subprogram/Data Elimination @@ -28225,7 +21747,7 @@ your executable just by setting options at compilation time. @end menu @node About unused subprogram/data elimination,Compilation options,,Reducing Size of Executables with Unused Subprogram/Data Elimination -@anchor{gnat_ugn/gnat_and_program_execution id44}@anchor{245}@anchor{gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination}@anchor{246} +@anchor{gnat_ugn/gnat_and_program_execution id44}@anchor{1b7}@anchor{gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination}@anchor{1b8} @subsubsection About unused subprogram/data elimination @@ -28241,7 +21763,7 @@ architecture and on all cross platforms using the ELF binary file format. In both cases GNU binutils version 2.16 or later are required to enable it. @node Compilation options,Example of unused subprogram/data elimination,About unused subprogram/data elimination,Reducing Size of Executables with Unused Subprogram/Data Elimination -@anchor{gnat_ugn/gnat_and_program_execution id45}@anchor{247}@anchor{gnat_ugn/gnat_and_program_execution compilation-options}@anchor{248} +@anchor{gnat_ugn/gnat_and_program_execution id45}@anchor{1b9}@anchor{gnat_ugn/gnat_and_program_execution compilation-options}@anchor{1ba} @subsubsection Compilation options @@ -28280,7 +21802,7 @@ The GNAT static library is now compiled with -ffunction-sections and and data of the GNAT library from your executable. @node Example of unused subprogram/data elimination,,Compilation options,Reducing Size of Executables with Unused Subprogram/Data Elimination -@anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{249}@anchor{gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination}@anchor{24a} +@anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{1bb}@anchor{gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination}@anchor{1bc} @subsubsection Example of unused subprogram/data elimination @@ -28351,7 +21873,7 @@ appropriate options. @node Overflow Check Handling in GNAT,Performing Dimensionality Analysis in GNAT,Improving Performance,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id54}@anchor{1f6}@anchor{gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat}@anchor{29} +@anchor{gnat_ugn/gnat_and_program_execution id54}@anchor{168}@anchor{gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat}@anchor{27} @section Overflow Check Handling in GNAT @@ -28367,7 +21889,7 @@ This section explains how to control the handling of overflow checks. @end menu @node Background,Management of Overflows in GNAT,,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{24b}@anchor{gnat_ugn/gnat_and_program_execution background}@anchor{24c} +@anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{1bd}@anchor{gnat_ugn/gnat_and_program_execution background}@anchor{1be} @subsection Background @@ -28493,7 +22015,7 @@ exception raised because of the intermediate overflow (and we really would prefer this precondition to be considered True at run time). @node Management of Overflows in GNAT,Specifying the Desired Mode,Background,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution id56}@anchor{24d}@anchor{gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat}@anchor{24e} +@anchor{gnat_ugn/gnat_and_program_execution id56}@anchor{1bf}@anchor{gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat}@anchor{1c0} @subsection Management of Overflows in GNAT @@ -28607,7 +22129,7 @@ out in the normal manner (with infinite values always failing all range checks). @node Specifying the Desired Mode,Default Settings,Management of Overflows in GNAT,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{100}@anchor{gnat_ugn/gnat_and_program_execution id57}@anchor{24f} +@anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{f8}@anchor{gnat_ugn/gnat_and_program_execution id57}@anchor{1c1} @subsection Specifying the Desired Mode @@ -28732,7 +22254,7 @@ causing all intermediate operations to be computed using the base type (@cite{STRICT} mode). @node Default Settings,Implementation Notes,Specifying the Desired Mode,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution id58}@anchor{250}@anchor{gnat_ugn/gnat_and_program_execution default-settings}@anchor{251} +@anchor{gnat_ugn/gnat_and_program_execution id58}@anchor{1c2}@anchor{gnat_ugn/gnat_and_program_execution default-settings}@anchor{1c3} @subsection Default Settings @@ -28779,7 +22301,7 @@ checking, but it has no effect on the method used for computing intermediate results. @node Implementation Notes,,Default Settings,Overflow Check Handling in GNAT -@anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{252}@anchor{gnat_ugn/gnat_and_program_execution id59}@anchor{253} +@anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{1c4}@anchor{gnat_ugn/gnat_and_program_execution id59}@anchor{1c5} @subsection Implementation Notes @@ -28827,7 +22349,7 @@ platforms for which @cite{Long_Long_Integer} is 64-bits (nearly all GNAT platforms). @node Performing Dimensionality Analysis in GNAT,Stack Related Facilities,Overflow Check Handling in GNAT,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{2a}@anchor{gnat_ugn/gnat_and_program_execution id60}@anchor{1f7} +@anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{28}@anchor{gnat_ugn/gnat_and_program_execution id60}@anchor{169} @section Performing Dimensionality Analysis in GNAT @@ -29029,7 +22551,7 @@ Final velocity: 98.10 m.s**(-1) @end quotation @node Stack Related Facilities,Memory Management Issues,Performing Dimensionality Analysis in GNAT,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id61}@anchor{1f8}@anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{2b} +@anchor{gnat_ugn/gnat_and_program_execution id61}@anchor{16a}@anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{29} @section Stack Related Facilities @@ -29045,7 +22567,7 @@ particular, it deals with dynamic and static stack usage measurements. @end menu @node Stack Overflow Checking,Static Stack Usage Analysis,,Stack Related Facilities -@anchor{gnat_ugn/gnat_and_program_execution id62}@anchor{254}@anchor{gnat_ugn/gnat_and_program_execution stack-overflow-checking}@anchor{fc} +@anchor{gnat_ugn/gnat_and_program_execution id62}@anchor{1c6}@anchor{gnat_ugn/gnat_and_program_execution stack-overflow-checking}@anchor{f4} @subsection Stack Overflow Checking @@ -29082,7 +22604,7 @@ If the space is exceeded, then a @cite{Storage_Error} exception is raised. For declared tasks, the stack size is controlled by the size given in an applicable @cite{Storage_Size} pragma or by the value specified -at bind time with @code{-d} (@ref{126,,Switches for gnatbind}) or is set to +at bind time with @code{-d} (@ref{11d,,Switches for gnatbind}) or is set to the default size as defined in the GNAT runtime otherwise. @geindex GNAT_STACK_LIMIT @@ -29114,7 +22636,7 @@ is an operating systems issue, and must be addressed with the appropriate operating systems commands. @node Static Stack Usage Analysis,Dynamic Stack Usage Analysis,Stack Overflow Checking,Stack Related Facilities -@anchor{gnat_ugn/gnat_and_program_execution static-stack-usage-analysis}@anchor{fd}@anchor{gnat_ugn/gnat_and_program_execution id63}@anchor{255} +@anchor{gnat_ugn/gnat_and_program_execution static-stack-usage-analysis}@anchor{f5}@anchor{gnat_ugn/gnat_and_program_execution id63}@anchor{1c7} @subsection Static Stack Usage Analysis @@ -29163,7 +22685,7 @@ subprogram whose stack usage might be larger than the specified amount of bytes. The wording is in keeping with the qualifier documented above. @node Dynamic Stack Usage Analysis,,Static Stack Usage Analysis,Stack Related Facilities -@anchor{gnat_ugn/gnat_and_program_execution id64}@anchor{256}@anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{128} +@anchor{gnat_ugn/gnat_and_program_execution id64}@anchor{1c8}@anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{11f} @subsection Dynamic Stack Usage Analysis @@ -29230,7 +22752,7 @@ The package @cite{GNAT.Task_Stack_Usage} provides facilities to get stack usage reports at run-time. See its body for the details. @node Memory Management Issues,,Stack Related Facilities,GNAT and Program Execution -@anchor{gnat_ugn/gnat_and_program_execution id65}@anchor{1f9}@anchor{gnat_ugn/gnat_and_program_execution memory-management-issues}@anchor{2c} +@anchor{gnat_ugn/gnat_and_program_execution id65}@anchor{16b}@anchor{gnat_ugn/gnat_and_program_execution memory-management-issues}@anchor{2a} @section Memory Management Issues @@ -29246,7 +22768,7 @@ incorrect uses of access values (including 'dangling references'). @end menu @node Some Useful Memory Pools,The GNAT Debug Pool Facility,,Memory Management Issues -@anchor{gnat_ugn/gnat_and_program_execution id66}@anchor{257}@anchor{gnat_ugn/gnat_and_program_execution some-useful-memory-pools}@anchor{258} +@anchor{gnat_ugn/gnat_and_program_execution id66}@anchor{1c9}@anchor{gnat_ugn/gnat_and_program_execution some-useful-memory-pools}@anchor{1ca} @subsection Some Useful Memory Pools @@ -29327,7 +22849,7 @@ for T1'Storage_Size use 10_000; @end quotation @node The GNAT Debug Pool Facility,,Some Useful Memory Pools,Memory Management Issues -@anchor{gnat_ugn/gnat_and_program_execution id67}@anchor{259}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility}@anchor{25a} +@anchor{gnat_ugn/gnat_and_program_execution id67}@anchor{1cb}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility}@anchor{1cc} @subsection The GNAT Debug Pool Facility @@ -29490,7 +23012,7 @@ Debug Pool info: @c -- E.g. Ada |nbsp| 95 @node Platform-Specific Information,Example of Binder Output File,GNAT and Program Execution,Top -@anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{f}@anchor{gnat_ugn/platform_specific_information doc}@anchor{25b}@anchor{gnat_ugn/platform_specific_information id1}@anchor{25c} +@anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{d}@anchor{gnat_ugn/platform_specific_information doc}@anchor{1cd}@anchor{gnat_ugn/platform_specific_information id1}@anchor{1ce} @chapter Platform-Specific Information @@ -29507,7 +23029,7 @@ topics related to the GNAT implementation on Windows and Mac OS. @end menu @node Run-Time Libraries,Specifying a Run-Time Library,,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information id2}@anchor{25d}@anchor{gnat_ugn/platform_specific_information run-time-libraries}@anchor{2d} +@anchor{gnat_ugn/platform_specific_information id2}@anchor{1cf}@anchor{gnat_ugn/platform_specific_information run-time-libraries}@anchor{2b} @section Run-Time Libraries @@ -29579,7 +23101,7 @@ information about several specific platforms. @end menu @node Summary of Run-Time Configurations,,,Run-Time Libraries -@anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{25e}@anchor{gnat_ugn/platform_specific_information id3}@anchor{25f} +@anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{1d0}@anchor{gnat_ugn/platform_specific_information id3}@anchor{1d1} @subsection Summary of Run-Time Configurations @@ -29830,7 +23352,7 @@ SJLJ @node Specifying a Run-Time Library,Microsoft Windows Topics,Run-Time Libraries,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{260}@anchor{gnat_ugn/platform_specific_information id4}@anchor{261} +@anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{1d2}@anchor{gnat_ugn/platform_specific_information id4}@anchor{1d3} @section Specifying a Run-Time Library @@ -29877,6 +23399,27 @@ For example on x86-linux: -- +--- adalib @end example + +@example + $(target-dir) + __/ / \ \___ + _______/ / \ \_________________ + / / \ \ + / / \ \ +ADAINCLUDE ADALIB rts-native rts-sjlj + : : / \ / \ + : : / \ / \ + : : / \ / \ + : : / \ / \ + +-------------> adainclude adalib adainclude adalib + : ^ + : : + +---------------------+ + + Run-Time Library Directory Structure + (Upper-case names and dotted/dashed arrows represent soft links) +@end example + If the @emph{rts-sjlj} library is to be selected on a permanent basis, these soft links can be modified with the following commands: @@ -29898,7 +23441,7 @@ Alternatively, you can specify @code{rts-sjlj/adainclude} in the file Selecting another run-time library temporarily can be achieved by using the @emph{--RTS} switch, e.g., @emph{--RTS=sjlj} -@anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy}@anchor{262} +@anchor{gnat_ugn/platform_specific_information choosing-the-scheduling-policy}@anchor{1d4} @geindex SCHED_FIFO scheduling policy @geindex SCHED_RR scheduling policy @@ -29914,7 +23457,7 @@ achieved by using the @emph{--RTS} switch, e.g., @emph{--RTS=sjlj} @end menu @node Choosing the Scheduling Policy,Solaris-Specific Considerations,,Specifying a Run-Time Library -@anchor{gnat_ugn/platform_specific_information id5}@anchor{263} +@anchor{gnat_ugn/platform_specific_information id5}@anchor{1d5} @subsection Choosing the Scheduling Policy @@ -29955,7 +23498,7 @@ binder option. @geindex Solaris Sparc threads libraries @node Solaris-Specific Considerations,Solaris Threads Issues,Choosing the Scheduling Policy,Specifying a Run-Time Library -@anchor{gnat_ugn/platform_specific_information id6}@anchor{264}@anchor{gnat_ugn/platform_specific_information solaris-specific-considerations}@anchor{265} +@anchor{gnat_ugn/platform_specific_information id6}@anchor{1d6}@anchor{gnat_ugn/platform_specific_information solaris-specific-considerations}@anchor{1d7} @subsection Solaris-Specific Considerations @@ -29965,7 +23508,7 @@ on Sparc Solaris. @geindex rts-pthread threads library @node Solaris Threads Issues,AIX-Specific Considerations,Solaris-Specific Considerations,Specifying a Run-Time Library -@anchor{gnat_ugn/platform_specific_information id7}@anchor{266}@anchor{gnat_ugn/platform_specific_information solaris-threads-issues}@anchor{267} +@anchor{gnat_ugn/platform_specific_information id7}@anchor{1d8}@anchor{gnat_ugn/platform_specific_information solaris-threads-issues}@anchor{1d9} @subsection Solaris Threads Issues @@ -30054,7 +23597,7 @@ Run the program on the specified processor. @end quotation @node AIX-Specific Considerations,,Solaris Threads Issues,Specifying a Run-Time Library -@anchor{gnat_ugn/platform_specific_information aix-specific-considerations}@anchor{268}@anchor{gnat_ugn/platform_specific_information id8}@anchor{269} +@anchor{gnat_ugn/platform_specific_information aix-specific-considerations}@anchor{1da}@anchor{gnat_ugn/platform_specific_information id8}@anchor{1db} @subsection AIX-Specific Considerations @@ -30081,7 +23624,7 @@ this call. @geindex Windows 98 @node Microsoft Windows Topics,Mac OS Topics,Specifying a Run-Time Library,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{2e}@anchor{gnat_ugn/platform_specific_information id9}@anchor{26a} +@anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{2c}@anchor{gnat_ugn/platform_specific_information id9}@anchor{1dc} @section Microsoft Windows Topics @@ -30097,13 +23640,14 @@ platforms. * Using a network installation of GNAT:: * CONSOLE and WINDOWS subsystems:: * Temporary Files:: +* Disabling Command Line Argument Expansion:: * Mixed-Language Programming on Windows:: * Windows Specific Add-Ons:: @end menu @node Using GNAT on Windows,Using a network installation of GNAT,,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{26b}@anchor{gnat_ugn/platform_specific_information id10}@anchor{26c} +@anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{1dd}@anchor{gnat_ugn/platform_specific_information id10}@anchor{1de} @subsection Using GNAT on Windows @@ -30180,7 +23724,7 @@ uninstall or integrate different GNAT products. @end itemize @node Using a network installation of GNAT,CONSOLE and WINDOWS subsystems,Using GNAT on Windows,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information id11}@anchor{26d}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{26e} +@anchor{gnat_ugn/platform_specific_information id11}@anchor{1df}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{1e0} @subsection Using a network installation of GNAT @@ -30207,7 +23751,7 @@ transfer of large amounts of data across the network and will likely cause serious performance penalty. @node CONSOLE and WINDOWS subsystems,Temporary Files,Using a network installation of GNAT,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information id12}@anchor{26f}@anchor{gnat_ugn/platform_specific_information console-and-windows-subsystems}@anchor{270} +@anchor{gnat_ugn/platform_specific_information id12}@anchor{1e1}@anchor{gnat_ugn/platform_specific_information console-and-windows-subsystems}@anchor{1e2} @subsection CONSOLE and WINDOWS subsystems @@ -30231,8 +23775,8 @@ $ gnatmake winprog -largs -mwindows @end example @end quotation -@node Temporary Files,Mixed-Language Programming on Windows,CONSOLE and WINDOWS subsystems,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information id13}@anchor{271}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{272} +@node Temporary Files,Disabling Command Line Argument Expansion,CONSOLE and WINDOWS subsystems,Microsoft Windows Topics +@anchor{gnat_ugn/platform_specific_information id13}@anchor{1e3}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{1e4} @subsection Temporary Files @@ -30270,8 +23814,79 @@ file will be created. This is particularly useful in networked environments where you may not have write access to some directories. -@node Mixed-Language Programming on Windows,Windows Specific Add-Ons,Temporary Files,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{273}@anchor{gnat_ugn/platform_specific_information id14}@anchor{274} +@node Disabling Command Line Argument Expansion,Mixed-Language Programming on Windows,Temporary Files,Microsoft Windows Topics +@anchor{gnat_ugn/platform_specific_information disabling-command-line-argument-expansion}@anchor{1e5} +@subsection Disabling Command Line Argument Expansion + + +@geindex Command Line Argument Expansion + +By default, an executable compiled for the @strong{Windows} platform will do +the following postprocessing on the arguments passed on the command +line: + + +@itemize * + +@item +If the argument contains the characters @code{*} and/or @code{?}, then +file expansion will be attempted. For example, if the current directory +contains @code{a.txt} and @code{b.txt}, then when calling: + +@example +$ my_ada_program *.txt +@end example + +The following arguments will effectively be passed to the main program +(for example when using @code{Ada.Command_Line.Argument}): + +@example +Ada.Command_Line.Argument (1) -> "a.txt" +Ada.Command_Line.Argument (2) -> "b.txt" +@end example + +@item +Filename expansion can be disabled for a given argument by using single +quotes. Thus, calling: + +@example +$ my_ada_program '*.txt' +@end example + +will result in: + +@example +Ada.Command_Line.Argument (1) -> "*.txt" +@end example +@end itemize + +Note that if the program is launched from a shell such as @strong{Cygwin} @strong{Bash} +then quote removal might be performed by the shell. + +In some contexts it might be useful to disable this feature (for example if +the program performs its own argument expansion). In order to do this, a C +symbol needs to be defined and set to @code{0}. You can do this by +adding the following code fragment in one of your @strong{Ada} units: + +@example +Do_Argv_Expansion : Integer := 0; +pragma Export (C, Do_Argv_Expansion, "__gnat_do_argv_expansion"); +@end example + +The results of previous examples will be respectively: + +@example +Ada.Command_Line.Argument (1) -> "*.txt" +@end example + +and: + +@example +Ada.Command_Line.Argument (1) -> "'*.txt'" +@end example + +@node Mixed-Language Programming on Windows,Windows Specific Add-Ons,Disabling Command Line Argument Expansion,Microsoft Windows Topics +@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{1e6}@anchor{gnat_ugn/platform_specific_information id14}@anchor{1e7} @subsection Mixed-Language Programming on Windows @@ -30293,17 +23908,17 @@ to use the Microsoft tools for your C++ code, you have two choices: Encapsulate your C++ code in a DLL to be linked with your Ada application. In this case, use the Microsoft or whatever environment to build the DLL and use GNAT to build your executable -(@ref{275,,Using DLLs with GNAT}). +(@ref{1e8,,Using DLLs with GNAT}). @item Or you can encapsulate your Ada code in a DLL to be linked with the other part of your application. In this case, use GNAT to build the DLL -(@ref{276,,Building DLLs with GNAT Project files}) and use the Microsoft +(@ref{1e9,,Building DLLs with GNAT Project files}) and use the Microsoft or whatever environment to build your executable. @end itemize In addition to the description about C main in -@ref{46,,Mixed Language Programming} section, if the C main uses a +@ref{44,,Mixed Language Programming} section, if the C main uses a stand-alone library it is required on x86-windows to setup the SEH context. For this the C main must looks like this: @@ -30355,7 +23970,7 @@ native SEH support is used. @end menu @node Windows Calling Conventions,Introduction to Dynamic Link Libraries DLLs,,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{277}@anchor{gnat_ugn/platform_specific_information id15}@anchor{278} +@anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{1ea}@anchor{gnat_ugn/platform_specific_information id15}@anchor{1eb} @subsubsection Windows Calling Conventions @@ -30400,7 +24015,7 @@ are available for Windows: @end menu @node C Calling Convention,Stdcall Calling Convention,,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{279}@anchor{gnat_ugn/platform_specific_information id16}@anchor{27a} +@anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{1ec}@anchor{gnat_ugn/platform_specific_information id16}@anchor{1ed} @subsubsection @cite{C} Calling Convention @@ -30442,10 +24057,10 @@ is missing, as in the above example, this parameter is set to be the When importing a variable defined in C, you should always use the @cite{C} calling convention unless the object containing the variable is part of a DLL (in which case you should use the @cite{Stdcall} calling -convention, @ref{27b,,Stdcall Calling Convention}). +convention, @ref{1ee,,Stdcall Calling Convention}). @node Stdcall Calling Convention,Win32 Calling Convention,C Calling Convention,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{27b}@anchor{gnat_ugn/platform_specific_information id17}@anchor{27c} +@anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{1ee}@anchor{gnat_ugn/platform_specific_information id17}@anchor{1ef} @subsubsection @cite{Stdcall} Calling Convention @@ -30542,7 +24157,7 @@ Note that to ease building cross-platform bindings this convention will be handled as a @cite{C} calling convention on non-Windows platforms. @node Win32 Calling Convention,DLL Calling Convention,Stdcall Calling Convention,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information id18}@anchor{27d}@anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{27e} +@anchor{gnat_ugn/platform_specific_information id18}@anchor{1f0}@anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{1f1} @subsubsection @cite{Win32} Calling Convention @@ -30550,7 +24165,7 @@ This convention, which is GNAT-specific is fully equivalent to the @cite{Stdcall} calling convention described above. @node DLL Calling Convention,,Win32 Calling Convention,Windows Calling Conventions -@anchor{gnat_ugn/platform_specific_information id19}@anchor{27f}@anchor{gnat_ugn/platform_specific_information dll-calling-convention}@anchor{280} +@anchor{gnat_ugn/platform_specific_information id19}@anchor{1f2}@anchor{gnat_ugn/platform_specific_information dll-calling-convention}@anchor{1f3} @subsubsection @cite{DLL} Calling Convention @@ -30558,7 +24173,7 @@ This convention, which is GNAT-specific is fully equivalent to the @cite{Stdcall} calling convention described above. @node Introduction to Dynamic Link Libraries DLLs,Using DLLs with GNAT,Windows Calling Conventions,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id20}@anchor{281}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{282} +@anchor{gnat_ugn/platform_specific_information id20}@anchor{1f4}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{1f5} @subsubsection Introduction to Dynamic Link Libraries (DLLs) @@ -30642,10 +24257,10 @@ As a side note, an interesting difference between Microsoft DLLs and Unix shared libraries, is the fact that on most Unix systems all public routines are exported by default in a Unix shared library, while under Windows it is possible (but not required) to list exported routines in -a definition file (see @ref{283,,The Definition File}). +a definition file (see @ref{1f6,,The Definition File}). @node Using DLLs with GNAT,Building DLLs with GNAT Project files,Introduction to Dynamic Link Libraries DLLs,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id21}@anchor{284}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{275} +@anchor{gnat_ugn/platform_specific_information id21}@anchor{1f7}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{1e8} @subsubsection Using DLLs with GNAT @@ -30736,7 +24351,7 @@ example a fictitious DLL called @code{API.dll}. @end menu @node Creating an Ada Spec for the DLL Services,Creating an Import Library,,Using DLLs with GNAT -@anchor{gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services}@anchor{285}@anchor{gnat_ugn/platform_specific_information id22}@anchor{286} +@anchor{gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services}@anchor{1f8}@anchor{gnat_ugn/platform_specific_information id22}@anchor{1f9} @subsubsection Creating an Ada Spec for the DLL Services @@ -30776,7 +24391,7 @@ end API; @end quotation @node Creating an Import Library,,Creating an Ada Spec for the DLL Services,Using DLLs with GNAT -@anchor{gnat_ugn/platform_specific_information id23}@anchor{287}@anchor{gnat_ugn/platform_specific_information creating-an-import-library}@anchor{288} +@anchor{gnat_ugn/platform_specific_information id23}@anchor{1fa}@anchor{gnat_ugn/platform_specific_information creating-an-import-library}@anchor{1fb} @subsubsection Creating an Import Library @@ -30790,7 +24405,7 @@ as in this case it is possible to link directly against the DLL. Otherwise read on. @geindex Definition file -@anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{283} +@anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{1f6} @subsubheading The Definition File @@ -30838,17 +24453,17 @@ EXPORTS @end table Note that you must specify the correct suffix (@code{@@@emph{nn}}) -(see @ref{277,,Windows Calling Conventions}) for a Stdcall +(see @ref{1ea,,Windows Calling Conventions}) for a Stdcall calling convention function in the exported symbols list. There can actually be other sections in a definition file, but these sections are not relevant to the discussion at hand. -@anchor{gnat_ugn/platform_specific_information create-def-file-automatically}@anchor{289} +@anchor{gnat_ugn/platform_specific_information create-def-file-automatically}@anchor{1fc} @subsubheading Creating a Definition File Automatically You can automatically create the definition file @code{API.def} -(see @ref{283,,The Definition File}) from a DLL. +(see @ref{1f6,,The Definition File}) from a DLL. For that use the @cite{dlltool} program as follows: @quotation @@ -30858,7 +24473,7 @@ $ dlltool API.dll -z API.def --export-all-symbols @end example Note that if some routines in the DLL have the @cite{Stdcall} convention -(@ref{277,,Windows Calling Conventions}) with stripped @code{@@@emph{nn}} +(@ref{1ea,,Windows Calling Conventions}) with stripped @code{@@@emph{nn}} suffix then you'll have to edit @code{api.def} to add it, and specify @emph{-k} to @emph{gnatdll} when creating the import library. @@ -30882,13 +24497,13 @@ tells you what symbol is expected. You just have to go back to the definition file and add the right suffix. @end itemize @end quotation -@anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{28a} +@anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{1fd} @subsubheading GNAT-Style Import Library To create a static import library from @code{API.dll} with the GNAT tools you should create the .def file, then use @cite{gnatdll} tool -(see @ref{28b,,Using gnatdll}) as follows: +(see @ref{1fe,,Using gnatdll}) as follows: @quotation @@ -30904,15 +24519,15 @@ definition file name is @cite{xyz`}.def`, the import library name will be @cite{lib`@w{`}xyz`}.a`. Note that in the previous example option @emph{-e} could have been removed because the name of the definition file (before the '@cite{.def}' suffix) is the same as the name of the -DLL (@ref{28b,,Using gnatdll} for more information about @cite{gnatdll}). +DLL (@ref{1fe,,Using gnatdll} for more information about @cite{gnatdll}). @end quotation -@anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{28c} +@anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{1ff} @subsubheading Microsoft-Style Import Library A Microsoft import library is needed only if you plan to make an Ada DLL available to applications developed with Microsoft -tools (@ref{273,,Mixed-Language Programming on Windows}). +tools (@ref{1e6,,Mixed-Language Programming on Windows}). To create a Microsoft-style import library for @code{API.dll} you should create the .def file, then build the actual import library using @@ -30936,7 +24551,7 @@ See the Microsoft documentation for further details about the usage of @end quotation @node Building DLLs with GNAT Project files,Building DLLs with GNAT,Using DLLs with GNAT,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id24}@anchor{28d}@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files}@anchor{276} +@anchor{gnat_ugn/platform_specific_information id24}@anchor{200}@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files}@anchor{1e9} @subsubsection Building DLLs with GNAT Project files @@ -30944,14 +24559,15 @@ See the Microsoft documentation for further details about the usage of @geindex building There is nothing specific to Windows in the build process. -@ref{8a,,Library Projects}. +See the @emph{Library Projects} section in the @emph{GNAT Project Manager} +chapter of the @emph{GPRbuild User's Guide}. Due to a system limitation, it is not possible under Windows to create threads when inside the @cite{DllMain} routine which is used for auto-initialization of shared libraries, so it is not possible to have library level tasks in SALs. @node Building DLLs with GNAT,Building DLLs with gnatdll,Building DLLs with GNAT Project files,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat}@anchor{28e}@anchor{gnat_ugn/platform_specific_information id25}@anchor{28f} +@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat}@anchor{201}@anchor{gnat_ugn/platform_specific_information id25}@anchor{202} @subsubsection Building DLLs with GNAT @@ -30982,7 +24598,7 @@ $ gcc -shared -shared-libgcc -o api.dll obj1.o obj2.o ... It is important to note that in this case all symbols found in the object files are automatically exported. It is possible to restrict the set of symbols to export by passing to @emph{gcc} a definition -file (see @ref{283,,The Definition File}). +file (see @ref{1f6,,The Definition File}). For example: @example @@ -31020,7 +24636,7 @@ $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI @end quotation @node Building DLLs with gnatdll,Ada DLLs and Finalization,Building DLLs with GNAT,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnatdll}@anchor{290}@anchor{gnat_ugn/platform_specific_information id26}@anchor{291} +@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnatdll}@anchor{203}@anchor{gnat_ugn/platform_specific_information id26}@anchor{204} @subsubsection Building DLLs with gnatdll @@ -31028,8 +24644,8 @@ $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI @geindex building Note that it is preferred to use GNAT Project files -(@ref{276,,Building DLLs with GNAT Project files}) or the built-in GNAT -DLL support (@ref{28e,,Building DLLs with GNAT}) or to build DLLs. +(@ref{1e9,,Building DLLs with GNAT Project files}) or the built-in GNAT +DLL support (@ref{201,,Building DLLs with GNAT}) or to build DLLs. This section explains how to build DLLs containing Ada code using @cite{gnatdll}. These DLLs will be referred to as Ada DLLs in the @@ -31045,20 +24661,20 @@ non-Ada applications are as follows: You need to mark each Ada @emph{entity} exported by the DLL with a @cite{C} or @cite{Stdcall} calling convention to avoid any Ada name mangling for the entities exported by the DLL -(see @ref{292,,Exporting Ada Entities}). You can +(see @ref{205,,Exporting Ada Entities}). You can skip this step if you plan to use the Ada DLL only from Ada applications. @item Your Ada code must export an initialization routine which calls the routine @cite{adainit} generated by @emph{gnatbind} to perform the elaboration of -the Ada code in the DLL (@ref{293,,Ada DLLs and Elaboration}). The initialization +the Ada code in the DLL (@ref{206,,Ada DLLs and Elaboration}). The initialization routine exported by the Ada DLL must be invoked by the clients of the DLL to initialize the DLL. @item When useful, the DLL should also export a finalization routine which calls routine @cite{adafinal} generated by @emph{gnatbind} to perform the -finalization of the Ada code in the DLL (@ref{294,,Ada DLLs and Finalization}). +finalization of the Ada code in the DLL (@ref{207,,Ada DLLs and Finalization}). The finalization routine exported by the Ada DLL must be invoked by the clients of the DLL when the DLL services are no further needed. @@ -31068,18 +24684,19 @@ of the programming languages to which you plan to make the DLL available. @item You must provide a definition file listing the exported entities -(@ref{283,,The Definition File}). +(@ref{1f6,,The Definition File}). @item Finally you must use @cite{gnatdll} to produce the DLL and the import -library (@ref{28b,,Using gnatdll}). +library (@ref{1fe,,Using gnatdll}). @end itemize Note that a relocatable DLL stripped using the @cite{strip} binutils tool will not be relocatable anymore. To build a DLL without debug information pass @cite{-largs -s} to @cite{gnatdll}. This restriction does not apply to a DLL built using a Library Project. -See @ref{8a,,Library Projects}. +See the @emph{Library Projects} section in the @emph{GNAT Project Manager} +chapter of the @emph{GPRbuild User's Guide}. @c Limitations_When_Using_Ada_DLLs_from Ada: @@ -31091,7 +24708,7 @@ See @ref{8a,,Library Projects}. @end menu @node Limitations When Using Ada DLLs from Ada,Exporting Ada Entities,,Building DLLs with gnatdll -@anchor{gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada}@anchor{295} +@anchor{gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada}@anchor{208} @subsubsection Limitations When Using Ada DLLs from Ada @@ -31112,7 +24729,7 @@ It is completely safe to exchange plain elementary, array or record types, Windows object handles, etc. @node Exporting Ada Entities,Ada DLLs and Elaboration,Limitations When Using Ada DLLs from Ada,Building DLLs with gnatdll -@anchor{gnat_ugn/platform_specific_information exporting-ada-entities}@anchor{292}@anchor{gnat_ugn/platform_specific_information id27}@anchor{296} +@anchor{gnat_ugn/platform_specific_information exporting-ada-entities}@anchor{205}@anchor{gnat_ugn/platform_specific_information id27}@anchor{209} @subsubsection Exporting Ada Entities @@ -31212,10 +24829,10 @@ end API; Note that if you do not export the Ada entities with a @cite{C} or @cite{Stdcall} convention you will have to provide the mangled Ada names in the definition file of the Ada DLL -(@ref{297,,Creating the Definition File}). +(@ref{20a,,Creating the Definition File}). @node Ada DLLs and Elaboration,,Exporting Ada Entities,Building DLLs with gnatdll -@anchor{gnat_ugn/platform_specific_information ada-dlls-and-elaboration}@anchor{293}@anchor{gnat_ugn/platform_specific_information id28}@anchor{298} +@anchor{gnat_ugn/platform_specific_information ada-dlls-and-elaboration}@anchor{206}@anchor{gnat_ugn/platform_specific_information id28}@anchor{20b} @subsubsection Ada DLLs and Elaboration @@ -31224,16 +24841,16 @@ in the definition file of the Ada DLL The DLL that you are building contains your Ada code as well as all the routines in the Ada library that are needed by it. The first thing a user of your DLL must do is elaborate the Ada code -(@ref{11,,Elaboration Order Handling in GNAT}). +(@ref{f,,Elaboration Order Handling in GNAT}). To achieve this you must export an initialization routine (@cite{Initialize_API} in the previous example), which must be invoked before using any of the DLL services. This elaboration routine must call the Ada elaboration routine @cite{adainit} generated by the GNAT binder -(@ref{ba,,Binding with Non-Ada Main Programs}). See the body of +(@ref{b4,,Binding with Non-Ada Main Programs}). See the body of @cite{Initialize_Api} for an example. Note that the GNAT binder is automatically invoked during the DLL build process by the @cite{gnatdll} -tool (@ref{28b,,Using gnatdll}). +tool (@ref{1fe,,Using gnatdll}). When a DLL is loaded, Windows systematically invokes a routine called @cite{DllMain}. It would therefore be possible to call @cite{adainit} @@ -31246,7 +24863,7 @@ time), which means that the GNAT run time will deadlock waiting for the newly created task to complete its initialization. @node Ada DLLs and Finalization,Creating a Spec for Ada DLLs,Building DLLs with gnatdll,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id29}@anchor{299}@anchor{gnat_ugn/platform_specific_information ada-dlls-and-finalization}@anchor{294} +@anchor{gnat_ugn/platform_specific_information id29}@anchor{20c}@anchor{gnat_ugn/platform_specific_information ada-dlls-and-finalization}@anchor{207} @subsubsection Ada DLLs and Finalization @@ -31257,14 +24874,14 @@ invoke the DLL finalization routine, if available. The DLL finalization routine is in charge of releasing all resources acquired by the DLL. In the case of the Ada code contained in the DLL, this is achieved by calling routine @cite{adafinal} generated by the GNAT binder -(@ref{ba,,Binding with Non-Ada Main Programs}). +(@ref{b4,,Binding with Non-Ada Main Programs}). See the body of @cite{Finalize_Api} for an example. As already pointed out the GNAT binder is automatically invoked during the DLL build process by the @cite{gnatdll} tool -(@ref{28b,,Using gnatdll}). +(@ref{1fe,,Using gnatdll}). @node Creating a Spec for Ada DLLs,GNAT and Windows Resources,Ada DLLs and Finalization,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id30}@anchor{29a}@anchor{gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls}@anchor{29b} +@anchor{gnat_ugn/platform_specific_information id30}@anchor{20d}@anchor{gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls}@anchor{20e} @subsubsection Creating a Spec for Ada DLLs @@ -31322,7 +24939,7 @@ end API; @end menu @node Creating the Definition File,Using gnatdll,,Creating a Spec for Ada DLLs -@anchor{gnat_ugn/platform_specific_information creating-the-definition-file}@anchor{297}@anchor{gnat_ugn/platform_specific_information id31}@anchor{29c} +@anchor{gnat_ugn/platform_specific_information creating-the-definition-file}@anchor{20a}@anchor{gnat_ugn/platform_specific_information id31}@anchor{20f} @subsubsection Creating the Definition File @@ -31358,7 +24975,7 @@ EXPORTS @end quotation @node Using gnatdll,,Creating the Definition File,Creating a Spec for Ada DLLs -@anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{28b}@anchor{gnat_ugn/platform_specific_information id32}@anchor{29d} +@anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{1fe}@anchor{gnat_ugn/platform_specific_information id32}@anchor{210} @subsubsection Using @cite{gnatdll} @@ -31456,7 +25073,7 @@ Help mode. Displays @cite{gnatdll} switch usage information. Direct @cite{gnatdll} to search the @cite{dir} directory for source and object files needed to build the DLL. -(@ref{8e,,Search Paths and the Run-Time Library (RTL)}). +(@ref{89,,Search Paths and the Run-Time Library (RTL)}). @geindex -k (gnatdll) @@ -31569,7 +25186,7 @@ asks @emph{gnatlink} to generate the routines @cite{DllMain} and is loaded into memory. @item -@cite{gnatdll} uses @cite{dlltool} (see @ref{29e,,Using dlltool}) to build the +@cite{gnatdll} uses @cite{dlltool} (see @ref{211,,Using dlltool}) to build the export table (@code{api.exp}). The export table contains the relocation information in a form which can be used during the final link to ensure that the Windows loader is able to place the DLL anywhere in memory. @@ -31608,7 +25225,7 @@ $ gnatbind -n api $ gnatlink api api.exp -o api.dll -mdll @end example @end itemize -@anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{29e} +@anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{211} @subsubheading Using @cite{dlltool} @@ -31667,7 +25284,7 @@ DLL in the static import library generated by @cite{dlltool} with switch @item @code{-k} Kill @code{@@@emph{nn}} from exported names -(@ref{277,,Windows Calling Conventions} +(@ref{1ea,,Windows Calling Conventions} for a discussion about @cite{Stdcall}-style symbols. @end table @@ -31723,7 +25340,7 @@ Use @cite{assembler-name} as the assembler. The default is @cite{as}. @end table @node GNAT and Windows Resources,Using GNAT DLLs from Microsoft Visual Studio Applications,Creating a Spec for Ada DLLs,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information gnat-and-windows-resources}@anchor{29f}@anchor{gnat_ugn/platform_specific_information id33}@anchor{2a0} +@anchor{gnat_ugn/platform_specific_information gnat-and-windows-resources}@anchor{212}@anchor{gnat_ugn/platform_specific_information id33}@anchor{213} @subsubsection GNAT and Windows Resources @@ -31818,7 +25435,7 @@ the corresponding Microsoft documentation. @end menu @node Building Resources,Compiling Resources,,GNAT and Windows Resources -@anchor{gnat_ugn/platform_specific_information building-resources}@anchor{2a1}@anchor{gnat_ugn/platform_specific_information id34}@anchor{2a2} +@anchor{gnat_ugn/platform_specific_information building-resources}@anchor{214}@anchor{gnat_ugn/platform_specific_information id34}@anchor{215} @subsubsection Building Resources @@ -31838,7 +25455,7 @@ complete description of the resource script language can be found in the Microsoft documentation. @node Compiling Resources,Using Resources,Building Resources,GNAT and Windows Resources -@anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{2a3}@anchor{gnat_ugn/platform_specific_information id35}@anchor{2a4} +@anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{216}@anchor{gnat_ugn/platform_specific_information id35}@anchor{217} @subsubsection Compiling Resources @@ -31880,7 +25497,7 @@ $ windres -i myres.res -o myres.o @end quotation @node Using Resources,,Compiling Resources,GNAT and Windows Resources -@anchor{gnat_ugn/platform_specific_information id36}@anchor{2a5}@anchor{gnat_ugn/platform_specific_information using-resources}@anchor{2a6} +@anchor{gnat_ugn/platform_specific_information id36}@anchor{218}@anchor{gnat_ugn/platform_specific_information using-resources}@anchor{219} @subsubsection Using Resources @@ -31900,7 +25517,7 @@ $ gnatmake myprog -largs myres.o @end quotation @node Using GNAT DLLs from Microsoft Visual Studio Applications,Debugging a DLL,GNAT and Windows Resources,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information using-gnat-dll-from-msvs}@anchor{2a7}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{2a8} +@anchor{gnat_ugn/platform_specific_information using-gnat-dll-from-msvs}@anchor{21a}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{21b} @subsubsection Using GNAT DLLs from Microsoft Visual Studio Applications @@ -31934,7 +25551,7 @@ $ gprbuild -p mylib.gpr @item Produce a .def file for the symbols you need to interface with, either by hand or automatically with possibly some manual adjustments -(see @ref{289,,Creating Definition File Automatically}): +(see @ref{1fc,,Creating Definition File Automatically}): @end enumerate @quotation @@ -31951,7 +25568,7 @@ $ dlltool libmylib.dll -z libmylib.def --export-all-symbols Make sure that MSVS command-line tools are accessible on the path. @item -Create the Microsoft-style import library (see @ref{28c,,MSVS-Style Import Library}): +Create the Microsoft-style import library (see @ref{1ff,,MSVS-Style Import Library}): @end enumerate @quotation @@ -31993,7 +25610,7 @@ or copy the DLL into into the directory containing the .exe. @end enumerate @node Debugging a DLL,Setting Stack Size from gnatlink,Using GNAT DLLs from Microsoft Visual Studio Applications,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information id37}@anchor{2a9}@anchor{gnat_ugn/platform_specific_information debugging-a-dll}@anchor{2aa} +@anchor{gnat_ugn/platform_specific_information id37}@anchor{21c}@anchor{gnat_ugn/platform_specific_information debugging-a-dll}@anchor{21d} @subsubsection Debugging a DLL @@ -32031,7 +25648,7 @@ tools suite used to build the DLL. @end menu @node Program and DLL Both Built with GCC/GNAT,Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Debugging a DLL -@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{2ab}@anchor{gnat_ugn/platform_specific_information id38}@anchor{2ac} +@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{21e}@anchor{gnat_ugn/platform_specific_information id38}@anchor{21f} @subsubsection Program and DLL Both Built with GCC/GNAT @@ -32041,7 +25658,7 @@ the process. Let's suppose here that the main procedure is named @cite{ada_main} and that in the DLL there is an entry point named @cite{ada_dll}. -The DLL (@ref{282,,Introduction to Dynamic Link Libraries (DLLs)}) and +The DLL (@ref{1f5,,Introduction to Dynamic Link Libraries (DLLs)}) and program must have been built with the debugging information (see GNAT -g switch). Here are the step-by-step instructions for debugging it: @@ -32078,10 +25695,10 @@ Set a breakpoint inside the DLL At this stage a breakpoint is set inside the DLL. From there on you can use the standard approach to debug the whole program -(@ref{26,,Running and Debugging Ada Programs}). +(@ref{24,,Running and Debugging Ada Programs}). @node Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Program and DLL Both Built with GCC/GNAT,Debugging a DLL -@anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{2ad}@anchor{gnat_ugn/platform_specific_information id39}@anchor{2ae} +@anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{220}@anchor{gnat_ugn/platform_specific_information id39}@anchor{221} @subsubsection Program Built with Foreign Tools and DLL Built with GCC/GNAT @@ -32098,7 +25715,7 @@ example some C code built with Microsoft Visual C) and that there is a DLL named @cite{test.dll} containing an Ada entry point named @cite{ada_dll}. -The DLL (see @ref{282,,Introduction to Dynamic Link Libraries (DLLs)}) must have +The DLL (see @ref{1f5,,Introduction to Dynamic Link Libraries (DLLs)}) must have been built with debugging information (see GNAT @cite{-g} option). @subsubheading Debugging the DLL Directly @@ -32164,7 +25781,7 @@ Continue the program. This will run the program until it reaches the breakpoint that has been set. From that point you can use the standard way to debug a program -as described in (@ref{26,,Running and Debugging Ada Programs}). +as described in (@ref{24,,Running and Debugging Ada Programs}). @end itemize It is also possible to debug the DLL by attaching to a running process. @@ -32234,10 +25851,10 @@ Continue process execution. This last step will resume the process execution, and stop at the breakpoint we have set. From there you can use the standard approach to debug a program as described in -@ref{26,,Running and Debugging Ada Programs}. +@ref{24,,Running and Debugging Ada Programs}. @node Setting Stack Size from gnatlink,Setting Heap Size from gnatlink,Debugging a DLL,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{13d}@anchor{gnat_ugn/platform_specific_information id40}@anchor{2af} +@anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{134}@anchor{gnat_ugn/platform_specific_information id40}@anchor{222} @subsubsection Setting Stack Size from @emph{gnatlink} @@ -32280,7 +25897,7 @@ because the coma is a separator for this option. @end itemize @node Setting Heap Size from gnatlink,,Setting Stack Size from gnatlink,Mixed-Language Programming on Windows -@anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{13e}@anchor{gnat_ugn/platform_specific_information id41}@anchor{2b0} +@anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{135}@anchor{gnat_ugn/platform_specific_information id41}@anchor{223} @subsubsection Setting Heap Size from @emph{gnatlink} @@ -32313,7 +25930,7 @@ because the coma is a separator for this option. @end itemize @node Windows Specific Add-Ons,,Mixed-Language Programming on Windows,Microsoft Windows Topics -@anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{2b1}@anchor{gnat_ugn/platform_specific_information win32-specific-addons}@anchor{2b2} +@anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{224}@anchor{gnat_ugn/platform_specific_information win32-specific-addons}@anchor{225} @subsection Windows Specific Add-Ons @@ -32326,7 +25943,7 @@ This section describes the Windows specific add-ons. @end menu @node Win32Ada,wPOSIX,,Windows Specific Add-Ons -@anchor{gnat_ugn/platform_specific_information win32ada}@anchor{2b3}@anchor{gnat_ugn/platform_specific_information id42}@anchor{2b4} +@anchor{gnat_ugn/platform_specific_information win32ada}@anchor{226}@anchor{gnat_ugn/platform_specific_information id42}@anchor{227} @subsubsection Win32Ada @@ -32357,7 +25974,7 @@ gprbuild p.gpr @end quotation @node wPOSIX,,Win32Ada,Windows Specific Add-Ons -@anchor{gnat_ugn/platform_specific_information id43}@anchor{2b5}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{2b6} +@anchor{gnat_ugn/platform_specific_information id43}@anchor{228}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{229} @subsubsection wPOSIX @@ -32390,7 +26007,7 @@ gprbuild p.gpr @end quotation @node Mac OS Topics,,Microsoft Windows Topics,Platform-Specific Information -@anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{2f}@anchor{gnat_ugn/platform_specific_information id44}@anchor{2b7} +@anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{2d}@anchor{gnat_ugn/platform_specific_information id44}@anchor{22a} @section Mac OS Topics @@ -32405,7 +26022,7 @@ platform. @end menu @node Codesigning the Debugger,,,Mac OS Topics -@anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{2b8} +@anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{22b} @subsection Codesigning the Debugger @@ -32486,7 +26103,7 @@ the location where you installed GNAT. Also, be sure that users are in the Unix group @code{_developer}. @node Example of Binder Output File,Elaboration Order Handling in GNAT,Platform-Specific Information,Top -@anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{10}@anchor{gnat_ugn/example_of_binder_output doc}@anchor{2b9}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{2ba} +@anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{e}@anchor{gnat_ugn/example_of_binder_output doc}@anchor{22c}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{22d} @chapter Example of Binder Output File @@ -33238,7 +26855,7 @@ elaboration code in your own application). @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit @node Elaboration Order Handling in GNAT,Inline Assembler,Example of Binder Output File,Top -@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{11}@anchor{gnat_ugn/elaboration_order_handling_in_gnat doc}@anchor{2bb}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{2bc} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat doc}@anchor{22e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{22f} @chapter Elaboration Order Handling in GNAT @@ -33270,7 +26887,7 @@ features. @end menu @node Elaboration Code,Checking the Elaboration Order,,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{2bd}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{2be} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{230}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{231} @section Elaboration Code @@ -33420,7 +27037,7 @@ to figure out which of these expressions will be true, and hence it is impossible to guarantee a safe order of elaboration at run time. @node Checking the Elaboration Order,Controlling the Elaboration Order,Elaboration Code,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order}@anchor{2bf}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{2c0} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order}@anchor{232}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{233} @section Checking the Elaboration Order @@ -33524,7 +27141,7 @@ does such optimizations, but still the easiest conceptual model is to think of there being one variable per subprogram. @node Controlling the Elaboration Order,Controlling Elaboration in GNAT - Internal Calls,Checking the Elaboration Order,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{2c1}@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order}@anchor{2c2} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{234}@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order}@anchor{235} @section Controlling the Elaboration Order @@ -33783,7 +27400,7 @@ code in the body makes calls to some other unit, so it is still necessary to use @cite{Elaborate_All} on such units. @node Controlling Elaboration in GNAT - Internal Calls,Controlling Elaboration in GNAT - External Calls,Controlling the Elaboration Order,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{2c3}@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-elaboration-in-gnat-internal-calls}@anchor{2c4} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{236}@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-elaboration-in-gnat-internal-calls}@anchor{237} @section Controlling Elaboration in GNAT - Internal Calls @@ -33963,7 +27580,7 @@ guaranteed) for a program to be able to call a subprogram whose body is not yet elaborated, without raising a @cite{Program_Error} exception. @node Controlling Elaboration in GNAT - External Calls,Default Behavior in GNAT - Ensuring Safety,Controlling Elaboration in GNAT - Internal Calls,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{2c5}@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-elaboration-in-gnat-external-calls}@anchor{2c6} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{238}@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-elaboration-in-gnat-external-calls}@anchor{239} @section Controlling Elaboration in GNAT - External Calls @@ -34071,7 +27688,7 @@ provides a number of facilities for assisting the programmer in developing programs that are robust with respect to elaboration order. @node Default Behavior in GNAT - Ensuring Safety,Treatment of Pragma Elaborate,Controlling Elaboration in GNAT - External Calls,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id7}@anchor{2c7}@anchor{gnat_ugn/elaboration_order_handling_in_gnat default-behavior-in-gnat-ensuring-safety}@anchor{2c8} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id7}@anchor{23a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat default-behavior-in-gnat-ensuring-safety}@anchor{23b} @section Default Behavior in GNAT - Ensuring Safety @@ -34173,7 +27790,7 @@ is clearly safer to rely on compile and link time checks rather than run-time checks. However, in the case of legacy code, it may be difficult to meet the requirements of the static model. This issue is further discussed in -@ref{2c9,,What to Do If the Default Elaboration Behavior Fails}. +@ref{23c,,What to Do If the Default Elaboration Behavior Fails}. Note that the static model provides a strict subset of the allowed behavior and programs of the Ada Reference Manual, so if you do @@ -34183,7 +27800,7 @@ work using the dynamic model, providing that you remove any pragma Elaborate statements from the source. @node Treatment of Pragma Elaborate,Elaboration Issues for Library Tasks,Default Behavior in GNAT - Ensuring Safety,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat treatment-of-pragma-elaborate}@anchor{2ca}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{2cb} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat treatment-of-pragma-elaborate}@anchor{23d}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{23e} @section Treatment of Pragma Elaborate @@ -34222,7 +27839,7 @@ When using the static mode with @emph{-gnatwl}, any use of problems. @node Elaboration Issues for Library Tasks,Mixing Elaboration Models,Treatment of Pragma Elaborate,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-issues-for-library-tasks}@anchor{2cc}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id9}@anchor{2cd} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-issues-for-library-tasks}@anchor{23f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id9}@anchor{240} @section Elaboration Issues for Library Tasks @@ -34585,7 +28202,7 @@ no task receives an entry call before elaboration of all units is completed. @end itemize @node Mixing Elaboration Models,What to Do If the Default Elaboration Behavior Fails,Elaboration Issues for Library Tasks,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{2ce}@anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{2cf} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{241}@anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{242} @section Mixing Elaboration Models @@ -34650,7 +28267,7 @@ allowing the main application that uses this subsystem to be compiled using the more reliable default static model. @node What to Do If the Default Elaboration Behavior Fails,Elaboration for Indirect Calls,Mixing Elaboration Models,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id11}@anchor{2d0}@anchor{gnat_ugn/elaboration_order_handling_in_gnat what-to-do-if-the-default-elaboration-behavior-fails}@anchor{2c9} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id11}@anchor{243}@anchor{gnat_ugn/elaboration_order_handling_in_gnat what-to-do-if-the-default-elaboration-behavior-fails}@anchor{23c} @section What to Do If the Default Elaboration Behavior Fails @@ -34761,7 +28378,7 @@ all subprograms declared in this spec. @item Use Pragma Elaborate. -As previously described in section @ref{2ca,,Treatment of Pragma Elaborate}, +As previously described in section @ref{23d,,Treatment of Pragma Elaborate}, GNAT in static mode assumes that a @cite{pragma} Elaborate indicates correctly that no elaboration checks are required on calls to the designated unit. There may be cases in which the caller knows that no transitive calls @@ -34894,7 +28511,7 @@ C-tests are indeed correct (it is less efficient, but efficiency is not a factor in running the ACATS tests.) @node Elaboration for Indirect Calls,Summary of Procedures for Elaboration Control,What to Do If the Default Elaboration Behavior Fails,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{2d1}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-for-indirect-calls}@anchor{2d2} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{244}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-for-indirect-calls}@anchor{245} @section Elaboration for Indirect Calls @@ -34908,29 +28525,34 @@ fall back to run-time checks; premature calls to any primitive operation of a tagged type before the body of the operation has been elaborated will raise @cite{Program_Error}. -Access-to-subprogram types, however, are handled conservatively, and -do not require run-time checks. This was not true in earlier versions -of the compiler; you can use the @emph{-gnatd.U} debug switch to -revert to the old behavior if the new conservative behavior causes -elaboration cycles. Here, 'conservative' means that if you do -@cite{P'Access} during elaboration, the compiler will assume that you -might call @cite{P} indirectly during elaboration, so it adds an -implicit @cite{pragma Elaborate_All} on the library unit containing -@cite{P}. The @emph{-gnatd.U} switch is safe if you know there are -no such calls. If the program worked before, it will continue to work -with @emph{-gnatd.U}. But beware that code modifications such as -adding an indirect call can cause erroneous behavior in the presence -of @emph{-gnatd.U}. +Access-to-subprogram types, however, are handled conservatively in many +cases. This was not true in earlier versions of the compiler; you can use +the @emph{-gnatd.U} debug switch to revert to the old behavior if the new +conservative behavior causes elaboration cycles. Here, 'conservative' means +that if you do @cite{P'Access} during elaboration, the compiler will normally +assume that you might call @cite{P} indirectly during elaboration, so it adds an +implicit @cite{pragma Elaborate_All} on the library unit containing @cite{P}. The +@emph{-gnatd.U} switch is safe if you know there are no such calls. If the +program worked before, it will continue to work with @emph{-gnatd.U}. But beware +that code modifications such as adding an indirect call can cause erroneous +behavior in the presence of @emph{-gnatd.U}. + +These implicit Elaborate_All pragmas are not added in all cases, because +they cause elaboration cycles in certain common code patterns. If you want +even more conservative handling of P'Access, you can use the @emph{-gnatd.o} +switch. + +See @cite{debug.adb} for documentation on the @emph{-gnatd...} debug switches. @node Summary of Procedures for Elaboration Control,Other Elaboration Order Considerations,Elaboration for Indirect Calls,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id13}@anchor{2d3}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{2d4} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id13}@anchor{246}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{247} @section Summary of Procedures for Elaboration Control @geindex Elaboration control First, compile your program with the default options, using none of -the special elaboration control switches. If the binder successfully +the special elaboration-control switches. If the binder successfully binds your program, then you can be confident that, apart from issues raised by the use of access-to-subprogram types and dynamic dispatching, the program is free of elaboration errors. If it is important that the @@ -34947,7 +28569,7 @@ and, if you are sure there really are no elaboration problems, use a global pragma @cite{Suppress (Elaboration_Check)}. @node Other Elaboration Order Considerations,Determining the Chosen Elaboration Order,Summary of Procedures for Elaboration Control,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat id14}@anchor{2d5}@anchor{gnat_ugn/elaboration_order_handling_in_gnat other-elaboration-order-considerations}@anchor{2d6} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat id14}@anchor{248}@anchor{gnat_ugn/elaboration_order_handling_in_gnat other-elaboration-order-considerations}@anchor{249} @section Other Elaboration Order Considerations @@ -35094,7 +28716,7 @@ and figuring out which is correct, and then adding the necessary @cite{Elaborate} or @cite{Elaborate_All} pragmas to ensure the desired order. @node Determining the Chosen Elaboration Order,,Other Elaboration Order Considerations,Elaboration Order Handling in GNAT -@anchor{gnat_ugn/elaboration_order_handling_in_gnat determining-the-chosen-elaboration-order}@anchor{2d7}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id15}@anchor{2d8} +@anchor{gnat_ugn/elaboration_order_handling_in_gnat determining-the-chosen-elaboration-order}@anchor{24a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id15}@anchor{24b} @section Determining the Chosen Elaboration Order @@ -35234,7 +28856,7 @@ gdbstr (body) @end example @node Inline Assembler,GNU Free Documentation License,Elaboration Order Handling in GNAT,Top -@anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{12}@anchor{gnat_ugn/inline_assembler doc}@anchor{2d9}@anchor{gnat_ugn/inline_assembler id1}@anchor{2da} +@anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{10}@anchor{gnat_ugn/inline_assembler doc}@anchor{24c}@anchor{gnat_ugn/inline_assembler id1}@anchor{24d} @chapter Inline Assembler @@ -35293,7 +28915,7 @@ and with assembly language programming. @end menu @node Basic Assembler Syntax,A Simple Example of Inline Assembler,,Inline Assembler -@anchor{gnat_ugn/inline_assembler id2}@anchor{2db}@anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{2dc} +@anchor{gnat_ugn/inline_assembler id2}@anchor{24e}@anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{24f} @section Basic Assembler Syntax @@ -35409,7 +29031,7 @@ Intel: Destination first; for example @cite{mov eax@comma{} 4}@w{ } @node A Simple Example of Inline Assembler,Output Variables in Inline Assembler,Basic Assembler Syntax,Inline Assembler -@anchor{gnat_ugn/inline_assembler a-simple-example-of-inline-assembler}@anchor{2dd}@anchor{gnat_ugn/inline_assembler id3}@anchor{2de} +@anchor{gnat_ugn/inline_assembler a-simple-example-of-inline-assembler}@anchor{250}@anchor{gnat_ugn/inline_assembler id3}@anchor{251} @section A Simple Example of Inline Assembler @@ -35558,7 +29180,7 @@ If there are no errors, @emph{as} will generate an object file @code{nothing.out}. @node Output Variables in Inline Assembler,Input Variables in Inline Assembler,A Simple Example of Inline Assembler,Inline Assembler -@anchor{gnat_ugn/inline_assembler id4}@anchor{2df}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{2e0} +@anchor{gnat_ugn/inline_assembler id4}@anchor{252}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{253} @section Output Variables in Inline Assembler @@ -35925,7 +29547,7 @@ end Get_Flags_3; @end quotation @node Input Variables in Inline Assembler,Inlining Inline Assembler Code,Output Variables in Inline Assembler,Inline Assembler -@anchor{gnat_ugn/inline_assembler id5}@anchor{2e1}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{2e2} +@anchor{gnat_ugn/inline_assembler id5}@anchor{254}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{255} @section Input Variables in Inline Assembler @@ -36014,7 +29636,7 @@ _increment__incr.1: @end quotation @node Inlining Inline Assembler Code,Other Asm Functionality,Input Variables in Inline Assembler,Inline Assembler -@anchor{gnat_ugn/inline_assembler id6}@anchor{2e3}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{2e4} +@anchor{gnat_ugn/inline_assembler id6}@anchor{256}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{257} @section Inlining Inline Assembler Code @@ -36085,7 +29707,7 @@ movl %esi,%eax thus saving the overhead of stack frame setup and an out-of-line call. @node Other Asm Functionality,,Inlining Inline Assembler Code,Inline Assembler -@anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{2e5}@anchor{gnat_ugn/inline_assembler id7}@anchor{2e6} +@anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{258}@anchor{gnat_ugn/inline_assembler id7}@anchor{259} @section Other @cite{Asm} Functionality @@ -36100,7 +29722,7 @@ and @cite{Volatile}, which inhibits unwanted optimizations. @end menu @node The Clobber Parameter,The Volatile Parameter,,Other Asm Functionality -@anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{2e7}@anchor{gnat_ugn/inline_assembler id8}@anchor{2e8} +@anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{25a}@anchor{gnat_ugn/inline_assembler id8}@anchor{25b} @subsection The @cite{Clobber} Parameter @@ -36164,7 +29786,7 @@ Use 'register' name @cite{memory} if you changed a memory location @end itemize @node The Volatile Parameter,,The Clobber Parameter,Other Asm Functionality -@anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{2e9}@anchor{gnat_ugn/inline_assembler id9}@anchor{2ea} +@anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{25c}@anchor{gnat_ugn/inline_assembler id9}@anchor{25d} @subsection The @cite{Volatile} Parameter @@ -36200,7 +29822,7 @@ to @cite{True} only if the compiler's optimizations have created problems. @node GNU Free Documentation License,Index,Inline Assembler,Top -@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{2eb}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{2ec} +@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{25e}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{25f} @chapter GNU Free Documentation License @@ -36688,6 +30310,8 @@ to permit their use in free software. @printindex ge +@anchor{de}@w{ } +@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } @c %**end of body @bye