]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/ada/mlib-prj.adb
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / ada / mlib-prj.adb
diff --git a/gcc/ada/mlib-prj.adb b/gcc/ada/mlib-prj.adb
deleted file mode 100644 (file)
index daef218..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-------------------------------------------------------------------------------
---                                                                          --
---                         GNAT COMPILER COMPONENTS                         --
---                                                                          --
---                            M L I B . P R J                               --
---                                                                          --
---                                 B o d y                                  --
---                                                                          --
---                            $Revision: 1.1 $
---                                                                          --
---              Copyright (C) 2001, Ada Core Technologies, Inc.             --
---                                                                          --
--- 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- --
--- 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.                                                      --
---                                                                          --
--- 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). --
---                                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Characters.Handling;
-
-with GNAT.Directory_Operations; use GNAT.Directory_Operations;
-with GNAT.OS_Lib;   use GNAT.OS_Lib;
-with MLib.Fil;
-with MLib.Tgt;
-with Opt;
-with Output;        use Output;
-with Osint;         use Osint;
-with Namet;         use Namet;
-with Table;
-with Types;         use Types;
-
-package body MLib.Prj is
-
-   package Files  renames MLib.Fil;
-   package Target renames MLib.Tgt;
-
-   --  List of objects to put inside the library
-
-   Object_Files : Argument_List_Access;
-   package Objects is new Table.Table
-     (Table_Name           => "Mlib.Prj.Objects",
-      Table_Component_Type => String_Access,
-      Table_Index_Type     => Natural,
-      Table_Low_Bound      => 1,
-      Table_Initial        => 50,
-      Table_Increment      => 50);
-
-   --  List of non-Ada object files
-
-   Foreign_Objects : Argument_List_Access;
-   package Foreigns is new Table.Table
-     (Table_Name           => "Mlib.Prj.Foreigns",
-      Table_Component_Type => String_Access,
-      Table_Index_Type     => Natural,
-      Table_Low_Bound      => 1,
-      Table_Initial        => 20,
-      Table_Increment      => 20);
-
-   --  List of ALI files
-
-   Ali_Files : Argument_List_Access;
-   package Alis is new Table.Table
-     (Table_Name           => "Mlib.Prj.Alis",
-      Table_Component_Type => String_Access,
-      Table_Index_Type     => Natural,
-      Table_Low_Bound      => 1,
-      Table_Initial        => 50,
-      Table_Increment      => 50);
-
-   --  List of options set in the command line.
-
-   Options : Argument_List_Access;
-   package Opts is new Table.Table
-     (Table_Name           => "Mlib.Prj.Opts",
-      Table_Component_Type => String_Access,
-      Table_Index_Type     => Natural,
-      Table_Low_Bound      => 1,
-      Table_Initial        => 5,
-      Table_Increment      => 5);
-
-   type Build_Mode_State is
-     (None, Static, Dynamic, Relocatable);
-
-   procedure Check (Filename : String);
-   --  Check if filename is a regular file. Fail if it is not.
-
-   procedure Check_Context;
-   --  Check each object files in table Object_Files
-   --  Fail if any of them is not a regular file
-
-   procedure Reset_Tables;
-   --  Make sure that all the above tables are empty
-   --  (Objects, Foreign_Objects, Ali_Files, Options)
-
-   -------------------
-   -- Build_Library --
-   -------------------
-
-   procedure Build_Library (For_Project : Project_Id) is
-      Data : constant Project_Data := Projects.Table (For_Project);
-
-      Project_Name : constant String :=
-                       Get_Name_String (Data.Name);
-
-      Lib_Filename : String_Access;
-      Lib_Dirpath  : String_Access := new String'(".");
-      DLL_Address  : String_Access := new String'(Target.Default_DLL_Address);
-      Lib_Version  : String_Access := new String'("");
-
-      The_Build_Mode : Build_Mode_State := None;
-
-   begin
-      Reset_Tables;
-
-      --  Fail if project is not a library project
-
-      if not Data.Library then
-         Fail ("project """, Project_Name, """ has no library");
-      end if;
-
-      Lib_Dirpath := new String'(Get_Name_String (Data.Library_Dir));
-      Lib_Filename := new String'(Get_Name_String (Data.Library_Name));
-
-      case Data.Library_Kind is
-         when Static =>
-            The_Build_Mode := Static;
-
-         when Dynamic =>
-            The_Build_Mode := Dynamic;
-
-         when Relocatable =>
-            The_Build_Mode := Relocatable;
-
-            if Target.PIC_Option /= "" then
-               Opts.Increment_Last;
-               Opts.Table (Opts.Last) := new String'(Target.PIC_Option);
-            end if;
-      end case;
-
-      --  Get the library version, if any
-
-      if Data.Lib_Internal_Name /= No_Name then
-         Lib_Version := new String'(Get_Name_String (Data.Lib_Internal_Name));
-      end if;
-
-      --  Add the objects found in the object directory
-
-      declare
-         Object_Dir : Dir_Type;
-         Filename : String (1 .. 255);
-         Last : Natural;
-         Object_Dir_Path : constant String :=
-           Get_Name_String (Data.Object_Directory);
-      begin
-         Open (Dir => Object_Dir, Dir_Name => Object_Dir_Path);
-
-         --  For all entries in the object directory
-
-         loop
-            Read (Object_Dir, Filename, Last);
-
-            exit when Last = 0;
-
-            --  Check if it is an object file
-
-            if Files.Is_Obj (Filename (1 .. Last)) then
-               --  record this object file
-
-               Objects.Increment_Last;
-               Objects.Table (Objects.Last) :=
-                 new String' (Object_Dir_Path & Directory_Separator &
-                              Filename (1 .. Last));
-
-               if Is_Regular_File
-                 (Object_Dir_Path &
-                  Files.Ext_To (Object_Dir_Path &
-                                Filename (1 .. Last), "ali"))
-               then
-                  --  Record the corresponding ali file
-
-                  Alis.Increment_Last;
-                  Alis.Table (Alis.Last) :=
-                    new String' (Object_Dir_Path &
-                                 Files.Ext_To
-                                 (Filename (1 .. Last), "ali"));
-
-               else
-                  --  The object file is a foreign object file
-
-                  Foreigns.Increment_Last;
-                  Foreigns.Table (Foreigns.Last) :=
-                    new String'(Object_Dir_Path &
-                                Filename (1 .. Last));
-
-               end if;
-            end if;
-         end loop;
-
-         Close (Dir => Object_Dir);
-
-      exception
-         when Directory_Error =>
-            Fail ("cannot find object directory """,
-                  Get_Name_String (Data.Object_Directory),
-                  """");
-      end;
-
-      --  We want to link some Ada files, so we need to link with
-      --  the GNAT runtime (libgnat & libgnarl)
-
-      if The_Build_Mode = Dynamic or else The_Build_Mode = Relocatable then
-         Opts.Increment_Last;
-         Opts.Table (Opts.Last) := new String' ("-lgnarl");
-         Opts.Increment_Last;
-         Opts.Table (Opts.Last) := new String' ("-lgnat");
-      end if;
-
-      Object_Files :=
-        new Argument_List'(Argument_List (Objects.Table (1 .. Objects.Last)));
-
-      Foreign_Objects :=
-        new Argument_List'(Argument_List
-                           (Foreigns.Table (1 .. Foreigns.Last)));
-
-      Ali_Files :=
-        new Argument_List'(Argument_List (Alis.Table (1 .. Alis.Last)));
-
-      Options :=
-        new Argument_List'(Argument_List (Opts.Table (1 .. Opts.Last)));
-
-      --  We fail if there are no object to put in the library
-      --  (Ada or foreign objects)
-
-      if Object_Files'Length = 0 then
-         Fail ("no object files");
-
-      end if;
-
-      if not Opt.Quiet_Output then
-         Write_Eol;
-         Write_Str  ("building ");
-         Write_Str (Ada.Characters.Handling.To_Lower
-                    (Build_Mode_State'Image (The_Build_Mode)));
-         Write_Str  (" library for project ");
-         Write_Line (Project_Name);
-         Write_Eol;
-      end if;
-
-      --  We check that all object files are regular files
-
-      Check_Context;
-
-      --  And we call the procedure to build the library,
-      --  depending on the build mode
-
-      case The_Build_Mode is
-         when Dynamic | Relocatable =>
-            Target.Build_Dynamic_Library
-              (Ofiles        => Object_Files.all,
-               Foreign       => Foreign_Objects.all,
-               Afiles        => Ali_Files.all,
-               Options       => Options.all,
-               Lib_Filename  => Lib_Filename.all,
-               Lib_Dir       => Lib_Dirpath.all,
-               Lib_Address   => DLL_Address.all,
-               Lib_Version   => Lib_Version.all,
-               Relocatable   => The_Build_Mode = Relocatable);
-
-         when Static =>
-            MLib.Build_Library
-              (Object_Files.all,
-               Ali_Files.all,
-               Lib_Filename.all,
-               Lib_Dirpath.all);
-
-         when None =>
-            null;
-      end case;
-
-      --  We need to copy the ALI files from the object directory
-      --  to the library directory, so that the linker find them
-      --  there, and does not need to look in the object directory
-      --  where it would also find the object files; and we don't want
-      --  that: we want the linker to use the library.
-
-      Target.Copy_ALI_Files
-        (From => Projects.Table (For_Project).Object_Directory,
-         To   => Projects.Table (For_Project).Library_Dir);
-
-   end Build_Library;
-
-   -----------
-   -- Check --
-   -----------
-
-   procedure Check (Filename : String) is
-   begin
-      if not Is_Regular_File (Filename) then
-         Fail (Filename, " not found.");
-
-      end if;
-   end Check;
-
-   -------------------
-   -- Check_Context --
-   -------------------
-
-   procedure Check_Context is
-   begin
-      --  check that each object file exist
-
-      for F in Object_Files'Range loop
-         Check (Object_Files (F).all);
-      end loop;
-   end Check_Context;
-
-   ------------------
-   -- Reset_Tables --
-   ------------------
-
-   procedure Reset_Tables is
-   begin
-      Objects.Init;
-      Foreigns.Init;
-      Alis.Init;
-      Opts.Init;
-   end Reset_Tables;
-
-end MLib.Prj;