OSDN Git Service

PR ada/52494
[pf3gnuchains/gcc-fork.git] / gcc / ada / mlib-tgt.adb
index c5ec4fa..4d8597c 100644 (file)
 --                         GNAT COMPILER COMPONENTS                         --
 --                                                                          --
 --                             M L I B . T G T                              --
---                            (Default Version)                             --
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---              Copyright (C) 2001, Ada Core Technologies, Inc.             --
+--                     Copyright (C) 2001-2010, 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. --
--- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is the default version which does not support libraries.
---  All subprograms are dummies, because they are never called,
---  except Libraries_Are_Supported which returns False.
+with MLib.Fil;
+with Prj.Com;
+
+with MLib.Tgt.Specific;
+pragma Warnings (Off, MLib.Tgt.Specific);
+--  MLib.Tgt.Specific is with'ed only for elaboration purposes
 
 package body MLib.Tgt is
 
-   pragma Warnings (Off); -- stop warnings on unreferenced formals
+   ---------------------
+   -- Archive_Builder --
+   ---------------------
+
+   function Archive_Builder return String is
+   begin
+      return Archive_Builder_Ptr.all;
+   end Archive_Builder;
+
+   -----------------------------
+   -- Archive_Builder_Default --
+   -----------------------------
+
+   function Archive_Builder_Default return String is
+   begin
+      return "ar";
+   end Archive_Builder_Default;
+
+   -----------------------------
+   -- Archive_Builder_Options --
+   -----------------------------
+
+   function Archive_Builder_Options return String_List_Access is
+   begin
+      return Archive_Builder_Options_Ptr.all;
+   end Archive_Builder_Options;
+
+   -------------------------------------
+   -- Archive_Builder_Options_Default --
+   -------------------------------------
+
+   function Archive_Builder_Options_Default return String_List_Access is
+   begin
+      return new String_List'(1 => new String'("cr"));
+   end Archive_Builder_Options_Default;
+
+   ------------------------------------
+   -- Archive_Builder_Append_Options --
+   ------------------------------------
+
+   function Archive_Builder_Append_Options return String_List_Access is
+   begin
+      return Archive_Builder_Append_Options_Ptr.all;
+   end Archive_Builder_Append_Options;
+
+   --------------------------------------------
+   -- Archive_Builder_Append_Options_Default --
+   --------------------------------------------
+
+   function Archive_Builder_Append_Options_Default return String_List_Access is
+   begin
+      return new String_List'(1 => new String'("q"));
+   end Archive_Builder_Append_Options_Default;
 
    -----------------
    -- Archive_Ext --
    -----------------
 
-   function Archive_Ext return  String is
+   function Archive_Ext return String is
    begin
-      return  "";
+      return Archive_Ext_Ptr.all;
    end Archive_Ext;
 
-   -----------------
-   -- Base_Option --
-   -----------------
+   -------------------------
+   -- Archive_Ext_Default --
+   -------------------------
 
-   function Base_Option return String is
+   function Archive_Ext_Default return String is
    begin
-      return "";
-   end Base_Option;
+      return "a";
+   end Archive_Ext_Default;
+
+   ---------------------
+   -- Archive_Indexer --
+   ---------------------
+
+   function Archive_Indexer return String is
+   begin
+      return Archive_Indexer_Ptr.all;
+   end Archive_Indexer;
+
+   -----------------------------
+   -- Archive_Indexer_Default --
+   -----------------------------
+
+   function Archive_Indexer_Default return String is
+   begin
+      return "ranlib";
+   end Archive_Indexer_Default;
+
+   -----------------------------
+   -- Archive_Indexer_Options --
+   -----------------------------
+
+   function Archive_Indexer_Options return String_List_Access is
+   begin
+      return Archive_Indexer_Options_Ptr.all;
+   end Archive_Indexer_Options;
+
+   -------------------------------------
+   -- Archive_Indexer_Options_Default --
+   -------------------------------------
+
+   function Archive_Indexer_Options_Default return String_List_Access is
+   begin
+      return new String_List (1 .. 0);
+   end Archive_Indexer_Options_Default;
 
    ---------------------------
    -- Build_Dynamic_Library --
@@ -57,39 +146,45 @@ package body MLib.Tgt is
 
    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;
-      Lib_Address  : String  := "";
+      Symbol_Data  : Symbol_Record;
+      Driver_Name  : Name_Id := No_Name;
       Lib_Version  : String  := "";
-      Relocatable  : Boolean := False)
+      Auto_Init    : Boolean := False)
    is
    begin
-      null;
+      Build_Dynamic_Library_Ptr
+        (Ofiles,
+         Options,
+         Interfaces,
+         Lib_Filename,
+         Lib_Dir,
+         Symbol_Data,
+         Driver_Name,
+         Lib_Version,
+         Auto_Init);
    end Build_Dynamic_Library;
 
-   --------------------
-   -- Copy_ALI_Files --
-   --------------------
+   ------------------------------
+   -- Default_Symbol_File_Name --
+   ------------------------------
 
