$! configure.com
$! This file sets things up to build gas on a VMS system to generate object
$! files for a VMS system.  We do not use the configure script, since we
$! do not have /bin/sh to execute it.
$!
$!
$ arch_indx = 1 + ((f$getsyi("CPU").ge.128).and.1)	! vax==1, alpha==2
$ arch = f$element(arch_indx,"|","|VAX|Alpha|")
$!
$ if arch.eqs."Alpha"
$ then
$! Target specific information
$   create targ-cpu.h
#include "tc-alpha.h"
$   create targ-cpu.c
#include "tc-alpha.c"
$   create targ-env.h
#define TE_VMS
#include "obj-format.h"
$
$! Code to handle the object file format.
$  create obj-format.h
#include "obj-evax.h"
$  create obj-format.c
#include "obj-evax.c"
$  create atof-targ.c
#include "atof-ieee.c"
$  create config-vms.in
/* config.h.  Generated by configure.com.  */
/* Define to 1 if using `alloca.c'. */
#undef C_ALLOCA

/* Default architecture. */
#undef DEFAULT_ARCH

/* Default emulation. */
#define DEFAULT_EMULATION ""

/* Supported emulations. */
#define EMULATIONS

/* Define if you want run-time sanity checks. */
#undef ENABLE_CHECKING

/* Define to 1 if translation of program messages to the user's native
   language is requested. */
#undef ENABLE_NLS

/* Define to 1 if you have `alloca', as a function or macro. */
#define HAVE_ALLOCA 1
#include <builtins.h>
#define C_alloca(x) __ALLOCA(x)

/* Is the prototype for getopt in <unistd.h> in the expected format? */
#define HAVE_DECL_GETOPT 1

/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
   don't. */
#undef HAVE_DECL_VSNPRINTF

/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
   don't. */
#define HAVE_DECL_SNPRINTF 1

/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1

/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H

/* Define to 1 if you have the `remove' function. */
#define HAVE_REMOVE 1

/* Define to 1 if you have the <stdarg.h> header file. */
#define HAVE_STDARG_H 1

/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H

/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1

/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H

/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H

/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H

/* Define to 1 if you have the `unlink' function. */
#undef HAVE_UNLINK

/* Name of package */
#define PACKAGE "gas"

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""

/* Define to the full name of this package. */
#define PACKAGE_NAME ""

/* Define to the full name and version of this package. */
#define PACKAGE_STRING ""

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME ""

/* Define to the version of this package. */
#define PACKAGE_VERSION ""

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Target alias. */
#define TARGET_ALIAS "alpha-dec-openvms"

/* Canonical target. */
#define TARGET_CANONICAL "alpha-dec-openvms"

/* Target CPU. */
#define TARGET_CPU "alpha"

/* Target OS. */
#define TARGET_OS "openvms"

/* Target vendor. */
#define TARGET_VENDOR "dec"

/* Define to 1 if your processor stores words with the most significant byte
   first (like Motorola and SPARC, unlike Intel and VAX). */
#define WORDS_BIGENDIAN 1

/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
   `char[]'. */
#undef YYTEXT_POINTER

/* Version number of package */
$
$ endif
$!
$! Get VERSION from ../bfd/configure.in
$!
$ edit/tpu/nojournal/nosection/nodisplay/command=sys$input
$DECK
   mfile := CREATE_BUFFER("mfile", "[-.bfd]configure.in");
   match_pos := SEARCH_QUIETLY('AM_INIT_AUTOMAKE(bfd, ', FORWARD, EXACT, mfile);
   IF match_pos <> 0 THEN;
     POSITION(BEGINNING_OF(match_pos));
     ERASE(match_pos);
     vers := CURRENT_LINE-")";
   ELSE;
     vers := "unknown";
   ENDIF;

   file := CREATE_BUFFER("file", "config-vms.in");
   POSITION(END_OF(file));
   COPY_TEXT("#define VERSION """);
   COPY_TEXT(vers);
   COPY_TEXT("""");
   WRITE_FILE(file, "config.h");
   QUIT
$  EOD
$del/nolog config-vms.in;
$exit
