X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fada%2Fmlib-tgt.ads;h=ce36d7f00775d543c000ddbb1128893c2aedff6e;hb=5d840260484d6529b527754124b46534be44759f;hp=1fac4efe3fccdb20b6ee87579b5f339a3b5d4ca7;hpb=a4740ca06328f740db3fcf8864b60c5af6a983c3;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/ada/mlib-tgt.ads b/gcc/ada/mlib-tgt.ads index 1fac4efe3fc..ce36d7f0077 100644 --- a/gcc/ada/mlib-tgt.ads +++ b/gcc/ada/mlib-tgt.ads @@ -6,45 +6,33 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2003, Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2008, 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- -- --- ware Foundation; either version 2, or (at your option) any later ver- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- -- 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. -- +-- Public License distributed with GNAT; see file COPYING3. If not, go to -- +-- http://www.gnu.org/licenses for a complete copy of the license. -- -- -- -- 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. +-- This package provides a set of target dependent routines to build static, +-- dynamic and shared libraries. There are several packages providing +-- the actual routines. This package calls them indirectly by means of +-- access-to-subprogram values. Each target-dependent package initializes +-- these values in its elaboration block. --- 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 - type Library_Support is (None, Static_Only, Full); - -- Support for Library Project File. - -- - None: Library Project Files are not supported at all - -- - Static_Only: Library Project Files are only supported for static - -- libraries. - -- - Full: Library Project Files are supported for static and dynamic - -- (shared) libraries. - function Support_For_Libraries return Library_Support; -- Indicates how building libraries by gnatmake is supported by the GNAT -- implementation for the platform. @@ -60,14 +48,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 Default_DLL_Address return String; - -- Default address for non relocatable DLL. - -- For OSes where a dynamic library is always relocatable, - -- this function returns an empty string. + function Archive_Indexer_Options return String_List_Access; + -- A list of options to invoke the Archive_Indexer, usually empty function Dynamic_Option return String; -- gcc option to create a dynamic library. @@ -81,12 +72,17 @@ 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 Unix, returns "so", on Windows, returns "dll". + -- On Windows, returns "dll". On Unix, usually returns "so", but not + -- always, e.g. on HP-UX the extension for shared libraries is "sl". function PIC_Option return String; -- Position independent code option @@ -95,49 +91,40 @@ package MLib.Tgt is -- Returns True iff Ext is an object file extension function Is_C_Ext (Ext : String) return Boolean; - -- Returns True iff Ext is a C file extension. + -- Returns True iff Ext is a C file extension function Is_Archive_Ext (Ext : String) return Boolean; -- Returns True iff Ext is an extension for a library - function Linker_Library_Path_Option return String_Access; - -- Linker option to specify to the linker the library directory path. - -- If non null, the library directory path is to be appended. - -- Should be deallocated by the caller, when no longer needed. + 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; - Afiles : Argument_List; Options : Argument_List; Interfaces : Argument_List; Lib_Filename : String; Lib_Dir : String; Symbol_Data : Symbol_Record; Driver_Name : Name_Id := No_Name; - Lib_Address : String := ""; Lib_Version : String := ""; - Relocatable : Boolean := False; Auto_Init : Boolean := False); - -- Build a dynamic/relocatable library. + -- Build a dynamic/relocatable library + -- + -- Ofiles is the list of all object files in the library -- - -- Ofiles is the list of all object files in the library. - -- Foreign is the list of non Ada object files (also included in Ofiles). - -- Afiles is the list of ALI files for the Ada object files. - -- Options is a list of options to be passed to the tool (gcc or other) - -- that effectively builds the dynamic library. + -- Options is a list of options to be passed to the tool + -- (gcc or other) that effectively builds the dynamic library. -- -- Interfaces is the list of ALI files for the interfaces of a SAL. -- It is empty if the library is not a SAL. -- -- Lib_Filename is the name of the library, without any prefix or - -- extension. For example, on Unix, if Lib_Filename is "toto", the name of - -- the library file will be "libtoto.so". + -- extension. For example, on Unix, if Lib_Filename is "toto", the + -- name of the library file will be "libtoto.so". -- - -- Lib_Dir is the directory path where the library will be located. - -- - -- Lib_Address is the base address of the library for a non relocatable - -- library, given as an hexadecimal string. + -- Lib_Dir is the directory path where the library will be located -- -- For OSes that support symbolic links, Lib_Version, if non null, -- is the actual file name of the library. For example on Unix, if @@ -145,24 +132,132 @@ package MLib.Tgt is -- "libtoto.so" will be a symbolic link to "libtoto.so.2.1" which -- will be the actual library file. -- - -- Relocatable indicates if the library should be relocatable or not, - -- for those OSes that actually support non relocatable dynamic libraries. - -- Relocatable indicates that automatic elaboration/finalization must be - -- indicated to the linker, if possible. - -- - -- Symbol_Data is used for some patforms, including VMS, to generate + -- Symbol_Data is used for some platforms, including VMS, to generate -- the symbols to be exported by the library. -- - -- Note: Depending on the OS, some of the parameters may not be taken - -- into account. For example, on Linux, Foreign, Afiles Lib_Address and - -- Relocatable are ignored. + -- Note: Depending on the OS, some of the parameters may not be taken into + -- account. For example, on Linux, Interfaces, Symbol_Data and Auto_Init + -- 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. + function Library_Major_Minor_Id_Supported return Boolean; + -- Indicates if major and minor ids are supported for libraries. + -- If they are supported, then a Library_Version such as libtoto.so.1.2 + -- will have a major id of 1 and a minor id of 2. Then libtoto.so, + -- libtoto.so.1 and libtoto.so.1.2 will be created, all three designating + -- the same file. + +private + No_Argument_List : constant Argument_List := (1 .. 0 => null); + + -- 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; + Options : 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; + + function Library_Major_Minor_Id_Supported_Default return Boolean; + Library_Major_Minor_Id_Supported_Ptr : Boolean_Function := + Library_Major_Minor_Id_Supported_Default'Access; end MLib.Tgt;