OSDN Git Service

2007-08-14 Vincent Celier <celier@adacore.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / mlib-tgt-linux.adb
index 848a11c..001e1a4 100644 (file)
@@ -31,7 +31,6 @@ with MLib.Fil;
 with MLib.Utl;
 with Opt;
 with Output; use Output;
-with System;
 
 package body MLib.Tgt.Specific is
 
@@ -41,10 +40,7 @@ package body MLib.Tgt.Specific is
 
    procedure Build_Dynamic_Library
      (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;
@@ -61,10 +57,7 @@ package body MLib.Tgt.Specific is
 
    procedure Build_Dynamic_Library
      (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;
@@ -73,8 +66,6 @@ package body MLib.Tgt.Specific is
       Lib_Version  : String  := "";
       Auto_Init    : Boolean := False)
    is
-      pragma Unreferenced (Foreign);
-      pragma Unreferenced (Afiles);
       pragma Unreferenced (Interfaces);
       pragma Unreferenced (Symbol_Data);
       pragma Unreferenced (Auto_Init);
@@ -101,56 +92,15 @@ package body MLib.Tgt.Specific is
             Objects     => Ofiles,
             Options     => Options,
             Driver_Name => Driver_Name,
-            Options_2   => Options_2);
+            Options_2   => No_Argument_List);
 
       else
          declare
-            Maj_Version : constant String := Lib_Version;
-            Last_Maj    : Positive := Maj_Version'Last;
-            Last        : Positive;
-            Ok_Maj      : Boolean := False;
+            Maj_Version : constant String :=
+                            Major_Id_Name (Lib_File, Lib_Version);
          begin
-            while Last_Maj > Maj_Version'First loop
-               if Maj_Version (Last_Maj) in '0' .. '9' then
-                  Last_Maj := Last_Maj - 1;
-
-               else
-                  Ok_Maj := Last_Maj /= Maj_Version'Last and then
-                            Maj_Version (Last_Maj) = '.';
-
-                  if Ok_Maj then
-                     Last_Maj := Last_Maj - 1;
-                  end if;
-
-                  exit;
-               end if;
-            end loop;
-
-            if Ok_Maj then
-               Last := Last_Maj;
-
-               while Last > Maj_Version'First loop
-                  if Maj_Version (Last) in '0' .. '9' then
-                     Last := Last - 1;
-
-                  else
-                     Ok_Maj := Last /= Last_Maj and then
-                               Maj_Version (Last) = '.';
-
-                     if Ok_Maj then
-                        Last := Last - 1;
-
-                        Ok_Maj := Maj_Version (1 .. Last) = Lib_File;
-                     end if;
-
-                     exit;
-                  end if;
-               end loop;
-            end if;
-
-            if Ok_Maj then
-               Version_Arg := new String'("-Wl,-soname," &
-                                          Maj_Version (1 .. Last_Maj));
+            if Maj_Version'Length /= 0 then
+               Version_Arg := new String'("-Wl,-soname," & Maj_Version);
 
             else
                Version_Arg := new String'("-Wl,-soname," & Lib_Version);
@@ -162,7 +112,7 @@ package body MLib.Tgt.Specific is
                   Objects     => Ofiles,
                   Options     => Options & Version_Arg,
                   Driver_Name => Driver_Name,
-                  Options_2   => Options_2);
+                  Options_2   => No_Argument_List);
                Symbolic_Link_Needed := Lib_Version /= Lib_Path;
 
             else
@@ -171,65 +121,14 @@ package body MLib.Tgt.Specific is
                   Objects     => Ofiles,
                   Options     => Options & Version_Arg,
                   Driver_Name => Driver_Name,
-                  Options_2   => Options_2);
+                  Options_2   => No_Argument_List);
                Symbolic_Link_Needed :=
                  Lib_Dir & Directory_Separator & Lib_Version /= Lib_Path;
             end if;
 
             if Symbolic_Link_Needed then
-               declare
-                  Success : Boolean;
-                  Oldpath : String (1 .. Lib_Version'Length + 1);
-                  Newpath : String (1 .. Lib_Path'Length + 1);
-
-                  Result : Integer;
-                  pragma Unreferenced (Result);
-
-                  function Symlink
-                    (Oldpath : System.Address;
-                     Newpath : System.Address) return Integer;
-                  pragma Import (C, Symlink, "__gnat_symlink");
-
-               begin
-                  Oldpath (1 .. Lib_Version'Length) := Lib_Version;
-                  Oldpath (Oldpath'Last)            := ASCII.NUL;
-                  Newpath (1 .. Lib_Path'Length)    := Lib_Path;
-                  Newpath (Newpath'Last)            := ASCII.NUL;
-
-                  Delete_File (Lib_Path, Success);
-
-                  Result := Symlink (Oldpath'Address, Newpath'Address);
-               end;
-
-               if Ok_Maj then
-                  declare
-                     Success : Boolean;
-                     Oldpath : String (1 .. Lib_Version'Length + 1);
-                     Maj_Path : constant String :=
-                                  Lib_Dir & Directory_Separator &
-                                  Maj_Version (1 .. Last_Maj);
-                     Newpath : String (1 .. Maj_Path'Length + 1);
-
-                     Result  : Integer;
-                     pragma Unreferenced (Result);
-
-                     function Symlink
-                       (Oldpath : System.Address;
-                        Newpath : System.Address) return Integer;
-                     pragma Import (C, Symlink, "__gnat_symlink");
-
-                  begin
-                     Oldpath (1 .. Lib_Version'Length) := Lib_Version;
-                     Oldpath (Oldpath'Last)            := ASCII.NUL;
-                     Newpath (1 .. Maj_Path'Length)    := Maj_Path;
-                     Newpath (Newpath'Last)            := ASCII.NUL;
-
-                     Delete_File (Maj_Path, Success);
-
-                     Result := Symlink (Oldpath'Address, Newpath'Address);
-                  end;
-               end if;
-
+               Create_Sym_Links
+                 (Lib_Path, Lib_Version, Lib_Dir, Maj_Version);
             end if;
          end;
       end if;