-   procedure Copy_ALI_Files
-     (From : Name_Id;
-      To   : Name_Id)
-   is
+   function Default_Symbol_File_Name return String is
    begin
-      null;
-   end Copy_ALI_Files;
+      return Default_Symbol_File_Name_Ptr.all;
+   end Default_Symbol_File_Name;
 
-   -------------------------
-   -- Default_DLL_Address --
-   -------------------------
+   --------------------------------------
+   -- Default_Symbol_File_Name_Default --
+   --------------------------------------
 
-   function Default_DLL_Address return String is
+   function Default_Symbol_File_Name_Default return String is
    begin
       return "";
-   end Default_DLL_Address;
+   end Default_Symbol_File_Name_Default;
 
    -------------
    -- DLL_Ext --
@@ -97,74 +192,243 @@ package body MLib.Tgt is
 
    function DLL_Ext return String is
    begin
-      return  "";
+      return DLL_Ext_Ptr.all;
    end DLL_Ext;
 
+   ---------------------
+   -- DLL_Ext_Default --
+   ---------------------
+
+   function DLL_Ext_Default return String is
+   begin
+      return "so";
+   end DLL_Ext_Default;
+
+   ----------------
+   -- DLL_Prefix --
+   ----------------
+
+   function DLL_Prefix return String is
+   begin
+      return DLL_Prefix_Ptr.all;
+   end DLL_Prefix;
+
+   ------------------------
+   -- DLL_Prefix_Default --
+   ------------------------
+
+   function DLL_Prefix_Default return String is
+   begin
+      return "lib";
+   end DLL_Prefix_Default;
+
    --------------------
    -- Dynamic_Option --
    --------------------
 
    function Dynamic_Option return String is
    begin
-      return  "";
+      return Dynamic_Option_Ptr.all;
    end Dynamic_Option;
 
+   ----------------------------
+   -- Dynamic_Option_Default --
+   ----------------------------
+
+   function Dynamic_Option_Default return String is
+   begin
+      return "-shared";
+   end Dynamic_Option_Default;
+
    -------------------
    -- Is_Object_Ext --
    -------------------
 
    function Is_Object_Ext (Ext : String) return Boolean is
    begin
-      return False;
+      return Is_Object_Ext_Ptr (Ext);
    end Is_Object_Ext;
 
+   ---------------------------
+   -- Is_Object_Ext_Default --
+   ---------------------------
+
+   function Is_Object_Ext_Default (Ext : String) return Boolean is
+   begin
+      return Ext = ".o";
+   end Is_Object_Ext_Default;
+
    --------------
    -- Is_C_Ext --
    --------------
 
    function Is_C_Ext (Ext : String) return Boolean is
    begin
-      return False;
+      return Is_C_Ext_Ptr (Ext);
    end Is_C_Ext;
 
+   ----------------------
+   -- Is_C_Ext_Default --
+   ----------------------
+
+   function Is_C_Ext_Default (Ext : String) return Boolean is
+   begin
+      return Ext = ".c";
+   end Is_C_Ext_Default;
+
    --------------------
    -- Is_Archive_Ext --
    --------------------
 
    function Is_Archive_Ext (Ext : String) return Boolean is
    begin
-      return False;
+      return Is_Archive_Ext_Ptr (Ext);
    end Is_Archive_Ext;
 
+   ----------------------------
+   -- Is_Archive_Ext_Default --
+   ----------------------------
+
+   function Is_Archive_Ext_Default (Ext : String) return Boolean is
+   begin
+      return Ext = ".a";
+   end Is_Archive_Ext_Default;
+
    -------------
    -- Libgnat --
    -------------
 
    function Libgnat return String is
    begin
-      return "libgnat.a";
+      return Libgnat_Ptr.all;
    end Libgnat;
 
-   -----------------------------
-   -- Libraries_Are_Supported --
-   -----------------------------
+   ---------------------
+   -- Libgnat_Default --
+   ---------------------
+
+   function Libgnat_Default return String is
+   begin
+      return "libgnat.a";
+   end Libgnat_Default;
+
+   ------------------------
+   -- Library_Exists_For --
+   ------------------------
 
-   function Libraries_Are_Supported return Boolean is
+   function Library_Exists_For
+     (Project : Project_Id;
+      In_Tree : Project_Tree_Ref) return Boolean
+   is
    begin
-      return False;
-   end Libraries_Are_Supported;
+      return Library_Exists_For_Ptr (Project, In_Tree);
+   end Library_Exists_For;
 
    --------------------------------
-   -- Linker_Library_Path_Option --
+   -- Library_Exists_For_Default --
    --------------------------------
 
