binemul.c revision 130561
1104834Sobrien/* Binutils emulation layer.
2130561Sobrien   Copyright 2002, 2003 Free Software Foundation, Inc.
3104834Sobrien   Written by Tom Rix, Redhat.
4104834Sobrien
5104834Sobrien   This file is part of GNU Binutils.
6104834Sobrien
7104834Sobrien   This program is free software; you can redistribute it and/or modify
8104834Sobrien   it under the terms of the GNU General Public License as published by
9104834Sobrien   the Free Software Foundation; either version 2 of the License, or
10104834Sobrien   (at your option) any later version.
11104834Sobrien
12104834Sobrien   This program is distributed in the hope that it will be useful,
13104834Sobrien   but WITHOUT ANY WARRANTY; without even the implied warranty of
14104834Sobrien   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15104834Sobrien   GNU General Public License for more details.
16104834Sobrien
17104834Sobrien   You should have received a copy of the GNU General Public License
18104834Sobrien   along with this program; if not, write to the Free Software
19104834Sobrien   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20104834Sobrien
21104834Sobrien#include "binemul.h"
22104834Sobrien
23104834Sobrienextern bin_emulation_xfer_type bin_dummy_emulation;
24104834Sobrien
25104834Sobrienvoid
26130561Sobrienar_emul_usage (FILE *fp)
27104834Sobrien{
28104834Sobrien  if (bin_dummy_emulation.ar_usage)
29104834Sobrien    bin_dummy_emulation.ar_usage (fp);
30104834Sobrien}
31104834Sobrien
32104834Sobrienvoid
33130561Sobrienar_emul_default_usage (FILE *fp)
34104834Sobrien{
35104834Sobrien  AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp);
36104834Sobrien  /* xgettext:c-format */
37104834Sobrien  fprintf (fp, _("  No emulation specific options\n"));
38104834Sobrien}
39104834Sobrien
40130561Sobrienbfd_boolean
41130561Sobrienar_emul_append (bfd **after_bfd, char *file_name, bfd_boolean verbose)
42104834Sobrien{
43104834Sobrien  if (bin_dummy_emulation.ar_append)
44104834Sobrien    return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose);
45104834Sobrien
46130561Sobrien  return FALSE;
47104834Sobrien}
48104834Sobrien
49130561Sobrienbfd_boolean
50130561Sobrienar_emul_default_append (bfd **after_bfd, char *file_name,
51130561Sobrien			bfd_boolean verbose)
52104834Sobrien{
53104834Sobrien  bfd *temp;
54104834Sobrien
55104834Sobrien  temp = *after_bfd;
56104834Sobrien  *after_bfd = bfd_openr (file_name, NULL);
57104834Sobrien
58104834Sobrien  AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
59104834Sobrien  AR_EMUL_APPEND_PRINT_VERBOSE (verbose, file_name);
60104834Sobrien
61104834Sobrien  (*after_bfd)->next = temp;
62104834Sobrien
63130561Sobrien  return TRUE;
64104834Sobrien}
65104834Sobrien
66130561Sobrienbfd_boolean
67130561Sobrienar_emul_replace (bfd **after_bfd, char *file_name, bfd_boolean verbose)
68104834Sobrien{
69104834Sobrien  if (bin_dummy_emulation.ar_replace)
70104834Sobrien    return bin_dummy_emulation.ar_replace (after_bfd, file_name, verbose);
71104834Sobrien
72130561Sobrien  return FALSE;
73104834Sobrien}
74104834Sobrien
75130561Sobrienbfd_boolean
76130561Sobrienar_emul_default_replace (bfd **after_bfd, char *file_name,
77130561Sobrien			 bfd_boolean verbose)
78104834Sobrien{
79104834Sobrien  bfd *temp;
80104834Sobrien
81104834Sobrien  temp = *after_bfd;
82104834Sobrien  *after_bfd = bfd_openr (file_name, NULL);
83104834Sobrien
84104834Sobrien  AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
85104834Sobrien  AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
86104834Sobrien
87104834Sobrien  (*after_bfd)->next = temp;
88104834Sobrien
89130561Sobrien  return TRUE;
90104834Sobrien}
91104834Sobrien
92130561Sobrienbfd_boolean
93130561Sobrienar_emul_create (bfd **abfd_out, char *archive_file_name, char *file_name)
94104834Sobrien{
95104834Sobrien  if (bin_dummy_emulation.ar_create)
96104834Sobrien    return bin_dummy_emulation.ar_create (abfd_out, archive_file_name,
97104834Sobrien					  file_name);
98104834Sobrien
99130561Sobrien  return FALSE;
100104834Sobrien}
101104834Sobrien
102130561Sobrienbfd_boolean
103130561Sobrienar_emul_default_create (bfd **abfd_out, char *archive_file_name,
104130561Sobrien			char *file_name)
105104834Sobrien{
106104834Sobrien  char *target = NULL;
107104834Sobrien
108104834Sobrien  /* Try to figure out the target to use for the archive from the
109104834Sobrien     first object on the list.  */
110104834Sobrien  if (file_name != NULL)
111104834Sobrien    {
112104834Sobrien      bfd *obj;
113104834Sobrien
114104834Sobrien      obj = bfd_openr (file_name, NULL);
115104834Sobrien      if (obj != NULL)
116104834Sobrien	{
117104834Sobrien	  if (bfd_check_format (obj, bfd_object))
118104834Sobrien	    target = bfd_get_target (obj);
119104834Sobrien	  (void) bfd_close (obj);
120104834Sobrien	}
121104834Sobrien    }
122104834Sobrien
123104834Sobrien  /* Create an empty archive.  */
124104834Sobrien  *abfd_out = bfd_openw (archive_file_name, target);
125104834Sobrien  if (*abfd_out == NULL
126104834Sobrien      || ! bfd_set_format (*abfd_out, bfd_archive)
127104834Sobrien      || ! bfd_close (*abfd_out))
128104834Sobrien    bfd_fatal (archive_file_name);
129104834Sobrien
130130561Sobrien  return TRUE;
131104834Sobrien}
132104834Sobrien
133130561Sobrienbfd_boolean
134130561Sobrienar_emul_parse_arg (char *arg)
135104834Sobrien{
136104834Sobrien  if (bin_dummy_emulation.ar_parse_arg)
137104834Sobrien    return bin_dummy_emulation.ar_parse_arg (arg);
138104834Sobrien
139130561Sobrien  return FALSE;
140104834Sobrien}
141104834Sobrien
142130561Sobrienbfd_boolean
143130561Sobrienar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED)
144104834Sobrien{
145130561Sobrien  return FALSE;
146104834Sobrien}
147