aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNicolas Setton <setton@act-europe.fr>2004-10-27 14:27:53 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2004-10-27 14:27:53 +0200
commitc4820158f5b080d4aadd9e0ec2ba0dc6377d7ca1 (patch)
treeb10661d75b3825e90616a0f19dcab901c24cc3d5 /gcc
parent41cbab340832a48787eee35753755f2b3f4ec8fd (diff)
downloadgcc-c4820158f5b080d4aadd9e0ec2ba0dc6377d7ca1.zip
gcc-c4820158f5b080d4aadd9e0ec2ba0dc6377d7ca1.tar.gz
gcc-c4820158f5b080d4aadd9e0ec2ba0dc6377d7ca1.tar.bz2
mlib-tgt-darwin.adb: New file.
2004-10-26 Nicolas Setton <setton@act-europe.fr> * mlib-tgt-darwin.adb: New file. * mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb, mlib-tgt-hpux.adb, mlib-tgt-linux.adb, mlib-tgt-solaris.adb, mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb, mlib-tgt-mingw.adb, mlib-tgt-vxworks.adb (Archive_Indexer_Options): New subprogram body. * Makefile.in: Add support for building shared libraries under Darwin. (EXTRA_GNATRTL_NONTASKING_OBJS, ppc-vxworks): Add s-vxwexc.o, containing the low level EH init subprogram to be called from __gnat_initialize. * mlib-tgt.ads, mlib-tgt.adb (Archive_Indexer_Options): New subprogram, indicates which options to pass to the archive indexer. * mlib-utl.adb: Add support for calling ranlib with additional options. This is needed for instance under Mac OS X. (Ranlib_Options): New global variable, used to store the potential options to pass to ranlib. (Ar): Use Ranlib_Options when spawning ranlib. (Initialize): Set the value of ranlib option. From-SVN: r89639
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/Makefile.in32
-rw-r--r--gcc/ada/mlib-tgt-aix.adb9
-rw-r--r--gcc/ada/mlib-tgt-darwin.adb366
-rw-r--r--gcc/ada/mlib-tgt-hpux.adb9
-rw-r--r--gcc/ada/mlib-tgt-irix.adb9
-rw-r--r--gcc/ada/mlib-tgt-linux.adb9
-rw-r--r--gcc/ada/mlib-tgt-mingw.adb9
-rw-r--r--gcc/ada/mlib-tgt-solaris.adb9
-rw-r--r--gcc/ada/mlib-tgt-tru64.adb9
-rw-r--r--gcc/ada/mlib-tgt-vms-alpha.adb9
-rw-r--r--gcc/ada/mlib-tgt-vms-ia64.adb9
-rw-r--r--gcc/ada/mlib-tgt-vxworks.adb9
-rw-r--r--gcc/ada/mlib-tgt.adb9
-rw-r--r--gcc/ada/mlib-tgt.ads3
-rw-r--r--gcc/ada/mlib-utl.adb21
15 files changed, 511 insertions, 10 deletions
diff --git a/gcc/ada/Makefile.in b/gcc/ada/Makefile.in
index 4c84b7c..45737fa 100644
--- a/gcc/ada/Makefile.in
+++ b/gcc/ada/Makefile.in
@@ -559,7 +559,7 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
s-tfsetr.adb<s-tfsetr-vxworks.adb
endif
- EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
+ EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
endif
@@ -1403,6 +1403,14 @@ ifeq ($(strip $(filter-out powerpc darwin%,$(arch) $(osys))),)
s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
g-soccon.ads<g-soccon-aix.ads \
system.ads<system-darwin-ppc.ads
+
+ TOOLS_TARGET_PAIRS = \
+ mlib-tgt.adb<mlib-tgt-darwin.adb
+
+ GNATLIB_SHARED = gnatlib-shared-darwin
+ SO_OPTS = -Wl,-flat_namespace
+ RANLIB = ranlib -c
+ LIBRARY_VERSION := $(LIB_VERSION)
endif
# The runtime library for gnat comprises two directories. One contains the
@@ -1874,6 +1882,28 @@ gnatlib-shared-win32:
$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
+gnatlib-shared-darwin:
+ $(MAKE) $(FLAGS_TO_PASS) \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+ GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+ gnatlib
+ $(RM) rts/libgnat$(soext) rts/libgnarl$(soext)
+ cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
+ -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
+ $(SO_OPTS) \
+ $(MISCLIB) -lm
+ cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
+ -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ $(GNATRTL_TASKING_OBJS) \
+ $(SO_OPTS) \
+ $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
+ cd rts; $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ libgnat$(soext)
+ cd rts; $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ libgnarl$(soext)
+
gnatlib-shared-vms:
$(MAKE) $(FLAGS_TO_PASS) \
GNATLIBFLAGS="$(GNATLIBFLAGS)" \
diff --git a/gcc/ada/mlib-tgt-aix.adb b/gcc/ada/mlib-tgt-aix.adb
index a0afe87..004cab8 100644
--- a/gcc/ada/mlib-tgt-aix.adb
+++ b/gcc/ada/mlib-tgt-aix.adb
@@ -110,6 +110,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-darwin.adb b/gcc/ada/mlib-tgt-darwin.adb
new file mode 100644
index 0000000..96a41e4
--- /dev/null
+++ b/gcc/ada/mlib-tgt-darwin.adb
@@ -0,0 +1,366 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- M L I B . T G T --
+-- (Darwin Version) --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 2001-2004, 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- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- 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. --
+-- --
+-- 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 Darwin version of the body.
+
+with MLib.Fil;
+with MLib.Utl;
+with Namet; use Namet;
+with Opt;
+with Output; use Output;
+with Prj.Com;
+with System;
+
+package body MLib.Tgt is
+
+ use GNAT;
+ use MLib;
+
+ 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 --
+ ---------------------
+
+ function Archive_Builder return String is
+ begin
+ return "ar";
+ end Archive_Builder;
+
+ -----------------------------
+ -- Archive_Builder_Options --
+ -----------------------------
+
+ function Archive_Builder_Options return String_List_Access is
+ begin
+ return new String_List'(1 => new String'("cr"));
+ end Archive_Builder_Options;
+
+ -----------------
+ -- Archive_Ext --
+ -----------------
+
+ function Archive_Ext return String is
+ begin
+ return "a";
+ end Archive_Ext;
+
+ ---------------------
+ -- Archive_Indexer --
+ ---------------------
+
+ function Archive_Indexer return String is
+ begin
+ return "ranlib";
+ end Archive_Indexer;
+
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List'(1 => new String'("-c"));
+ end Archive_Indexer_Options;
+
+ ---------------------------
+ -- Build_Dynamic_Library --
+ ---------------------------
+
+ 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;
+ Symbol_Data : Symbol_Record;
+ Driver_Name : Name_Id := No_Name;
+ Lib_Version : String := "";
+ Auto_Init : Boolean := False)
+ is
+ pragma Unreferenced (Foreign);
+ pragma Unreferenced (Afiles);
+ pragma Unreferenced (Interfaces);
+ pragma Unreferenced (Symbol_Data);
+
+ Lib_File : constant String :=
+ Lib_Dir & Directory_Separator & "lib" &
+ Fil.Ext_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 ");
+ Write_Line (Lib_File);
+ end if;
+
+ -- 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 & Init_Fini.all,
+ Driver_Name => Driver_Name,
+ Options_2 => Options_2);
+
+ else
+ Version_Arg := new String'("-Wl,-flat_namespace"); -- ???
+
+ if Is_Absolute_Path (Lib_Version) then
+ Utl.Gcc
+ (Output_File => Lib_Version,
+ Objects => Ofiles,
+ Options => Options & Version_Arg & Init_Fini.all,
+ Driver_Name => Driver_Name,
+ Options_2 => Options_2);
+ Symbolic_Link_Needed := Lib_Version /= Lib_File;
+
+ else
+ Utl.Gcc
+ (Output_File => Lib_Dir & Directory_Separator & Lib_Version,
+ Objects => Ofiles,
+ Options => Options & Version_Arg & Init_Fini.all,
+ Driver_Name => Driver_Name,
+ Options_2 => Options_2);
+ 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;
+ end if;
+ end Build_Dynamic_Library;
+
+ -------------
+ -- DLL_Ext --
+ -------------
+
+ function DLL_Ext return String is
+ begin
+ return "dylib";
+ end DLL_Ext;
+
+ --------------------
+ -- Dynamic_Option --
+ --------------------
+
+ function Dynamic_Option return String is
+ begin
+ return "-dynamiclib";
+ end Dynamic_Option;
+
+ -------------------
+ -- Is_Object_Ext --
+ -------------------
+
+ function Is_Object_Ext (Ext : String) return Boolean is
+ begin
+ return Ext = ".o";
+ end Is_Object_Ext;
+
+ --------------
+ -- Is_C_Ext --
+ --------------
+
+ function Is_C_Ext (Ext : String) return Boolean is
+ begin
+ return Ext = ".c";
+ end Is_C_Ext;
+
+ --------------------
+ -- Is_Archive_Ext --
+ --------------------
+
+ function Is_Archive_Ext (Ext : String) return Boolean is
+ begin
+ return Ext = ".a" or else Ext = ".dyld";
+ end Is_Archive_Ext;
+
+ -------------
+ -- Libgnat --
+ -------------
+
+ function Libgnat return String is
+ begin
+ return "libgnat.a";
+ end Libgnat;
+
+ ------------------------
+ -- Library_Exists_For --
+ ------------------------
+
+ function Library_Exists_For (Project : Project_Id) return Boolean is
+ begin
+ if not 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_Name : constant String :=
+ Get_Name_String (Projects.Table (Project).Library_Name);
+
+ begin
+ if Projects.Table (Project).Library_Kind = Static then
+ return Is_Regular_File
+ (Lib_Dir & Directory_Separator & "lib" &
+ Fil.Ext_To (Lib_Name, Archive_Ext));
+
+ else
+ return Is_Regular_File
+ (Lib_Dir & Directory_Separator & "lib" &
+ Fil.Ext_To (Lib_Name, DLL_Ext));
+ end if;
+ end;
+ end if;
+ end Library_Exists_For;
+
+ ---------------------------
+ -- Library_File_Name_For --
+ ---------------------------
+
+ function Library_File_Name_For (Project : Project_Id) return Name_Id is
+ begin
+ if not 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);
+
+ 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));
+
+ else
+ Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
+ end if;
+
+ return Name_Find;
+ end;
+ end if;
+ end Library_File_Name_For;
+
+ ----------------
+ -- Object_Ext --
+ ----------------
+
+ function Object_Ext return String is
+ begin
+ return "o";
+ end Object_Ext;
+
+ ----------------
+ -- PIC_Option --
+ ----------------
+
+ function PIC_Option return String is
+ begin
+ return "-fPIC";
+ end PIC_Option;
+
+ -----------------------------------------------
+ -- Standalone_Library_Auto_Init_Is_Supported --
+ -----------------------------------------------
+
+ function Standalone_Library_Auto_Init_Is_Supported return Boolean is
+ begin
+ return True;
+ end Standalone_Library_Auto_Init_Is_Supported;
+
+ ---------------------------
+ -- Support_For_Libraries --
+ ---------------------------
+
+ function Support_For_Libraries return Library_Support is
+ begin
+ return Full;
+ end Support_For_Libraries;
+
+end MLib.Tgt;
diff --git a/gcc/ada/mlib-tgt-hpux.adb b/gcc/ada/mlib-tgt-hpux.adb
index a438b76..d10becf 100644
--- a/gcc/ada/mlib-tgt-hpux.adb
+++ b/gcc/ada/mlib-tgt-hpux.adb
@@ -90,6 +90,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-irix.adb b/gcc/ada/mlib-tgt-irix.adb
index 25fc1c1..eee46a1 100644
--- a/gcc/ada/mlib-tgt-irix.adb
+++ b/gcc/ada/mlib-tgt-irix.adb
@@ -91,6 +91,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-linux.adb b/gcc/ada/mlib-tgt-linux.adb
index a3b82a4..71584f2 100644
--- a/gcc/ada/mlib-tgt-linux.adb
+++ b/gcc/ada/mlib-tgt-linux.adb
@@ -94,6 +94,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-mingw.adb b/gcc/ada/mlib-tgt-mingw.adb
index 0dddb89..140bbcc 100644
--- a/gcc/ada/mlib-tgt-mingw.adb
+++ b/gcc/ada/mlib-tgt-mingw.adb
@@ -82,6 +82,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-solaris.adb b/gcc/ada/mlib-tgt-solaris.adb
index 4052deb..7f588dd 100644
--- a/gcc/ada/mlib-tgt-solaris.adb
+++ b/gcc/ada/mlib-tgt-solaris.adb
@@ -88,6 +88,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-tru64.adb b/gcc/ada/mlib-tgt-tru64.adb
index 89be1ed..37f961a 100644
--- a/gcc/ada/mlib-tgt-tru64.adb
+++ b/gcc/ada/mlib-tgt-tru64.adb
@@ -96,6 +96,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-vms-alpha.adb b/gcc/ada/mlib-tgt-vms-alpha.adb
index 07f06cf..bf96371 100644
--- a/gcc/ada/mlib-tgt-vms-alpha.adb
+++ b/gcc/ada/mlib-tgt-vms-alpha.adb
@@ -118,6 +118,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-vms-ia64.adb b/gcc/ada/mlib-tgt-vms-ia64.adb
index c4bd070..cad8ae1 100644
--- a/gcc/ada/mlib-tgt-vms-ia64.adb
+++ b/gcc/ada/mlib-tgt-vms-ia64.adb
@@ -118,6 +118,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt-vxworks.adb b/gcc/ada/mlib-tgt-vxworks.adb
index a304b51..51b911a 100644
--- a/gcc/ada/mlib-tgt-vxworks.adb
+++ b/gcc/ada/mlib-tgt-vxworks.adb
@@ -81,6 +81,15 @@ package body MLib.Tgt is
return "ranlib" & Get_Target_Suffix;
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt.adb b/gcc/ada/mlib-tgt.adb
index a31adbd..267177b 100644
--- a/gcc/ada/mlib-tgt.adb
+++ b/gcc/ada/mlib-tgt.adb
@@ -67,6 +67,15 @@ package body MLib.Tgt is
return "ranlib";
end Archive_Indexer;
+ -----------------------------
+ -- Archive_Indexer_Options --
+ -----------------------------
+
+ function Archive_Indexer_Options return String_List_Access is
+ begin
+ return new String_List (1 .. 0);
+ end Archive_Indexer_Options;
+
---------------------------
-- Build_Dynamic_Library --
---------------------------
diff --git a/gcc/ada/mlib-tgt.ads b/gcc/ada/mlib-tgt.ads
index 9b1a71a..4373dee 100644
--- a/gcc/ada/mlib-tgt.ads
+++ b/gcc/ada/mlib-tgt.ads
@@ -64,6 +64,9 @@ package MLib.Tgt is
-- Returns the name of the program, if any, that generates an index
-- to the contents of an archive, usually "ranlib".
+ function Archive_Indexer_Options return String_List_Access;
+ -- A list of options to invoke the Archive_Indexer, usually empty.
+
function Dynamic_Option return String;
-- gcc option to create a dynamic library.
-- For Unix, returns "-shared", for Windows returns "-mdll".
diff --git a/gcc/ada/mlib-utl.adb b/gcc/ada/mlib-utl.adb
index f61386a..4d21c2f 100644
--- a/gcc/ada/mlib-utl.adb
+++ b/gcc/ada/mlib-utl.adb
@@ -36,17 +36,18 @@ with GNAT; use GNAT;
package body MLib.Utl is
- Initialized : Boolean := False;
+ Initialized : Boolean := False;
- Gcc_Name : constant String := "gcc";
- Gcc_Exec : OS_Lib.String_Access;
+ Gcc_Name : constant String := "gcc";
+ Gcc_Exec : OS_Lib.String_Access;
- Ar_Name : OS_Lib.String_Access;
- Ar_Exec : OS_Lib.String_Access;
- Ar_Options : OS_Lib.String_List_Access;
+ Ar_Name : OS_Lib.String_Access;
+ Ar_Exec : OS_Lib.String_Access;
+ Ar_Options : OS_Lib.String_List_Access;
- Ranlib_Name : OS_Lib.String_Access;
- Ranlib_Exec : OS_Lib.String_Access := null;
+ Ranlib_Name : OS_Lib.String_Access;
+ Ranlib_Exec : OS_Lib.String_Access := null;
+ Ranlib_Options : OS_Lib.String_List_Access := null;
procedure Initialize;
-- Look for the tools in the path and record the full path for each one
@@ -116,7 +117,7 @@ package body MLib.Utl is
OS_Lib.Spawn
(Ranlib_Exec.all,
- (1 => Arguments (Ar_Options'Length + 1)),
+ Ranlib_Options.all & (Arguments (Ar_Options'Length + 1)),
Success);
if not Success then
@@ -284,6 +285,8 @@ package body MLib.Utl is
Write_Line (Ranlib_Exec.all);
end if;
end if;
+
+ Ranlib_Options := Archive_Indexer_Options;
end if;
end Initialize;