summaryrefslogtreecommitdiff
path: root/gcc/ada/mlib-tgt-tru64.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/mlib-tgt-tru64.adb')
-rw-r--r--gcc/ada/mlib-tgt-tru64.adb109
1 files changed, 45 insertions, 64 deletions
diff --git a/gcc/ada/mlib-tgt-tru64.adb b/gcc/ada/mlib-tgt-tru64.adb
index 50290d26897..4ee9b720718 100644
--- a/gcc/ada/mlib-tgt-tru64.adb
+++ b/gcc/ada/mlib-tgt-tru64.adb
@@ -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;
@@ -67,10 +63,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;
@@ -79,16 +72,16 @@ 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);
-- Initialization is done through the contructor mechanism
Lib_File : constant String :=
- Lib_Dir & Directory_Separator & "lib" &
- Fil.Append_To (Lib_Filename, DLL_Ext);
+ "lib" & Fil.Append_To (Lib_Filename, DLL_Ext);
+
+ Lib_Path : constant String :=
+ Lib_Dir & Directory_Separator & Lib_File;
Version_Arg : String_Access;
Symbolic_Link_Needed : Boolean := False;
@@ -96,70 +89,58 @@ package body MLib.Tgt.Specific is
begin
if Opt.Verbose_Mode then
Write_Str ("building relocatable shared library ");
- Write_Line (Lib_File);
+ Write_Line (Lib_Path);
end if;
-- If specified, add automatic elaboration/finalization
if Lib_Version = "" then
Utl.Gcc
- (Output_File => Lib_File,
+ (Output_File => Lib_Path,
Objects => Ofiles,
Options => Options & Expect_Unresolved'Access,
- Options_2 => Options_2,
+ Options_2 => No_Argument_List,
Driver_Name => Driver_Name);
else
- Version_Arg := new String'("-Wl,-soname," & Lib_Version);
-
- if Is_Absolute_Path (Lib_Version) then
- Utl.Gcc
- (Output_File => Lib_Version,
- Objects => Ofiles,
- Options =>
- Options & Version_Arg & Expect_Unresolved'Access,
- Options_2 => Options_2,
- Driver_Name => Driver_Name);
- Symbolic_Link_Needed := Lib_Version /= Lib_File;
-
- else
- Utl.Gcc
- (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
- Objects => Ofiles,
- Options =>
- Options & Version_Arg & Expect_Unresolved'Access,
- Options_2 => Options_2,
- Driver_Name => Driver_Name);
- Symbolic_Link_Needed :=
- Lib_Dir & Directory_Separator & Lib_Version /= Lib_File;
- end if;
-
- if Symbolic_Link_Needed then
- declare
- Success : Boolean;
- Oldpath : String (1 .. Lib_Version'Length + 1);
- Newpath : String (1 .. Lib_File'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_File'Length) := Lib_File;
- Newpath (Newpath'Last) := ASCII.NUL;
-
- Delete_File (Lib_File, Success);
-
- Result := Symlink (Oldpath'Address, Newpath'Address);
- end;
- end if;
+ declare
+ Maj_Version : constant String :=
+ Major_Id_Name (Lib_File, Lib_Version);
+ begin
+ if Maj_Version'Length /= 0 then
+ Version_Arg := new String'("-Wl,-soname," & Maj_Version);
+
+ else
+ Version_Arg := new String'("-Wl,-soname," & Lib_Version);
+ end if;
+
+ if Is_Absolute_Path (Lib_Version) then
+ Utl.Gcc
+ (Output_File => Lib_Version,
+ Objects => Ofiles,
+ Options =>
+ Options & Version_Arg & Expect_Unresolved'Access,
+ Options_2 => No_Argument_List,
+ Driver_Name => Driver_Name);
+ Symbolic_Link_Needed := Lib_Version /= Lib_Path;
+
+ else
+ Utl.Gcc
+ (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+ Objects => Ofiles,
+ Options =>
+ Options & Version_Arg & Expect_Unresolved'Access,
+ Options_2 => No_Argument_List,
+ Driver_Name => Driver_Name);
+ Symbolic_Link_Needed :=
+ Lib_Dir & Directory_Separator & Lib_Version /= Lib_Path;
+ end if;
+
+ if Symbolic_Link_Needed then
+ Create_Sym_Links
+ (Lib_Path, Lib_Version, Lib_Dir, Maj_Version);
+ end if;
+ end;
end if;
end Build_Dynamic_Library;