-- --
-- B o d y --
-- --
--- Copyright (C) 2002-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 2002-2006 Free Software Foundation, 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- --
-- 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. --
+-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
+-- Boston, MA 02110-1301, USA. --
-- --
-- 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 is the True64 version of the body.
+-- This is the True64 version of the body
with MLib.Fil;
with MLib.Utl;
Expect_Unresolved : aliased String := "-Wl,-expect_unresolved,*";
- No_Arguments : aliased Argument_List := (1 .. 0 => null);
- Empty_Argument_List : constant Argument_List_Access := No_Arguments'Access;
-
- Wl_Init_String : aliased String := "-Wl,-init";
- Wl_Init : constant String_Access := Wl_Init_String'Access;
- Wl_Fini_String : aliased String := "-Wl,-fini";
- Wl_Fini : constant String_Access := Wl_Fini_String'Access;
-
- Init_Fini_List : constant Argument_List_Access :=
- new Argument_List'(1 => Wl_Init,
- 2 => null,
- 3 => Wl_Fini,
- 4 => null);
- -- Used to put switches for automatic elaboration/finalization
-
---------------------
-- Archive_Builder --
---------------------
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.Ext_To (Lib_Filename, DLL_Ext);
+ Fil.Append_To (Lib_Filename, DLL_Ext);
Version_Arg : String_Access;
Symbolic_Link_Needed : Boolean := False;
- Init_Fini : Argument_List_Access := Empty_Argument_List;
-
begin
if Opt.Verbose_Mode then
Write_Str ("building relocatable shared library ");
-- If specified, add automatic elaboration/finalization
- if Auto_Init then
- Init_Fini := Init_Fini_List;
- Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");
- Init_Fini (4) := new String'("-Wl," & Lib_Filename & "final");
- end if;
-
if Lib_Version = "" then
Utl.Gcc
(Output_File => Lib_File,
Objects => Ofiles,
- Options =>
- Options &
- Expect_Unresolved'Access &
- Init_Fini.all,
+ Options => Options & Expect_Unresolved'Access,
Options_2 => Options_2,
Driver_Name => Driver_Name);
(Output_File => Lib_Version,
Objects => Ofiles,
Options =>
- Options &
- Version_Arg &
- Expect_Unresolved'Access &
- Init_Fini.all,
+ Options & Version_Arg & Expect_Unresolved'Access,
Options_2 => Options_2,
Driver_Name => Driver_Name);
Symbolic_Link_Needed := Lib_Version /= Lib_File;
(Output_File => Lib_Dir & Directory_Separator & Lib_Version,
Objects => Ofiles,
Options =>
- Options &
- Version_Arg &
- Expect_Unresolved'Access &
- Init_Fini.all,
+ Options & Version_Arg & Expect_Unresolved'Access,
Options_2 => Options_2,
Driver_Name => Driver_Name);
Symbolic_Link_Needed :=
return "so";
end DLL_Ext;
+ ----------------
+ -- DLL_Prefix --
+ ----------------
+
+ function DLL_Prefix return String is
+ begin
+ return "lib";
+ end DLL_Prefix;
+
--------------------
-- Dynamic_Option --
--------------------
-- Library_Exists_For --
------------------------
- function Library_Exists_For (Project : Project_Id) return Boolean is
+ function Library_Exists_For
+ (Project : Project_Id;
+ In_Tree : Project_Tree_Ref) return Boolean
+ is
begin
- if not Projects.Table (Project).Library then
+ if not In_Tree.Projects.Table (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 (Projects.Table (Project).Library_Dir);
+ Lib_Dir : constant String :=
+ Get_Name_String
+ (In_Tree.Projects.Table (Project).Library_Dir);
Lib_Name : constant String :=
- Get_Name_String (Projects.Table (Project).Library_Name);
+ Get_Name_String
+ (In_Tree.Projects.Table (Project).Library_Name);
begin
- if Projects.Table (Project).Library_Kind = Static then
+ if In_Tree.Projects.Table (Project).Library_Kind = Static then
return Is_Regular_File
(Lib_Dir & Directory_Separator & "lib" &
- Fil.Ext_To (Lib_Name, Archive_Ext));
+ Fil.Append_To (Lib_Name, Archive_Ext));
else
return Is_Regular_File
(Lib_Dir & Directory_Separator & "lib" &
- Fil.Ext_To (Lib_Name, DLL_Ext));
+ Fil.Append_To (Lib_Name, DLL_Ext));
end if;
end;
end if;
-- Library_File_Name_For --
---------------------------
- function Library_File_Name_For (Project : Project_Id) return Name_Id is
+ function Library_File_Name_For
+ (Project : Project_Id;
+ In_Tree : Project_Tree_Ref) return Name_Id
+ is
begin
- if not Projects.Table (Project).Library then
+ if not In_Tree.Projects.Table (Project).Library then
Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
"for non library project");
return No_Name;
else
declare
Lib_Name : constant String :=
- Get_Name_String (Projects.Table (Project).Library_Name);
+ Get_Name_String
+ (In_Tree.Projects.Table (Project).Library_Name);
begin
Name_Len := 3;
Name_Buffer (1 .. Name_Len) := "lib";
- if Projects.Table (Project).Library_Kind = Static then
- Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
-
+ if In_Tree.Projects.Table (Project).Library_Kind =
+ Static
+ then
+ Add_Str_To_Name_Buffer (Fil.Append_To (Lib_Name, Archive_Ext));
else
- Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+ Add_Str_To_Name_Buffer (Fil.Append_To (Lib_Name, DLL_Ext));
end if;
return Name_Find;