OSDN Git Service

2007-04-20 Vincent Celier <celier@adacore.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / mlib-tgt.ads
index 4373dee..670db45 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---              Copyright (C) 2001-2004, Ada Core Technologies, Inc.        --
+--                     Copyright (C) 2001-2007, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -16,8 +16,8 @@
 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
 -- for  more details.  You should have  received  a copy of the GNU General --
 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
+-- Boston, MA 02110-1301, USA.                                              --
 --                                                                          --
 -- GNAT was originally developed  by the GNAT team at  New York University. --
 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
 --  This package provides a set of target dependent routines to build
 --  static, dynamic and shared libraries.
 
---  There are several versions for the body of this package.
+--  There are several versions for the body of this package
 
 --  In the default version, libraries are not supported, so function
 --  Support_For_Libraries return None.
 
-with GNAT.OS_Lib; use GNAT.OS_Lib;
-with Prj;         use Prj;
+with Prj; use Prj;
 
 package MLib.Tgt is
 
@@ -60,12 +59,17 @@ package MLib.Tgt is
    function Archive_Builder_Options return String_List_Access;
    --  A list of options to invoke the Archive_Builder, usually "cr" for "ar"
 
+   function Archive_Builder_Append_Options return String_List_Access;
+   --  A list of options to use with the archive builder to append object
+   --  files ("q", for example).
+
    function Archive_Indexer return String;
-   --  Returns the name of the program, if any, that generates an index
-   --  to the contents of an archive, usually "ranlib".
+   --  Returns the name of the program, if any, that generates an index to the
+   --  contents of an archive, usually "ranlib". If there is no archive indexer
+   --  to be used, returns an empty string.
 
    function Archive_Indexer_Options return String_List_Access;
-   --  A list of options to invoke the Archive_Indexer, usually empty.
+   --  A list of options to invoke the Archive_Indexer, usually empty
 
    function Dynamic_Option return String;
    --  gcc option to create a dynamic library.
@@ -79,9 +83,13 @@ package MLib.Tgt is
    --  For Unix and Windows, return "a".
 
    function Object_Ext return String;
-   --  System dependent object extension, without leadien dot.
+   --  System dependent object extension, without leading dot.
    --  On Unix, returns "o".
 
+   function DLL_Prefix return String;
+   --  System dependent dynamic library prefix.
+   --  On Windows, returns "". On other platforms, returns "lib".
+
    function DLL_Ext return String;
    --  System dependent dynamic library extension, without leading dot.
    --  On Windows, returns "dll". On Unix, usually returns "so", but not
@@ -99,6 +107,10 @@ package MLib.Tgt is
    function Is_Archive_Ext (Ext : String) return Boolean;
    --  Returns True iff Ext is an extension for a library
 
+   function Default_Symbol_File_Name return String;
+   --  Returns the name of the symbol file when Library_Symbol_File is not
+   --  specified. Return the empty string when symbol files are not supported.
+
    procedure Build_Dynamic_Library
      (Ofiles       : Argument_List;
       Foreign      : Argument_List;
@@ -109,9 +121,9 @@ package MLib.Tgt is
       Lib_Filename : String;
       Lib_Dir      : String;
       Symbol_Data  : Symbol_Record;
-      Driver_Name  : Name_Id := No_Name;
-      Lib_Version  : String  := "";
-      Auto_Init    : Boolean := False);
+      Driver_Name  : Name_Id  := No_Name;
+      Lib_Version  : String   := "";
+      Auto_Init    : Boolean  := False);
    --  Build a dynamic/relocatable library
    --
    --  Ofiles is the list of all object files in the library
@@ -147,12 +159,121 @@ package MLib.Tgt is
    --  into account. For example, on Linux, Foreign, Afiles Lib_Address and
    --  Relocatable are ignored.
 
-   function Library_Exists_For (Project : Project_Id) return Boolean;
+   function Library_Exists_For
+     (Project : Project_Id; In_Tree : Project_Tree_Ref) return Boolean;
    --  Return True if the library file for a library project already exists.
    --  This function can only be called for library projects.
 
-   function Library_File_Name_For (Project : Project_Id) return Name_Id;
+   function Library_File_Name_For
+     (Project : Project_Id;
+      In_Tree : Project_Tree_Ref) return File_Name_Type;
    --  Returns the file name of the library file of a library project.
    --  This function can only be called for library projects.
 
