aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3/gcc/ada/mdll-utl.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.4.3/gcc/ada/mdll-utl.adb')
-rw-r--r--gcc-4.4.3/gcc/ada/mdll-utl.adb366
1 files changed, 0 insertions, 366 deletions
diff --git a/gcc-4.4.3/gcc/ada/mdll-utl.adb b/gcc-4.4.3/gcc/ada/mdll-utl.adb
deleted file mode 100644
index 85bc2a3a6..000000000
--- a/gcc-4.4.3/gcc/ada/mdll-utl.adb
+++ /dev/null
@@ -1,366 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- M D L L . T O O L S --
--- --
--- B o d y --
--- --
--- Copyright (C) 1992-2008, 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 3, 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 COPYING3. If not, go to --
--- http://www.gnu.org/licenses for a complete copy of the license. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- Interface to externals tools used to build DLL and import libraries
-
-with Ada.Text_IO;
-with Ada.Exceptions;
-
-with GNAT.Directory_Operations;
-with Osint;
-
-package body MDLL.Utl is
-
- use Ada;
- use GNAT;
-
- Dlltool_Name : constant String := "dlltool";
- Dlltool_Exec : OS_Lib.String_Access;
-
- Gcc_Name : constant String := "gcc";
- Gcc_Exec : OS_Lib.String_Access;
-
- Gnatbind_Name : constant String := "gnatbind";
- Gnatbind_Exec : OS_Lib.String_Access;
-
- Gnatlink_Name : constant String := "gnatlink";
- Gnatlink_Exec : OS_Lib.String_Access;
-
- procedure Print_Command
- (Tool_Name : String;
- Arguments : OS_Lib.Argument_List);
- -- display the command run when in Verbose mode
-
- -------------------
- -- Print_Command --
- -------------------
-
- procedure Print_Command
- (Tool_Name : String;
- Arguments : OS_Lib.Argument_List)
- is
- begin
- if Verbose then
- Text_IO.Put (Tool_Name);
- for K in Arguments'Range loop
- Text_IO.Put (" " & Arguments (K).all);
- end loop;
- Text_IO.New_Line;
- end if;
- end Print_Command;
-
- -------------
- -- Dlltool --
- -------------
-
- procedure Dlltool
- (Def_Filename : String;
- DLL_Name : String;
- Library : String;
- Exp_Table : String := "";
- Base_File : String := "";
- Build_Import : Boolean)
- is
- Arguments : OS_Lib.Argument_List (1 .. 11);
- A : Positive;
-
- Success : Boolean;
-
- Def_Opt : aliased String := "--def";
- Def_V : aliased String := Def_Filename;
- Dll_Opt : aliased String := "--dllname";
- Dll_V : aliased String := DLL_Name;
- Lib_Opt : aliased String := "--output-lib";
- Lib_V : aliased String := Library;
- Exp_Opt : aliased String := "--output-exp";
- Exp_V : aliased String := Exp_Table;
- Bas_Opt : aliased String := "--base-file";
- Bas_V : aliased String := Base_File;
- No_Suf_Opt : aliased String := "-k";
-
- begin
- Arguments (1 .. 4) := (1 => Def_Opt'Unchecked_Access,
- 2 => Def_V'Unchecked_Access,
- 3 => Dll_Opt'Unchecked_Access,
- 4 => Dll_V'Unchecked_Access);
- A := 4;
-
- if Kill_Suffix then
- A := A + 1;
- Arguments (A) := No_Suf_Opt'Unchecked_Access;
- end if;
-
- if Library /= "" and then Build_Import then
- A := A + 1;
- Arguments (A) := Lib_Opt'Unchecked_Access;
- A := A + 1;
- Arguments (A) := Lib_V'Unchecked_Access;
- end if;
-
- if Exp_Table /= "" then
- A := A + 1;
- Arguments (A) := Exp_Opt'Unchecked_Access;
- A := A + 1;
- Arguments (A) := Exp_V'Unchecked_Access;
- end if;
-
- if Base_File /= "" then
- A := A + 1;
- Arguments (A) := Bas_Opt'Unchecked_Access;
- A := A + 1;
- Arguments (A) := Bas_V'Unchecked_Access;
- end if;
-
- Print_Command ("dlltool", Arguments (1 .. A));
-
- OS_Lib.Spawn (Dlltool_Exec.all, Arguments (1 .. A), Success);
-
- if not Success then
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Dlltool_Name & " execution error.");
- end if;
- end Dlltool;
-
- ---------
- -- Gcc --
- ---------
-
- procedure Gcc
- (Output_File : String;
- Files : Argument_List;
- Options : Argument_List;
- Base_File : String := "";
- Build_Lib : Boolean := False)
- is
- use Osint;
-
- Arguments : OS_Lib.Argument_List
- (1 .. 5 + Files'Length + Options'Length);
- A : Natural := 0;
-
- Success : Boolean;
- C_Opt : aliased String := "-c";
- Out_Opt : aliased String := "-o";
- Out_V : aliased String := Output_File;
- Bas_Opt : aliased String := "-Wl,--base-file," & Base_File;
- Lib_Opt : aliased String := "-mdll";
- Lib_Dir : aliased String := "-L" & Object_Dir_Default_Prefix;
-
- begin
- A := A + 1;
- if Build_Lib then
- Arguments (A) := Lib_Opt'Unchecked_Access;
- else
- Arguments (A) := C_Opt'Unchecked_Access;
- end if;
-
- A := A + 1;
- Arguments (A .. A + 2) := (Out_Opt'Unchecked_Access,
- Out_V'Unchecked_Access,
- Lib_Dir'Unchecked_Access);
- A := A + 2;
-
- if Base_File /= "" then
- A := A + 1;
- Arguments (A) := Bas_Opt'Unchecked_Access;
- end if;
-
- A := A + 1;
- Arguments (A .. A + Files'Length - 1) := Files;
- A := A + Files'Length - 1;
-
- if Build_Lib then
- A := A + 1;
- Arguments (A .. A + Options'Length - 1) := Options;
- A := A + Options'Length - 1;
- else
- declare
- Largs : Argument_List (Options'Range);
- L : Natural := Largs'First - 1;
- begin
- for K in Options'Range loop
- if Options (K) (1 .. 2) /= "-l" then
- L := L + 1;
- Largs (L) := Options (K);
- end if;
- end loop;
- A := A + 1;
- Arguments (A .. A + L - 1) := Largs (1 .. L);
- A := A + L - 1;
- end;
- end if;
-
- Print_Command ("gcc", Arguments (1 .. A));
-
- OS_Lib.Spawn (Gcc_Exec.all, Arguments (1 .. A), Success);
-
- if not Success then
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Gcc_Name & " execution error.");
- end if;
- end Gcc;
-
- --------------
- -- Gnatbind --
- --------------
-
- procedure Gnatbind
- (Alis : Argument_List;
- Args : Argument_List := Null_Argument_List)
- is
- Arguments : OS_Lib.Argument_List (1 .. 1 + Alis'Length + Args'Length);
- Success : Boolean;
-
- No_Main_Opt : aliased String := "-n";
-
- begin
- Arguments (1) := No_Main_Opt'Unchecked_Access;
- Arguments (2 .. 1 + Alis'Length) := Alis;
- Arguments (2 + Alis'Length .. Arguments'Last) := Args;
-
- Print_Command ("gnatbind", Arguments);
-
- OS_Lib.Spawn (Gnatbind_Exec.all, Arguments, Success);
-
- -- Delete binder files on failure
-
- if not Success then
- declare
- Base_Name : constant String :=
- Directory_Operations.Base_Name (Alis (Alis'First).all, ".ali");
- begin
- OS_Lib.Delete_File ("b~" & Base_Name & ".ads", Success);
- OS_Lib.Delete_File ("b~" & Base_Name & ".adb", Success);
- end;
-
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Gnatbind_Name & " execution error.");
- end if;
- end Gnatbind;
-
- --------------
- -- Gnatlink --
- --------------
-
- procedure Gnatlink
- (Ali : String;
- Args : Argument_List := Null_Argument_List)
- is
- Arguments : OS_Lib.Argument_List (1 .. 1 + Args'Length);
- Success : Boolean;
-
- Ali_Name : aliased String := Ali;
-
- begin
- Arguments (1) := Ali_Name'Unchecked_Access;
- Arguments (2 .. Arguments'Last) := Args;
-
- Print_Command ("gnatlink", Arguments);
-
- OS_Lib.Spawn (Gnatlink_Exec.all, Arguments, Success);
-
- if not Success then
- -- Delete binder files
- declare
- Base_Name : constant String :=
- Directory_Operations.Base_Name (Ali, ".ali");
- begin
- OS_Lib.Delete_File ("b~" & Base_Name & ".ads", Success);
- OS_Lib.Delete_File ("b~" & Base_Name & ".adb", Success);
- OS_Lib.Delete_File ("b~" & Base_Name & ".ali", Success);
- OS_Lib.Delete_File ("b~" & Base_Name & ".o", Success);
- end;
-
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Gnatlink_Name & " execution error.");
- end if;
- end Gnatlink;
-
- ------------
- -- Locate --
- ------------
-
- procedure Locate is
- use type OS_Lib.String_Access;
- begin
- -- dlltool
-
- if Dlltool_Exec = null then
- Dlltool_Exec := OS_Lib.Locate_Exec_On_Path (Dlltool_Name);
-
- if Dlltool_Exec = null then
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Dlltool_Name & " not found in path");
-
- elsif Verbose then
- Text_IO.Put_Line ("using " & Dlltool_Exec.all);
- end if;
- end if;
-
- -- gcc
-
- if Gcc_Exec = null then
- Gcc_Exec := OS_Lib.Locate_Exec_On_Path (Gcc_Name);
-
- if Gcc_Exec = null then
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Gcc_Name & " not found in path");
-
- elsif Verbose then
- Text_IO.Put_Line ("using " & Gcc_Exec.all);
- end if;
- end if;
-
- -- gnatbind
-
- if Gnatbind_Exec = null then
- Gnatbind_Exec := OS_Lib.Locate_Exec_On_Path (Gnatbind_Name);
-
- if Gnatbind_Exec = null then
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Gnatbind_Name & " not found in path");
-
- elsif Verbose then
- Text_IO.Put_Line ("using " & Gnatbind_Exec.all);
- end if;
- end if;
-
- -- gnatlink
-
- if Gnatlink_Exec = null then
- Gnatlink_Exec := OS_Lib.Locate_Exec_On_Path (Gnatlink_Name);
-
- if Gnatlink_Exec = null then
- Exceptions.Raise_Exception
- (Tools_Error'Identity, Gnatlink_Name & " not found in path");
-
- elsif Verbose then
- Text_IO.Put_Line ("using " & Gnatlink_Exec.all);
- Text_IO.New_Line;
- end if;
- end if;
- end Locate;
-
-end MDLL.Utl;