$!
$! This file configures binutils for use with openVMS/Alpha
$! We do not use the configure script, since we do not have /bin/sh
$! to execute it.
$!
$!   Copyright (C) 2012-2021 Free Software Foundation, Inc.
$!
$! This file is free software; you can redistribute it and/or modify
$! it under the terms of the GNU General Public License as published by
$! the Free Software Foundation; either version 3 of the License, or
$! (at your option) any later version.
$!
$! This program is distributed in the hope that it will be useful,
$! but WITHOUT 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
$! along with this program; see the file COPYING3.  If not see
$! <http://www.gnu.org/licenses/>.
$!
$! Written by Klaus K"ampf (kkaempf@rmi.de)
$!
$ arch=F$GETSYI("ARCH_NAME")
$ arch=F$EDIT(arch,"LOWERCASE")
$ write sys$output "Configuring binutils for ''arch' target"
$!
$! Generate config.h
$!
$ create config.h
/* config.h.  Generated automatically by configure.com  */
/* Is the type time_t defined in <time.h>?  */
#define HAVE_TIME_T_IN_TIME_H 1
/* Is the type time_t defined in <sys/types.h>?  */
#define HAVE_TIME_T_IN_TYPES_H 1
/* Does <utime.h> define struct utimbuf?  */
#define HAVE_GOOD_UTIME_H 1
/* Whether fprintf must be declared even if <stdio.h> is included.  */
#define NEED_DECLARATION_FPRINTF 1
/* Do we need to use the b modifier when opening binary files?  */
/* #undef USE_BINARY_FOPEN */
/* Define if you have the utimes function.  */
#define HAVE_UTIMES 1
/* Define if you have the <fcntl.h> header file.  */
#define HAVE_FCNTL_H 1
/* Define if you have the <stdlib.h> header file.  */
#define HAVE_STDLIB_H 1
/* Define if you have the <string.h> header file.  */
#define HAVE_STRING_H 1
/* Define if you have the <strings.h> header file.  */
#define HAVE_STRINGS_H 1
/* Define if you have the <sys/file.h> header file.  */
#define HAVE_SYS_FILE_H 1
/* Define if you have the <unistd.h> header file.  */
#define HAVE_UNISTD_H 1

/* Alloca.  */
#ifdef __DECC
#include <builtins.h>
#define C_alloca(x) __ALLOCA(x)
#endif
/* Name of package */
#define PACKAGE "binutils"

/* 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 home page for this package. */
#define PACKAGE_URL ""

/* Define to the version of this package. */
#define PACKAGE_VERSION ""
$!
$! Add TARGET.
$!
$ if arch .eqs. "ia64" then target = "elf64-ia64-vms"
$ if arch .eqs. "alpha" then target = "vms-alpha"
$ if arch .eqs. "vax" then target = "vms-vax"
$!
$ open/append tfile config.h
$ write tfile "#define TARGET """ + target + """"
$ close tfile
$ write sys$output "Created `config.h'"
$!
$ write sys$output "Generate binutils build.com"
$!
$ create build.com
$DECK
$ DEFS=""
$ OPT="/noopt/debug"
$ CFLAGS=OPT + "/include=([],""../include"",[-.bfd])" +-
 "/name=(as_is,shortened)" +-
 "/prefix=(all,exc=(""getopt"",""optarg"",""optopt"",""optind"",""opterr""))"
$ BFDLIB = ",[-.bfd]libbfd.olb/lib"
$ LIBIBERTY = ",[-.libiberty]libiberty.olb/lib"
$ OPCODES = ",[-.opcodes]libopcodes.olb/lib"
$ DEBUG_FILES = ",rddbg,debug,stabs,ieee,rdcoff,dwarf"
$ BULIBS_FILES = ",bucomm,version,filemode"
$ ALL_FILES="nm,strings,addr2line,size,objdump,prdbg" +-
   BULIBS_FILES + DEBUG_FILES
$!
$ write sys$output "CFLAGS=",CFLAGS
$ if p1.nes."LINK"
$ then
$   NUM = 0
$   LOOP:
$     F = F$ELEMENT(NUM,",",ALL_FILES)
$     IF F.EQS."," THEN GOTO END
$     write sys$output "Compiling ", F, ".c"
$     cc 'CFLAGS 'F.c
$     NUM = NUM + 1
$     GOTO LOOP
$   END:
$ endif
$ purge
$!
$ write sys$output "Building nm.exe"
$ NM_OBJS="nm.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY
$ link/exe=nm 'NM_OBJS
$!
$ write sys$output "Building strings.exe"
$ STRINGS_OBJS="strings.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY
$ link/exe=strings 'STRINGS_OBJS
$!
$ write sys$output "Building size.exe"
$ SIZE_OBJS="size.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY
$ link/exe=size 'SIZE_OBJS
$!
$ write sys$output "Building addr2line.exe"
$ ADDR2LINE_OBJS="addr2line.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY
$ link/exe=addr2line 'ADDR2LINE_OBJS
$!
$ write sys$output "Building objdump.exe"
$ OBJDUMP_OBJS="objdump.obj,prdbg.obj" + DEBUG_FILES + BULIBS_FILES +-
   BFDLIB + OPCODES + LIBIBERTY
$ link/exe=objdump 'OBJDUMP_OBJS
$EOD