+private
+   --  Access to subprogram types for indirection
+
+   type String_Function is access function return String;
+   type Is_Ext_Function is access function (Ext : String) return Boolean;
+   type String_List_Access_Function is access function
+     return String_List_Access;
+   type Build_Dynamic_Library_Function is access procedure
+     (Ofiles       : Argument_List;
+      Foreign      : Argument_List;
+      Afiles       : Argument_List;
+      Options      : Argument_List;
+      Options_2    : Argument_List;
+      Interfaces   : Argument_List;
+      Lib_Filename : String;
+      Lib_Dir      : String;
+      Symbol_Data  : Symbol_Record;
+      Driver_Name  : Name_Id := No_Name;
+      Lib_Version  : String  := "";
+      Auto_Init    : Boolean := False);
+
+   type Library_Exists_For_Function is access function
+     (Project : Project_Id; In_Tree : Project_Tree_Ref) return Boolean;
+
+   type Library_File_Name_For_Function is access function
+     (Project : Project_Id;
+      In_Tree : Project_Tree_Ref) return File_Name_Type;
+
+   type Boolean_Function is access function return Boolean;
+
+   type Library_Support_Function is access function return Library_Support;
+
+   function Archive_Builder_Default return String;
+   Archive_Builder_Ptr : String_Function := Archive_Builder_Default'Access;
+
+   function Archive_Builder_Options_Default return String_List_Access;
+   Archive_Builder_Options_Ptr : String_List_Access_Function :=
+                                   Archive_Builder_Options_Default'Access;
+
+   function Archive_Builder_Append_Options_Default return String_List_Access;
+
+   Archive_Builder_Append_Options_Ptr :
+     String_List_Access_Function :=
+       Archive_Builder_Append_Options_Default'Access;
+
+   function Archive_Ext_Default return String;
+   Archive_Ext_Ptr : String_Function := Archive_Ext_Default'Access;
+
+   function Archive_Indexer_Default return String;
+   Archive_Indexer_Ptr : String_Function := Archive_Indexer_Default'Access;
+
+   function Archive_Indexer_Options_Default return String_List_Access;
+   Archive_Indexer_Options_Ptr : String_List_Access_Function :=
+                                   Archive_Indexer_Options_Default'Access;
+
+   function Default_Symbol_File_Name_Default return String;
+   Default_Symbol_File_Name_Ptr : String_Function :=
+                                    Default_Symbol_File_Name_Default'Access;
+
+   Build_Dynamic_Library_Ptr : Build_Dynamic_Library_Function;
+
+   function DLL_Ext_Default return String;
+   DLL_Ext_Ptr : String_Function := DLL_Ext_Default'Access;
+
+   function DLL_Prefix_Default return String;
+   DLL_Prefix_Ptr : String_Function := DLL_Prefix_Default'Access;
+
+   function Dynamic_Option_Default return String;
+   Dynamic_Option_Ptr : String_Function := Dynamic_Option_Default'Access;
+
+   function Is_Object_Ext_Default (Ext : String) return Boolean;
+   Is_Object_Ext_Ptr : Is_Ext_Function := Is_Object_Ext_Default'Access;
+
+   function Is_C_Ext_Default (Ext : String) return Boolean;
+   Is_C_Ext_Ptr : Is_Ext_Function := Is_C_Ext_Default'Access;
+
+   function Is_Archive_Ext_Default (Ext : String) return Boolean;
+   Is_Archive_Ext_Ptr : Is_Ext_Function := Is_Archive_Ext_Default'Access;
+
+   function Libgnat_Default return String;
+   Libgnat_Ptr : String_Function := Libgnat_Default'Access;
+
+   function Library_Exists_For_Default
+     (Project : Project_Id; In_Tree : Project_Tree_Ref) return Boolean;
+   Library_Exists_For_Ptr : Library_Exists_For_Function :=
+                              Library_Exists_For_Default'Access;
+
+   function Library_File_Name_For_Default
+     (Project : Project_Id;
+      In_Tree : Project_Tree_Ref) return File_Name_Type;
+   Library_File_Name_For_Ptr : Library_File_Name_For_Function :=
+                                 Library_File_Name_For_Default'Access;
+
+   function Object_Ext_Default return String;
+   Object_Ext_Ptr : String_Function := Object_Ext_Default'Access;
+
+   function PIC_Option_Default return String;
+   PIC_Option_Ptr : String_Function := PIC_Option_Default'Access;
+
+   function Standalone_Library_Auto_Init_Is_Supported_Default return Boolean;
+   Standalone_Library_Auto_Init_Is_Supported_Ptr : Boolean_Function :=
+            Standalone_Library_Auto_Init_Is_Supported_Default'Access;
+
+   function Support_For_Libraries_Default return Library_Support;
+   Support_For_Libraries_Ptr : Library_Support_Function :=
+                                 Support_For_Libraries_Default'Access;
 end MLib.Tgt;