1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- M L I B . T G T . S P E C I F I C -- 6-- (Solaris Version) -- 7-- -- 8-- B o d y -- 9-- -- 10-- Copyright (C) 2002-2008, Free Software Foundation, Inc. -- 11-- -- 12-- GNAT is free software; you can redistribute it and/or modify it under -- 13-- terms of the GNU General Public License as published by the Free Soft- -- 14-- ware Foundation; either version 3, or (at your option) any later ver- -- 15-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 16-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 17-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- 18-- for more details. You should have received a copy of the GNU General -- 19-- Public License distributed with GNAT; see file COPYING3. If not, go to -- 20-- http://www.gnu.org/licenses for a complete copy of the license. -- 21-- -- 22-- GNAT was originally developed by the GNAT team at New York University. -- 23-- Extensive contributions were provided by Ada Core Technologies Inc. -- 24-- -- 25------------------------------------------------------------------------------ 26 27-- This is the Solaris version of the body 28 29with MLib.Fil; 30with MLib.Utl; 31with Opt; 32with Output; use Output; 33 34package body MLib.Tgt.Specific is 35 36 -- Non default subprograms 37 38 procedure Build_Dynamic_Library 39 (Ofiles : Argument_List; 40 Options : Argument_List; 41 Interfaces : Argument_List; 42 Lib_Filename : String; 43 Lib_Dir : String; 44 Symbol_Data : Symbol_Record; 45 Driver_Name : Name_Id := No_Name; 46 Lib_Version : String := ""; 47 Auto_Init : Boolean := False); 48 49 function Is_Archive_Ext (Ext : String) return Boolean; 50 51 --------------------------- 52 -- Build_Dynamic_Library -- 53 --------------------------- 54 55 procedure Build_Dynamic_Library 56 (Ofiles : Argument_List; 57 Options : Argument_List; 58 Interfaces : Argument_List; 59 Lib_Filename : String; 60 Lib_Dir : String; 61 Symbol_Data : Symbol_Record; 62 Driver_Name : Name_Id := No_Name; 63 Lib_Version : String := ""; 64 Auto_Init : Boolean := False) 65 is 66 pragma Unreferenced (Interfaces); 67 pragma Unreferenced (Symbol_Data); 68 pragma Unreferenced (Auto_Init); 69 70 Lib_File : constant String := 71 "lib" & Fil.Append_To (Lib_Filename, DLL_Ext); 72 73 Lib_Path : constant String := 74 Lib_Dir & Directory_Separator & Lib_File; 75 76 Version_Arg : String_Access; 77 Symbolic_Link_Needed : Boolean := False; 78 79 begin 80 if Opt.Verbose_Mode then 81 Write_Str ("building relocatable shared library "); 82 Write_Line (Lib_Path); 83 end if; 84 85 if Lib_Version = "" then 86 Utl.Gcc 87 (Output_File => Lib_Path, 88 Objects => Ofiles, 89 Options => Options, 90 Options_2 => No_Argument_List, 91 Driver_Name => Driver_Name); 92 93 else 94 declare 95 Maj_Version : constant String := 96 Major_Id_Name (Lib_File, Lib_Version); 97 begin 98 if Maj_Version'Length /= 0 then 99 Version_Arg := new String'("-Wl,-h," & Maj_Version); 100 101 else 102 Version_Arg := new String'("-Wl,-h," & Lib_Version); 103 end if; 104 105 if Is_Absolute_Path (Lib_Version) then 106 Utl.Gcc 107 (Output_File => Lib_Version, 108 Objects => Ofiles, 109 Options => Options & Version_Arg, 110 Options_2 => No_Argument_List, 111 Driver_Name => Driver_Name); 112 Symbolic_Link_Needed := Lib_Version /= Lib_Path; 113 114 else 115 Utl.Gcc 116 (Output_File => Lib_Dir & Directory_Separator & Lib_Version, 117 Objects => Ofiles, 118 Options => Options & Version_Arg, 119 Options_2 => No_Argument_List, 120 Driver_Name => Driver_Name); 121 Symbolic_Link_Needed := 122 Lib_Dir & Directory_Separator & Lib_Version /= Lib_Path; 123 end if; 124 125 if Symbolic_Link_Needed then 126 Create_Sym_Links 127 (Lib_Path, Lib_Version, Lib_Dir, Maj_Version); 128 end if; 129 end; 130 end if; 131 end Build_Dynamic_Library; 132 133 -------------------- 134 -- Is_Archive_Ext -- 135 -------------------- 136 137 function Is_Archive_Ext (Ext : String) return Boolean is 138 begin 139 return Ext = ".a" or else Ext = ".so"; 140 end Is_Archive_Ext; 141 142begin 143 Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access; 144 Is_Archive_Ext_Ptr := Is_Archive_Ext'Access; 145end MLib.Tgt.Specific; 146