1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- M L I B . T G T -- 6-- -- 7-- B o d y -- 8-- -- 9-- Copyright (C) 2001-2010, AdaCore -- 10-- -- 11-- GNAT is free software; you can redistribute it and/or modify it under -- 12-- terms of the GNU General Public License as published by the Free Soft- -- 13-- ware Foundation; either version 3, or (at your option) any later ver- -- 14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 16-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- 17-- for more details. You should have received a copy of the GNU General -- 18-- Public License distributed with GNAT; see file COPYING3. If not, go to -- 19-- http://www.gnu.org/licenses for a complete copy of the license. -- 20-- -- 21-- GNAT was originally developed by the GNAT team at New York University. -- 22-- Extensive contributions were provided by Ada Core Technologies Inc. -- 23-- -- 24------------------------------------------------------------------------------ 25 26with MLib.Fil; 27with Prj.Com; 28 29with MLib.Tgt.Specific; 30pragma Warnings (Off, MLib.Tgt.Specific); 31-- MLib.Tgt.Specific is with'ed only for elaboration purposes 32 33package body MLib.Tgt is 34 35 --------------------- 36 -- Archive_Builder -- 37 --------------------- 38 39 function Archive_Builder return String is 40 begin 41 return Archive_Builder_Ptr.all; 42 end Archive_Builder; 43 44 ----------------------------- 45 -- Archive_Builder_Default -- 46 ----------------------------- 47 48 function Archive_Builder_Default return String is 49 begin 50 return "ar"; 51 end Archive_Builder_Default; 52 53 ----------------------------- 54 -- Archive_Builder_Options -- 55 ----------------------------- 56 57 function Archive_Builder_Options return String_List_Access is 58 begin 59 return Archive_Builder_Options_Ptr.all; 60 end Archive_Builder_Options; 61 62 ------------------------------------- 63 -- Archive_Builder_Options_Default -- 64 ------------------------------------- 65 66 function Archive_Builder_Options_Default return String_List_Access is 67 begin 68 return new String_List'(1 => new String'("cr")); 69 end Archive_Builder_Options_Default; 70 71 ------------------------------------ 72 -- Archive_Builder_Append_Options -- 73 ------------------------------------ 74 75 function Archive_Builder_Append_Options return String_List_Access is 76 begin 77 return Archive_Builder_Append_Options_Ptr.all; 78 end Archive_Builder_Append_Options; 79 80 -------------------------------------------- 81 -- Archive_Builder_Append_Options_Default -- 82 -------------------------------------------- 83 84 function Archive_Builder_Append_Options_Default return String_List_Access is 85 begin 86 return new String_List'(1 => new String'("q")); 87 end Archive_Builder_Append_Options_Default; 88 89 ----------------- 90 -- Archive_Ext -- 91 ----------------- 92 93 function Archive_Ext return String is 94 begin 95 return Archive_Ext_Ptr.all; 96 end Archive_Ext; 97 98 ------------------------- 99 -- Archive_Ext_Default -- 100 ------------------------- 101 102 function Archive_Ext_Default return String is 103 begin 104 return "a"; 105 end Archive_Ext_Default; 106 107 --------------------- 108 -- Archive_Indexer -- 109 --------------------- 110 111 function Archive_Indexer return String is 112 begin 113 return Archive_Indexer_Ptr.all; 114 end Archive_Indexer; 115 116 ----------------------------- 117 -- Archive_Indexer_Default -- 118 ----------------------------- 119 120 function Archive_Indexer_Default return String is 121 begin 122 return "ranlib"; 123 end Archive_Indexer_Default; 124 125 ----------------------------- 126 -- Archive_Indexer_Options -- 127 ----------------------------- 128 129 function Archive_Indexer_Options return String_List_Access is 130 begin 131 return Archive_Indexer_Options_Ptr.all; 132 end Archive_Indexer_Options; 133 134 ------------------------------------- 135 -- Archive_Indexer_Options_Default -- 136 ------------------------------------- 137 138 function Archive_Indexer_Options_Default return String_List_Access is 139 begin 140 return new String_List (1 .. 0); 141 end Archive_Indexer_Options_Default; 142 143 --------------------------- 144 -- Build_Dynamic_Library -- 145 --------------------------- 146 147 procedure Build_Dynamic_Library 148 (Ofiles : Argument_List; 149 Options : Argument_List; 150 Interfaces : Argument_List; 151 Lib_Filename : String; 152 Lib_Dir : String; 153 Symbol_Data : Symbol_Record; 154 Driver_Name : Name_Id := No_Name; 155 Lib_Version : String := ""; 156 Auto_Init : Boolean := False) 157 is 158 begin 159 Build_Dynamic_Library_Ptr 160 (Ofiles, 161 Options, 162 Interfaces, 163 Lib_Filename, 164 Lib_Dir, 165 Symbol_Data, 166 Driver_Name, 167 Lib_Version, 168 Auto_Init); 169 end Build_Dynamic_Library; 170 171 ------------------------------ 172 -- Default_Symbol_File_Name -- 173 ------------------------------ 174 175 function Default_Symbol_File_Name return String is 176 begin 177 return Default_Symbol_File_Name_Ptr.all; 178 end Default_Symbol_File_Name; 179 180 -------------------------------------- 181 -- Default_Symbol_File_Name_Default -- 182 -------------------------------------- 183 184 function Default_Symbol_File_Name_Default return String is 185 begin 186 return ""; 187 end Default_Symbol_File_Name_Default; 188 189 ------------- 190 -- DLL_Ext -- 191 ------------- 192 193 function DLL_Ext return String is 194 begin 195 return DLL_Ext_Ptr.all; 196 end DLL_Ext; 197 198 --------------------- 199 -- DLL_Ext_Default -- 200 --------------------- 201 202 function DLL_Ext_Default return String is 203 begin 204 return "so"; 205 end DLL_Ext_Default; 206 207 ---------------- 208 -- DLL_Prefix -- 209 ---------------- 210 211 function DLL_Prefix return String is 212 begin 213 return DLL_Prefix_Ptr.all; 214 end DLL_Prefix; 215 216 ------------------------ 217 -- DLL_Prefix_Default -- 218 ------------------------ 219 220 function DLL_Prefix_Default return String is 221 begin 222 return "lib"; 223 end DLL_Prefix_Default; 224 225 -------------------- 226 -- Dynamic_Option -- 227 -------------------- 228 229 function Dynamic_Option return String is 230 begin 231 return Dynamic_Option_Ptr.all; 232 end Dynamic_Option; 233 234 ---------------------------- 235 -- Dynamic_Option_Default -- 236 ---------------------------- 237 238 function Dynamic_Option_Default return String is 239 begin 240 return "-shared"; 241 end Dynamic_Option_Default; 242 243 ------------------- 244 -- Is_Object_Ext -- 245 ------------------- 246 247 function Is_Object_Ext (Ext : String) return Boolean is 248 begin 249 return Is_Object_Ext_Ptr (Ext); 250 end Is_Object_Ext; 251 252 --------------------------- 253 -- Is_Object_Ext_Default -- 254 --------------------------- 255 256 function Is_Object_Ext_Default (Ext : String) return Boolean is 257 begin 258 return Ext = ".o"; 259 end Is_Object_Ext_Default; 260 261 -------------- 262 -- Is_C_Ext -- 263 -------------- 264 265 function Is_C_Ext (Ext : String) return Boolean is 266 begin 267 return Is_C_Ext_Ptr (Ext); 268 end Is_C_Ext; 269 270 ---------------------- 271 -- Is_C_Ext_Default -- 272 ---------------------- 273 274 function Is_C_Ext_Default (Ext : String) return Boolean is 275 begin 276 return Ext = ".c"; 277 end Is_C_Ext_Default; 278 279 -------------------- 280 -- Is_Archive_Ext -- 281 -------------------- 282 283 function Is_Archive_Ext (Ext : String) return Boolean is 284 begin 285 return Is_Archive_Ext_Ptr (Ext); 286 end Is_Archive_Ext; 287 288 ---------------------------- 289 -- Is_Archive_Ext_Default -- 290 ---------------------------- 291 292 function Is_Archive_Ext_Default (Ext : String) return Boolean is 293 begin 294 return Ext = ".a"; 295 end Is_Archive_Ext_Default; 296 297 ------------- 298 -- Libgnat -- 299 ------------- 300 301 function Libgnat return String is 302 begin 303 return Libgnat_Ptr.all; 304 end Libgnat; 305 306 --------------------- 307 -- Libgnat_Default -- 308 --------------------- 309 310 function Libgnat_Default return String is 311 begin 312 return "libgnat.a"; 313 end Libgnat_Default; 314 315 ------------------------ 316 -- Library_Exists_For -- 317 ------------------------ 318 319 function Library_Exists_For 320 (Project : Project_Id; 321 In_Tree : Project_Tree_Ref) return Boolean 322 is 323 begin 324 return Library_Exists_For_Ptr (Project, In_Tree); 325 end Library_Exists_For; 326 327 -------------------------------- 328 -- Library_Exists_For_Default -- 329 -------------------------------- 330 331 function Library_Exists_For_Default 332 (Project : Project_Id; 333 In_Tree : Project_Tree_Ref) return Boolean 334 is 335 pragma Unreferenced (In_Tree); 336 337 begin 338 if not Project.Library then 339 Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " & 340 "for non library project"); 341 return False; 342 343 else 344 declare 345 Lib_Dir : constant String := 346 Get_Name_String (Project.Library_Dir.Display_Name); 347 Lib_Name : constant String := 348 Get_Name_String (Project.Library_Name); 349 350 begin 351 if Project.Library_Kind = Static then 352 return Is_Regular_File 353 (Lib_Dir & Directory_Separator & "lib" & 354 Fil.Append_To (Lib_Name, Archive_Ext)); 355 356 else 357 return Is_Regular_File 358 (Lib_Dir & Directory_Separator & DLL_Prefix & 359 Fil.Append_To (Lib_Name, DLL_Ext)); 360 end if; 361 end; 362 end if; 363 end Library_Exists_For_Default; 364 365 --------------------------- 366 -- Library_File_Name_For -- 367 --------------------------- 368 369 function Library_File_Name_For 370 (Project : Project_Id; 371 In_Tree : Project_Tree_Ref) return File_Name_Type 372 is 373 begin 374 return Library_File_Name_For_Ptr (Project, In_Tree); 375 end Library_File_Name_For; 376 377 ----------------------------------- 378 -- Library_File_Name_For_Default -- 379 ----------------------------------- 380 381 function Library_File_Name_For_Default 382 (Project : Project_Id; 383 In_Tree : Project_Tree_Ref) return File_Name_Type 384 is 385 pragma Unreferenced (In_Tree); 386 begin 387 if not Project.Library then 388 Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " & 389 "for non library project"); 390 return No_File; 391 392 else 393 declare 394 Lib_Name : constant String := 395 Get_Name_String (Project.Library_Name); 396 397 begin 398 if Project.Library_Kind = 399 Static 400 then 401 Name_Len := 3; 402 Name_Buffer (1 .. Name_Len) := "lib"; 403 Add_Str_To_Name_Buffer (Fil.Append_To (Lib_Name, Archive_Ext)); 404 else 405 Name_Len := 0; 406 Add_Str_To_Name_Buffer (DLL_Prefix); 407 Add_Str_To_Name_Buffer (Fil.Append_To (Lib_Name, DLL_Ext)); 408 end if; 409 410 return Name_Find; 411 end; 412 end if; 413 end Library_File_Name_For_Default; 414 415 -------------------------------------- 416 -- Library_Major_Minor_Id_Supported -- 417 -------------------------------------- 418 419 function Library_Major_Minor_Id_Supported return Boolean is 420 begin 421 return Library_Major_Minor_Id_Supported_Ptr.all; 422 end Library_Major_Minor_Id_Supported; 423 424 ---------------------------------------------- 425 -- Library_Major_Minor_Id_Supported_Default -- 426 ---------------------------------------------- 427 428 function Library_Major_Minor_Id_Supported_Default return Boolean is 429 begin 430 return True; 431 end Library_Major_Minor_Id_Supported_Default; 432 433 ---------------- 434 -- Object_Ext -- 435 ---------------- 436 437 function Object_Ext return String is 438 begin 439 return Object_Ext_Ptr.all; 440 end Object_Ext; 441 442 ------------------------ 443 -- Object_Ext_Default -- 444 ------------------------ 445 446 function Object_Ext_Default return String is 447 begin 448 return "o"; 449 end Object_Ext_Default; 450 451 ---------------- 452 -- PIC_Option -- 453 ---------------- 454 455 function PIC_Option return String is 456 begin 457 return PIC_Option_Ptr.all; 458 end PIC_Option; 459 460 ------------------------ 461 -- PIC_Option_Default -- 462 ------------------------ 463 464 function PIC_Option_Default return String is 465 begin 466 return "-fPIC"; 467 end PIC_Option_Default; 468 469 ----------------------------------------------- 470 -- Standalone_Library_Auto_Init_Is_Supported -- 471 ----------------------------------------------- 472 473 function Standalone_Library_Auto_Init_Is_Supported return Boolean is 474 begin 475 return Standalone_Library_Auto_Init_Is_Supported_Ptr.all; 476 end Standalone_Library_Auto_Init_Is_Supported; 477 478 ------------------------------------------------------- 479 -- Standalone_Library_Auto_Init_Is_Supported_Default -- 480 ------------------------------------------------------- 481 482 function Standalone_Library_Auto_Init_Is_Supported_Default return Boolean is 483 begin 484 return True; 485 end Standalone_Library_Auto_Init_Is_Supported_Default; 486 487 --------------------------- 488 -- Support_For_Libraries -- 489 --------------------------- 490 491 function Support_For_Libraries return Library_Support is 492 begin 493 return Support_For_Libraries_Ptr.all; 494 end Support_For_Libraries; 495 496 ----------------------------------- 497 -- Support_For_Libraries_Default -- 498 ----------------------------------- 499 500 function Support_For_Libraries_Default return Library_Support is 501 begin 502 return Full; 503 end Support_For_Libraries_Default; 504 505end MLib.Tgt; 506