@copying
@quotation
-GNAT Reference Manual , April 21, 2016
+GNAT Reference Manual , July 04, 2016
AdaCore
* Pragma Unreserve_All_Interrupts::
* Pragma Unsuppress::
* Pragma Use_VADS_Size::
+* Pragma Unused::
* Pragma Validity_Checks::
* Pragma Volatile::
* Pragma Volatile_Full_Access::
* 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::
* No_Implementation_Restrictions::
* No_Implementation_Units::
* No_Implicit_Aliasing::
+* No_Implicit_Loops::
* No_Obsolescent_Features::
* No_Wide_Characters::
* SPARK_05::
* Pragma Unreserve_All_Interrupts::
* Pragma Unsuppress::
* Pragma Use_VADS_Size::
+* Pragma Unused::
* Pragma Validity_Checks::
* Pragma Volatile::
* Pragma Volatile_Full_Access::
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
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
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
@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
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
(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
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
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.
"[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
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
@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
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
@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
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
@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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
@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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
@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
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
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
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
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
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
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
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
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
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
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
@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
@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
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
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
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
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
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
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
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
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
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
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
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
@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
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
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
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
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
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
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
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
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
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
@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
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
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
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
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
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
@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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
@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
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
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
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
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
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
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
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
@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
* 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::
@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
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
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
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
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
[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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
@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
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
[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
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
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
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
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
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
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
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
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
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
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
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
[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
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
[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
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
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
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
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
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
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
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
[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
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
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
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
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
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
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
(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
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
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
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
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
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
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
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
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
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
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
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
[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
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
[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
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
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
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
@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
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
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
@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
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
* No_Implementation_Restrictions::
* No_Implementation_Units::
* No_Implicit_Aliasing::
+* No_Implicit_Loops::
* No_Obsolescent_Features::
* No_Wide_Characters::
* SPARK_05::
@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
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
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
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
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
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
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
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
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
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
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
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
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
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
@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
@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
@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
@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
@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
@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
@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
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
@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
@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
@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
@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
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
@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
@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
@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
@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
@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
@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
@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
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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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}
@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
@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
@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}
@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}
@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}
@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
@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
@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
@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
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
@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
@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
@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}
@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
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}
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
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
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 *
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
@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
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
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
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
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
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
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
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
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
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
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
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
@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
@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
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
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
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
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
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
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
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
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
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
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
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
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
-
-@item
-Any type whose size is specified with a size clause
+Any elementary type.
@item
-Any packed array type with a static size
+Any small 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
@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,
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
@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, where the size is statically known, are represented
+internally as modular integers, and so they are also packable.
@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 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
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
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
@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
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
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
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
@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
@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
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
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
@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
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
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
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
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
@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
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
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
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
@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
@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
@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
@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
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
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
@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
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
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
@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
@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
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
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
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
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
@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
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
@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})
(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})
(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})
(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})
(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})
(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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
@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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
@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})
@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})
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})
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})
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})
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})
@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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
@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})
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})
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})
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})
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})
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})
@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})
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})
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})
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})
@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})
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})
@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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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})
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
@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
@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++
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
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
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
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
@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
@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
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
@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
@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
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
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
@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
@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
@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
@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
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
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
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
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
@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
@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
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
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
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
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})
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
@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
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
@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
@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
@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
@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
@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
@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
@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
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
@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
@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
@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
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
@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
@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
@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
@copying
@quotation
-GNAT User's Guide for Native Platforms , April 21, 2016
+GNAT User's Guide for Native Platforms , July 04, 2016
AdaCore
* 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::
* 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::
* 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::
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
@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
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
@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
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
@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:
@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
@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
@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
@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
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
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):
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
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
@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
@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
@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
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:
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::
@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
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
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
@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
@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
@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
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
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
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
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
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
@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}
@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
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.
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}
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}
@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
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
@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}
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}
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
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
@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.
@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
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
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
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}
@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}
@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
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
@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
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.
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
@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
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
@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
@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
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::
@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
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.
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
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
@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
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
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
@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
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
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.
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
@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
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";
@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
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
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
@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
@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
@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
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
@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
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
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
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
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}
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::
@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
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}
@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}
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
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}
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
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)
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
@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
@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
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
@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
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
@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++
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:
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
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
@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
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;
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
@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
@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
@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
@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
@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
@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
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
@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
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
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
@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
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
@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::
@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}
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}.
@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}
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}
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,
@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)
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)
@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)
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)
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)
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
@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}
@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
@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
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
@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}
@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
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)
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-}
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
@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.
@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
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
@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
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)
@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)
@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)
@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)
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)
@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)
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
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)
Specify a preprocessing data file
(the equal sign is optional)
-(@ref{1a,,Integrated Preprocessing}).
+(@ref{18,,Integrated Preprocessing}).
@end table
@geindex -gnateP (gcc)
@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)
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)
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)
@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
@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)
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)
@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)
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)
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)
@end multitable
-See also @ref{104,,Optimization Levels}.
+See also @ref{fc,,Optimization Levels}.
@end table
@geindex -pass-exit-codes (gcc)
@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)
@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
@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
@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
@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)
@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
@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
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
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
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)
@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
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
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
@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
@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
@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
@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
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
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
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
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)
@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
@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
@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
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
@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
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}
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:
@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}
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.
@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}
@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)
@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)
@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)
@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)
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)
@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
@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
@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
@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
@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
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
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
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
@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
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}
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:
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)
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
@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}
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::
@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}
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.
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}
@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
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
@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
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
@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
@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
@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
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.
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 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
-@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 a number of utility programs:
-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)
+@ref{20,,The File Cleanup Utility gnatclean}
@item
-Source file naming conventions; you can specify these either globally or for
-individual compilation units (see @ref{14e,,Naming Schemes}).
+@ref{21,,The GNAT Library Browser gnatls}
@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}).
+@ref{22,,The Cross-Referencing Tools gnatxref and gnatfind}
@item
-Automatically build libraries as part of the build process
-(see @ref{8a,,Library Projects}).
+@ref{23,,The Ada to HTML Converter gnathtml}
@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}).
+Other GNAT utilities are described elsewhere in this manual:
@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.
+@ref{59,,Handling Arbitrary File Naming Conventions with gnatname}
@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 *
+@ref{63,,File Name Krunching with gnatkr}
@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.
+@ref{36,,Renaming Files with gnatchop}
@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.
+@ref{17,,Preprocessing with gnatprep}
@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
-
+@menu
+* The File Cleanup Utility gnatclean::
+* The GNAT Library Browser gnatls::
+* The Cross-Referencing Tools gnatxref and gnatfind::
+* The Ada to HTML Converter gnathtml::
-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.
+@end menu
-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.
+@node The File Cleanup Utility gnatclean,The GNAT Library Browser gnatls,,GNAT Utility Programs
+@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}
-@table @asis
+@geindex File cleanup tool
-@item @strong{Project file}:
+@geindex gnatclean
-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.
+@cite{gnatclean} is a tool that allows the deletion of files produced by the
+compiler, binder and linker, including ALI files, object files, tree files,
+expanded source files, library files, interface copy source files, binder
+generated files and executable files.
-@item @strong{Project attribute}:
+@menu
+* Running gnatclean::
+* Switches for gnatclean::
-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}.
+@end menu
-@item @strong{Package in a project}:
+@node Running gnatclean,Switches for gnatclean,,The File Cleanup Utility gnatclean
+@anchor{gnat_ugn/gnat_utility_programs running-gnatclean}@anchor{144}@anchor{gnat_ugn/gnat_utility_programs id3}@anchor{145}
+@subsection Running @cite{gnatclean}
-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}:
+The @cite{gnatclean} command has the form:
-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}.
+@quotation
-@item @strong{Source files} and @strong{source directories}:
+@example
+$ gnatclean switches `names`
+@end example
+@end quotation
-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.
+where @cite{names} is a list of source file names. Suffixes @code{.ads} and
+@code{adb} may be omitted. If a project file is specified using switch
+@code{-P}, then @cite{names} may be completely omitted.
-@item @strong{Object files} and @strong{object directory}:
+In normal mode, @cite{gnatclean} delete the files produced by the compiler and,
+if switch @cite{-c} is not specified, by the binder and
+the linker. In informative-only mode, specified by switch
+@cite{-n}, the list of files that would have been deleted in
+normal mode is listed, but no file is actually deleted.
-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
+@node Switches for gnatclean,,Running gnatclean,The File Cleanup Utility gnatclean
+@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}
-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/}.
+@cite{gnatclean} recognizes the following switches:
-@example
-common/
- pack.ads
- pack.adb
- proc.adb
-common/obj/
- proc.ali, proc.o pack.ali, pack.o
-@end example
+@geindex --version (gnatclean)
-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:
+@table @asis
-@example
-project Build is
-end Build;
-@end example
+@item @code{--version}
-@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::
+Display Copyright and version, then exit disregarding all other options.
+@end table
-@end menu
+@geindex --help (gnatclean)
-@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
+@table @asis
-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,...).
+@item @code{--help}
-@geindex Source directories (GNAT Project Manager)
+If @emph{--version} was not used, display usage, then exit disregarding
+all other options.
-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.
+@item @code{--subdirs=@emph{subdir}}
-@geindex Source_Dirs (GNAT Project Manager)
+Actual object directory of each project file is the subdirectory subdir of the
+object directory specified or defaulted in the project file.
-There are several ways of defining source directories:
+@item @code{--unchecked-shared-lib-imports}
+By default, shared library projects are not allowed to import static library
+projects. When this switch is used on the command line, this restriction is
+relaxed.
+@end table
-@itemize *
+@geindex -c (gnatclean)
-@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.
+@table @asis
-@geindex portability of path names (GNAT Project Manager)
+@item @code{-c}
-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 "\".
+Only attempt to delete the files produced by the compiler, not those produced
+by the binder or the linker. The files that are not to be deleted are library
+files, interface copy files, binder generated files and executable files.
+@end table
-@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 -D (gnatclean)
-@geindex Source directories (GNAT Project Manager)
-@geindex Excluded_Source_Dirs (GNAT Project Manager)
+@table @asis
-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.
+@item @code{-D @emph{dir}}
-@geindex Ignore_Source_Sub_Dirs (GNAT Project Manager)
+Indicate that ALI and object files should normally be found in directory @cite{dir}.
+@end table
-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.
+@geindex -F (gnatclean)
-@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
+@table @asis
-@example
-build.gpr
-project Build is
- for Source_Dirs use ("common"); -- <<<<
-end Build;
-@end example
+@item @code{-F}
-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.
+When using project files, if some errors or warnings are detected during
+parsing and verbose mode is not in effect (no use of switch
+-v), then error lines start with the full path name of the project
+file, rather than its simple file name.
+@end table
+@geindex -h (gnatclean)
-@itemize *
-@item
-By default, the project manager searches for all source files of all
-specified languages in all the source directories.
+@table @asis
-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.
+@item @code{-h}
-@geindex Languages (GNAT Project Manager)
+Output a message explaining the usage of @cite{gnatclean}.
+@end table
-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 -n (gnatclean)
-@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}.
+@table @asis
-@geindex Source_Files (GNAT Project Manager)
+@item @code{-n}
-@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.
+Informative-only mode. Do not delete any files. Output the list of the files
+that would have been deleted if this switch was not specified.
+@end table
-@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 -P (gnatclean)
-@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.
+@table @asis
-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.
+@item @code{-P@emph{project}}
-@geindex Excluded_Source_Files (GNAT Project Manager)
+Use project file @cite{project}. Only one such switch can be used.
+When cleaning a project file, the files produced by the compilation of the
+immediate sources or inherited sources of the project files are to be
+deleted. This is not depending on the presence or not of executable names
+on the command line.
+@end table
-@geindex Locally_Removed_Files (GNAT Project Manager)
+@geindex -q (gnatclean)
-@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
+@table @asis
-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.
+@item @code{-q}
-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.
+Quiet output. If there are no errors, do not output anything, except in
+verbose mode (switch -v) or in informative-only mode
+(switch -n).
+@end table
-@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
+@geindex -r (gnatclean)
-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.
+@table @asis
-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.
+@item @code{-r}
-@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
+When a project file is specified (using switch -P),
+clean all imported and extended project files, recursively. If this switch
+is not specified, only the files related to the main project file are to be
+deleted. This switch has no effect if no project file is specified.
+@end table
+@geindex -v (gnatclean)
-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)
+@table @asis
-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}).
+@item @code{-v}
-If the attribute @cite{Object_Dir} is not specified, it defaults to
-the project directory, that is the directory containing the project file.
+Verbose mode.
+@end table
-For our example, we can specify the object dir in this way:
+@geindex -vP (gnatclean)
-@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.
+@table @asis
-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.
+@item @code{-vP@emph{x}}
-@geindex Exec_Dir (GNAT Project Manager)
+Indicates the verbosity of the parsing of GNAT project files.
+@ref{de,,Switches Related to Project Files}.
+@end table
-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.
+@geindex -X (gnatclean)
-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
+@table @asis
-@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
+@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.
+@ref{de,,Switches Related to Project Files}.
+@end table
-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.
+@geindex -aO (gnatclean)
-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)
+@table @asis
-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.
+@item @code{-aO@emph{dir}}
-@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
+When searching for ALI and object files, look in directory @cite{dir}.
+@end table
-If this attribute is defined in the project, then spawning the builder
-with a command such as
+@geindex -I (gnatclean)
-@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.
+@table @asis
-@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
+@item @code{-I@emph{dir}}
+Equivalent to @code{-aO@emph{dir}}.
+@end table
-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.
+@geindex -I- (gnatclean)
-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 Source files
+@geindex suppressing search
-@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.
+@table @asis
-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.
+@item @code{-I-}
-@geindex project file packages (GNAT Project Manager)
+Do not look for ALI or object files in the directory
+where @cite{gnatclean} was invoked.
+@end table
-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}).
+@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{21}@anchor{gnat_ugn/gnat_utility_programs id5}@anchor{148}
+@section The GNAT Library Browser @cite{gnatls}
-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");
+@geindex Library browser
- package Builder is --<<< for gprbuild
- end Builder;
+@geindex gnatls
- package Compiler is --<<< for the compiler
- end Compiler;
+@cite{gnatls} is a tool that outputs information about compiled
+units. It gives the relationship between objects, unit names and source
+files. It can also be used to check the source dependencies of a unit
+as well as various characteristics.
- package Binder is --<<< for the binder
- end Binder;
+Note: to invoke @cite{gnatls} with a project file, use the @cite{gnat}
+driver (see @emph{The_GNAT_Driver_and_Project_Files}).
- package Linker is --<<< for the linker
- end Linker;
-end Build;
-@end example
+@menu
+* Running gnatls::
+* Switches for gnatls::
+* Example of gnatls Usage::
-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.
+@end menu
-Several attributes can be used to specify the switches:
+@node Running gnatls,Switches for gnatls,,The GNAT Library Browser gnatls
+@anchor{gnat_ugn/gnat_utility_programs id6}@anchor{149}@anchor{gnat_ugn/gnat_utility_programs running-gnatls}@anchor{14a}
+@subsection Running @cite{gnatls}
-@geindex Default_Switches (GNAT Project Manager)
-@strong{Default_Switches}:
+The @cite{gnatls} command has the form
@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;
+$ gnatls switches `object_or_ali_file`
@end example
@end quotation
-@geindex Switches (GNAT Project Manager)
+The main argument is the list of object or @code{ali} files
+(see @ref{42,,The Ada Library Information Files})
+for which information is requested.
-@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{<prefix>/<target>/lib/gnat} if option @emph{--target} is specified
-
-@item
-@code{<prefix>/<target>/share/gpr} if option @emph{--target} is specified
-
-@item
-@code{<prefix>/share/gpr/}
-
-@item
-@code{<prefix>/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{<dir of the aggregate>/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 <project_>name is
- @{declarative_item@}
- end <project_>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 <package_>simple_name is
- @{simple_declarative_item@}
- end package_identifier ;
-package_renaming ::==
- package <package_>simple_name renames <project_>simple_name.package_identifier ;
-package_extension ::==
- package <package_>simple_name extends <project_>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* *<typed_string_>*_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 ::=
- *<typed_variable_>*simple_name : *<typed_string_>*name := string_expression;
-
-variable_declaration ::= *<variable_>*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* *<variable_>*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* *<indexed_attribute_>*simple_name ( string_literal) *use* expression ;
-
-attribute_designator ::=
- *<simple_attribute_>*simple_name
- | *<indexed_attribute_>*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_attribute>_*simple_name [ (string_literal) ]
-attribute_prefix ::= *project*
- | *<project_>*simple_name
- | package_identifier
- | *<project_>*simple_name . package_identifier
-@end example
-
-Examples are:
-
-@example
-<project>'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}
-@chapter GNAT Utility Programs
-
-
-This chapter describes a number of utility programs:
-
-
-
-@itemize *
-
-@item
-@ref{22,,The File Cleanup Utility gnatclean}
-
-@item
-@ref{23,,The GNAT Library Browser gnatls}
-
-@item
-@ref{24,,The Cross-Referencing Tools gnatxref and gnatfind}
-
-@item
-@ref{25,,The Ada to HTML Converter gnathtml}
-@end itemize
-
-Other GNAT utilities are described elsewhere in this manual:
-
-
-@itemize *
-
-@item
-@ref{5b,,Handling Arbitrary File Naming Conventions with gnatname}
-
-@item
-@ref{65,,File Name Krunching with gnatkr}
-
-@item
-@ref{38,,Renaming Files with gnatchop}
-
-@item
-@ref{19,,Preprocessing with gnatprep}
-@end itemize
-
-@menu
-* The File Cleanup Utility gnatclean::
-* The GNAT Library Browser gnatls::
-* The Cross-Referencing Tools gnatxref and gnatfind::
-* The Ada to HTML Converter gnathtml::
-
-@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}
-@section The File Cleanup Utility @emph{gnatclean}
-
-
-@geindex File cleanup tool
-
-@geindex gnatclean
-
-@cite{gnatclean} is a tool that allows the deletion of files produced by the
-compiler, binder and linker, including ALI files, object files, tree files,
-expanded source files, library files, interface copy source files, binder
-generated files and executable files.
-
-@menu
-* Running gnatclean::
-* Switches for gnatclean::
-
-@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}
-@subsection Running @cite{gnatclean}
-
-
-The @cite{gnatclean} command has the form:
-
-@quotation
-
-@example
-$ gnatclean switches `names`
-@end example
-@end quotation
-
-where @cite{names} is a list of source file names. Suffixes @code{.ads} and
-@code{adb} may be omitted. If a project file is specified using switch
-@code{-P}, then @cite{names} may be completely omitted.
-
-In normal mode, @cite{gnatclean} delete the files produced by the compiler and,
-if switch @cite{-c} is not specified, by the binder and
-the linker. In informative-only mode, specified by switch
-@cite{-n}, the list of files that would have been deleted in
-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}
-@subsection Switches for @cite{gnatclean}
-
-
-@cite{gnatclean} recognizes the following switches:
-
-@geindex --version (gnatclean)
-
-
-@table @asis
-
-@item @code{--version}
-
-Display Copyright and version, then exit disregarding all other options.
-@end table
-
-@geindex --help (gnatclean)
-
-
-@table @asis
-
-@item @code{--help}
-
-If @emph{--version} was not used, display usage, then exit disregarding
-all other options.
-
-@item @code{--subdirs=@emph{subdir}}
-
-Actual object directory of each project file is the subdirectory subdir of the
-object directory specified or defaulted in the project file.
-
-@item @code{--unchecked-shared-lib-imports}
-
-By default, shared library projects are not allowed to import static library
-projects. When this switch is used on the command line, this restriction is
-relaxed.
-@end table
-
-@geindex -c (gnatclean)
-
-
-@table @asis
-
-@item @code{-c}
-
-Only attempt to delete the files produced by the compiler, not those produced
-by the binder or the linker. The files that are not to be deleted are library
-files, interface copy files, binder generated files and executable files.
-@end table
-
-@geindex -D (gnatclean)
-
-
-@table @asis
-
-@item @code{-D @emph{dir}}
-
-Indicate that ALI and object files should normally be found in directory @cite{dir}.
-@end table
-
-@geindex -F (gnatclean)
-
-
-@table @asis
-
-@item @code{-F}
-
-When using project files, if some errors or warnings are detected during
-parsing and verbose mode is not in effect (no use of switch
--v), then error lines start with the full path name of the project
-file, rather than its simple file name.
-@end table
-
-@geindex -h (gnatclean)
-
-
-@table @asis
-
-@item @code{-h}
-
-Output a message explaining the usage of @cite{gnatclean}.
-@end table
-
-@geindex -n (gnatclean)
-
-
-@table @asis
-
-@item @code{-n}
-
-Informative-only mode. Do not delete any files. Output the list of the files
-that would have been deleted if this switch was not specified.
-@end table
-
-@geindex -P (gnatclean)
-
-
-@table @asis
-
-@item @code{-P@emph{project}}
-
-Use project file @cite{project}. Only one such switch can be used.
-When cleaning a project file, the files produced by the compilation of the
-immediate sources or inherited sources of the project files are to be
-deleted. This is not depending on the presence or not of executable names
-on the command line.
-@end table
-
-@geindex -q (gnatclean)
-
-
-@table @asis
-
-@item @code{-q}
-
-Quiet output. If there are no errors, do not output anything, except in
-verbose mode (switch -v) or in informative-only mode
-(switch -n).
-@end table
-
-@geindex -r (gnatclean)
-
-
-@table @asis
-
-@item @code{-r}
-
-When a project file is specified (using switch -P),
-clean all imported and extended project files, recursively. If this switch
-is not specified, only the files related to the main project file are to be
-deleted. This switch has no effect if no project file is specified.
-@end table
-
-@geindex -v (gnatclean)
-
-
-@table @asis
-
-@item @code{-v}
-
-Verbose mode.
-@end table
-
-@geindex -vP (gnatclean)
-
-
-@table @asis
-
-@item @code{-vP@emph{x}}
-
-Indicates the verbosity of the parsing of GNAT project files.
-@ref{e6,,Switches Related to Project Files}.
-@end table
-
-@geindex -X (gnatclean)
-
-
-@table @asis
-
-@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.
-@ref{e6,,Switches Related to Project Files}.
-@end table
-
-@geindex -aO (gnatclean)
-
-
-@table @asis
-
-@item @code{-aO@emph{dir}}
-
-When searching for ALI and object files, look in directory @cite{dir}.
-@end table
-
-@geindex -I (gnatclean)
-
-
-@table @asis
-
-@item @code{-I@emph{dir}}
-
-Equivalent to @code{-aO@emph{dir}}.
-@end table
-
-@geindex -I- (gnatclean)
-
-@geindex Source files
-@geindex suppressing search
-
-
-@table @asis
-
-@item @code{-I-}
-
-Do not look for ALI or object files in the directory
-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}
-@section The GNAT Library Browser @cite{gnatls}
-
-
-@geindex Library browser
-
-@geindex gnatls
-
-@cite{gnatls} is a tool that outputs information about compiled
-units. It gives the relationship between objects, unit names and source
-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}).
-
-@menu
-* Running gnatls::
-* Switches for gnatls::
-* Example of gnatls Usage::
-
-@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}
-@subsection Running @cite{gnatls}
-
-
-The @cite{gnatls} command has the form
-
-@quotation
-
-@example
-$ gnatls switches `object_or_ali_file`
-@end example
-@end quotation
-
-The main argument is the list of object or @code{ali} files
-(see @ref{44,,The Ada Library Information Files})
-for which information is requested.
-
-In normal mode, without additional option, @cite{gnatls} produces a
-four-column listing. Each line represents information for a specific
-object. The first column gives the full path of the object, the second
-column gives the name of the principal unit in this object, the third
-column gives the status of the source and the fourth column gives the
-full path of the source representing this unit.
-Here is a simple example of use:
+In normal mode, without additional option, @cite{gnatls} produces a
+four-column listing. Each line represents information for a specific
+object. The first column gives the full path of the object, the second
+column gives the name of the principal unit in this object, the third
+column gives the status of the source and the fourth column gives the
+full path of the source representing this unit.
+Here is a simple example of use:
@quotation
@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}
@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)
@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)
@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
@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}
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::
@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
@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)
@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}).
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
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
@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
@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}
@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)
@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.
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}
@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}
@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
@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
@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
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
@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}
@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}
@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}
+
@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
@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
@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
@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
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
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
(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
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
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
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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
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
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
@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
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
@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
@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
@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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
@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
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
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
@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
@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
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
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
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
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
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
@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
@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
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
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
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
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
@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
@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
@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
@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
@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
@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
-- +--- 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:
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
@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
@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
@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
@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
@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
* 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
@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
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
@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
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
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:
@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
@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
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
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
@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
@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)
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
@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
@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
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
@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
@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.
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
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
@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
@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
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
@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
@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
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.
@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:
@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
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
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
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}
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
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
@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
@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}
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)
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.
$ 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}
@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
@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
@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
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
@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
@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
@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
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
@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
@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
@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:
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
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
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.
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}
@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}
@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
@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
@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
@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
@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
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
@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
@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
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
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
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
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
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
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
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
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
@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
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
@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
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
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
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
@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
@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
@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
@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
@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
@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
@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
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
@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
@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
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
@printindex ge
+@anchor{de}@w{ }
+@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ }
@c %**end of body
@bye