-   function Linker_Library_Path_Option
-     (Directory : String)
-      return      String_Access
+   function Library_Exists_For_Default
+     (Project : Project_Id;
+      In_Tree : Project_Tree_Ref) return Boolean
+   is
+      pragma Unreferenced (In_Tree);
+
+   begin
+      if not Project.Library then
+         Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
+                       "for non library project");
+         return False;
+
+      else
+         declare
+            Lib_Dir  : constant String :=
+                         Get_Name_String (Project.Library_Dir.Display_Name);
+            Lib_Name : constant String :=
+                         Get_Name_String (Project.Library_Name);
+
+         begin
+            if Project.Library_Kind = Static then
+               return Is_Regular_File
+                 (Lib_Dir & Directory_Separator & "lib" &
+                  Fil.Append_To (Lib_Name, Archive_Ext));
+
+            else
+               return Is_Regular_File
+                 (Lib_Dir & Directory_Separator & DLL_Prefix &
+                  Fil.Append_To (Lib_Name, DLL_Ext));
+            end if;
+         end;
+      end if;
+   end Library_Exists_For_Default;
+
+   ---------------------------
+   -- Library_File_Name_For --
+   ---------------------------
+
+   function Library_File_Name_For
+     (Project : Project_Id;
+      In_Tree : Project_Tree_Ref) return File_Name_Type
+   is
+   begin
+      return Library_File_Name_For_Ptr (Project, In_Tree);
+   end Library_File_Name_For;
+
+   -----------------------------------
+   -- Library_File_Name_For_Default --
+   -----------------------------------
+
+   function Library_File_Name_For_Default
+     (Project : Project_Id;
+      In_Tree : Project_Tree_Ref) return File_Name_Type
    is
+      pragma Unreferenced (In_Tree);
+   begin
+      if not Project.Library then
+         Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
+                       "for non library project");
+         return No_File;
+
+      else
+         declare
+            Lib_Name : constant String :=
+                         Get_Name_String (Project.Library_Name);
+
+         begin
+            if Project.Library_Kind =
+                 Static
+            then
+               Name_Len := 3;
+               Name_Buffer (1 .. Name_Len) := "lib";
+               Add_Str_To_Name_Buffer (Fil.Append_To (Lib_Name, Archive_Ext));
+            else
+               Name_Len := 0;
+               Add_Str_To_Name_Buffer (DLL_Prefix);
+               Add_Str_To_Name_Buffer (Fil.Append_To (Lib_Name, DLL_Ext));
+            end if;
+
+            return Name_Find;
+         end;
+      end if;
+   end Library_File_Name_For_Default;
+
+   --------------------------------------
+   -- Library_Major_Minor_Id_Supported --
+   --------------------------------------
+
+   function Library_Major_Minor_Id_Supported return Boolean is
    begin
-      return null;
-   end Linker_Library_Path_Option;
+      return Library_Major_Minor_Id_Supported_Ptr.all;
+   end Library_Major_Minor_Id_Supported;
+
+   ----------------------------------------------
+   -- Library_Major_Minor_Id_Supported_Default --
+   ----------------------------------------------
+
+   function Library_Major_Minor_Id_Supported_Default return Boolean is
+   begin
+      return True;
+   end Library_Major_Minor_Id_Supported_Default;
 
    ----------------
    -- Object_Ext --
@@ -172,16 +436,70 @@ package body MLib.Tgt is
 
    function Object_Ext return String is
    begin
-      return  "";
+      return Object_Ext_Ptr.all;
    end Object_Ext;
 
+   ------------------------
+   -- Object_Ext_Default --
+   ------------------------
+
+   function Object_Ext_Default return String is
+   begin
+      return "o";
+   end Object_Ext_Default;
+
    ----------------
    -- PIC_Option --
    ----------------
 
    function PIC_Option return String is
    begin
-      return  "";
+      return PIC_Option_Ptr.all;
    end PIC_Option;
 
+   ------------------------
+   -- PIC_Option_Default --
+   ------------------------
+
+   function PIC_Option_Default return String is
+   begin
+      return "-fPIC";
+   end PIC_Option_Default;
+
+   -----------------------------------------------
+   -- Standalone_Library_Auto_Init_Is_Supported --
+   -----------------------------------------------
+
+   function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+   begin
+      return Standalone_Library_Auto_Init_Is_Supported_Ptr.all;
+   end Standalone_Library_Auto_Init_Is_Supported;
+
+   -------------------------------------------------------
+   -- Standalone_Library_Auto_Init_Is_Supported_Default --
+   -------------------------------------------------------
+
+   function Standalone_Library_Auto_Init_Is_Supported_Default return Boolean is
+   begin
+      return True;
+   end Standalone_Library_Auto_Init_Is_Supported_Default;
+
+   ---------------------------
+   -- Support_For_Libraries --
+   ---------------------------
+
+   function Support_For_Libraries return Library_Support is
+   begin
+      return Support_For_Libraries_Ptr.all;
+   end Support_For_Libraries;
+
+   -----------------------------------
+   -- Support_For_Libraries_Default --
+   -----------------------------------
+
+   function Support_For_Libraries_Default return Library_Support is
+   begin
+      return Full;
+   end Support_For_Libraries_Default;
+
 end MLib.Tgt;