#! /bin/sh

# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
# This file is part of GNU CC.

# GNU CC 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 2, or (at your option)
# any later version.

# GNU CC 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 GNU CC; see the file COPYING.  If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

SHELL=/bin/sh
export SHELL
if [ $# -eq 0 ] ; then
  not_done=false
else
  not_done=true
fi

while $not_done
do
  case "$1" in
  -D )
    shift
    if [ $# -eq 0 ] ; then
      not_done=false
    else
      AG="$AG -D$1"
      shift
    fi
    ;;

  -D* )
    AG="$AG $1"
    shift
    ;;

  '-?' )
    echo "USAGE: gendefs [ -D<def-name> ... ] [ <output-name> ]"
    echo "WHERE: '<def-name>' specifies a #define test name from inclhack.def"
    echo "  and  '<output-name>' is one of:"
    echo "       fixincl.x machine.h"
    echo "The default is to produce the first three outputs."
    exit 0
    ;;

  * )
    not_done=false
    ;;
  esac
done

if [ $# -eq 0 ] ; then
  set -- fixincl.x
fi

AG="autogen $AG"
set -e

case "$1" in
fixincl.x | */fixincl.x )
  if [ -z "`${AG} -v | fgrep 'Ver. 5.'`" ]
  then
    echo "AutoGen appears to be out of date or not correctly installed."
    echo "Please download and install:"
    echo "   ftp://gcc.gnu.org/pub/gcc/infrastructure/autogen.tar.gz"
    touch fixincl.x
  else
    echo AutoGen-ing fixincl.x
    $AG inclhack.def
  fi
  ;;

machname.h | */machname.h )
  # This script extracts from the specs file all the predefined macros
  # that are not in the C89 reserved namespace (the reserved namespace
  # is all identifiers beginnning with two underscores or one underscore
  # followed by a capital letter).  The specs file is on standard input.
  # A #define for a regular expression to find any of those macros in a
  # header file is written to standard output.

  # Note dependency on ASCII. \040 = space, \011 = tab, \012 = newline.
  # tr ' ' '\n' is, alas, not portable.

  tr -s '\040\011' '\012\012' < ../specs |
    sed -n 's/^.*-D\([a-zA-Z_][a-zA-Z0-9_]*\).*$/\1/p' |
    sort -u > mn.T

  if grep -v '^_[_A-Z]' mn.T > mn.U
  then
    echo "Forbidden identifiers: `tr '\012' ' ' <mn.U`" >&2
    sed 's/^/\\\\</; s/$/\\\\>/' <mn.U | tr '\012' '|' > mn.V
    echo '' >>mn.V
    sed 's/^/#define MN_NAME_PAT "/; s/|$/"/' < mn.V > machname.T
  else
    echo "No forbidden identifiers defined by this target" >&2
    echo '#undef MN_NAME_PAT' > machname.T
  fi
  rm -f mn.[TUV]
  mv -f machname.T machname.h
  ;;

* )
  echo genfixes cannot create $1
  exit 1
  ;;
esac

exit 0
