OSDN Git Service

82b8dc34726db55c3d7a523bd5ba17332b216ecc
[pf3gnuchains/gcc-fork.git] / gcc / ada / prj-conf.ads
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                              P R J . C O N F                             --
6 --                                                                          --
7 --                                 S p e c                                  --
8 --                                                                          --
9 --            Copyright (C) 2006-2009, Free Software Foundation, Inc.       --
10 --                                                                          --
11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
12 -- terms of the  GNU General Public License as published  by the Free Soft- --
13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17 -- for  more details.  You should have  received  a copy of the GNU General --
18 -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
19 -- http://www.gnu.org/licenses for a complete copy of the license.          --
20 --                                                                          --
21 -- GNAT was originally developed  by the GNAT team at  New York University. --
22 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
23 --                                                                          --
24 ------------------------------------------------------------------------------
25
26 --  The following package manipulates the configuration files
27
28 with Prj.Tree;
29
30 package Prj.Conf is
31
32    type Config_File_Hook is access procedure
33      (Config_File       : in out Prj.Tree.Project_Node_Id;
34       Project_Node_Tree : Prj.Tree.Project_Node_Tree_Ref);
35    --  Hook called after the config file has been parsed. This lets the
36    --  application do last minute changes to it (GPS uses this to add the
37    --  default naming schemes for instance). At that point, the config file
38    --  has not been applied to the project yet. When no config file was found,
39    --  and automatic generation is disabled, it is possible that Config_File
40    --  is set to Empty_Node when this procedure is called. You can then decide
41    --  to create a new config file if you need.
42
43    procedure Parse_Project_And_Apply_Config
44      (Main_Project               : out Prj.Project_Id;
45       User_Project_Node          : out Prj.Tree.Project_Node_Id;
46       Config_File_Name           : String := "";
47       Autoconf_Specified         : Boolean;
48       Project_File_Name          : String;
49       Project_Tree               : Prj.Project_Tree_Ref;
50       Project_Node_Tree          : Prj.Tree.Project_Node_Tree_Ref;
51       Packages_To_Check          : String_List_Access;
52       Allow_Automatic_Generation : Boolean := True;
53       Automatically_Generated    : out Boolean;
54       Config_File_Path           : out String_Access;
55       Target_Name                : String := "";
56       Normalized_Hostname        : String;
57       Flags                      : Processing_Flags;
58       On_Load_Config             : Config_File_Hook := null);
59    --  Find the main configuration project and parse the project tree rooted at
60    --  this configuration project.
61    --
62    --  Project_Node_Tree must have been initialized first (and possibly the
63    --  value for external references and project path should also have been
64    --  set).
65    --
66    --  If the processing fails, Main_Project is set to No_Project. If the error
67    --  happend while parsing the project itself (ie creating the tree),
68    --  User_Project_Node is also set to Empty_Node.
69    --
70    --  Autoconf_Specified indicates whether the user has specified --autoconf.
71    --  If this is the case, the config file might be (re)generated, as
72    --  appropriate, to match languages and target if the one specified doesn't
73    --  already match.
74    --
75    --  Normalized_Hostname is the host on which gprbuild is returned,
76    --  normalized so that we can more easily compare it with what is stored in
77    --  configuration files. It is used when the target is unspecified, although
78    --  we need to know the target specified by the user (Target_Name) when
79    --  computing the name of the default config file that should be used.
80    --
81    --  If specified, On_Load_Config is called just after the config file has
82    --  been created/loaded. You can then modify it before it is later applied
83    --  to the project itself.
84    --
85    --  Any error in generating or parsing the config file is reported via the
86    --  Invalid_Config exception, with an appropriate message. Any error while
87    --  parsing the project file results in No_Project.
88
89    procedure Process_Project_And_Apply_Config
90      (Main_Project               : out Prj.Project_Id;
91       User_Project_Node          : Prj.Tree.Project_Node_Id;
92       Config_File_Name           : String := "";
93       Autoconf_Specified         : Boolean;
94       Project_Tree               : Prj.Project_Tree_Ref;
95       Project_Node_Tree          : Prj.Tree.Project_Node_Tree_Ref;
96       Packages_To_Check          : String_List_Access;
97       Allow_Automatic_Generation : Boolean := True;
98       Automatically_Generated    : out Boolean;
99       Config_File_Path           : out String_Access;
100       Target_Name                : String := "";
101       Normalized_Hostname        : String;
102       Flags                      : Processing_Flags;
103       On_Load_Config             : Config_File_Hook := null;
104       Reset_Tree                 : Boolean := True);
105    --  Same as above, except the project must already have been parsed through
106    --  Prj.Part.Parse, and only the processing of the project and the
107    --  configuration is done at this level.
108    --
109    --  If Reset_Tree is true, all projects are first removed from the tree.
110    --  When_No_Sources indicates what should be done when no sources are found
111    --  for one of the languages of the project.
112    --
113    --  If Require_Sources_Other_Lang is true, then all languages must have at
114    --  least one source file, or an error is reported via When_No_Sources. If
115    --  it is false, this is only required for Ada (and only if it is a language
116    --  of the project).
117
118    Invalid_Config : exception;
119
120    procedure Get_Or_Create_Configuration_File
121      (Project                    : Prj.Project_Id;
122       Project_Tree               : Prj.Project_Tree_Ref;
123       Project_Node_Tree          : Prj.Tree.Project_Node_Tree_Ref;
124       Allow_Automatic_Generation : Boolean;
125       Config_File_Name           : String := "";
126       Autoconf_Specified         : Boolean;
127       Target_Name                : String := "";
128       Normalized_Hostname        : String;
129       Packages_To_Check          : String_List_Access := null;
130       Config                     : out Prj.Project_Id;
131       Config_File_Path           : out String_Access;
132       Automatically_Generated    : out Boolean;
133       Flags                      : Processing_Flags;
134       On_Load_Config             : Config_File_Hook := null);
135    --  Compute the name of the configuration file that should be used. If no
136    --  default configuration file is found, a new one will be automatically
137    --  generated if Allow_Automatic_Generation is true.
138    --
139    --  Any error in generating or parsing the config file is reported via the
140    --  Invalid_Config exception, with an appropriate message.
141    --
142    --  On exit, Configuration_Project_Path is never null (if none could be
143    --  found, Os.Fail was called and the program exited anyway).
144    --
145    --  The choice and generation of a configuration file depends on several
146    --  attributes of the user's project file (given by the Project argument),
147    --  e.g. list of languages that must be supported. Project must therefore
148    --  have been partially processed (phase one of the processing only).
149    --
150    --  Config_File_Name should be set to the name of the config file specified
151    --  by the user (either through gprbuild's --config or --autoconf switches).
152    --  In the latter case, Autoconf_Specified should be set to true to indicate
153    --  that the configuration file can be regenerated to match target and
154    --  languages. This name can either be an absolute path, or the a base name
155    --  that will be searched in the default config file directories (which
156    --  depends on the installation path for the tools).
157    --
158    --  Target_Name is used to chose the configuration file that will be used
159    --  from among several possibilities.
160    --
161    --  If a project file could be found, it is automatically parsed and
162    --  processed (and Packages_To_Check is used to indicate which packages
163    --  should be processed)
164
165    procedure Apply_Config_File
166      (Config_File  : Prj.Project_Id;
167       Project_Tree : Prj.Project_Tree_Ref);
168    --  Apply the configuration file settings to all the projects in the
169    --  project tree. The Project_Tree must have been parsed first, and
170    --  processed through the first phase so that all its projects are known.
171    --
172    --  Currently, this will add new attributes and packages in the various
173    --  projects, so that when the second phase of the processing is performed
174    --  these attributes are automatically taken into account.
175
176    procedure Add_Default_GNAT_Naming_Scheme
177      (Config_File  : in out Prj.Tree.Project_Node_Id;
178       Project_Tree : Prj.Tree.Project_Node_Tree_Ref);
179    --  A hook that will create a new config file (in memory), used for
180    --  Get_Or_Create_Configuration_File and Process_Project_And_Apply_Config
181    --  and add the default GNAT naming scheme to it. Nothing is done if the
182    --  config_file already exists, to avoid overriding what the user might
183    --  have put in there.
184
185    --------------
186    -- Runtimes --
187    --------------
188
189    procedure Set_Runtime_For (Language : Name_Id; RTS_Name : String);
190    --  Specifies the runtime to use for a specific language. Most of the time
191    --  this should be used for Ada, but other languages can also specify their
192    --  own runtime. This is in general specified via the --RTS command line
193    --  switch, and results in a specific component passed to gprconfig's
194    --  --config switch then automatically generating a configuration file.
195
196    function Runtime_Name_For (Language : Name_Id) return String;
197    --  Returns the runtime name for a language. Returns an empty string if no
198    --  runtime was specified for the language using option --RTS.
199
200 end Prj.Conf;