Virgin import of gperf v2.7

This commit is contained in:
Kris Kennaway 2000-03-25 07:45:29 +00:00
parent dcd8284393
commit dd56fde1eb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/gperf/dist/; revision=58551
82 changed files with 17742 additions and 305 deletions

File diff suppressed because it is too large Load Diff

181
contrib/gperf/INSTALL Normal file
View File

@ -0,0 +1,181 @@
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made.
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.

View File

@ -0,0 +1,35 @@
# This is the developer's makefile, not the user's makefile.
# Don't use it unless you know exactly what you do!
SHELL = /bin/sh
MAKE = make
all : configures src/config.h.in
CONFIGURES = configure lib/configure src/configure tests/configure doc/configure
configures : $(CONFIGURES)
configure : configure.in aclocal.m4
autoconf -l .
lib/configure : lib/configure.in aclocal.m4
cd lib && autoconf -l ..
src/configure : src/configure.in aclocal.m4
cd src && autoconf -l ..
tests/configure : tests/configure.in aclocal.m4
cd tests && autoconf -l ..
doc/configure : doc/configure.in aclocal.m4
cd doc && autoconf -l ..
check-configures : $(CONFIGURES)
set -e; for f in $(CONFIGURES); do bash -x -n $$f; done
src/config.h.in : src/configure.in aclocal.m4
cd src && autoheader -l ..
force :

62
contrib/gperf/Makefile.in Normal file
View File

@ -0,0 +1,62 @@
# Makefile for gperf
# Copyright (C) 1989, 1992, 1993, 1998 Free Software Foundation, Inc.
# written by Douglas C. Schmidt (schmidt@ics.uci.edu)
#
# This file is part of GNU GPERF.
#
# GNU GPERF 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 1, or (at your option)
# any later version.
#
# GNU GPERF 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 GPERF; see the file COPYING. If not, write to
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#### Start of system configuration section. ####
# Programs used by "make":
RM = rm -f
@SET_MAKE@
#### End of system configuration section. ####
SHELL = /bin/sh
all : force
cd @subdir@; $(MAKE) all
install : force
cd @subdir@; $(MAKE) install
installdirs : force
cd @subdir@; $(MAKE) installdirs
uninstall : force
cd @subdir@; $(MAKE) uninstall
check : force
cd @subdir@; $(MAKE) check
mostlyclean : force
cd @subdir@; $(MAKE) mostlyclean
clean : force
cd @subdir@; $(MAKE) clean
distclean : force
cd @subdir@; if test -f Makefile; then $(MAKE) distclean; fi
$(RM) config.status config.log config.cache Makefile
maintainer-clean : force
cd @subdir@; if test -f Makefile; then $(MAKE) maintainer-clean; fi
$(RM) config.status config.log config.cache Makefile
force :

11
contrib/gperf/NEWS Normal file
View File

@ -0,0 +1,11 @@
New in 2.7:
* gperf is now a stand-alone package, untied from libg++.
* Autoconfiguring.
* Removed the "-a" and "-g" options, extended the "-L" option instead.
* Removed the "-p" option, it is the default.
* Added long options ("--help", "--version" etc.).
* 8-bit cleanliness is now the default; use "-7" to get the old behaviour.
* Compiles with any C++ compiler.
* Numerous small improvements.

View File

@ -1,28 +1,24 @@
While teaching a data structures course at University of California,
Irvine, I developed a program called GPERF that generates perfect hash
functions for sets of key words. A perfect hash function is simply:
A hash function and a data structure that allows
recognition of a key word in a set of words using
A hash function and a data structure that allows
recognition of a key word in a set of words using
exactly 1 probe into the data structure.
The gperf.texinfo file explains how the program works, the form of the
input, what options are available, and hints on choosing the best
options for particular key word sets. The texinfo file is readable
both via the GNU emacs `info' command, and is also suitable for
typesetting with TeX. The texinfo.tex macros needed to run
gperf.texinfo through TeX are available in the GNU GCC release. If
you don't have access to these please email me and I'll send them to
you (about 75k).
typesetting with TeX.
The enclosed Makefile creates the executable program ``gperf'' and
also runs some tests.
Output from the GPERF program is used to recognize reserved words in
the GNU C, GNU C++, and GNU Pascal compilers, as well as with the GNU
indent program.
Happy hacking!
Douglas C. Schmidt
schmidt@ics.uci.edu

4
contrib/gperf/acconfig.h Normal file
View File

@ -0,0 +1,4 @@
/* Define if the C++ compiler supports "throw ()" declarations. */
#undef HAVE_THROW_DECL

71
contrib/gperf/aclocal.m4 vendored Normal file
View File

@ -0,0 +1,71 @@
AC_PREREQ(2.12)
AC_DEFUN(CL_PROG_RANLIB, [AC_CHECK_PROG(RANLIB, ranlib, ranlib, true)])
AC_DEFUN(CL_PROG_INSTALL,
[dnl This is mostly copied from AC_PROG_INSTALL.
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
AC_MSG_CHECKING(for a BSD compatible install)
if test -z "$INSTALL"; then
AC_CACHE_VAL(cl_cv_path_install,
[ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
# Account for people who put trailing slashes in PATH elements.
case "$ac_dir/" in
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
for ac_prog in ginstall installbsd scoinst install; do
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
# OSF/1 installbsd also uses dspmsg, but is usable.
:
else
if test $ac_prog = installbsd &&
grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX installbsd doesn't work without option "-g".
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
break 2
fi
fi
fi
done
;;
esac
done
IFS="$ac_save_ifs"
# As a last resort, use cp.
test -z "$cl_cv_path_install" && cl_cv_path_install="cp"
])dnl
INSTALL="$cl_cv_path_install"
fi
dnl We do special magic for INSTALL instead of AC_SUBST, to get
dnl relative paths right.
AC_MSG_RESULT($INSTALL)
AC_SUBST(INSTALL)dnl
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)'
AC_SUBST(INSTALL_PROGRAM)dnl
if test -z "$INSTALL_DATA"; then
case "$INSTALL" in
cp | */cp ) INSTALL_DATA='$(INSTALL)' ;;
* ) INSTALL_DATA='$(INSTALL) -m 644' ;;
esac
fi
AC_SUBST(INSTALL_DATA)dnl
])

909
contrib/gperf/configure vendored Executable file
View File

@ -0,0 +1,909 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.12
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
case "$ac_option" in
-*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case "$ac_option" in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir="$ac_optarg" ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build="$ac_optarg" ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file="$ac_optarg" ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir="$ac_optarg" ;;
-disable-* | --disable-*)
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
eval "enable_${ac_feature}=no" ;;
-enable-* | --enable-*)
ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "enable_${ac_feature}='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix="$ac_optarg" ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he)
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
EOF
cat << EOF
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
EOF
if test -n "$ac_help"; then
echo "--enable and --with options recognized:$ac_help"
fi
exit 0 ;;
-host | --host | --hos | --ho)
ac_prev=host ;;
-host=* | --host=* | --hos=* | --ho=*)
host="$ac_optarg" ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir="$ac_optarg" ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir="$ac_optarg" ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir="$ac_optarg" ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir="$ac_optarg" ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir="$ac_optarg" ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir="$ac_optarg" ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir="$ac_optarg" ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix="$ac_optarg" ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix="$ac_optarg" ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix="$ac_optarg" ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name="$ac_optarg" ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir="$ac_optarg" ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir="$ac_optarg" ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir="$ac_optarg" ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir="$ac_optarg" ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target="$ac_optarg" ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.12"
exit 0 ;;
-with-* | --with-*)
ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "with_${ac_package}='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`echo $ac_option|sed -e 's/-*without-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
eval "with_${ac_package}=no" ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes="$ac_optarg" ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries="$ac_optarg" ;;
-*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
;;
*)
if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
echo "configure: warning: $ac_option: invalid host type" 1>&2
fi
if test "x$nonopt" != xNONE; then
{ echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
fi
nonopt="$ac_option"
;;
esac
done
if test -n "$ac_prev"; then
{ echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
exec 6>/dev/null
else
exec 6>&1
fi
exec 5>./config.log
echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
ac_configure_args="$ac_configure_args '$ac_arg'" ;;
*) ac_configure_args="$ac_configure_args $ac_arg" ;;
esac
done
# NLS nuisances.
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=doc/gperf.1
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
{ echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
else
{ echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
echo "loading site script $ac_site_file"
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
echo "loading cache $cache_file"
. $cache_file
else
echo "creating cache $cache_file"
> $cache_file
fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
ac_n= ac_c='
' ac_t=' '
else
ac_n=-n ac_c= ac_t=
fi
else
ac_n= ac_c='\c' ac_t=
fi
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:523: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftestmake <<\EOF
all:
@echo 'ac_maketemp="${MAKE}"'
EOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
rm -f conftestmake
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
echo "$ac_t""yes" 1>&6
SET_MAKE=
else
echo "$ac_t""no" 1>&6
SET_MAKE="MAKE=${MAKE-make}"
fi
extrasub="$extrasub"'
/@subdir@/{
h
g
s/@subdir@/lib/
p
g
s/@subdir@/src/
p
g
s/@subdir@/tests/
p
g
s/@subdir@/doc/
p
d
}
'
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
if test -w $cache_file; then
echo "updating cache $cache_file"
cat confcache > $cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
fi
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.
ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
case "\$ac_option" in
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.12"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
*) echo "\$ac_cs_usage"; exit 1 ;;
esac
done
ac_given_srcdir=$srcdir
trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@SET_MAKE@%$SET_MAKE%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
else
ac_dir_suffix= ac_dots=
fi
case "$ac_given_srcdir" in
.) srcdir=.
if test -z "$ac_dots"; then top_srcdir=.
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
*) # Relative path.
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
case "$ac_file" in
*Makefile*) ac_comsub="1i\\
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*
EOF
cat >> $CONFIG_STATUS <<EOF
EOF
cat >> $CONFIG_STATUS <<\EOF
exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
if test "$no_recursion" != yes; then
# Remove --cache-file and --srcdir arguments so they do not pile up.
ac_sub_configure_args=
ac_prev=
for ac_arg in $ac_configure_args; do
if test -n "$ac_prev"; then
ac_prev=
continue
fi
case "$ac_arg" in
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
;;
*) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
esac
done
for ac_config_dir in lib src tests doc; do
# Do not complain, so a configure script can configure whichever
# parts of a large source tree are present.
if test ! -d $srcdir/$ac_config_dir; then
continue
fi
echo configuring in $ac_config_dir
case "$srcdir" in
.) ;;
*)
if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :;
else
{ echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; }
fi
;;
esac
ac_popdir=`pwd`
cd $ac_config_dir
# A "../" for each directory in /$ac_config_dir.
ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
case "$srcdir" in
.) # No --srcdir option. We are building in place.
ac_sub_srcdir=$srcdir ;;
/*) # Absolute path.
ac_sub_srcdir=$srcdir/$ac_config_dir ;;
*) # Relative path.
ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
esac
# Check for guested configure; otherwise get Cygnus style configure.
if test -f $ac_sub_srcdir/configure; then
ac_sub_configure=$ac_sub_srcdir/configure
elif test -f $ac_sub_srcdir/configure.in; then
ac_sub_configure=$ac_configure
else
echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2
ac_sub_configure=
fi
# The recursion is here.
if test -n "$ac_sub_configure"; then
# Make the cache file name correct relative to the subdirectory.
case "$cache_file" in
/*) ac_sub_cache_file=$cache_file ;;
*) # Relative path.
ac_sub_cache_file="$ac_dots$cache_file" ;;
esac
echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
# The eval makes quoting arguments work.
if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
then :
else
{ echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
fi
fi
cd $ac_popdir
done
fi

View File

@ -0,0 +1,46 @@
dnl autoconf configuration for gperf
dnl Copyright (C) 1998 Free Software Foundation, Inc.
dnl written by Douglas C. Schmidt (schmidt@ics.uci.edu)
dnl
dnl This file is part of GNU GPERF.
dnl
dnl GNU GPERF is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 1, or (at your option)
dnl any later version.
dnl
dnl GNU GPERF is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with GNU GPERF; see the file COPYING. If not, write to the
dnl Free Software Foundation, 59 Temple Place - Suite 330, Boston,
dnl MA 02111-1307, USA.
AC_INIT(doc/gperf.1)
AC_PROG_MAKE_SET
dnl This piece of sed script replaces every line containing '@subdir@'
dnl by several consecutive lines, each referencing one subdir.
extrasub="$extrasub"'
/@subdir@/{
h
g
s/@subdir@/lib/
p
g
s/@subdir@/src/
p
g
s/@subdir@/tests/
p
g
s/@subdir@/doc/
p
d
}
'
AC_OUTPUT(Makefile)
AC_OUTPUT_SUBDIRS(lib src tests doc)

View File

@ -0,0 +1,129 @@
# Makefile for gperf/doc
# Copyright (C) 1998 Free Software Foundation, Inc.
#
# This file is part of GNU GPERF.
#
# GNU GPERF 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 1, or (at your option)
# any later version.
#
# GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA.
#### Start of system configuration section. ####
# Directories used by "make":
srcdir = @srcdir@
# Directories used by "make install":
prefix = @prefix@
local_prefix = /usr/local
exec_prefix = @exec_prefix@
infodir = @infodir@
mandir = @mandir@
man1dir = $(mandir)/man1
dvidir = $(mandir)/dvi
htmldir = $(mandir)/html
# Programs used by "make":
RM = rm -f
@SET_MAKE@
# Programs used by "make" if you have changed the documentation files:
TEX = tex
TEXI2DVI = texi2dvi
DVIPS = dvips -Pljfour
MAKEINFO = LANGUAGE= makeinfo
TEXI2HTML = texi2html
# Programs used by "make install":
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
#### End of system configuration section. ####
SHELL = /bin/sh
VPATH = $(srcdir)
all : info dvi ps html
info : $(srcdir)/gperf.info
$(srcdir)/gperf.info : $(srcdir)/gperf.texi
cd $(srcdir) && $(MAKEINFO) --no-split gperf.texi
dvi : $(srcdir)/gperf.dvi
$(srcdir)/gperf.dvi : $(srcdir)/gperf.texi
cd $(srcdir) && $(RM) gperf.aux gperf.toc gperf.cp gperf.fn gperf.ky gperf.pg gperf.tp gperf.vr gperf.log
cd $(srcdir) && $(TEXI2DVI) gperf.texi
cd $(srcdir) && $(RM) gperf.aux gperf.toc gperf.cp gperf.fn gperf.ky gperf.pg gperf.tp gperf.vr gperf.log
ps : $(srcdir)/gperf.ps
$(srcdir)/gperf.ps : $(srcdir)/gperf.dvi
$(DVIPS) -o $@ $<
html : gperf.html gperf_toc.html
gperf.html : $(srcdir)/gperf.texi
cd $(srcdir) && $(TEXI2HTML) -expandinfo -number -monolithic gperf.texi
gperf_toc.html : $(srcdir)/gperf.texi
cd $(srcdir) && $(RM) gperf_*.html
cd $(srcdir) && $(TEXI2HTML) -expandinfo -number -split_chapter gperf.texi
install : all force
if [ ! -d $(infodir) ] ; then mkdir $(infodir) ; fi
$(INSTALL_DATA) $(srcdir)/gperf.info $(infodir)/gperf.info
if [ ! -d $(mandir) ] ; then mkdir $(mandir) ; fi
if [ ! -d $(man1dir) ] ; then mkdir $(man1dir) ; fi
$(INSTALL_DATA) $(srcdir)/gperf.1 $(man1dir)/gperf.1
if [ ! -d $(dvidir) ] ; then mkdir $(dvidir) ; fi
$(INSTALL_DATA) $(srcdir)/gperf.dvi $(dvidir)/gperf.dvi
if [ ! -d $(htmldir) ] ; then mkdir $(htmldir) ; fi
$(INSTALL_DATA) $(srcdir)/gperf.html $(htmldir)/gperf.html
installdirs : force
if [ ! -d $(infodir) ] ; then mkdir $(infodir) ; fi
if [ ! -d $(mandir) ] ; then mkdir $(mandir) ; fi
if [ ! -d $(man1dir) ] ; then mkdir $(man1dir) ; fi
if [ ! -d $(dvidir) ] ; then mkdir $(dvidir) ; fi
if [ ! -d $(htmldir) ] ; then mkdir $(htmldir) ; fi
uninstall : force
$(RM) $(infodir)/gperf.info
$(RM) $(man1dir)/gperf.1
$(RM) $(dvidir)/gperf.dvi
$(RM) $(htmldir)/gperf.html
check : all
mostlyclean : clean
clean : force
$(RM) *~ *.aux *.toc *.cp *.fn *.ky *.pg *.tp *.vr *.my *.log core
distclean : clean
$(RM) config.status config.log config.cache Makefile
maintainer-clean : distclean
$(RM) *.info *.dvi *.ps *.html
force :

863
contrib/gperf/doc/configure vendored Executable file
View File

@ -0,0 +1,863 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.12
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
case "$ac_option" in
-*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case "$ac_option" in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir="$ac_optarg" ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build="$ac_optarg" ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file="$ac_optarg" ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir="$ac_optarg" ;;
-disable-* | --disable-*)
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
eval "enable_${ac_feature}=no" ;;
-enable-* | --enable-*)
ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "enable_${ac_feature}='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix="$ac_optarg" ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he)
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
EOF
cat << EOF
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
EOF
if test -n "$ac_help"; then
echo "--enable and --with options recognized:$ac_help"
fi
exit 0 ;;
-host | --host | --hos | --ho)
ac_prev=host ;;
-host=* | --host=* | --hos=* | --ho=*)
host="$ac_optarg" ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir="$ac_optarg" ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir="$ac_optarg" ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir="$ac_optarg" ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir="$ac_optarg" ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
localstatedir="$ac_optarg" ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir="$ac_optarg" ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir="$ac_optarg" ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix="$ac_optarg" ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix="$ac_optarg" ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix="$ac_optarg" ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name="$ac_optarg" ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir="$ac_optarg" ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir="$ac_optarg" ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir="$ac_optarg" ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir="$ac_optarg" ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target="$ac_optarg" ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.12"
exit 0 ;;
-with-* | --with-*)
ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "with_${ac_package}='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`echo $ac_option|sed -e 's/-*without-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
eval "with_${ac_package}=no" ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes="$ac_optarg" ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries="$ac_optarg" ;;
-*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
;;
*)
if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
echo "configure: warning: $ac_option: invalid host type" 1>&2
fi
if test "x$nonopt" != xNONE; then
{ echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
fi
nonopt="$ac_option"
;;
esac
done
if test -n "$ac_prev"; then
{ echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
exec 6>/dev/null
else
exec 6>&1
fi
exec 5>./config.log
echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
ac_configure_args="$ac_configure_args '$ac_arg'" ;;
*) ac_configure_args="$ac_configure_args $ac_arg" ;;
esac
done
# NLS nuisances.
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=gperf.1
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
{ echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
else
{ echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
echo "loading site script $ac_site_file"
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
echo "loading cache $cache_file"
. $cache_file
else
echo "creating cache $cache_file"
> $cache_file
fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
ac_n= ac_c='
' ac_t=' '
else
ac_n=-n ac_c= ac_t=
fi
else
ac_n= ac_c='\c' ac_t=
fi
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:523: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftestmake <<\EOF
all:
@echo 'ac_maketemp="${MAKE}"'
EOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
rm -f conftestmake
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
echo "$ac_t""yes" 1>&6
SET_MAKE=
else
echo "$ac_t""no" 1>&6
SET_MAKE="MAKE=${MAKE-make}"
fi
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:560: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'cl_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
# Account for people who put trailing slashes in PATH elements.
case "$ac_dir/" in
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
for ac_prog in ginstall installbsd scoinst install; do
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
# OSF/1 installbsd also uses dspmsg, but is usable.
:
else
if test $ac_prog = installbsd &&
grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX installbsd doesn't work without option "-g".
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
break 2
fi
fi
fi
done
;;
esac
done
IFS="$ac_save_ifs"
# As a last resort, use cp.
test -z "$cl_cv_path_install" && cl_cv_path_install="cp"
fi
INSTALL="$cl_cv_path_install"
fi
echo "$ac_t""$INSTALL" 1>&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)'
if test -z "$INSTALL_DATA"; then
case "$INSTALL" in
cp | */cp ) INSTALL_DATA='$(INSTALL)' ;;
* ) INSTALL_DATA='$(INSTALL) -m 644' ;;
esac
fi
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
case `(ac_space=' '; set) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
if test -w $cache_file; then
echo "updating cache $cache_file"
cat confcache > $cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
fi
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
cat > conftest.defs <<\EOF
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
s%\[%\\&%g
s%\]%\\&%g
s%\$%$$%g
EOF
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.
ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
case "\$ac_option" in
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.12"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
*) echo "\$ac_cs_usage"; exit 1 ;;
esac
done
ac_given_srcdir=$srcdir
trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@SET_MAKE@%$SET_MAKE%g
s%@INSTALL@%$INSTALL%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
else
ac_dir_suffix= ac_dots=
fi
case "$ac_given_srcdir" in
.) srcdir=.
if test -z "$ac_dots"; then top_srcdir=.
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
*) # Relative path.
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
case "$ac_file" in
*Makefile*) ac_comsub="1i\\
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*
EOF
cat >> $CONFIG_STATUS <<EOF
EOF
cat >> $CONFIG_STATUS <<\EOF
exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1

View File

@ -0,0 +1,33 @@
dnl autoconf configuration for gperf/doc
dnl Copyright (C) 1998 Free Software Foundation, Inc.
dnl written by Douglas C. Schmidt (schmidt@ics.uci.edu)
dnl
dnl This file is part of GNU GPERF.
dnl
dnl GNU GPERF is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 1, or (at your option)
dnl any later version.
dnl
dnl GNU GPERF is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with GNU GPERF; see the file COPYING. If not, write to the
dnl Free Software Foundation, 59 Temple Place - Suite 330, Boston,
dnl MA 02111-1307, USA.
AC_INIT(gperf.1)
AC_PROG_MAKE_SET
dnl
dnl checks for programs
dnl
CL_PROG_INSTALL
dnl sets variables INSTALL, INSTALL_DATA, INSTALL_PROGRAM
dnl
dnl That's it.
dnl
AC_OUTPUT(Makefile)

23
contrib/gperf/doc/gperf.1 Normal file
View File

@ -0,0 +1,23 @@
.TH GPERF 1 "March 7, 1998
.UC 4
.SH NAME
gperf \- generate a perfect hash function from a key set
.SH SYNOPSIS
.B gperf
[
.B \-adghijklnoprsStv
] [
.I keyfile
]
.SH DESCRIPTION
\fIgperf\fP reads a set of ``keys'' from \fIkeyfile\fP (or, by
default, from the standard input) and attempts to find a non-minimal
perfect hashing function that recognizes a member of the key set in
constant, i.e., O(1), time. If such a function is found the program
generates a pair of \fIC\fP source code routines that perform the
hashing and table lookup. All generated code is directed to the
standard output.
Please refer to the \fIgperf.texi\fP file for more information.
This file is distributed with \fIgperf\fP release.

1251
contrib/gperf/doc/gperf.texi Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,109 @@
# Makefile for gperf/lib
# Copyright (C) 1989, 1992, 1993, 1998 Free Software Foundation, Inc.
# written by Douglas C. Schmidt (schmidt@ics.uci.edu)
#
# This file is part of GNU GPERF.
#
# GNU GPERF 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 1, or (at your option)
# any later version.
#
# GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA.
#### Start of system configuration section. ####
# Directories used by "make":
srcdir = @srcdir@
# Directories used by "make install":
prefix = @prefix@
local_prefix = /usr/local
exec_prefix = @exec_prefix@
# Programs used by "make":
# C compiler
CC = @CC@
CFLAGS = @CFLAGS@
CPP = @CPP@
# C++ compiler
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
CXXCPP = @CXXCPP@
# Other
AR = ar
AR_FLAGS = rc
RANLIB = @RANLIB@
MV = mv
LN = ln
RM = rm -f
@SET_MAKE@
# Programs used by "make install":
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
#### End of system configuration section. ####
SHELL = /bin/sh
VPATH = $(srcdir)
OBJECTS = getopt.o getopt1.o hash.o
CPPFLAGS = -I$(srcdir)
TARGETLIB = libgp.a
all : $(TARGETLIB)
$(TARGETLIB): $(OBJECTS)
$(RM) $@
$(AR) $(AR_FLAGS) $@ $(OBJECTS)
$(RANLIB) $@
# Don't use implicit rules, since AIX "make" and OSF/1 "make" don't always
# expand $< correctly in this context.
#
#%.o : %.c
# $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
#
#%.o : %.cc
# $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
getopt.o : getopt.c getopt.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/getopt.c
getopt1.o : getopt1.c getopt.h
$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/getopt1.c
hash.o : hash.cc hash.h
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/hash.cc
install : all
installdirs :
uninstall :
check : all
mostlyclean : clean
clean : force
$(RM) *~ *.s *.o *.a $(TARGETLIB) core
distclean : clean
$(RM) config.status config.log config.cache Makefile
maintainer-clean : distclean
force :

1303
contrib/gperf/lib/configure vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,43 @@
dnl autoconf configuration for gperf/lib
dnl Copyright (C) 1998 Free Software Foundation, Inc.
dnl written by Douglas C. Schmidt (schmidt@ics.uci.edu)
dnl
dnl This file is part of GNU GPERF.
dnl
dnl GNU GPERF is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 1, or (at your option)
dnl any later version.
dnl
dnl GNU GPERF is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with GNU GPERF; see the file COPYING. If not, write to the
dnl Free Software Foundation, 59 Temple Place - Suite 330, Boston,
dnl MA 02111-1307, USA.
AC_INIT(hash.cc)
AC_PROG_MAKE_SET
dnl
dnl checks for programs
dnl
AC_PROG_CC
dnl sets variable CC
AC_PROG_CPP
dnl sets variable CPP
AC_PROG_CXX
dnl sets variable CXX
AC_PROG_CXXCPP
dnl sets variable CXXCPP
CL_PROG_RANLIB
dnl sets variable RANLIB
CL_PROG_INSTALL
dnl sets variables INSTALL, INSTALL_DATA, INSTALL_PROGRAM
dnl
dnl That's it.
dnl
AC_OUTPUT(Makefile)

1042
contrib/gperf/lib/getopt.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
getopt.c is a modified version of the getopt.c found in the glibc snapshot
on 1998-04-14. Below the patch that has been applied to this file. The glibc
maintainer has been informed of these patches.
diff -c3 getopt.c.orig getopt.c
*** getopt.c.orig Sun Mar 8 16:06:55 1998
--- getopt.c Thu Apr 16 00:09:41 1998
***************
*** 201,207 ****
/* Avoid depending on library functions or files
whose names are inconsistent. */
! char *getenv ();
static char *
my_index (str, chr)
--- 201,208 ----
/* Avoid depending on library functions or files
whose names are inconsistent. */
! extern char *getenv ();
! extern int strncmp ();
static char *
my_index (str, chr)

138
contrib/gperf/lib/getopt.h Normal file
View File

@ -0,0 +1,138 @@
/* Declarations for getopt.
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _GETOPT_H
#define _GETOPT_H 1
#ifdef __cplusplus
extern "C" {
#endif
/* For communication from `getopt' to the caller.
When `getopt' finds an option that takes an argument,
the argument value is returned here.
Also, when `ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
extern char *optarg;
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
and for communication between successive calls to `getopt'.
On entry to `getopt', zero means this is the first call; initialize.
When `getopt' returns -1, this is the index of the first of the
non-option elements that the caller should itself scan.
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
extern int optind;
/* Callers store zero here to inhibit the error message `getopt' prints
for unrecognized options. */
extern int opterr;
/* Set to an option character which was unrecognized. */
extern int optopt;
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of `struct option' terminated by an element containing a name which is
zero.
The field `has_arg' is:
no_argument (or 0) if the option does not take an argument,
required_argument (or 1) if the option requires an argument,
optional_argument (or 2) if the option takes an optional argument.
If the field `flag' is not NULL, it points to a variable that is set
to the value given in the field `val' when the option is found, but
left unchanged if the option is not found.
To have a long-named option do something other than set an `int' to
a compiled-in constant, such as set a value from `optarg', set the
option's `flag' field to zero and its `val' field to a nonzero
value (the equivalent single-letter option character, if there is
one). For long options that have a zero `flag' field, `getopt'
returns the contents of the `val' field. */
struct option
{
#if defined (__STDC__) && __STDC__
const char *name;
#else
char *name;
#endif
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
int *flag;
int val;
};
/* Names for the values of the `has_arg' field of `struct option'. */
#define no_argument 0
#define required_argument 1
#define optional_argument 2
#if (defined (__STDC__) && __STDC__) || defined (__cplusplus)
#ifdef __cplusplus
/* SunOS4 declares getopt with the following prototype:
extern int getopt (int argc, const char *const *argv, const char *shortopts);
We cannot redeclare it when compiling C++ code. */
#define getopt(x,y,z) getopt_long(x, y, z, (const struct option *) 0, (int *) 0)
#else /* not __cplusplus */
#ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else /* not __GNU_LIBRARY__ */
extern int getopt ();
#endif /* __GNU_LIBRARY__ */
#endif /* __cplusplus */
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
const struct option *longopts, int *longind);
extern int getopt_long_only (int argc, char *const *argv,
const char *shortopts,
const struct option *longopts, int *longind);
/* Internal only. Users should not call this directly. */
extern int _getopt_internal (int argc, char *const *argv,
const char *shortopts,
const struct option *longopts, int *longind,
int long_only);
#else /* not __STDC__ */
extern int getopt ();
extern int getopt_long ();
extern int getopt_long_only ();
extern int _getopt_internal ();
#endif /* __STDC__ */
#ifdef __cplusplus
}
#endif
#endif /* getopt.h */

View File

@ -0,0 +1,40 @@
getopt.h is a modified version of the getopt.h found in the glibc snapshot
on 1998-04-14. Below the patch that has been applied to this file. The glibc
maintainer has been informed of these patches.
diff -c3 getopt.h.orig getopt.h
*** getopt.h.orig Sat Jun 21 03:01:53 1997
--- getopt.h Thu Apr 16 00:17:42 1998
***************
*** 96,102 ****
#define required_argument 1
#define optional_argument 2
! #if defined (__STDC__) && __STDC__
#ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
--- 96,108 ----
#define required_argument 1
#define optional_argument 2
! #if (defined (__STDC__) && __STDC__) || defined (__cplusplus)
! #ifdef __cplusplus
! /* SunOS4 declares getopt with the following prototype:
! extern int getopt (int argc, const char *const *argv, const char *shortopts);
! We cannot redeclare it when compiling C++ code. */
! #define getopt(x,y,z) getopt_long(x, y, z, (const struct option *) 0, (int *) 0)
! #else /* not __cplusplus */
#ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
***************
*** 105,110 ****
--- 111,117 ----
#else /* not __GNU_LIBRARY__ */
extern int getopt ();
#endif /* __GNU_LIBRARY__ */
+ #endif /* __cplusplus */
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
const struct option *longopts, int *longind);
extern int getopt_long_only (int argc, char *const *argv,

188
contrib/gperf/lib/getopt1.c Normal file
View File

@ -0,0 +1,188 @@
/* getopt_long and getopt_long_only entry points for GNU getopt.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "getopt.h"
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
#ifndef const
#define const
#endif
#endif
#include <stdio.h>
/* Comment out all this code if we are using the GNU C Library, and are not
actually compiling the library itself. This code is part of the GNU C
Library, but also included in many other GNU distributions. Compiling
and linking in this code is a waste when using the GNU C library
(especially if it is a shared library). Rather than having every GNU
program understand `configure --with-gnu-libc' and omit the object files,
it is simpler to just do this in the source for each such file. */
#define GETOPT_INTERFACE_VERSION 2
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
#include <gnu-versions.h>
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
#define ELIDE_CODE
#endif
#endif
#ifndef ELIDE_CODE
/* This needs to come after some library #include
to get __GNU_LIBRARY__ defined. */
#ifdef __GNU_LIBRARY__
#include <stdlib.h>
#endif
#ifndef NULL
#define NULL 0
#endif
int
getopt_long (argc, argv, options, long_options, opt_index)
int argc;
char *const *argv;
const char *options;
const struct option *long_options;
int *opt_index;
{
return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
}
/* Like getopt_long, but '-' as well as '--' can indicate a long option.
If an option that starts with '-' (not '--') doesn't match a long option,
but does match a short option, it is parsed as a short option
instead. */
int
getopt_long_only (argc, argv, options, long_options, opt_index)
int argc;
char *const *argv;
const char *options;
const struct option *long_options;
int *opt_index;
{
return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
}
#endif /* Not ELIDE_CODE. */
#ifdef TEST
#include <stdio.h>
int
main (argc, argv)
int argc;
char **argv;
{
int c;
int digit_optind = 0;
while (1)
{
int this_option_optind = optind ? optind : 1;
int option_index = 0;
static struct option long_options[] =
{
{"add", 1, 0, 0},
{"append", 0, 0, 0},
{"delete", 1, 0, 0},
{"verbose", 0, 0, 0},
{"create", 0, 0, 0},
{"file", 1, 0, 0},
{0, 0, 0, 0}
};
c = getopt_long (argc, argv, "abc:d:0123456789",
long_options, &option_index);
if (c == -1)
break;
switch (c)
{
case 0:
printf ("option %s", long_options[option_index].name);
if (optarg)
printf (" with arg %s", optarg);
printf ("\n");
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (digit_optind != 0 && digit_optind != this_option_optind)
printf ("digits occur in two different argv-elements.\n");
digit_optind = this_option_optind;
printf ("option %c\n", c);
break;
case 'a':
printf ("option a\n");
break;
case 'b':
printf ("option b\n");
break;
case 'c':
printf ("option c with value `%s'\n", optarg);
break;
case 'd':
printf ("option d with value `%s'\n", optarg);
break;
case '?':
break;
default:
printf ("?? getopt returned character code 0%o ??\n", c);
}
}
if (optind < argc)
{
printf ("non-option ARGV-elements: ");
while (optind < argc)
printf ("%s ", argv[optind++]);
printf ("\n");
}
exit (0);
}
#endif /* TEST */

36
contrib/gperf/lib/hash.cc Normal file
View File

@ -0,0 +1,36 @@
/*
Copyright (C) 1990 Free Software Foundation
written by Doug Lea (dl@rocky.oswego.edu)
This file is part of the GNU C++ Library. This library is free
software; you can redistribute it and/or modify it under the terms of
the GNU Library General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your
option) any later version. This library 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 Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <hash.h>
/*
some useful hash functions
*/
unsigned int hashpjw (const char* x) // From Dragon book, p436
{
unsigned int h = 0;
unsigned int g;
while (*x != 0)
{
h = (h << 4) + (unsigned char) *x++;
if ((g = h & 0xf0000000) != 0)
h = (h ^ (g >> 24)) ^ g;
}
return h;
}

27
contrib/gperf/lib/hash.h Normal file
View File

@ -0,0 +1,27 @@
// This may look like C code, but it is really -*- C++ -*-
/*
Copyright (C) 1988, 1992 Free Software Foundation
written by Doug Lea (dl@rocky.oswego.edu)
This file is part of the GNU C++ Library. This library is free
software; you can redistribute it and/or modify it under the terms of
the GNU Library General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your
option) any later version. This library 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 Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _hash_h
#define _hash_h 1
/* a hash function for null-terminated char* strings using the
method described in Aho, Sethi, & Ullman, p 436. */
extern unsigned int hashpjw (const char*);
#endif

View File

@ -0,0 +1,143 @@
# Makefile for gperf/src
# Copyright (C) 1989, 1992, 1993, 1998 Free Software Foundation, Inc.
# written by Douglas C. Schmidt (schmidt@ics.uci.edu)
#
# This file is part of GNU GPERF.
#
# GNU GPERF 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 1, or (at your option)
# any later version.
#
# GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA.
#### Start of system configuration section. ####
# Directories used by "make":
srcdir = @srcdir@
# Directories used by "make install":
prefix = @prefix@
local_prefix = /usr/local
exec_prefix = @exec_prefix@
bindir = @bindir@
# Programs used by "make":
# C compiler
CC = @CC@
CFLAGS = @CFLAGS@
CPP = @CPP@
# C++ compiler
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
CXXCPP = @CXXCPP@
# Other
MV = mv
LN = ln
RM = rm -f
@SET_MAKE@
# Programs used by "make install":
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
#### End of system configuration section. ####
SHELL = /bin/sh
VPATH = $(srcdir)
OBJECTS = new.o options.o iterator.o main.o gen-perf.o key-list.o list-node.o \
hash-table.o bool-array.o read-line.o trace.o vectors.o version.o
LIBS = ../lib/libgp.a -lm
CPPFLAGS = -I. -I$(srcdir)/../lib
TARGETPROG = gperf
all : $(TARGETPROG)
$(TARGETPROG): $(OBJECTS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
# Don't use implicit rules, since AIX "make" and OSF/1 "make" don't always
# expand $< correctly in this context.
#
#%.o : %.c
# $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
#
#%.o : %.cc
# $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
# Dependencies.
CONFIG_H = config.h
VERSION_H = version.h
VECTORS_H = vectors.h
TRACE_H = trace.h
READ_LINE_H = read-line.h read-line.icc $(TRACE_H)
OPTIONS_H = options.h options.icc $(TRACE_H)
LIST_NODE_H = list-node.h $(VECTORS_H)
KEY_LIST_H = key-list.h $(LIST_NODE_H) $(VECTORS_H) $(READ_LINE_H)
ITERATOR_H = iterator.h
HASH_TABLE_H = hash-table.h $(LIST_NODE_H)
BOOL_ARRAY_H = bool-array.h bool-array.icc $(TRACE_H) $(OPTIONS_H)
GEN_PERF_H = gen-perf.h $(KEY_LIST_H) $(BOOL_ARRAY_H)
bool-array.o : bool-array.cc $(BOOL_ARRAY_H) $(OPTIONS_H) $(TRACE_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/bool-array.cc
gen-perf.o : gen-perf.cc $(GEN_PERF_H) $(OPTIONS_H) $(TRACE_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/gen-perf.cc
hash-table.o : hash-table.cc $(HASH_TABLE_H) $(OPTIONS_H) $(TRACE_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/hash-table.cc
iterator.o : iterator.cc $(ITERATOR_H) $(TRACE_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/iterator.cc
key-list.o : key-list.cc $(KEY_LIST_H) $(OPTIONS_H) $(READ_LINE_H) $(HASH_TABLE_H) $(TRACE_H) $(VERSION_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/key-list.cc
list-node.o : list-node.cc $(LIST_NODE_H) $(OPTIONS_H) $(TRACE_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/list-node.cc
main.o : main.cc $(OPTIONS_H) $(GEN_PERF_H) $(TRACE_H) $(CONFIG_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/main.cc
new.o : new.cc $(TRACE_H) $(CONFIG_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/new.cc
options.o : options.cc $(OPTIONS_H) $(ITERATOR_H) $(TRACE_H) $(VECTORS_H) $(VERSION_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/options.cc
read-line.o : read-line.cc $(READ_LINE_H) $(OPTIONS_H) $(TRACE_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/read-line.cc
trace.o : trace.cc $(TRACE_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/trace.cc
vectors.o : vectors.cc $(VECTORS_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/vectors.cc
version.o : version.cc $(VERSION_H)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/version.cc
install : all force
if [ ! -d $(bindir) ] ; then mkdir $(bindir) ; fi
$(INSTALL_PROGRAM) $(TARGETPROG) $(bindir)/$(TARGETPROG)
installdirs : force
if [ ! -d $(bindir) ] ; then mkdir $(bindir) ; fi
uninstall : force
$(RM) $(bindir)/$(TARGETPROG)
check : all
mostlyclean : clean
clean : force
$(RM) *~ *.s *.o *.a $(TARGETPROG) core
distclean : clean
$(RM) config.status config.log config.cache Makefile config.h
maintainer-clean : distclean
force :

View File

@ -0,0 +1,49 @@
/* Fast lookup table abstraction implemented as an Iteration Number Array
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "bool-array.h"
#include <stdio.h>
#include <string.h>
#include "options.h"
#include "trace.h"
STORAGE_TYPE * Bool_Array::storage_array;
STORAGE_TYPE Bool_Array::iteration_number;
unsigned int Bool_Array::size;
/* Prints out debugging diagnostics. */
Bool_Array::~Bool_Array (void)
{
T (Trace t ("Bool_Array::~Bool_Array");)
if (option[DEBUG])
fprintf (stderr, "\ndumping boolean array information\n"
"size = %d\niteration number = %d\nend of array dump\n",
size, iteration_number);
}
#ifndef __OPTIMIZE__
#define INLINE /* not inline */
#include "bool-array.icc"
#undef INLINE
#endif /* not defined __OPTIMIZE__ */

View File

@ -0,0 +1,66 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Simple lookup table abstraction implemented as an Iteration Number Array.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Define and implement a simple boolean array abstraction,
uses an Iteration Numbering implementation to save on initialization time. */
#ifndef bool_array_h
#define bool_array_h 1
#include "trace.h"
#ifdef LO_CAL
/* If we are on a memory diet then we'll only make these use a limited
amount of storage space. */
typedef unsigned short STORAGE_TYPE;
#else
typedef unsigned int STORAGE_TYPE;
#endif
class Bool_Array
{
private:
static STORAGE_TYPE *storage_array; /* Initialization of the index space. */
static STORAGE_TYPE iteration_number; /* Keep track of the current iteration. */
static unsigned int size; /* Keep track of array size. */
public:
Bool_Array (void);
~Bool_Array (void);
static void init (STORAGE_TYPE *buffer, unsigned int s);
static int find (int hash_value);
static void reset (void);
};
#ifdef __OPTIMIZE__ /* efficiency hack! */
#include <stdio.h>
#include <string.h>
#include "options.h"
#define INLINE inline
#include "bool-array.icc"
#undef INLINE
#endif
#endif

View File

@ -0,0 +1,85 @@
/* Inline Functions for bool-array.{h,cc}.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
// This needs:
//#include <stdio.h>
//#include <string.h>
//#include "options.h"
//#include "trace.h"
INLINE
Bool_Array::Bool_Array (void)
{
T (Trace t ("Bool_Array::Bool_Array");)
storage_array = 0;
iteration_number = size = 0;
}
INLINE void
Bool_Array::init (STORAGE_TYPE *buffer, unsigned int s)
{
T (Trace t ("Bool_Array::init");)
size = s;
iteration_number = 1;
storage_array = buffer;
memset (storage_array, 0, s * sizeof (*storage_array));
if (option[DEBUG])
fprintf (stderr, "\nbool array size = %d, total bytes = %d\n",
size, (unsigned int) (size * sizeof (*storage_array)));
}
INLINE int
Bool_Array::find (int index)
{
T (Trace t ("Bool_Array::find");)
if (storage_array[index] == iteration_number)
return 1;
else
{
storage_array[index] = iteration_number;
return 0;
}
}
INLINE void
Bool_Array::reset (void)
{
T (Trace t ("Bool_Array::reset");)
/* If we wrap around it's time to zero things out again! However, this only
occurs once about every 2^31 or 2^15 iterations, so it should probably
never happen! */
if (++iteration_number == 0)
{
if (option[DEBUG])
{
fprintf (stderr, "(re-initializing bool_array)...");
fflush (stderr);
}
iteration_number = 1;
memset (storage_array, 0, size * sizeof (*storage_array));
if (option[DEBUG])
{
fprintf (stderr, "done\n");
fflush (stderr);
}
}
}

View File

@ -0,0 +1,19 @@
/* config.h.in. Generated automatically from configure.in by autoheader. */
/* Define if the C++ compiler supports "throw ()" declarations. */
#undef HAVE_THROW_DECL
/* Define if you have the getrlimit function. */
#undef HAVE_GETRLIMIT
/* Define if you have the setrlimit function. */
#undef HAVE_SETRLIMIT
/* Define if you have the <sys/resource.h> header file. */
#undef HAVE_SYS_RESOURCE_H
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H

1573
contrib/gperf/src/configure vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,71 @@
dnl autoconf configuration for gperf/src
dnl Copyright (C) 1998 Free Software Foundation, Inc.
dnl written by Douglas C. Schmidt (schmidt@ics.uci.edu)
dnl
dnl This file is part of GNU GPERF.
dnl
dnl GNU GPERF is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 1, or (at your option)
dnl any later version.
dnl
dnl GNU GPERF is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with GNU GPERF; see the file COPYING. If not, write to the
dnl Free Software Foundation, 59 Temple Place - Suite 330, Boston,
dnl MA 02111-1307, USA.
AC_INIT(gen-perf.cc)
AC_CONFIG_HEADER(config.h)
AC_PROG_MAKE_SET
dnl
dnl checks for programs
dnl
AC_PROG_CC
dnl sets variable CC
AC_PROG_CPP
dnl sets variable CPP
AC_PROG_CXX
dnl sets variable CXX
AC_PROG_CXXCPP
dnl sets variable CXXCPP
CL_PROG_INSTALL
dnl sets variables INSTALL, INSTALL_DATA, INSTALL_PROGRAM
dnl
dnl checks for compiler characteristics
dnl
AC_MSG_CHECKING([for working throw()])
AC_CACHE_VAL(gp_cxx_throw_decl,[
AC_LANG_SAVE()
AC_LANG_CPLUSPLUS()
AC_TRY_COMPILE([#include <stdlib.h>
void operator delete (void* ptr) throw() {}], [],
gp_cxx_throw_decl=yes, gp_cxx_throw_decl=no)
AC_LANG_RESTORE()
])
AC_MSG_RESULT([$]gp_cxx_throw_decl)
if test [$]gp_cxx_throw_decl = yes; then
AC_DEFINE(HAVE_THROW_DECL)
fi
dnl
dnl checks for functions and declarations
dnl
AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h)
dnl DEFs HAVE_UNISTD_H, HAVE_SYS_TIME_H, HAVE_SYS_RESOURCE_H
if test $ac_cv_header_sys_resource_h = yes; then
AC_CHECK_FUNCS(getrlimit)
dnl DEFS HAVE_GETRLIMIT
if test $ac_cv_func_getrlimit = yes; then
AC_CHECK_FUNCS(setrlimit)
dnl DEFS HAVE_SETRLIMIT
fi
fi
dnl
dnl That's it.
dnl
AC_OUTPUT(Makefile)

View File

@ -0,0 +1,342 @@
/* Provides high-level routines to manipulate the keywork list
structures the code generation output.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include <stdio.h>
#include <stdlib.h> /* declares rand(), srand() */
#include <time.h> /* declares time() */
#include "options.h"
#include "gen-perf.h"
#include "trace.h"
/* Efficiently returns the least power of two greater than or equal to X! */
#define POW(X) ((!X)?1:(X-=1,X|=X>>1,X|=X>>2,X|=X>>4,X|=X>>8,X|=X>>16,(++X)))
/* Reads input keys, possibly applies the reordering heuristic, sets the
maximum associated value size (rounded up to the nearest power of 2),
may initialize the associated values array, and determines the maximum
hash table size. Note: using the random numbers is often helpful,
though not as deterministic, of course! */
Gen_Perf::Gen_Perf (void)
{
T (Trace t ("Gen_Perf::Gen_Perf");)
int asso_value_max;
int non_linked_length;
Key_List::read_keys ();
if (option[ORDER])
reorder ();
asso_value_max = option.get_asso_max ();
non_linked_length = Key_List::keyword_list_length ();
num_done = 1;
fewest_collisions = 0;
if (asso_value_max == 0)
asso_value_max = non_linked_length;
else if (asso_value_max > 0)
asso_value_max *= non_linked_length;
else /* if (asso_value_max < 0) */
asso_value_max = non_linked_length / -asso_value_max;
option.set_asso_max (POW (asso_value_max));
if (option[RANDOM])
{
srand ((long) time (0));
for (int i = 0; i < ALPHA_SIZE; i++)
asso_values[i] = (rand () & asso_value_max - 1);
}
else
{
int asso_value = option.initial_value ();
if (asso_value) /* Initialize array if user requests non-zero default. */
for (int i = ALPHA_SIZE - 1; i >= 0; i--)
asso_values[i] = asso_value & option.get_asso_max () - 1;
}
max_hash_value = Key_List::max_key_length () + option.get_asso_max () *
option.get_max_keysig_size ();
if (option[DEBUG])
fprintf (stderr, "total non-linked keys = %d\nmaximum associated value is %d"
"\nmaximum size of generated hash table is %d\n",
non_linked_length, asso_value_max, max_hash_value);
}
/* Merge two disjoint hash key multisets to form the ordered disjoint union of the sets.
(In a multiset, an element can occur multiple times).
Precondition: both set_1 and set_2 must be ordered. Returns the length
of the combined set. */
inline int
Gen_Perf::compute_disjoint_union (const char *set_1, const char *set_2, char *set_3)
{
T (Trace t ("Gen_Perf::compute_disjoint_union");)
char *base = set_3;
while (*set_1 && *set_2)
if (*set_1 == *set_2)
set_1++, set_2++;
else
{
*set_3 = *set_1 < *set_2 ? *set_1++ : *set_2++;
if (set_3 == base || *set_3 != *(set_3-1)) set_3++;
}
while (*set_1)
{
*set_3 = *set_1++;
if (set_3 == base || *set_3 != *(set_3-1)) set_3++;
}
while (*set_2)
{
*set_3 = *set_2++;
if (set_3 == base || *set_3 != *(set_3-1)) set_3++;
}
*set_3 = '\0';
return set_3 - base;
}
/* Sort the UNION_SET in increasing frequency of occurrence.
This speeds up later processing since we may assume the resulting
set (Set_3, in this case), is ordered. Uses insertion sort, since
the UNION_SET is typically short. */
inline void
Gen_Perf::sort_set (char *union_set, int len)
{
T (Trace t ("Gen_Perf::sort_set");)
int i, j;
for (i = 0, j = len - 1; i < j; i++)
{
int curr;
char tmp;
for (curr = i + 1, tmp = union_set[curr];
curr > 0 && occurrences[(unsigned char)tmp] < occurrences[(unsigned char)(union_set[curr-1])];
curr--)
union_set[curr] = union_set[curr - 1];
union_set[curr] = tmp;
}
}
/* Generate a key set's hash value. */
inline int
Gen_Perf::hash (List_Node *key_node)
{
T (Trace t ("Gen_Perf::hash");)
int sum = option[NOLENGTH] ? 0 : key_node->length;
for (const char *ptr = key_node->char_set; *ptr; ptr++)
sum += asso_values[(unsigned char)(*ptr)];
return key_node->hash_value = sum;
}
/* Find out how character value change affects successfully hashed items.
Returns FALSE if no other hash values are affected, else returns TRUE.
Note that because Option.Get_Asso_Max is a power of two we can guarantee
that all legal Asso_Values are visited without repetition since
Option.Get_Jump was forced to be an odd value! */
inline int
Gen_Perf::affects_prev (char c, List_Node *curr)
{
T (Trace t ("Gen_Perf::affects_prev");)
int original_char = asso_values[(unsigned char)c];
int total_iterations = !option[FAST]
? option.get_asso_max () : option.get_iterations () ? option.get_iterations () : keyword_list_length ();
/* Try all legal associated values. */
for (int i = total_iterations - 1; i >= 0; i--)
{
int collisions = 0;
asso_values[(unsigned char)c] =
(asso_values[(unsigned char)c] + (option.get_jump () ? option.get_jump () : rand ()))
& (option.get_asso_max () - 1);
/* Iteration Number array is a win, O(1) intialization time! */
reset ();
/* See how this asso_value change affects previous keywords. If
it does better than before we'll take it! */
for (List_Node *ptr = head;
!Bool_Array::find (hash (ptr)) || ++collisions < fewest_collisions;
ptr = ptr->next)
if (ptr == curr)
{
fewest_collisions = collisions;
if (option[DEBUG])
fprintf (stderr, "- resolved after %d iterations", total_iterations - i);
return 0;
}
}
/* Restore original values, no more tries. */
asso_values[(unsigned char)c] = original_char;
/* If we're this far it's time to try the next character.... */
return 1;
}
/* Change a character value, try least-used characters first. */
void
Gen_Perf::change (List_Node *prior, List_Node *curr)
{
T (Trace t ("Gen_Perf::change");)
static char *union_set;
if (!union_set)
union_set = new char [2 * option.get_max_keysig_size () + 1];
if (option[DEBUG])
{
fprintf (stderr, "collision on keyword #%d, prior = \"%s\", curr = \"%s\" hash = %d\n",
num_done, prior->key, curr->key, curr->hash_value);
fflush (stderr);
}
sort_set (union_set, compute_disjoint_union (prior->char_set, curr->char_set, union_set));
/* Try changing some values, if change doesn't alter other values continue normal action. */
fewest_collisions++;
for (char *temp = union_set; *temp; temp++)
if (!affects_prev (*temp, curr))
{
if (option[DEBUG])
{
fprintf (stderr, " by changing asso_value['%c'] (char #%d) to %d\n",
*temp, temp - union_set + 1, asso_values[(unsigned char)(*temp)]);
fflush (stderr);
}
return; /* Good, doesn't affect previous hash values, we'll take it. */
}
for (List_Node *ptr = head; ptr != curr; ptr = ptr->next)
hash (ptr);
hash (curr);
if (option[DEBUG])
{
fprintf (stderr, "** collision not resolved after %d iterations, %d duplicates remain, continuing...\n",
!option[FAST] ? option.get_asso_max () : option.get_iterations () ? option.get_iterations () : keyword_list_length (),
fewest_collisions + total_duplicates);
fflush (stderr);
}
}
/* Does the hard stuff....
Initializes the Iteration Number array, and attempts to find a perfect
function that will hash all the key words without getting any
duplications. This is made much easier since we aren't attempting
to generate *minimum* functions, only perfect ones.
If we can't generate a perfect function in one pass *and* the user
hasn't enabled the DUP option, we'll inform the user to try the
randomization option, use -D, or choose alternative key positions.
The alternatives (e.g., back-tracking) are too time-consuming, i.e,
exponential in the number of keys. */
int
Gen_Perf::operator() (void)
{
T (Trace t ("Gen_Perf::operator()");)
#if LARGE_STACK_ARRAYS
STORAGE_TYPE buffer[max_hash_value + 1];
#else
// Note: we don't use new, because that invokes a custom operator new.
STORAGE_TYPE *buffer
= (STORAGE_TYPE*) malloc (sizeof(STORAGE_TYPE) * (max_hash_value + 1));
if (buffer == NULL)
abort ();
#endif
Bool_Array::init (buffer, max_hash_value + 1);
List_Node *curr;
for (curr = head; curr; curr = curr->next)
{
hash (curr);
for (List_Node *ptr = head; ptr != curr; ptr = ptr->next)
if (ptr->hash_value == curr->hash_value)
{
change (ptr, curr);
break;
}
num_done++;
}
/* Make one final check, just to make sure nothing weird happened.... */
Bool_Array::reset ();
for (curr = head; curr; curr = curr->next)
if (Bool_Array::find (hash (curr)))
if (option[DUP]) /* Keep track of this number... */
total_duplicates++;
else /* Yow, big problems. we're outta here! */
{
fprintf (stderr, "\nInternal error, duplicate value %d:\n"
"try options -D or -r, or use new key positions.\n\n", hash (curr));
#if !LARGE_STACK_ARRAYS
free ((char *) buffer);
#endif
return 1;
}
/* Sorts the key word list by hash value, and then outputs the list.
The generated hash table code is only output if the early stage of
processing turned out O.K. */
sort ();
output ();
#if !LARGE_STACK_ARRAYS
free ((char *) buffer);
#endif
return 0;
}
/* Prints out some diagnostics upon completion. */
Gen_Perf::~Gen_Perf (void)
{
T (Trace t ("Gen_Perf::~Gen_Perf");)
if (option[DEBUG])
{
fprintf (stderr, "\ndumping occurrence and associated values tables\n");
for (int i = 0; i < ALPHA_SIZE; i++)
if (occurrences[i])
fprintf (stderr, "asso_values[%c] = %6d, occurrences[%c] = %6d\n",
i, asso_values[i], i, occurrences[i]);
fprintf (stderr, "end table dumping\n");
}
}

View File

@ -0,0 +1,50 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Provides high-level routines to manipulate the keyword list
structures the code generation output.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#ifndef gen_perf_h
#define gen_perf_h 1
#include "key-list.h"
#include "bool-array.h"
class Gen_Perf : private Key_List, private Bool_Array
{
private:
int max_hash_value; /* Maximum possible hash value. */
int fewest_collisions; /* Records fewest # of collisions for asso value. */
int num_done; /* Number of keywords processed without a collision. */
void change (List_Node *prior, List_Node *curr);
int affects_prev (char c, List_Node *curr);
static int hash (List_Node *key_node);
static int compute_disjoint_union (const char *set_1, const char *set_2, char *set_3);
static void sort_set (char *union_set, int len);
public:
Gen_Perf (void);
~Gen_Perf (void);
int operator () (void);
};
#endif

View File

@ -0,0 +1,91 @@
/* Hash table for checking keyword links. Implemented using double hashing.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "hash-table.h"
#include <stdio.h>
#include <string.h> /* declares memset(), strcmp() */
#include <hash.h>
#include "options.h"
#include "trace.h"
#define NIL(TYPE) (TYPE *)0
/* The size of the hash table is always the smallest power of 2 >= the size
indicated by the user. This allows several optimizations, including
the use of double hashing and elimination of the mod instruction.
Note that the size had better be larger than the number of items
in the hash table, else there's trouble!!! Note that the memory
for the hash table is allocated *outside* the intialization routine.
This compromises information hiding somewhat, but greatly reduces
memory fragmentation, since we can now use alloca! */
Hash_Table::Hash_Table (List_Node **table_ptr, int s):
table (table_ptr), size (s), collisions (0)
{
T (Trace t ("Hash_Table::Hash_Table");)
memset ((char *) table, 0, size * sizeof (*table));
}
Hash_Table::~Hash_Table (void)
{
T (Trace t ("Hash_Table::~Hash_Table");)
if (option[DEBUG])
{
int field_width = option.get_max_keysig_size ();
fprintf (stderr,
"\ndumping the hash table\n"
"total available table slots = %d, total bytes = %d, total collisions = %d\n"
"location, %*s, keyword\n",
size, size * (int) sizeof (*table), collisions,
field_width, "keysig");
for (int i = size - 1; i >= 0; i--)
if (table[i])
fprintf (stderr, "%8d, %*s, %s\n",
i, field_width, table[i]->char_set, table[i]->key);
fprintf (stderr, "\nend dumping hash table\n\n");
}
}
/* If the ITEM is already in the hash table return the item found
in the table. Otherwise inserts the ITEM, and returns FALSE.
Uses double hashing. */
List_Node *
Hash_Table::operator() (List_Node *item, int ignore_length)
{
T (Trace t ("Hash_Table::operator()");)
unsigned hash_val = hashpjw (item->char_set);
int probe = hash_val & size - 1;
int increment = (hash_val ^ item->length | 1) & size - 1;
while (table[probe]
&& (strcmp (table[probe]->char_set, item->char_set)
|| (!ignore_length && table[probe]->length != item->length)))
{
collisions++;
probe = probe + increment & size - 1;
}
return table[probe] ? table[probe] : (table[probe] = item, NIL (List_Node));
}

View File

@ -0,0 +1,42 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Hash table used to check for duplicate keyword entries.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#ifndef hash_table_h
#define hash_table_h 1
#include "list-node.h"
class Hash_Table
{
private:
List_Node **table; /* Vector of pointers to linked lists of List_Node's. */
int size; /* Size of the vector. */
int collisions; /* Find out how well our double hashing is working! */
public:
Hash_Table (List_Node **t, int s);
~Hash_Table (void);
List_Node *operator () (List_Node *item, int ignore_length);
};
#endif

View File

@ -0,0 +1,88 @@
/* Provides an Iterator for keyword characters.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "iterator.h"
#include <stream.h>
#include <ctype.h>
#include "trace.h"
/* Constructor for Iterator. */
Iterator::Iterator (const char *s, int lo, int hi, int word_end, int bad_val, int key_end)
{
T (Trace t ("Iterator::Iterator");)
end = key_end;
error_value = bad_val;
end_word = word_end;
str = s;
hi_bound = hi;
lo_bound = lo;
}
/* Provide an Iterator, returning the ``next'' value from
the list of valid values given in the constructor. */
int
Iterator::operator() (void)
{
T (Trace t ("Iterator::operator()");)
/* Variables to record the Iterator's status when handling ranges, e.g., 3-12. */
static int size;
static int curr_value;
static int upper_bound;
if (size)
{
if (++curr_value >= upper_bound)
size = 0;
return curr_value;
}
else
{
while (*str)
switch (*str)
{
default: return error_value;
case ',': str++; break;
case '$': str++; return end_word;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
for (curr_value = 0; isdigit ((unsigned char)(*str)); str++)
curr_value = curr_value * 10 + (*str - '0');
if (*str == '-')
{
for (size = 1, upper_bound = 0;
isdigit ((unsigned char)(*++str));
upper_bound = upper_bound * 10 + (*str - '0'));
if (upper_bound <= curr_value || upper_bound > hi_bound)
return error_value;
}
return curr_value >= lo_bound && curr_value <= hi_bound
? curr_value : error_value;
}
return end;
}
}

View File

@ -1,6 +1,8 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Provides an Iterator for keyword characters.
Copyright (C) 1989 Free Software Foundation, Inc.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
@ -16,8 +18,8 @@ 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 GPERF; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
along with GNU GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Provides an Iterator that expands and decodes a control string containing digits
and ranges, returning an integer every time the generator function is called.
@ -28,20 +30,22 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
No errors are handled in these routines, they are passed back to the
calling routines via a user-supplied Error_Value */
#ifndef _iterator_h
#define _iterator_h
#include "prototype.h"
#ifndef iterator_h
#define iterator_h 1
typedef struct iterator
class Iterator
{
char *str; /* A pointer to the string provided by the user. */
private:
const char *str; /* A pointer to the string provided by the user. */
int end; /* Value returned after last key is processed. */
int end_word; /* A value marking the abstract ``end of word'' ( usually '$'). */
int error_value; /* Error value returned when input is syntactically erroneous. */
int hi_bound; /* Greatest possible value, inclusive. */
int lo_bound; /* Smallest possible value, inclusive. */
} ITERATOR;
extern void iterator_init P ((char *s, int lo, int hi, int word_end, int bad_val, int key_end));
extern int next P ((void));
#endif /* _iterator_h */
public:
Iterator (const char *s, int lo, int hi, int word_end, int bad_val, int key_end);
int operator () (void);
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,96 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Data and function member declarations for the keyword list class.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
/* The key word list is a useful abstraction that keeps track of
various pieces of information that enable that fast generation
of the Gen_Perf.hash function. A Key_List is a singly-linked
list of List_Nodes. */
#ifndef key_list_h
#define key_list_h 1
#include "list-node.h"
#include "vectors.h"
#include "read-line.h"
/* OSF/1 cxx needs these forward declarations. */
struct Output_Constants;
struct Output_Compare;
class Key_List : private Read_Line, public Vectors
{
private:
const char *array_type; /* Pointer to the type for word list. */
const char *return_type; /* Pointer to return type for lookup function. */
const char *struct_tag; /* Shorthand for user-defined struct tag type. */
const char *include_src; /* C source code to be included verbatim. */
int max_key_len; /* Maximum length of the longest keyword. */
int min_key_len; /* Minimum length of the shortest keyword. */
int min_hash_value; /* Minimum hash value for all keywords. */
int max_hash_value; /* Maximum hash value for all keywords. */
int occurrence_sort; /* True if sorting by occurrence. */
int hash_sort; /* True if sorting by hash value. */
int additional_code; /* True if any additional C code is included. */
int list_len; /* Length of head's Key_List, not counting duplicates. */
int total_keys; /* Total number of keys, counting duplicates. */
static int determined[MAX_ALPHA_SIZE]; /* Used in function reorder, below. */
static int get_occurrence (List_Node *ptr);
#ifndef strcspn
static int strcspn (const char *s, const char *reject);
#endif
static int already_determined (List_Node *ptr);
static void set_determined (List_Node *ptr);
void compute_min_max (void);
int num_hash_values (void);
void output_constants (struct Output_Constants&);
void output_hash_function (void);
void output_keylength_table (void);
void output_keyword_table (void);
void output_lookup_array (void);
void output_lookup_tables (void);
void output_lookup_function_body (const struct Output_Compare&);
void output_lookup_function (void);
void set_output_types (void);
void dump (void);
const char *get_array_type (void);
const char *save_include_src (void);
const char *get_special_input (char delimiter);
List_Node *merge (List_Node *list1, List_Node *list2);
List_Node *merge_sort (List_Node *head);
protected:
List_Node *head; /* Points to the head of the linked list. */
int total_duplicates; /* Total number of duplicate hash values. */
public:
Key_List (void);
~Key_List (void);
int keyword_list_length (void);
int max_key_length (void);
void reorder (void);
void sort (void);
void read_keys (void);
void output (void);
};
#endif

View File

@ -0,0 +1,101 @@
/* Creates and initializes a new list node.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "list-node.h"
#include <stdio.h>
#include <stdlib.h> /* declares exit() */
#include "options.h"
#include "trace.h"
/* Sorts the key set alphabetically to speed up subsequent operations.
Uses insertion sort since the set is probably quite small. */
inline void
List_Node::set_sort (char *base, int len)
{
T (Trace t ("List_Node::set_sort");)
int i, j;
for (i = 0, j = len - 1; i < j; i++)
{
char curr, tmp;
for (curr = i + 1, tmp = base[curr]; curr > 0 && tmp < base[curr-1]; curr--)
base[curr] = base[curr - 1];
base[curr] = tmp;
}
}
/* Initializes a List_Node. This requires obtaining memory for the CHAR_SET
initializing them using the information stored in the KEY_POSITIONS array in Options,
and checking for simple errors. It's important to note that KEY and REST are
both pointers to the different offsets into the same block of dynamic memory pointed
to by parameter K. The data member REST is used to store any additional fields
of the input file (it is set to the "" string if Option[TYPE] is not enabled).
This is useful if the user wishes to incorporate a lookup structure,
rather than just an array of keys. Finally, KEY_NUMBER contains a count
of the total number of keys seen so far. This is used to initialize
the INDEX field to some useful value. */
List_Node::List_Node (char *k, int len): link (0), next (0),
key (k), rest (option[TYPE] ? k + len + 1 : ""), length (len), index (0)
{
T (Trace t ("List_Node::List_Node");)
char *ptr = new char[(option[ALLCHARS] ? len : option.get_max_keysig_size ()) + 1];
char *key_set = ptr;
k[len] = '\0'; /* Null terminate KEY to separate it from REST. */
if (option[ALLCHARS]) /* Use all the character position in the KEY. */
for (; *k; k++, ptr++)
++occurrences[(unsigned char)(*ptr = *k)];
else /* Only use those character positions specified by the user. */
{
int i;
/* Iterate thru the list of key_positions, initializing occurrences table
and char_set (via char * pointer ptr). */
for (option.reset (); (i = option.get ()) != EOS; )
{
if (i == WORD_END) /* Special notation for last KEY position, i.e. '$'. */
*ptr = key[len - 1];
else if (i <= len) /* Within range of KEY length, so we'll keep it. */
*ptr = key[i - 1];
else /* Out of range of KEY length, so we'll just skip it. */
continue;
++occurrences[(unsigned char)(*ptr++)];
}
/* Didn't get any hits and user doesn't want to consider the
keylength, so there are essentially no usable hash positions! */
if (ptr == char_set && option[NOLENGTH])
{
fprintf (stderr, "Can't hash keyword %s with chosen key positions.\n", key);
exit (1);
}
}
*ptr = '\0'; /* Terminate this bastard.... */
/* Sort the KEY_SET items alphabetically. */
set_sort (key_set, ptr - key_set);
char_set = key_set;
}

View File

@ -0,0 +1,45 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Data and function members for defining values and operations of a list node.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#ifndef list_node_h
#define list_node_h 1
#include "vectors.h"
struct List_Node : private Vectors
{
List_Node *link; /* TRUE if key has an identical KEY_SET as another key. */
List_Node *next; /* Points to next element on the list. */
const char *key; /* Each keyword string stored here. */
const char *rest; /* Additional information for building hash function. */
const char *char_set; /* Set of characters to hash, specified by user. */
int length; /* Length of the key. */
int hash_value; /* Hash value for the key. */
int occurrence; /* A metric for frequency of key set occurrences. */
int index; /* Position of this node relative to other nodes. */
List_Node (char *key, int len);
static void set_sort (char *base, int len);
};
#endif

72
contrib/gperf/src/main.cc Normal file
View File

@ -0,0 +1,72 @@
/* Driver program for the Gen_Perf hash function generator
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
/* Simple driver program for the Gen_Perf.hash function generator.
Most of the hard work is done in class Gen_Perf and its class methods. */
#include "config.h"
#include <sys/types.h>
#if LARGE_STACK_ARRAYS && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#endif
#include <stdio.h>
#include "options.h"
#include "gen-perf.h"
#include "trace.h"
int
main (int argc, char *argv[])
{
T (Trace t ("main");)
#if LARGE_STACK_ARRAYS && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) && defined(RLIMIT_STACK)
/* Get rid of any avoidable limit on stack size. */
{
struct rlimit rlim;
if (getrlimit (RLIMIT_STACK, &rlim) == 0)
if (rlim.rlim_cur < rlim.rlim_max)
{
rlim.rlim_cur = rlim.rlim_max;
setrlimit (RLIMIT_STACK, &rlim);
}
}
#endif /* RLIMIT_STACK */
/* Sets the Options. */
option (argc, argv);
/* Initializes the key word list. */
Gen_Perf generate_table;
/* Generates and prints the Gen_Perf hash table. */
int status = generate_table ();
/* Don't use exit() here, it skips the destructors. */
return status;
}

87
contrib/gperf/src/new.cc Normal file
View File

@ -0,0 +1,87 @@
/* Defines a buffered memory allocation abstraction that reduces calls to
malloc.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "config.h"
#include <stdio.h>
#include <stdlib.h> /* declares malloc(), exit() */
#include "trace.h"
/* Determine default alignment. If your C++ compiler does not
like this then try something like #define DEFAULT_ALIGNMENT 8. */
struct fooalign {char x; double d;};
const int ALIGNMENT = ((char *)&((struct fooalign *) 0)->d - (char *)0);
/* Provide an abstraction that cuts down on the number of
calls to NEW by buffering the memory pool from which
strings are allocated. */
void *
operator new (size_t size)
{
T (Trace t ("operator new");)
static char *buf_start = 0; /* Large array used to reduce calls to NEW. */
static char *buf_end = 0; /* Indicates end of BUF_START. */
static size_t buf_size = 4096; /* Size of buffer pointed to by BUF_START. */
char *temp;
/* Align this on correct boundaries, just to be safe... */
size = ((size + ALIGNMENT - 1) / ALIGNMENT) * ALIGNMENT;
/* If we are about to overflow our buffer we'll just grab another
chunk of memory. Since we never free the original memory it
doesn't matter that no one points to the beginning of that
chunk. Note we use a heuristic that grows the buffer either by
size of the request or by twice the previous size, whichever is
larger. */
if (buf_start + size >= buf_end)
{
buf_size *= 2;
if (buf_size < size)
buf_size = size;
if ((buf_start = (char *)malloc (buf_size)) != (char *)0)
buf_end = buf_start + buf_size;
else
{
fprintf (stderr, "Virtual memory exhausted in `operator new'\n");
exit (1);
}
}
temp = buf_start;
buf_start += size;
return temp;
}
/* We need this deletion operator in order to make the linker happy.
Because `operator new' and `operator delete' always come together. */
void
operator delete (void *ptr)
#ifdef HAVE_THROW_DECL
throw()
#endif
{
T (Trace t ("operator delete");)
// We cannot call free here, as it doesn't match the mallocs.
// free ((char *) ptr);
(void) ptr;
}

View File

@ -0,0 +1,668 @@
/* Handles parsing the Options provided to the user.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include <stdio.h>
#include <stdlib.h> /* declares atoi(), abs(), exit() */
#include <string.h> /* declares strcmp() */
#include "getopt.h"
#include "options.h"
#include "iterator.h"
#include "trace.h"
#include "vectors.h"
#include "version.h"
/* Global option coordinator for the entire program. */
Options option;
/* Records the program name. */
const char *program_name;
/* Size to jump on a collision. */
static const int DEFAULT_JUMP_VALUE = 5;
/* Default name for generated lookup function. */
static const char *const DEFAULT_NAME = "in_word_set";
/* Default name for the key component. */
static const char *const DEFAULT_KEY = "name";
/* Default name for the generated class. */
static const char *const DEFAULT_CLASS_NAME = "Perfect_Hash";
/* Default name for generated hash function. */
static const char *const DEFAULT_HASH_NAME = "hash";
/* Default name for generated hash table array. */
static const char *const DEFAULT_WORDLIST_NAME = "wordlist";
/* Default delimiters that separate keywords from their attributes. */
static const char *const DEFAULT_DELIMITERS = ",\n";
int Options::option_word;
int Options::total_switches;
int Options::total_keysig_size;
int Options::size;
int Options::key_pos;
int Options::jump;
int Options::initial_asso_value;
int Options::argument_count;
int Options::iterations;
char **Options::argument_vector;
const char *Options::function_name;
const char *Options::key_name;
const char *Options::class_name;
const char *Options::hash_name;
const char *Options::wordlist_name;
const char *Options::delimiters;
char Options::key_positions[MAX_KEY_POS];
/* Prints program usage to given stream. */
void
Options::short_usage (FILE * strm)
{
T (Trace t ("Options::short_usage");)
fprintf (strm, "Usage: %s [-cCdDef[num]GhH<hashname>i<init>Ijk<keys>K<keyname>lL<language>nN<function name>ors<size>S<switches>tTvW<wordlistname>Z<class name>7] [input-file]\n"
"Try `%s --help' for more information.\n",
program_name, program_name);
}
void
Options::long_usage (FILE * strm)
{
T (Trace t ("Options::long_usage");)
fprintf (strm,
"GNU `gperf' generates perfect hash functions.\n"
"\n"
"Usage: %s [OPTION]... [INPUT-FILE]\n"
"\n"
"If a long option shows an argument as mandatory, then it is mandatory\n"
"for the equivalent short option also.\n"
"\n"
"Input file interpretation:\n"
" -e, --delimiters=DELIMITER-LIST\n"
" Allow user to provide a string containing delimiters\n"
" used to separate keywords from their attributes.\n"
" Default is \",\\n\".\n"
" -t, --struct-type Allows the user to include a structured type\n"
" declaration for generated code. Any text before %%%%\n"
" is considered part of the type declaration. Key\n"
" words and additional fields may follow this, one\n"
" group of fields per line.\n"
"\n"
"Language for the output code:\n"
" -L, --language=LANGUAGE-NAME\n"
" Generates code in the specified language. Languages\n"
" handled are currently C++, ANSI-C, C, and KR-C. The\n"
" default is C.\n"
"\n"
"Details in the output code:\n"
" -K, --slot-name=NAME Select name of the keyword component in the keyword\n"
" structure.\n"
" -H, --hash-fn-name=NAME\n"
" Specify name of generated hash function. Default is\n"
" `hash'.\n"
" -N, --lookup-fn-name=NAME\n"
" Specify name of generated lookup function. Default\n"
" name is `in_word_set'.\n"
" -Z, --class-name=NAME Specify name of generated C++ class. Default name is\n"
" `Perfect_Hash'.\n"
" -7, --seven-bit Assume 7-bit characters.\n"
" -c, --compare-strncmp Generate comparison code using strncmp rather than\n"
" strcmp.\n"
" -C, --readonly-tables Make the contents of generated lookup tables\n"
" constant, i.e., readonly.\n"
" -E, --enum Define constant values using an enum local to the\n"
" lookup function rather than with defines.\n"
" -I, --includes Include the necessary system include file <string.h>\n"
" at the beginning of the code.\n"
" -G, --global Generate the static table of keywords as a static\n"
" global variable, rather than hiding it inside of the\n"
" lookup function (which is the default behavior).\n"
" -W, --word-array-name=NAME\n"
" Specify name of word list array. Default name is\n"
" `wordlist'.\n"
" -S, --switch=COUNT Causes the generated C code to use a switch\n"
" statement scheme, rather than an array lookup table.\n"
" This can lead to a reduction in both time and space\n"
" requirements for some keyfiles. The COUNT argument\n"
" determines how many switch statements are generated.\n"
" A value of 1 generates 1 switch containing all the\n"
" elements, a value of 2 generates 2 tables with 1/2\n"
" the elements in each table, etc. If COUNT is very\n"
" large, say 1000000, the generated C code does a\n"
" binary search.\n"
" -T, --omit-struct-type\n"
" Prevents the transfer of the type declaration to the\n"
" output file. Use this option if the type is already\n"
" defined elsewhere.\n"
"\n"
"Algorithm employed by gperf:\n"
" -k, --key-positions=KEYS\n"
" Select the key positions used in the hash function.\n"
" The allowable choices range between 1-%d, inclusive.\n"
" The positions are separated by commas, ranges may be\n"
" used, and key positions may occur in any order.\n"
" Also, the meta-character '*' causes the generated\n"
" hash function to consider ALL key positions, and $\n"
" indicates the ``final character'' of a key, e.g.,\n"
" $,1,2,4,6-10.\n"
" -l, --compare-strlen Compare key lengths before trying a string\n"
" comparison. This helps cut down on the number of\n"
" string comparisons made during the lookup.\n"
" -D, --duplicates Handle keywords that hash to duplicate values. This\n"
" is useful for certain highly redundant keyword sets.\n"
" -f, --fast=ITERATIONS Generate the gen-perf.hash function ``fast''. This\n"
" decreases gperf's running time at the cost of\n"
" minimizing generated table size. The numeric\n"
" argument represents the number of times to iterate\n"
" when resolving a collision. `0' means ``iterate by\n"
" the number of keywords''.\n"
" -i, --initial-asso=N Provide an initial value for the associate values\n"
" array. Default is 0. Setting this value larger helps\n"
" inflate the size of the final table.\n"
" -j, --jump=JUMP-VALUE Affects the ``jump value'', i.e., how far to advance\n"
" the associated character value upon collisions. Must\n"
" be an odd number, default is %d.\n"
" -n, --no-strlen Do not include the length of the keyword when\n"
" computing the hash function.\n"
" -o, --occurrence-sort Reorders input keys by frequency of occurrence of\n"
" the key sets. This should decrease the search time\n"
" dramatically.\n"
" -r, --random Utilizes randomness to initialize the associated\n"
" values table.\n"
" -s, --size-multiple=N Affects the size of the generated hash table. The\n"
" numeric argument N indicates ``how many times larger\n"
" or smaller'' the associated value range should be,\n"
" in relationship to the number of keys, e.g. a value\n"
" of 3 means ``allow the maximum associated value to\n"
" be about 3 times larger than the number of input\n"
" keys.'' Conversely, a value of -3 means ``make the\n"
" maximum associated value about 3 times smaller than\n"
" the number of input keys. A larger table should\n"
" decrease the time required for an unsuccessful\n"
" search, at the expense of extra table space. Default\n"
" value is 1.\n"
"\n"
"Informative output:\n"
" -h, --help Print this message.\n"
" -v, --version Print the gperf version number.\n"
" -d, --debug Enables the debugging option (produces verbose\n"
" output to the standard error).\n"
"\n"
"Report bugs to <bug-gnu-utils@gnu.org>.\n"
, program_name, MAX_KEY_POS - 1, DEFAULT_JUMP_VALUE);
}
/* Output command-line Options. */
void
Options::print_options (void)
{
T (Trace t ("Options::print_options");)
int i;
printf ("/* Command-line: ");
for (i = 0; i < argument_count; i++)
printf ("%s ", argument_vector[i]);
printf (" */");
}
/* Sorts the key positions *IN REVERSE ORDER!!*
This makes further routines more efficient. Especially when generating code.
Uses a simple Insertion Sort since the set is probably ordered.
Returns 1 if there are no duplicates, 0 otherwise. */
inline int
Options::key_sort (char *base, int len)
{
T (Trace t ("Options::key_sort");)
int i, j;
for (i = 0, j = len - 1; i < j; i++)
{
int curr, tmp;
for (curr = i + 1,tmp = base[curr]; curr > 0 && tmp >= base[curr - 1]; curr--)
if ((base[curr] = base[curr - 1]) == tmp) /* oh no, a duplicate!!! */
return 0;
base[curr] = tmp;
}
return 1;
}
/* Sets the default Options. */
Options::Options (void)
{
T (Trace t ("Options::Options");)
key_positions[0] = WORD_START;
key_positions[1] = WORD_END;
key_positions[2] = EOS;
total_keysig_size = 2;
delimiters = DEFAULT_DELIMITERS;
jump = DEFAULT_JUMP_VALUE;
option_word = DEFAULTCHARS | C;
function_name = DEFAULT_NAME;
key_name = DEFAULT_KEY;
hash_name = DEFAULT_HASH_NAME;
wordlist_name = DEFAULT_WORDLIST_NAME;
class_name = DEFAULT_CLASS_NAME;
total_switches = size = 1;
initial_asso_value = iterations = 0;
}
/* Dumps option status when debug is set. */
Options::~Options (void)
{
T (Trace t ("Options::~Options");)
if (option_word & DEBUG)
{
char *ptr;
fprintf (stderr, "\ndumping Options:"
"\nDEBUG is.......: %s"
"\nORDER is.......: %s"
"\nTYPE is........: %s"
"\nRANDOM is......: %s"
"\nDEFAULTCHARS is: %s"
"\nSWITCH is......: %s"
"\nNOLENGTH is....: %s"
"\nLENTABLE is....: %s"
"\nDUP is.........: %s"
"\nFAST is........: %s"
"\nCOMP is........: %s"
"\nNOTYPE is......: %s"
"\nGLOBAL is......: %s"
"\nCONST is.......: %s"
"\nKRC is.........: %s"
"\nC is...........: %s"
"\nANSIC is.......: %s"
"\nCPLUSPLUS is...: %s"
"\nENUM is........: %s"
"\nINCLUDE is.....: %s"
"\nSEVENBIT is....: %s"
"\niterations = %d"
"\nlookup function name = %s"
"\nhash function name = %s"
"\nword list name = %s"
"\nkey name = %s"
"\njump value = %d"
"\nmax associated value = %d"
"\ninitial associated value = %d"
"\ndelimiters = %s"
"\nnumber of switch statements = %d\n",
option_word & DEBUG ? "enabled" : "disabled",
option_word & ORDER ? "enabled" : "disabled",
option_word & TYPE ? "enabled" : "disabled",
option_word & RANDOM ? "enabled" : "disabled",
option_word & DEFAULTCHARS ? "enabled" : "disabled",
option_word & SWITCH ? "enabled" : "disabled",
option_word & NOLENGTH ? "enabled" : "disabled",
option_word & LENTABLE ? "enabled" : "disabled",
option_word & DUP ? "enabled" : "disabled",
option_word & FAST ? "enabled" : "disabled",
option_word & COMP ? "enabled" : "disabled",
option_word & NOTYPE ? "enabled" : "disabled",
option_word & GLOBAL ? "enabled" : "disabled",
option_word & CONST ? "enabled" : "disabled",
option_word & KRC ? "enabled" : "disabled",
option_word & C ? "enabled" : "disabled",
option_word & ANSIC ? "enabled" : "disabled",
option_word & CPLUSPLUS ? "enabled" : "disabled",
option_word & ENUM ? "enabled" : "disabled",
option_word & INCLUDE ? "enabled" : "disabled",
option_word & SEVENBIT ? "enabled" : "disabled",
iterations,
function_name, hash_name, wordlist_name, key_name,
jump, size - 1, initial_asso_value, delimiters, total_switches);
if (option_word & ALLCHARS)
fprintf (stderr, "all characters are used in the hash function\n");
fprintf (stderr, "maximum keysig size = %d\nkey positions are: \n",
total_keysig_size);
for (ptr = key_positions; *ptr != EOS; ptr++)
if (*ptr == WORD_END)
fprintf (stderr, "$\n");
else
fprintf (stderr, "%d\n", *ptr);
fprintf (stderr, "finished dumping Options\n");
}
}
/* Parses the command line Options and sets appropriate flags in option_word. */
static const struct option long_options[] =
{
{ "delimiters", required_argument, 0, 'e' },
{ "struct-type", no_argument, 0, 't' },
{ "language", required_argument, 0, 'L' },
{ "slot-name", required_argument, 0, 'K' },
{ "hash-fn-name", required_argument, 0, 'H' },
{ "lookup-fn-name", required_argument, 0, 'N' },
{ "class-name", required_argument, 0, 'Z' },
{ "seven-bit", no_argument, 0, '7' },
{ "compare-strncmp", no_argument, 0, 'c' },
{ "readonly-tables", no_argument, 0, 'C' },
{ "enum", no_argument, 0, 'E' },
{ "includes", no_argument, 0, 'I' },
{ "global", no_argument, 0, 'G' },
{ "word-array-name", required_argument, 0, 'W' },
{ "switch", required_argument, 0, 'S' },
{ "omit-struct-type", no_argument, 0, 'T' },
{ "key-positions", required_argument, 0, 'k' },
{ "compare-strlen", no_argument, 0, 'l' },
{ "duplicates", no_argument, 0, 'D' },
{ "fast", required_argument, 0, 'f' },
{ "initial-asso", required_argument, 0, 'i' },
{ "jump", required_argument, 0, 'j' },
{ "no-strlen", no_argument, 0, 'n' },
{ "occurrence-sort", no_argument, 0, 'o' },
{ "random", no_argument, 0, 'r' },
{ "size-multiple", required_argument, 0, 's' },
{ "help", no_argument, 0, 'h' },
{ "version", no_argument, 0, 'v' },
{ "debug", no_argument, 0, 'd' },
{ 0, no_argument, 0, 0 }
};
void
Options::operator() (int argc, char *argv[])
{
T (Trace t ("Options::operator()");)
int option_char;
program_name = argv[0];
argument_count = argc;
argument_vector = argv;
while ((option_char =
getopt_long (argument_count, argument_vector,
"adcCDe:Ef:gGhH:i:Ij:k:K:lL:nN:oprs:S:tTvW:Z:7",
long_options, (int *)0))
!= -1)
{
switch (option_char)
{
case 'a': /* Generated code uses the ANSI prototype format. */
break; /* This is now the default. */
case 'c': /* Generate strncmp rather than strcmp. */
{
option_word |= COMP;
break;
}
case 'C': /* Make the generated tables readonly (const). */
{
option_word |= CONST;
break;
}
case 'd': /* Enable debugging option. */
{
option_word |= DEBUG;
fprintf (stderr, "Starting program %s, version %s, with debugging on.\n",
program_name, version_string);
break;
}
case 'D': /* Enable duplicate option. */
{
option_word |= DUP;
break;
}
case 'e': /* Allows user to provide keyword/attribute separator */
{
option.delimiters = /*getopt*/optarg;
break;
}
case 'E':
{
option_word |= ENUM;
break;
}
case 'f': /* Generate the hash table ``fast.'' */
{
option_word |= FAST;
if ((iterations = atoi (/*getopt*/optarg)) < 0)
{
fprintf (stderr, "iterations value must not be negative, assuming 0\n");
iterations = 0;
}
break;
}
case 'g': /* Use the ``inline'' keyword for generated sub-routines, ifdef __GNUC__. */
break; /* This is now the default. */
case 'G': /* Make the keyword table a global variable. */
{
option_word |= GLOBAL;
break;
}
case 'h': /* Displays a list of helpful Options to the user. */
{
long_usage (stdout);
exit (0);
}
case 'H': /* Sets the name for the hash function */
{
hash_name = /*getopt*/optarg;
break;
}
case 'i': /* Sets the initial value for the associated values array. */
{
if ((initial_asso_value = atoi (/*getopt*/optarg)) < 0)
fprintf (stderr, "Initial value %d should be non-zero, ignoring and continuing.\n", initial_asso_value);
if (option[RANDOM])
fprintf (stderr, "warning, -r option superceeds -i, ignoring -i option and continuing\n");
break;
}
case 'I': /* Enable #include statements. */
{
option_word |= INCLUDE;
break;
}
case 'j': /* Sets the jump value, must be odd for later algorithms. */
{
if ((jump = atoi (/*getopt*/optarg)) < 0)
{
fprintf (stderr, "Jump value %d must be a positive number.\n", jump);
short_usage (stderr);
exit (1);
}
else if (jump && ((jump % 2) == 0))
fprintf (stderr, "Jump value %d should be odd, adding 1 and continuing...\n", jump++);
break;
}
case 'k': /* Sets key positions used for hash function. */
{
const int BAD_VALUE = -1;
int value;
Iterator expand (/*getopt*/optarg, 1, MAX_KEY_POS - 1, WORD_END, BAD_VALUE, EOS);
if (/*getopt*/optarg [0] == '*') /* Use all the characters for hashing!!!! */
option_word = (option_word & ~DEFAULTCHARS) | ALLCHARS;
else
{
char *key_pos;
for (key_pos = key_positions; (value = expand ()) != EOS; key_pos++)
if (value == BAD_VALUE)
{
fprintf (stderr, "Illegal key value or range, use 1,2,3-%d,'$' or '*'.\n",
MAX_KEY_POS - 1);
short_usage (stderr);
exit (1);
}
else
*key_pos = value;;
*key_pos = EOS;
if (! (total_keysig_size = (key_pos - key_positions)))
{
fprintf (stderr, "No keys selected.\n");
short_usage (stderr);
exit (1);
}
else if (! key_sort (key_positions, total_keysig_size))
{
fprintf (stderr, "Duplicate keys selected\n");
short_usage (stderr);
exit (1);
}
if (total_keysig_size != 2
|| (key_positions[0] != 1 || key_positions[1] != WORD_END))
option_word &= ~DEFAULTCHARS;
}
break;
}
case 'K': /* Make this the keyname for the keyword component field. */
{
key_name = /*getopt*/optarg;
break;
}
case 'l': /* Create length table to avoid extra string compares. */
{
option_word |= LENTABLE;
break;
}
case 'L': /* Deal with different generated languages. */
{
option_word &= ~(KRC | C | ANSIC | CPLUSPLUS);
if (!strcmp (/*getopt*/optarg, "KR-C"))
option_word |= KRC;
else if (!strcmp (/*getopt*/optarg, "C"))
option_word |= C;
else if (!strcmp (/*getopt*/optarg, "ANSI-C"))
option_word |= ANSIC;
else if (!strcmp (/*getopt*/optarg, "C++"))
option_word |= CPLUSPLUS;
else
{
fprintf (stderr, "unsupported language option %s, defaulting to C\n", /*getopt*/optarg);
option_word |= C;
}
break;
}
case 'n': /* Don't include the length when computing hash function. */
{
option_word |= NOLENGTH;
break;
}
case 'N': /* Make generated lookup function name be optarg */
{
function_name = /*getopt*/optarg;
break;
}
case 'o': /* Order input by frequency of key set occurrence. */
{
option_word |= ORDER;
break;
}
case 'p': /* Generated lookup function a pointer instead of int. */
break; /* This is now the default. */
case 'r': /* Utilize randomness to initialize the associated values table. */
{
option_word |= RANDOM;
if (option.initial_asso_value != 0)
fprintf (stderr, "warning, -r option superceeds -i, disabling -i option and continuing\n");
break;
}
case 's': /* Range of associated values, determines size of final table. */
{
if (abs (size = atoi (/*getopt*/optarg)) > 50)
fprintf (stderr, "%d is excessive, did you really mean this?! (try `%s --help' for help)\n", size, program_name);
break;
}
case 'S': /* Generate switch statement output, rather than lookup table. */
{
option_word |= SWITCH;
if ((option.total_switches = atoi (/*getopt*/optarg)) <= 0)
{
fprintf (stderr, "number of switches %s must be a positive number\n", /*getopt*/optarg);
short_usage (stderr);
exit (1);
}
break;
}
case 't': /* Enable the TYPE mode, allowing arbitrary user structures. */
{
option_word |= TYPE;
break;
}
case 'T': /* Don't print structure definition. */
{
option_word |= NOTYPE;
break;
}
case 'v': /* Print out the version and quit. */
fprintf (stdout, "GNU gperf %s\n", version_string);
exit (0);
case 'W': /* Sets the name for the hash table array */
{
wordlist_name = /*getopt*/optarg;
break;
}
case 'Z': /* Set the class name. */
{
class_name = /*getopt*/optarg;
break;
}
case '7': /* Assume 7-bit characters. */
{
option_word |= SEVENBIT;
Vectors::ALPHA_SIZE = 128;
break;
}
default:
short_usage (stderr);
exit (1);
}
}
if (argv[/*getopt*/optind] && ! freopen (argv[/*getopt*/optind], "r", stdin))
{
fprintf (stderr, "Cannot open keyword file `%s'\n", argv[/*getopt*/optind]);
short_usage (stderr);
exit (1);
}
if (++/*getopt*/optind < argc)
{
fprintf (stderr, "Extra trailing arguments to %s.\n", program_name);
short_usage (stderr);
exit (1);
}
}
#ifndef __OPTIMIZE__
#define INLINE /* not inline */
#include "options.icc"
#undef INLINE
#endif /* not defined __OPTIMIZE__ */

View File

@ -1,6 +1,8 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Handles parsing the Options provided to the user.
Copyright (C) 1989 Free Software Foundation, Inc.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
@ -16,138 +18,140 @@ 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 GPERF; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
along with GNU GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
/* This module provides a uniform interface to the various Options available
to a user of the Perfect.hash function generator. In addition to the
run-time Options, found in the Option_Type below, there is also the
/* This module provides a uniform interface to the various options available
to a user of the gperf hash function generator. In addition to the
run-time options, found in the Option_Type below, there is also the
hash table Size and the Keys to be used in the hashing.
The overall design of this module was an experiment in using C++
classes as a mechanism to enhance centralization of option and
and error handling, which tend to get out of hand in a C program. */
#ifndef _options_h
#define _options_h
#ifndef options_h
#define options_h 1
#include <stdio.h>
#include "prototype.h"
/* Enumerate the potential debugging Options. */
enum option_type
enum Option_Type
{
DEBUG = 01, /* Enable debugging (prints diagnostics to Std_Err). */
DEBUG = 01, /* Enable debugging (prints diagnostics to stderr). */
ORDER = 02, /* Apply ordering heuristic to speed-up search time. */
ANSI = 04, /* Generate ANSI prototypes. */
ALLCHARS = 010, /* Use all characters in hash function. */
GNU = 020, /* Assume GNU extensions (primarily function inline). */
TYPE = 040, /* Handle user-defined type structured keyword input. */
RANDOM = 0100, /* Randomly initialize the associated values table. */
DEFAULTCHARS = 0200, /* Make default char positions be 1,$ (end of keyword). */
SWITCH = 0400, /* Generate switch output to save space. */
POINTER = 01000, /* Have in_word_set function return pointer, not boolean. */
NOLENGTH = 02000, /* Don't include keyword length in hash computations. */
LENTABLE = 04000, /* Generate a length table for string comparison. */
DUP = 010000, /* Handle duplicate hash values for keywords. */
FAST = 020000, /* Generate the hash function ``fast.'' */
NOTYPE = 040000, /* Don't include user-defined type definition
in output -- it's already defined elsewhere. */
COMP = 0100000, /* Generate strncmp rather than strcmp. */
GLOBAL = 0200000, /* Make the keyword table a global variable. */
CONST = 0400000, /* Make the generated tables readonly (const). */
ALLCHARS = 04, /* Use all characters in hash function. */
TYPE = 010, /* Handle user-defined type structured keyword input. */
RANDOM = 020, /* Randomly initialize the associated values table. */
DEFAULTCHARS = 040, /* Make default char positions be 1,$ (end of keyword). */
SWITCH = 0100, /* Generate switch output to save space. */
NOLENGTH = 0200, /* Don't include keyword length in hash computations. */
LENTABLE = 0400, /* Generate a length table for string comparison. */
DUP = 01000, /* Handle duplicate hash values for keywords. */
FAST = 02000, /* Generate the hash function ``fast.'' */
NOTYPE = 04000, /* Don't include user-defined type definition in output -- it's already defined elsewhere. */
COMP = 010000, /* Generate strncmp rather than strcmp. */
GLOBAL = 020000, /* Make the keyword table a global variable. */
CONST = 040000, /* Make the generated tables readonly (const). */
KRC = 0100000, /* Generate K&R C code: no prototypes, no const. */
C = 0200000, /* Generate C code: no prototypes, but const (user can #define it away). */
ANSIC = 0400000, /* Generate ISO/ANSI C code: prototypes and const, but no class. */
CPLUSPLUS = 01000000, /* Generate C++ code: prototypes, const, class, inline, enum. */
ENUM = 02000000, /* Use enum for constants. */
INCLUDE = 04000000, /* Generate #include statements. */
SEVENBIT = 010000000 /* Assume 7-bit, not 8-bit, characters. */
};
/* Define some useful constants. */
/* Define some useful constants (these don't really belong here, but I'm
not sure where else to put them!). These should be consts, but g++
doesn't seem to do the right thing with them at the moment... ;-( */
/* Max size of each word's key set. */
#define MAX_KEY_POS (128 - 1)
/* Signals the start of a word. */
#define WORD_START 1
/* Signals the end of a word. */
#define WORD_END 0
/* Signals end of the key list. */
#define EOS MAX_KEY_POS
/* Returns TRUE if option O is enabled. */
#define OPTION_ENABLED(OW,O) (OW.option_word & (int)O)
/* Enables option O in OPTION_WORD. */
#define SET_OPTION(OW,O) (OW.option_word |= (int)O)
/* Disable option O in OPTION_WORD. */
#define UNSET_OPTION(OW,O) (OW.option_word &= ~(int)(O))
/* Returns total distinct key positions. */
#define GET_CHARSET_SIZE(O) (O.total_charset_size)
/* Set the total distinct key positions. */
#define SET_CHARSET_SIZE(O,S) (O.total_charset_size = (S))
/* Initializes the key Iterator. */
#define RESET(O) (O.key_pos = 0)
/* Returns current key_position and advances index. */
#define GET(O) (O.key_positions[O.key_pos++])
/* Sets the size of the table size. */
#define SET_ASSO_MAX(O,R) (O.size = (R))
/* Returns the size of the table size. */
#define GET_ASSO_MAX(O) (O.size)
/* Returns the jump value. */
#define GET_JUMP(O) (O.jump)
/* Returns the iteration value. */
#define GET_ITERATIONS(O) (O.iterations)
/* Returns the lookup function name. */
#define GET_FUNCTION_NAME(O) (O.function_name)
/* Returns the keyword key name. */
#define GET_KEY_NAME(O) (O.key_name)
/* Returns the hash function name. */
#define GET_HASH_NAME(O) (O.hash_name)
/* Returns the initial associated character value. */
#define INITIAL_VALUE(O) (O.initial_asso_value)
/* Returns the string used to delimit keywords from other attributes. */
#define GET_DELIMITER(O) (O.delimiters)
/* Sets the keyword/attribute delimiters with value of D. */
#define SET_DELIMITERS(O,D) (O.delimiters = (D))
/* Gets the total number of switch statements to generate. */
#define GET_TOTAL_SWITCHES(O) (O.total_switches)
/* Class manager for gperf program options. */
typedef struct options
enum
{
int option_word; /* Holds the user-specified Options. */
int total_charset_size; /* Total number of distinct key_positions. */
int size; /* Range of the hash table. */
int key_pos; /* Tracks current key position for Iterator. */
int jump; /* Jump length when trying alternative values. */
int initial_asso_value; /* Initial value for asso_values table. */
int argument_count; /* Records count of command-line arguments. */
int iterations; /* Amount to iterate when a collision occurs. */
int total_switches; /* Number of switch statements to generate. */
char **argument_vector; /* Stores a pointer to command-line vector. */
char *function_name; /* Name used for generated lookup function. */
char *key_name; /* Name used for keyword key. */
char *hash_name; /* Name used for generated hash function. */
char *delimiters; /* Separates keywords from other attributes. */
char key_positions[MAX_KEY_POS]; /* Contains user-specified key choices. */
} OPTIONS;
MAX_KEY_POS = 128 - 1, /* Max size of each word's key set. */
WORD_START = 1, /* Signals the start of a word. */
WORD_END = 0, /* Signals the end of a word. */
EOS = MAX_KEY_POS /* Signals end of the key list. */
};
extern void options_init P ((int argc, char *argv[]));
extern void options_destroy P ((void));
extern OPTIONS option;
#endif /* _options_h */
/* Class manager for gperf program Options. */
class Options
{
public:
Options (void);
~Options (void);
int operator[] (Option_Type option);
void operator() (int argc, char *argv[]);
void operator= (enum Option_Type);
void operator!= (enum Option_Type);
static void print_options (void);
static void set_asso_max (int r);
static int get_asso_max (void);
static void reset (void);
static int get (void);
static int get_iterations (void);
static int get_max_keysig_size (void);
static void set_keysig_size (int);
static int get_jump (void);
static int initial_value (void);
static int get_total_switches (void);
static const char *get_function_name (void);
static const char *get_key_name (void);
static const char *get_class_name (void);
static const char *get_hash_name (void);
static const char *get_wordlist_name (void);
static const char *get_delimiter (void);
private:
static int option_word; /* Holds the user-specified Options. */
static int total_switches; /* Number of switch statements to generate. */
static int total_keysig_size; /* Total number of distinct key_positions. */
static int size; /* Range of the hash table. */
static int key_pos; /* Tracks current key position for Iterator. */
static int jump; /* Jump length when trying alternative values. */
static int initial_asso_value; /* Initial value for asso_values table. */
static int argument_count; /* Records count of command-line arguments. */
static int iterations; /* Amount to iterate when a collision occurs. */
static char **argument_vector; /* Stores a pointer to command-line vector. */
static const char *function_name; /* Names used for generated lookup function. */
static const char *key_name; /* Name used for keyword key. */
static const char *class_name; /* Name used for generated C++ class. */
static const char *hash_name; /* Name used for generated hash function. */
static const char *wordlist_name; /* Name used for hash table array. */
static const char *delimiters; /* Separates keywords from other attributes. */
static char key_positions[MAX_KEY_POS]; /* Contains user-specified key choices. */
static int key_sort (char *base, int len); /* Sorts key positions in REVERSE order. */
static void short_usage (FILE * strm); /* Prints proper program usage. */
static void long_usage (FILE * strm); /* Prints proper program usage. */
};
/* Global option coordinator for the entire program. */
extern Options option;
/* Set to 1 if your want to stack-allocate some large arrays.
This requires compiler support for variable-size arrays on the stack
(not ANSI). */
#ifndef LARGE_STACK_ARRAYS
#if defined(__GNUG__) && !defined(__STRICT_ANSI__)
#define LARGE_STACK_ARRAYS 1
#else
#define LARGE_STACK_ARRAYS 0
#endif
#endif
/* Set to 1 if the stack is large enough for holding a text line. */
#ifndef LARGE_STACK
#define LARGE_STACK 1
#endif
#ifdef __OPTIMIZE__
#include "trace.h"
#define INLINE inline
#include "options.icc"
#undef INLINE
#endif
#endif

View File

@ -0,0 +1,175 @@
/* Inline Functions for options.{h,cc}.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
// This needs:
//#include "trace.h"
/* TRUE if option enable, else FALSE. */
INLINE int
Options::operator[] (Option_Type option)
{
T (Trace t ("Options::operator[]");)
return option_word & option;
}
/* Enables option OPT. */
INLINE void
Options::operator = (enum Option_Type opt)
{
T (Trace t ("Options::operator=");)
option_word |= opt;
}
/* Disables option OPT. */
INLINE void
Options::operator != (enum Option_Type opt)
{
T (Trace t ("Options::operator!=");)
option_word &= ~opt;
}
/* Initializes the key Iterator. */
INLINE void
Options::reset (void)
{
T (Trace t ("Options::reset");)
key_pos = 0;
}
/* Returns current key_position and advance index. */
INLINE int
Options::get (void)
{
T (Trace t ("Options::get");)
return key_positions[key_pos++];
}
/* Sets the size of the table size. */
INLINE void
Options::set_asso_max (int r)
{
T (Trace t ("Options::set_asso_max");)
size = r;
}
/* Returns the size of the table size. */
INLINE int
Options::get_asso_max (void)
{
T (Trace t ("Options::get_asso_max");)
return size;
}
/* Returns total distinct key positions. */
INLINE int
Options::get_max_keysig_size (void)
{
T (Trace t ("Options::get_max_keysig_size");)
return total_keysig_size;
}
/* Sets total distinct key positions. */
INLINE void
Options::set_keysig_size (int size)
{
T (Trace t ("Options::set_keysig_size");)
total_keysig_size = size;
}
/* Returns the jump value. */
INLINE int
Options::get_jump (void)
{
T (Trace t ("Options::get_jump");)
return jump;
}
/* Returns the generated function name. */
INLINE const char *
Options::get_function_name (void)
{
T (Trace t ("Options::get_function_name");)
return function_name;
}
/* Returns the keyword key name. */
INLINE const char *
Options::get_key_name (void)
{
T (Trace t ("Options::get_key_name");)
return key_name;
}
/* Returns the hash function name. */
INLINE const char *
Options::get_hash_name (void)
{
T (Trace t ("Options::get_hash_name");)
return hash_name;
}
/* Returns the hash table array name. */
INLINE const char *
Options::get_wordlist_name (void)
{
T (Trace t ("Options::get_wordlist_name");)
return wordlist_name;
}
/* Returns the generated class name. */
INLINE const char *
Options::get_class_name (void)
{
T (Trace t ("Options::get_class_name");)
return class_name;
}
/* Returns the initial associated character value. */
INLINE int
Options::initial_value (void)
{
T (Trace t ("Options::initial_value");)
return initial_asso_value;
}
/* Returns the iterations value. */
INLINE int
Options::get_iterations (void)
{
T (Trace t ("Options::get_iterations");)
return iterations;
}
/* Returns the string used to delimit keywords from other attributes. */
INLINE const char *
Options::get_delimiter ()
{
T (Trace t ("Options::get_delimiter");)
return delimiters;
}
/* Gets the total number of switch statements to generate. */
INLINE int
Options::get_total_switches ()
{
T (Trace t ("Options::get_total_switches");)
return total_switches;
}

View File

@ -0,0 +1,97 @@
/* Correctly reads an arbitrarily size string.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "read-line.h"
#include <stdlib.h>
#include <string.h> /* declares memcpy() */
#include "options.h"
#include "trace.h"
/* Recursively fills up the buffer. */
#define CHUNK_SIZE 4096
/* CHUNKS is the number of chunks (each of size CHUNK_SIZE) which have
already been read and which are temporarily stored on the stack.
This function reads the remainder of the line, allocates a buffer
for the entire line, fills the part beyond &buffer[chunks*CHUNK_SIZE],
and returns &buffer[chunks*CHUNK_SIZE]. */
char *
Read_Line::readln_aux (int chunks)
{
T (Trace t ("Read_Line::readln_aux");)
#if LARGE_STACK
char buf[CHUNK_SIZE];
#else
// Note: we don't use new, because that invokes a custom operator new.
char *buf = (char*)malloc(CHUNK_SIZE);
if (buf == NULL)
abort ();
#endif
char *bufptr = buf;
char *ptr;
int c;
while (c = getc (fp), c != EOF && c != '\n') /* fill the current buffer */
{
*bufptr++ = c;
if (bufptr - buf == CHUNK_SIZE)
{
if ((ptr = readln_aux (chunks + 1)) != NULL)
/* prepend remainder to ptr buffer */
{
ptr -= CHUNK_SIZE;
memcpy (ptr, buf, CHUNK_SIZE);
}
goto done;
}
}
if (c == EOF && bufptr == buf && chunks == 0)
ptr = NULL;
else
{
size_t s1 = chunks * CHUNK_SIZE;
size_t s2 = bufptr - buf;
ptr = new char[s1+s2+1];
ptr += s1;
ptr[s2] = '\0';
memcpy (ptr, buf, s2);
}
done:
#if !LARGE_STACK
free (buf);
#endif
return ptr;
}
#ifndef __OPTIMIZE__
#define INLINE /* not inline */
#include "read-line.icc"
#undef INLINE
#endif /* not defined __OPTIMIZE__ */

View File

@ -0,0 +1,53 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Reads arbitrarily long string from input file, returning it as a
dynamically allocated buffer.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
/* Returns a pointer to an arbitrary length string. Returns NULL on error or EOF
The storage for the string is dynamically allocated by new. */
#ifndef read_line_h
#define read_line_h 1
#include <stdio.h>
class Read_Line
{
private:
char *readln_aux (int chunks);
FILE *fp; /* FILE pointer to the input stream. */
public:
Read_Line (FILE *stream = stdin) : fp (stream) {}
char *get_line (void);
};
#ifdef __OPTIMIZE__
#include "trace.h"
#define INLINE inline
#include "read-line.icc"
#undef INLINE
#endif
#endif

View File

@ -0,0 +1,47 @@
/* Inline Functions for read-line.{h,cc}.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
// This needs:
//#include <stdio.h>
//#include "trace.h"
/* Returns the ``next'' line, ignoring comments beginning with '#'. */
INLINE char *
Read_Line::get_line (void)
{
T (Trace t ("Read_Line::get_line");)
int c;
while ((c = getc (fp)) == '#')
{
while (c = getc (fp), c != EOF && c != '\n')
;
if (c == EOF)
return (char *)0;
}
if (c == EOF)
return (char *)0;
ungetc (c, stdin);
return readln_aux (0);
}

View File

@ -0,0 +1,35 @@
/* Tracing function calls.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "trace.h"
#include <stdio.h>
int Trace::nesting = 0;
Trace::Trace (const char *n)
{
fprintf (stderr, "%*scalling %s\n", 3 * nesting++, "", name = n);
}
Trace::~Trace (void)
{
fprintf (stderr, "%*sleaving %s\n", 3 * --nesting, "", name);
}

40
contrib/gperf/src/trace.h Normal file
View File

@ -0,0 +1,40 @@
/* Tracing function calls.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#ifndef trace_h
#define trace_h 1
#ifdef TRACE
#define T(X) X
#else
#define T(X)
#endif
class Trace
{
private:
static int nesting;
const char *name;
public:
Trace (const char *n);
~Trace (void);
};
#endif

View File

@ -0,0 +1,25 @@
/* Static class data members that are shared between several classes.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#include "vectors.h"
int Vectors::ALPHA_SIZE = MAX_ALPHA_SIZE;
int Vectors::occurrences[MAX_ALPHA_SIZE];
int Vectors::asso_values[MAX_ALPHA_SIZE];

View File

@ -0,0 +1,37 @@
/* This may look like C code, but it is really -*- C++ -*- */
/* Static class data members that are shared between several classes via
inheritance.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
#ifndef vectors_h
#define vectors_h 1
static const int MAX_ALPHA_SIZE = 256;
struct Vectors
{
static int ALPHA_SIZE; /* Size of alphabet. */
static int occurrences[MAX_ALPHA_SIZE]; /* Counts occurrences of each key set character. */
static int asso_values[MAX_ALPHA_SIZE]; /* Value associated with each character. */
};
#endif

View File

@ -0,0 +1,22 @@
/* Current program version number.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
const char *version_string = "2.7";

View File

@ -0,0 +1,23 @@
/* Current program version number.
Copyright (C) 1989-1998 Free Software Foundation, Inc.
written by Douglas C. Schmidt (schmidt@ics.uci.edu)
This file is part of GNU GPERF.
GNU GPERF 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 1, or (at your option)
any later version.
GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
/* Current release version. */
extern const char *version_string;

View File

@ -0,0 +1,232 @@
# Makefile for gperf/tests
# Copyright (C) 1989, 1992, 1993, 1995, 1998 Free Software Foundation, Inc.
# written by Douglas C. Schmidt (schmidt@ics.uci.edu)
#
# This file is part of GNU GPERF.
#
# GNU GPERF 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 1, or (at your option)
# any later version.
#
# GNU GPERF 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 GPERF; see the file COPYING. If not, write to the Free
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA.
#### Start of system configuration section. ####
# Directories used by "make":
srcdir = @srcdir@
# Programs used by "make":
# C compiler
CC = @CC@
CFLAGS = @CFLAGS@
CPP = @CPP@
# C++ compiler
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@
CXXCPP = @CXXCPP@
# Other
MV = mv
LN = ln
RM = rm -f
@SET_MAKE@
#### End of system configuration section. ####
SHELL = /bin/sh
VPATH = $(srcdir)
GPERF = ../src/gperf
all :
install : all
installdirs :
uninstall :
check : check-link-c check-link-c++ check-c check-ada check-modula3 check-pascal check-test
@true
extracheck : @CHECK_LANG_SYNTAX@
@true
check-link-c: force
@echo "performing some tests of the perfect hash generator"
$(CC) -c $(CFLAGS) $(srcdir)/test.c
$(GPERF) -p -c -l -S1 -o $(srcdir)/c.gperf > cinset.c
$(CC) $(CFLAGS) -o cout cinset.c test.o
check-link-c++: force
check-c:
@echo "testing ANSI C reserved words, all items should be found in the set"
./cout -v < $(srcdir)/c.gperf > c.out
diff $(srcdir)/c.exp c.out
check-ada:
$(GPERF) -k1,4,'$$' $(srcdir)/ada.gperf > adainset.c
# double '$$' is only there since make gets confused; program wants only 1 '$'
$(CC) $(CFLAGS) -o aout adainset.c test.o
@echo "testing Ada reserved words, all items should be found in the set"
./aout -v < $(srcdir)/ada.gperf > ada-res.out
diff $(srcdir)/ada-res.exp ada-res.out
$(GPERF) -p -D -k1,'$$' -s 2 -o $(srcdir)/adadefs.gperf > preinset.c
$(CC) $(CFLAGS) -o preout preinset.c test.o
@echo "testing Ada predefined words, all items should be found in the set"
./preout -v < $(srcdir)/adadefs.gperf > ada-pred.out
diff $(srcdir)/ada-pred.exp ada-pred.out
check-modula3:
$(GPERF) -k1,2,'$$' -o $(srcdir)/modula3.gperf > m3inset.c
$(CC) $(CFLAGS) -o m3out m3inset.c test.o
@echo "testing Modula3 reserved words, all items should be found in the set"
./m3out -v < $(srcdir)/modula3.gperf > modula.out
diff $(srcdir)/modula.exp modula.out
check-pascal:
$(GPERF) -o -S2 -p < $(srcdir)/pascal.gperf > pinset.c
$(CC) $(CFLAGS) -o pout pinset.c test.o
@echo "testing Pascal reserved words, all items should be found in the set"
./pout -v < $(srcdir)/pascal.gperf > pascal.out
diff $(srcdir)/pascal.exp pascal.out
# these next 5 are demos that show off the generated code
check-test:
$(GPERF) -p -j1 -g -o -t -N is_reserved_word -k1,3,'$$' < $(srcdir)/c-parse.gperf > test-1.out
diff $(srcdir)/test-1.exp test-1.out
$(GPERF) -n -k1-8 -l < $(srcdir)/modula2.gperf > test-2.out
diff $(srcdir)/test-2.exp test-2.out
$(GPERF) -p -j 1 -o -a -C -g -t -k1,4,$$ < $(srcdir)/gplus.gperf > test-3.out
diff $(srcdir)/test-3.exp test-3.out
$(GPERF) -D -p -t < $(srcdir)/c-parse.gperf > test-4.out
diff $(srcdir)/test-4.exp test-4.out
$(GPERF) -g -o -j1 -t -p -N is_reserved_word < $(srcdir)/gpc.gperf > test-5.out
diff $(srcdir)/test-5.exp test-5.out
# prints out the help message
-$(GPERF) -h > test-6.out 2>&1
diff $(srcdir)/test-6.exp test-6.out
@echo "only if, do, for, case, goto, else, while, and return should be found "
./aout -v < $(srcdir)/c.gperf > test-7.out
diff $(srcdir)/test-7.exp test-7.out
# The following validates valid language syntax with different parameters.
# Works only with gcc and g++, and only on platforms where "gcc -ansi" is
# usable. (There are still platforms where gcc-2.8.0's fixincludes does not
# work well enough.)
VALIDATE = CC='$(CC)' CFLAGS='$(CFLAGS)' CXX='$(CXX)' CXXFLAGS='$(CXXFLAGS)' GPERF='$(GPERF)' ./validate
check-lang-syntax : force
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -c
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -E
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -G
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -G -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -G -E
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -D
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -D -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10 -c
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10 -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10 -E
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10 -G
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10 -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10 -D
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 10 -D -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -S 1000
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -D
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -D -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -S 10
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -S 10 -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -S 10 -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -S 10 -D
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -S 10 -D -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -p -S 1000
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -K key_name
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -H hash_function_name
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest1.gperf -W word_list_name
sed -e 's,in_word_set,lookup_function_name,g' < jstest1.gperf > tmp-jstest1.gperf && \
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 tmp-jstest1.gperf -N lookup_function_name
sed -e 's,Perfect_Hash,class_name,g' < jstest1.gperf > tmp-jstest1.gperf && \
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 tmp-jstest1.gperf -Z class_name
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -c
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -E
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -G
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -G -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -G -E
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -D
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -D -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10 -c
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10 -C
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10 -E
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10 -G
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10 -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10 -D
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 10 -D -l
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -S 1000
sed -e 's,name,key_name,g' < jstest2.gperf > tmp-jstest2.gperf && \
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 tmp-jstest2.gperf -t -p -K key_name
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 jstest2.gperf -t -p -H hash_function_name
sed -e 's,in_word_set,lookup_function_name,g' < jstest2.gperf > tmp-jstest2.gperf && \
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 tmp-jstest2.gperf -t -p -N lookup_function_name
sed -e 's,Perfect_Hash,class_name,g' < jstest2.gperf > tmp-jstest2.gperf && \
$(VALIDATE) KR-C,C,ANSI-C,C++ -k1,2 tmp-jstest2.gperf -t -p -Z class_name
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -c
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -C
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -E
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -G
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -G -C
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -G -E
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -l
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -D
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -D -l
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10 -c
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10 -C
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10 -E
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10 -G
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10 -l
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10 -D
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 10 -D -l
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -S 1000
sed -e 's,name,key_name,g' < jstest3.gperf > tmp-jstest3.gperf && \
$(VALIDATE) C,ANSI-C,C++ -k1,2 tmp-jstest3.gperf -t -p -K key_name
$(VALIDATE) C,ANSI-C,C++ -k1,2 jstest3.gperf -t -p -H hash_function_name
sed -e 's,in_word_set,lookup_function_name,g' < jstest3.gperf > tmp-jstest3.gperf && \
$(VALIDATE) C,ANSI-C,C++ -k1,2 tmp-jstest3.gperf -t -p -N lookup_function_name
sed -e 's,Perfect_Hash,class_name,g' < jstest3.gperf > tmp-jstest3.gperf && \
$(VALIDATE) C,ANSI-C,C++ -k1,2 tmp-jstest3.gperf -t -p -Z class_name
mostlyclean : clean
clean : force
$(RM) *.o core *inset.c output.* *.out aout cout m3out pout preout tmp-* valitest*
distclean : clean
$(RM) config.status config.log config.cache Makefile
maintainer-clean : distclean
force :

View File

@ -0,0 +1,54 @@
in word set boolean
in word set character
in word set constraint_error
in word set false
in word set float
in word set integer
in word set natural
in word set numeric_error
in word set positive
in word set program_error
in word set storage_error
in word set string
in word set tasking_error
in word set true
in word set address
in word set aft
in word set base
in word set callable
in word set constrained
in word set count
in word set delta
in word set digits
in word set emax
in word set epsilon
in word set first
in word set firstbit
in word set fore
in word set image
in word set large
in word set last
in word set lastbit
in word set length
in word set machine_emax
in word set machine_emin
in word set machine_mantissa
in word set machine_overflows
in word set machine_radix
in word set machine_rounds
in word set mantissa
in word set pos
in word set position
in word set pred
in word set range
in word set safe_emax
in word set safe_large
in word set safe_small
in word set size
in word set small
in word set storage_size
in word set succ
in word set terminated
in word set val
in word set value
in word set width

View File

@ -0,0 +1,63 @@
in word set else
in word set exit
in word set terminate
in word set type
in word set raise
in word set range
in word set reverse
in word set declare
in word set end
in word set record
in word set exception
in word set not
in word set then
in word set return
in word set separate
in word set select
in word set digits
in word set renames
in word set subtype
in word set elsif
in word set function
in word set for
in word set package
in word set procedure
in word set private
in word set while
in word set when
in word set new
in word set entry
in word set delay
in word set case
in word set constant
in word set at
in word set abort
in word set accept
in word set and
in word set delta
in word set access
in word set abs
in word set pragma
in word set array
in word set use
in word set out
in word set do
in word set others
in word set of
in word set or
in word set all
in word set limited
in word set loop
in word set null
in word set task
in word set in
in word set is
in word set if
in word set rem
in word set mod
in word set begin
in word set body
in word set xor
in word set goto
in word set generic
in word set with

View File

@ -0,0 +1,54 @@
boolean
character
constraint_error
false
float
integer
natural
numeric_error
positive
program_error
storage_error
string
tasking_error
true
address
aft
base
callable
constrained
count
delta
digits
emax
epsilon
first
firstbit
fore
image
large
last
lastbit
length
machine_emax
machine_emin
machine_mantissa
machine_overflows
machine_radix
machine_rounds
mantissa
pos
position
pred
range
safe_emax
safe_large
safe_small
size
small
storage_size
succ
terminated
val
value
width

View File

@ -1,5 +1,3 @@
struct resword {char *name;};
%%
asm
auto
break

View File

@ -1,5 +1,5 @@
%{
/* Command-line: gperf -p -j1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */
%}
struct resword { char *name; short token; enum rid rid; };
%%

32
contrib/gperf/tests/c.exp Normal file
View File

@ -0,0 +1,32 @@
in word set if
in word set do
in word set int
in word set for
in word set case
in word set char
in word set auto
in word set goto
in word set else
in word set long
in word set void
in word set enum
in word set float
in word set short
in word set union
in word set break
in word set while
in word set const
in word set double
in word set static
in word set extern
in word set struct
in word set return
in word set sizeof
in word set switch
in word set signed
in word set typedef
in word set default
in word set unsigned
in word set continue
in word set register
in word set volatile

1214
contrib/gperf/tests/configure vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
dnl autoconf configuration for gperf/tests
dnl Copyright (C) 1998 Free Software Foundation, Inc.
dnl written by Douglas C. Schmidt (schmidt@ics.uci.edu)
dnl
dnl This file is part of GNU GPERF.
dnl
dnl GNU GPERF is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 1, or (at your option)
dnl any later version.
dnl
dnl GNU GPERF is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with GNU GPERF; see the file COPYING. If not, write to the
dnl Free Software Foundation, 59 Temple Place - Suite 330, Boston,
dnl MA 02111-1307, USA.
AC_INIT(c-parse.gperf)
AC_PROG_MAKE_SET
dnl
dnl checks for programs
dnl
AC_PROG_CC
dnl sets variable CC
AC_PROG_CPP
dnl sets variable CPP
AC_PROG_CXX
dnl sets variable CXX
AC_PROG_CXXCPP
dnl sets variable CXXCPP
if test $ac_cv_prog_gcc = yes -a $ac_cv_prog_gxx = yes; then
CHECK_LANG_SYNTAX='check-lang-syntax'
else
CHECK_LANG_SYNTAX=''
fi
AC_SUBST(CHECK_LANG_SYNTAX)
dnl
dnl That's it.
dnl
AC_OUTPUT(Makefile)

View File

@ -0,0 +1,63 @@
%{
extern int m_text(), m_private(), m_who(), m_whois(), m_user(), m_list();
extern int m_topic(), m_invite(), m_channel(), m_version(), m_quit();
extern int m_server(), m_kill(), m_info(), m_links(), m_summon(), m_stats();
extern int m_users(), m_nick(), m_error(), m_help(), m_whoreply();
extern int m_squit(), m_restart(), m_away(), m_die(), m_connect();
extern int m_ping(), m_pong(), m_oper(), m_pass(), m_wall(), m_trace();
extern int m_time(), m_rehash(), m_names(), m_namreply(), m_admin();
extern int m_linreply(), m_notice(), m_lusers(), m_voice(), m_grph();
extern int m_xtra(), m_motd();
%}
struct Message {
char *cmd;
int (* func)();
int count;
int parameters;
};
%%
NICK, m_nick, 0, 1
MSG, m_text, 0, 1
PRIVMSG, m_private, 0, 2
WHO, m_who, 0, 1
WHOIS, m_whois, 0, 4
USER, m_user, 0, 4
SERVER, m_server, 0, 2
LIST, m_list, 0, 1
TOPIC, m_topic, 0, 1
INVITE, m_invite, 0, 2
CHANNEL, m_channel, 0, 1
VERSION, m_version, 0, 1
QUIT, m_quit, 0, 2
SQUIT, m_squit, 0, 2
KILL, m_kill, 0, 2
INFO, m_info, 0, 1
LINKS, m_links, 0, 1
SUMMON, m_summon, 0, 1
STATS, m_stats, 0, 1
USERS, m_users, 0, 1
RESTART, m_restart, 0, 1
WHOREPLY,m_whoreply, 0, 7
HELP, m_help, 0, 2
ERROR, m_error, 0, 1
AWAY, m_away, 0, 1
DIE, m_die, 0, 1
CONNECT, m_connect, 0, 3
PING, m_ping, 0, 2
PONG, m_pong, 0, 3
OPER, m_oper, 0, 3
PASS, m_pass, 0, 2
WALL, m_wall, 0, 1
TIME, m_time, 0, 1
REHASH, m_rehash, 0, 1
NAMES, m_names, 0, 1
NAMREPLY,m_namreply, 0, 3
ADMIN, m_admin, 0, 1
TRACE, m_trace, 0, 1
LINREPLY,m_linreply, 0, 2
NOTICE, m_notice, 0, 2
LUSERS, m_lusers, 0, 1
VOICE, m_voice, 0, 2
GRPH, m_grph, 0, 2
XTRA, m_xtra, 0, 2
MOTD, m_motd, 0, 2

View File

@ -0,0 +1,73 @@
%{
/* Command-line: gperf -k'1,2,$' -t -p -K 'name' -H 'js_kw_hash' -N 'js_kw_lookup' -a -g jscript.gperf */
%}
struct js_keyword {
char * name;
int token;
}
%%
# Javascript reserved words, see "keywords.html"
abstract, TK_ABSTRACT
boolean, TK_BOOLEAN
break, TK_BREAK
byte, TK_BYTE
case, TK_CASE
catch, TK_CATCH
char, TK_CHAR
class, TK_CLASS
const, TK_CONST
continue, TK_CONTINUE
default, TK_DEFAULT
do, TK_DO
double, TK_DOUBLE
else, TK_ELSE
extends, TK_EXTENDS
false, TK_FALSE
final, TK_FINAL
finally, TK_FINALLY
float, TK_FLOAT
for, TK_FOR
function, TK_FUNCTION
goto, TK_GOTO
if, TK_IF
implements, TK_IMPLEMENTS
import, TK_IMPORT
in, TK_IN
instanceof, TK_INSTANCEOF
int, TK_INT
interface, TK_INTERFACE
long, TK_LONG
native, TK_NATIVE
new, TK_NEW
null, TK_NULL
package, TK_PACKAGE
private, TK_PRIVATE
protected, TK_PROTECTED
public, TK_PUBLIC
return, TK_RETURN
short, TK_SHORT
static, TK_STATIC
super, TK_SUPER
switch, TK_SWITCH
synchronized, TK_SYNCHRONIZED
this, TK_THIS
throw, TK_THROW
throws, TK_THROWS
transient, TK_TRANSIENT
true, TK_TRUE
try, TK_TRY
var, TK_VAR
void, TK_VOID
while, TK_WHILE
with, TK_WITH
%%
int js_keyword_lookup (register const char *str, register int len)
{
struct js_keyword * keyword = js_kw_lookup(str,len);
if (keyword)
return keyword->token;
else
return TK_IDENT;
}

View File

@ -0,0 +1,142 @@
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
false
final
finally
float
for
function
goto
if
implements
import
in
instanceof
int
interface
long
native
new
null
package
private
protected
public
return
short
static
super
switch
synchronized
this
throw
throws
transient
true
try
var
void
while
with
%%
#include <stdlib.h>
#include <string.h>
#if defined(__STDC__) || defined(__cplusplus)
#define CONST const
#else
#define CONST
#endif
static CONST char* testdata[] = {
"bogus",
"abstract",
"boolean",
"break",
"byte",
"case",
"catch",
"char",
"class",
"const",
"continue",
"default",
"do",
"double",
"else",
"extends",
"false",
"final",
"finally",
"float",
"for",
"function",
"goto",
"if",
"implements",
"import",
"in",
"instanceof",
"int",
"interface",
"long",
"native",
"new",
"null",
"package",
"private",
"protected",
"public",
"return",
"short",
"static",
"super",
"switch",
"synchronized",
"this",
"throw",
"throws",
"transient",
"true",
"try",
"var",
"void",
"while",
"with"
};
int main ()
{
int i;
for (i = 0; i < sizeof(testdata)/sizeof(testdata[0]); i++)
{
#ifdef CPLUSPLUS_TEST
CONST char * resword = Perfect_Hash::in_word_set(testdata[i],strlen(testdata[i]));
#else
CONST char * resword = in_word_set(testdata[i],strlen(testdata[i]));
#endif
if (i > 0)
{
if (!resword)
exit (1);
if (strcmp(testdata[i],resword))
exit (1);
}
else
{
if (resword)
exit (1);
}
}
return 0;
}

View File

@ -0,0 +1,147 @@
struct js_keyword {
char * name;
int token;
}
%%
abstract, 1
boolean, 2
break, 3
byte, 4
case, 5
catch, 6
char, 7
class, 8
const, 9
continue, 10
default, 11
do, 12
double, 13
else, 14
extends, 15
false, 16
final, 17
finally, 18
float, 19
for, 20
function, 21
goto, 22
if, 23
implements, 24
import, 25
in, 26
instanceof, 27
int, 28
interface, 29
long, 30
native, 31
new, 32
null, 33
package, 34
private, 35
protected, 36
public, 37
return, 38
short, 39
static, 40
super, 41
switch, 42
synchronized, 43
this, 44
throw, 45
throws, 46
transient, 47
true, 48
try, 49
var, 50
void, 51
while, 52
with, 53
%%
#include <stdlib.h>
#include <string.h>
#if defined(__STDC__) || defined(__cplusplus)
#define CONST const
#else
#define CONST
#endif
static CONST char* testdata[] = {
"bogus",
"abstract",
"boolean",
"break",
"byte",
"case",
"catch",
"char",
"class",
"const",
"continue",
"default",
"do",
"double",
"else",
"extends",
"false",
"final",
"finally",
"float",
"for",
"function",
"goto",
"if",
"implements",
"import",
"in",
"instanceof",
"int",
"interface",
"long",
"native",
"new",
"null",
"package",
"private",
"protected",
"public",
"return",
"short",
"static",
"super",
"switch",
"synchronized",
"this",
"throw",
"throws",
"transient",
"true",
"try",
"var",
"void",
"while",
"with"
};
int main ()
{
int i;
for (i = 0; i < sizeof(testdata)/sizeof(testdata[0]); i++)
{
#ifdef CPLUSPLUS_TEST
CONST struct js_keyword * resword = Perfect_Hash::in_word_set(testdata[i],strlen(testdata[i]));
#else
CONST struct js_keyword * resword = in_word_set(testdata[i],strlen(testdata[i]));
#endif
if (i > 0)
{
if (!resword)
exit (1);
if (strcmp(testdata[i],resword->name))
exit (1);
}
else
{
if (resword)
exit (1);
}
}
return 0;
}

View File

@ -0,0 +1,147 @@
struct js_keyword {
const char * name;
int token;
}
%%
abstract, 1
boolean, 2
break, 3
byte, 4
case, 5
catch, 6
char, 7
class, 8
const, 9
continue, 10
default, 11
do, 12
double, 13
else, 14
extends, 15
false, 16
final, 17
finally, 18
float, 19
for, 20
function, 21
goto, 22
if, 23
implements, 24
import, 25
in, 26
instanceof, 27
int, 28
interface, 29
long, 30
native, 31
new, 32
null, 33
package, 34
private, 35
protected, 36
public, 37
return, 38
short, 39
static, 40
super, 41
switch, 42
synchronized, 43
this, 44
throw, 45
throws, 46
transient, 47
true, 48
try, 49
var, 50
void, 51
while, 52
with, 53
%%
#include <stdlib.h>
#include <string.h>
#if defined(__STDC__) || defined(__cplusplus)
#define CONST const
#else
#define CONST
#endif
static CONST char* testdata[] = {
"bogus",
"abstract",
"boolean",
"break",
"byte",
"case",
"catch",
"char",
"class",
"const",
"continue",
"default",
"do",
"double",
"else",
"extends",
"false",
"final",
"finally",
"float",
"for",
"function",
"goto",
"if",
"implements",
"import",
"in",
"instanceof",
"int",
"interface",
"long",
"native",
"new",
"null",
"package",
"private",
"protected",
"public",
"return",
"short",
"static",
"super",
"switch",
"synchronized",
"this",
"throw",
"throws",
"transient",
"true",
"try",
"var",
"void",
"while",
"with"
};
int main ()
{
int i;
for (i = 0; i < sizeof(testdata)/sizeof(testdata[0]); i++)
{
#ifdef CPLUSPLUS_TEST
CONST struct js_keyword * resword = Perfect_Hash::in_word_set(testdata[i],strlen(testdata[i]));
#else
CONST struct js_keyword * resword = in_word_set(testdata[i],strlen(testdata[i]));
#endif
if (i > 0)
{
if (!resword)
exit (1);
if (strcmp(testdata[i],resword->name))
exit (1);
}
else
{
if (resword)
exit (1);
}
}
return 0;
}

View File

@ -0,0 +1,116 @@
COMMAND;
%%
!, cm_force_sentence_end, false
', insert_self, false
*, cm_asterisk, false
., cm_force_sentence_end, false
:, cm_force_abbreviated_whitespace, false
?, cm_force_sentence_end, false
@, insert_self, false
TeX, cm_TeX, true
`, insert_self, false
appendix, cm_appendix, false
appendixsec, cm_appendixsec, false
appendixsubsec, cm_appendixsubsec, false
asis, cm_asis, true
b, cm_bold, true
br, cm_br, false
bullet, cm_bullet, true
bye, cm_bye, false
c, cm_comment, false
center, cm_center, false
chapter, cm_chapter, false
cindex, cm_cindex, false
cite, cm_cite, true
code, cm_code, true
comment, cm_comment, false
contents, do_nothing, false
copyright, cm_copyright, true
ctrl, cm_ctrl, true
defcodeindex, cm_defindex, false
defindex, cm_defindex, false
dfn, cm_dfn, true
display, cm_display, false
dots, cm_dots, true
emph, cm_emph, true
end, cm_end, false
enumerate, cm_enumerate, false
equiv, cm_equiv, true
error, cm_error, true
example, cm_example, false
exdent, cm_exdent, false
expansion, cm_expansion, true
file, cm_file, true
findex, cm_findex, false
format, cm_format, false
group, cm_group, false
i, cm_italic, true
iappendix, cm_appendix, false
iappendixsec, cm_appendixsec, false
iappendixsubsec, cm_appendixsubsec, false
ichapter, cm_chapter, false
ifinfo, cm_ifinfo, false
iftex, cm_iftex, false
ignore, cm_ignore, false
include, cm_include, false
inforef, cm_inforef, true
input, cm_include, false
isection, cm_section, false
isubsection, cm_subsection, false
isubsubsection, cm_subsubsection, false
item, cm_item, false
itemize, cm_itemize, false
itemx, cm_itemx, false
iunnumbered, cm_unnumbered, false
iunnumberedsec, cm_unnumberedsec, false
iunnumberedsubsec, cm_unnumberedsubsec, false
kbd, cm_kbd, true
key, cm_key, true
kindex, cm_kindex, false
lisp, cm_lisp, false
menu, cm_menu
minus, cm_minus, true
need, cm_need, false
node, cm_node, false
noindent, cm_noindent, false
page, do_nothing, false
pindex, cm_pindex, false
point, cm_point, true
print, cm_print, true
printindex, cm_printindex, false
pxref, cm_pxref, true
quotation, cm_quotation, false
r, cm_roman, true
ref, cm_xref, true
refill, cm_refill, false
result, cm_result, true
samp, cm_samp, true
sc, cm_sc, true
section, cm_section, false
setchapternewpage, cm_setchapternewpage, false
setfilename, cm_setfilename, false
settitle, cm_settitle, false
smallexample, cm_smallexample, false
sp, cm_sp, false
strong, cm_strong, true
subsection, cm_subsection, false
subsubsection, cm_subsubsection, false
summarycontents, do_nothing, false
syncodeindex, cm_synindex, false
synindex, cm_synindex, false
t, cm_title, true
table, cm_table, false
tex, cm_tex, false
tindex, cm_tindex, false
titlepage, cm_titlepage, false
unnumbered, cm_unnumbered, false
unnumberedsec, cm_unnumberedsec, false
unnumberedsubsec, cm_unnumberedsubsec, false
var, cm_var, true
vindex, cm_vindex, false
w, cm_w, true
xref, cm_xref, true
{, insert_self, false
}, insert_self, false
infoinclude, cm_infoinclude, false
footnote, cm_footnote, false

View File

@ -0,0 +1,106 @@
in word set AND
in word set ARRAY
in word set BEGIN
in word set BITS
in word set BY
in word set CASE
in word set CONST
in word set DIV
in word set DO
in word set ELSE
in word set ELSIF
in word set END
in word set EVAL
in word set EXCEPT
in word set EXCEPTION
in word set EXIT
in word set EXPORTS
in word set FINALLY
in word set FOR
in word set FROM
in word set IF
in word set IMPORT
in word set INTERFACE
in word set IN
in word set INLINE
in word set LOCK
in word set METHODS
in word set MOD
in word set MODULE
in word set NOT
in word set OBJECT
in word set OF
in word set OR
in word set PROCEDURE
in word set RAISES
in word set READONLY
in word set RECORD
in word set REF
in word set REPEAT
in word set RETURN
in word set SET
in word set THEN
in word set TO
in word set TRY
in word set TYPE
in word set TYPECASE
in word set UNSAFE
in word set UNTIL
in word set UNTRACED
in word set VALUE
in word set VAR
in word set WHILE
in word set WITH
in word set and
in word set array
in word set begin
in word set bits
in word set by
in word set case
in word set const
in word set div
in word set do
in word set else
in word set elsif
in word set end
in word set eval
in word set except
in word set exception
in word set exit
in word set exports
in word set finally
in word set for
in word set from
in word set if
in word set import
in word set interface
in word set in
in word set inline
in word set lock
in word set methods
in word set mod
in word set module
in word set not
in word set object
in word set of
in word set or
in word set procedure
in word set raises
in word set readonly
in word set record
in word set ref
in word set repeat
in word set return
in word set set
in word set then
in word set to
in word set try
in word set type
in word set typecase
in word set unsafe
in word set until
in word set untraced
in word set value
in word set var
in word set while
in word set with

View File

@ -0,0 +1,36 @@
in word set with
in word set array
in word set and
in word set function
in word set case
in word set var
in word set const
in word set until
in word set then
in word set set
in word set record
in word set program
in word set procedure
in word set or
in word set packed
in word set not
in word set nil
in word set label
in word set in
in word set repeat
in word set of
in word set goto
in word set forward
in word set for
in word set while
in word set file
in word set else
in word set downto
in word set do
in word set div
in word set to
in word set type
in word set end
in word set mod
in word set begin
in word set if

View File

@ -0,0 +1,153 @@
/* C code produced by gperf version 2.7 */
/* Command-line: ../src/gperf -p -j1 -g -o -t -N is_reserved_word -k1,3,$ */
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */
struct resword { char *name; short token; enum rid rid; };
#define TOTAL_KEYWORDS 51
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 13
#define MIN_HASH_VALUE 8
#define MAX_HASH_VALUE 82
/* maximum key range = 75, duplicates = 0 */
#ifdef __GNUC__
__inline
#endif
static unsigned int
hash (str, len)
register const char *str;
register unsigned int len;
{
static unsigned char asso_values[] =
{
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 0, 83, 1, 2, 34,
19, 6, 11, 29, 0, 17, 83, 0, 23, 28,
26, 30, 31, 83, 15, 1, 0, 28, 13, 4,
83, 83, 5, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83
};
register int hval = len;
switch (hval)
{
default:
case 3:
hval += asso_values[(unsigned char)str[2]];
case 2:
case 1:
hval += asso_values[(unsigned char)str[0]];
break;
}
return hval + asso_values[(unsigned char)str[len - 1]];
}
#ifdef __GNUC__
__inline
#endif
struct resword *
is_reserved_word (str, len)
register const char *str;
register unsigned int len;
{
static struct resword wordlist[] =
{
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"__asm__", ASM, NORID},
{""},
{"__typeof__", TYPEOF, NORID},
{"__signed__", TYPESPEC, RID_SIGNED},
{"__alignof__", ALIGNOF, NORID},
{"break", BREAK, NORID},
{"__attribute__", ATTRIBUTE, NORID},
{""}, {""},
{"else", ELSE, NORID},
{"__attribute", ATTRIBUTE, NORID},
{"__typeof", TYPEOF, NORID},
{"int", TYPESPEC, RID_INT},
{"__alignof", ALIGNOF, NORID},
{"struct", STRUCT, NORID},
{"sizeof", SIZEOF, NORID},
{"switch", SWITCH, NORID},
{"__volatile__", TYPE_QUAL, RID_VOLATILE},
{""},
{"__inline__", SCSPEC, RID_INLINE},
{"__signed", TYPESPEC, RID_SIGNED},
{"__volatile", TYPE_QUAL, RID_VOLATILE},
{"if", IF, NORID},
{"__inline", SCSPEC, RID_INLINE},
{"while", WHILE, NORID},
{""},
{"__asm", ASM, NORID},
{"auto", SCSPEC, RID_AUTO},
{"short", TYPESPEC, RID_SHORT},
{"default", DEFAULT, NORID},
{"extern", SCSPEC, RID_EXTERN},
{""}, {""},
{"__const", TYPE_QUAL, RID_CONST},
{"static", SCSPEC, RID_STATIC},
{"__const__", TYPE_QUAL, RID_CONST},
{"for", FOR, NORID},
{"case", CASE, NORID},
{"float", TYPESPEC, RID_FLOAT},
{"return", RETURN, NORID},
{"typeof", TYPEOF, NORID},
{"typedef", SCSPEC, RID_TYPEDEF},
{"volatile", TYPE_QUAL, RID_VOLATILE},
{"do", DO, NORID},
{"inline", SCSPEC, RID_INLINE},
{"void", TYPESPEC, RID_VOID},
{"char", TYPESPEC, RID_CHAR},
{"signed", TYPESPEC, RID_SIGNED},
{"unsigned", TYPESPEC, RID_UNSIGNED},
{""}, {""},
{"double", TYPESPEC, RID_DOUBLE},
{"asm", ASM, NORID},
{""}, {""},
{"goto", GOTO, NORID},
{""},
{"const", TYPE_QUAL, RID_CONST},
{"enum", ENUM, NORID},
{"register", SCSPEC, RID_REGISTER},
{""}, {""}, {""}, {""}, {""}, {""},
{"continue", CONTINUE, NORID},
{""},
{"union", UNION, NORID},
{""}, {""}, {""}, {""}, {""},
{"long", TYPESPEC, RID_LONG}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
register int key = hash (str, len);
if (key <= MAX_HASH_VALUE && key >= 0)
{
register const char *s = wordlist[key].name;
if (*str == *s && !strcmp (str + 1, s + 1))
return &wordlist[key];
}
}
return 0;
}

View File

@ -0,0 +1,202 @@
/* C code produced by gperf version 2.7 */
/* Command-line: ../src/gperf -n -k1-8 -l */
#define TOTAL_KEYWORDS 40
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 14
#define MIN_HASH_VALUE 1
#define MAX_HASH_VALUE 256
/* maximum key range = 256, duplicates = 0 */
#ifdef __GNUC__
__inline
#endif
static unsigned int
hash (str, len)
register const char *str;
register unsigned int len;
{
static unsigned short asso_values[] =
{
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 25, 30, 35, 21, 0,
30, 15, 30, 45, 257, 257, 0, 5, 45, 0,
10, 0, 1, 20, 25, 15, 30, 40, 15, 5,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
257, 257, 257, 257, 257, 257
};
register int hval = 0;
switch (len)
{
default:
case 8:
hval += asso_values[(unsigned char)str[7]];
case 7:
hval += asso_values[(unsigned char)str[6]];
case 6:
hval += asso_values[(unsigned char)str[5]];
case 5:
hval += asso_values[(unsigned char)str[4]];
case 4:
hval += asso_values[(unsigned char)str[3]];
case 3:
hval += asso_values[(unsigned char)str[2]];
case 2:
hval += asso_values[(unsigned char)str[1]];
case 1:
hval += asso_values[(unsigned char)str[0]];
break;
}
return hval;
}
#ifdef __GNUC__
__inline
#endif
const char *
in_word_set (str, len)
register const char *str;
register unsigned int len;
{
static unsigned char lengthtable[] =
{
0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 3, 0,
0, 0, 2, 3, 0, 0, 0, 2, 4, 0, 0, 0, 4, 6,
0, 0, 0, 3, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
3, 5, 6, 0, 0, 6, 0, 0, 0, 0, 3, 0, 0, 0,
3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 9,
0, 4, 6, 6, 0, 0, 2, 3, 0, 0, 0, 5, 3, 0,
0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0,
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
7, 0, 0, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 10
};
static const char * wordlist[] =
{
"",
"OR",
"", "", "", "", "", "", "", "",
"LOOP",
"", "", "", "", "", "", "", "", "",
"ELSE",
"DO",
"", "", "",
"TO",
"MOD",
"", "", "",
"OF",
"FOR",
"", "", "",
"BY",
"FROM",
"", "", "",
"TYPE",
"MODULE",
"", "", "",
"SET",
"", "", "", "", "",
"EXPORT",
"", "", "", "",
"VAR",
"ARRAY",
"RECORD",
"", "",
"REPEAT",
"", "", "", "",
"END",
"", "", "",
"NOT",
"", "", "", "",
"IF",
"", "", "", "",
"CASE",
"", "",
"PROCEDURE",
"",
"EXIT",
"IMPORT",
"RETURN",
"", "",
"IN",
"AND",
"", "", "",
"ELSIF",
"DIV",
"", "", "",
"THEN",
"", "", "", "", "", "", "", "", "",
"IMPLEMENTATION",
"", "", "", "",
"WHILE",
"", "", "", "", "", "", "", "", "",
"CONST",
"POINTER",
"", "", "",
"UNTIL",
"", "", "", "",
"BEGIN",
"", "", "", "",
"WITH",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"",
"QUALIFIED",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "",
"", "", "", "", "",
"DEFINITION"
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
register int key = hash (str, len);
if (key <= MAX_HASH_VALUE && key >= 0)
if (len == lengthtable[key])
{
register const char *s = wordlist[key];
if (*str == *s && !strcmp (str + 1, s + 1))
return s;
}
}
return 0;
}

View File

@ -0,0 +1,186 @@
/* C code produced by gperf version 2.7 */
/* Command-line: ../src/gperf -p -j 1 -o -a -C -g -t -k1,4,$ */
/* Command-line: gperf -p -j1 -g -o -t -N is_reserved_word -k1,4,$ gplus.gperf */
struct resword { char *name; short token; enum rid rid;};
#define TOTAL_KEYWORDS 71
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 13
#define MIN_HASH_VALUE 4
#define MAX_HASH_VALUE 147
/* maximum key range = 144, duplicates = 0 */
#ifdef __GNUC__
__inline
#endif
static unsigned int
hash (str, len)
register const char *str;
register unsigned int len;
{
static const unsigned char asso_values[] =
{
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 0, 148, 19, 6, 27,
37, 0, 12, 1, 15, 63, 148, 4, 0, 56,
20, 15, 42, 148, 31, 5, 26, 39, 32, 10,
148, 40, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148
};
register int hval = len;
switch (hval)
{
default:
case 4:
hval += asso_values[(unsigned char)str[3]];
case 3:
case 2:
case 1:
hval += asso_values[(unsigned char)str[0]];
break;
}
return hval + asso_values[(unsigned char)str[len - 1]];
}
#ifdef __GNUC__
__inline
#endif
const struct resword *
in_word_set (str, len)
register const char *str;
register unsigned int len;
{
static const struct resword wordlist[] =
{
{""}, {""}, {""}, {""},
{"else", ELSE, NORID,},
{""},
{"long", TYPESPEC, RID_LONG,},
{""}, {""}, {""}, {""},
{"__alignof__", ALIGNOF, NORID},
{"__asm__", ASM, NORID},
{""}, {""},
{"while", WHILE, NORID,},
{""}, {""}, {""}, {""}, {""},
{"__alignof", ALIGNOF, NORID},
{"all", ALL, NORID /* Extension */,},
{"sizeof", SIZEOF, NORID,},
{"__const__", TYPE_QUAL, RID_CONST},
{"__volatile", TYPE_QUAL, RID_VOLATILE},
{"extern", SCSPEC, RID_EXTERN,},
{"__volatile__", TYPE_QUAL, RID_VOLATILE},
{"__inline", SCSPEC, RID_INLINE},
{"exception", AGGR, RID_EXCEPTION /* Extension */,},
{"__inline__", SCSPEC, RID_INLINE},
{"case", CASE, NORID,},
{"except", EXCEPT, NORID /* Extension */,},
{"new", NEW, NORID,},
{"break", BREAK, NORID,},
{"goto", GOTO, NORID,},
{""},
{"__attribute", ATTRIBUTE, NORID},
{""},
{"__attribute__", ATTRIBUTE, NORID},
{"this", THIS, NORID,},
{"raise", RAISE, NORID /* Extension */,},
{"class", AGGR, RID_CLASS,},
{"delete", DELETE, NORID,},
{"typeof", TYPEOF, NORID,},
{"typedef", SCSPEC, RID_TYPEDEF,},
{"for", FOR, NORID,},
{"raises", RAISES, NORID /* Extension */,},
{"__const", TYPE_QUAL, RID_CONST},
{"double", TYPESPEC, RID_DOUBLE,},
{"__typeof__", TYPEOF, NORID},
{""},
{"switch", SWITCH, NORID,},
{"auto", SCSPEC, RID_AUTO,},
{"do", DO, NORID,},
{"friend", SCSPEC, RID_FRIEND,},
{""},
{"reraise", RERAISE, NORID /* Extension */,},
{""},
{"volatile", TYPE_QUAL, RID_VOLATILE,},
{"__typeof", TYPEOF, NORID},
{"continue", CONTINUE, NORID,},
{"float", TYPESPEC, RID_FLOAT,},
{"const", TYPE_QUAL, RID_CONST,},
{"static", SCSPEC, RID_STATIC,},
{"virtual", SCSPEC, RID_VIRTUAL,},
{"__asm", ASM, NORID},
{"short", TYPESPEC, RID_SHORT,},
{"signed", TYPESPEC, RID_SIGNED,},
{"try", TRY, NORID /* Extension */,},
{""}, {""}, {""},
{"__signed__", TYPESPEC, RID_SIGNED},
{"catch", CATCH, NORID,},
{"public", PUBLIC, NORID,},
{"struct", AGGR, RID_RECORD,},
{"if", IF, NORID,},
{"asm", ASM, NORID,},
{"union", AGGR, RID_UNION,},
{""},
{"private", PRIVATE, NORID,},
{""}, {""}, {""},
{"operator", OPERATOR, NORID,},
{""}, {""}, {""},
{"default", DEFAULT, NORID,},
{"dynamic", DYNAMIC, NORID,},
{"overload", OVERLOAD, NORID,},
{"int", TYPESPEC, RID_INT,},
{"char", TYPESPEC, RID_CHAR,},
{""}, {""},
{"return", RETURN, NORID,},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""},
{"__signed", TYPESPEC, RID_SIGNED},
{""},
{"void", TYPESPEC, RID_VOID,},
{""}, {""}, {""},
{"protected", PROTECTED, NORID,},
{""},
{"enum", ENUM, NORID,},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""},
{"inline", SCSPEC, RID_INLINE,},
{"register", SCSPEC, RID_REGISTER,},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""},
{"unsigned", TYPESPEC, RID_UNSIGNED,}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
register int key = hash (str, len);
if (key <= MAX_HASH_VALUE && key >= 0)
{
register const char *s = wordlist[key].name;
if (*str == *s && !strcmp (str + 1, s + 1))
return &wordlist[key];
}
}
return 0;
}

View File

@ -0,0 +1,162 @@
/* C code produced by gperf version 2.7 */
/* Command-line: ../src/gperf -D -p -t */
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */
struct resword { char *name; short token; enum rid rid; };
#define TOTAL_KEYWORDS 51
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 13
#define MIN_HASH_VALUE 4
#define MAX_HASH_VALUE 82
/* maximum key range = 79, duplicates = 2 */
#ifdef __GNUC__
__inline
#endif
static unsigned int
hash (str, len)
register const char *str;
register unsigned int len;
{
static unsigned char asso_values[] =
{
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 0, 83, 40, 20, 50,
25, 10, 30, 0, 0, 50, 83, 0, 15, 0,
35, 0, 83, 83, 20, 0, 10, 40, 5, 15,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
83, 83, 83, 83, 83, 83
};
return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
}
#ifdef __GNUC__
__inline
#endif
struct resword *
in_word_set (str, len)
register const char *str;
register unsigned int len;
{
static struct resword wordlist[] =
{
{"goto", GOTO, NORID},
{"__asm", ASM, NORID},
{"switch", SWITCH, NORID},
{"__asm__", ASM, NORID},
{"__const__", TYPE_QUAL, RID_CONST},
{"__inline__", SCSPEC, RID_INLINE},
{"__typeof__", TYPEOF, NORID},
{"__signed__", TYPESPEC, RID_SIGNED},
{"__alignof__", ALIGNOF, NORID},
{"__volatile__", TYPE_QUAL, RID_VOLATILE},
{"__attribute__", ATTRIBUTE, NORID},
{"enum", ENUM, NORID},
{"short", TYPESPEC, RID_SHORT},
{"struct", STRUCT, NORID},
{"__const", TYPE_QUAL, RID_CONST},
{"__inline", SCSPEC, RID_INLINE},
{"long", TYPESPEC, RID_LONG},
{"__volatile", TYPE_QUAL, RID_VOLATILE},
{"__attribute", ATTRIBUTE, NORID},
{"volatile", TYPE_QUAL, RID_VOLATILE},
{"else", ELSE, NORID},
{"break", BREAK, NORID},
{"do", DO, NORID},
{"while", WHILE, NORID},
{"signed", TYPESPEC, RID_SIGNED},
{"__signed", TYPESPEC, RID_SIGNED},
{"void", TYPESPEC, RID_VOID},
{"sizeof", SIZEOF, NORID},
{"__typeof", TYPEOF, NORID},
{"__alignof", ALIGNOF, NORID},
{"double", TYPESPEC, RID_DOUBLE},
{"default", DEFAULT, NORID},
{"asm", ASM, NORID},
{"auto", SCSPEC, RID_AUTO},
{"float", TYPESPEC, RID_FLOAT},
{"typeof", TYPEOF, NORID},
{"typedef", SCSPEC, RID_TYPEDEF},
{"register", SCSPEC, RID_REGISTER},
{"extern", SCSPEC, RID_EXTERN},
{"for", FOR, NORID},
{"static", SCSPEC, RID_STATIC},
{"return", RETURN, NORID},
{"int", TYPESPEC, RID_INT},
{"case", CASE, NORID},
{"const", TYPE_QUAL, RID_CONST},
{"inline", SCSPEC, RID_INLINE},
{"continue", CONTINUE, NORID},
{"unsigned", TYPESPEC, RID_UNSIGNED},
{"char", TYPESPEC, RID_CHAR},
{"union", UNION, NORID},
{"if", IF, NORID}
};
static short lookup[] =
{
-1, -1, -1, -1, 0, 1, 2, 3, -1, 4,
-80, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, -1, 19, 20, 21, -1, 22, -46, -3,
23, 24, -1, 25, 26, -1, 27, -1, 28, 29,
-1, 30, 31, 32, 33, 34, 35, 36, 37, -1,
-1, 38, -1, 39, -1, -1, 40, -1, -1, -1,
-1, 41, -1, 42, 43, 44, 45, -1, 46, -1,
-1, -1, -1, 47, 48, -1, -1, -1, -1, -1,
49, -1, 50
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
register int key = hash (str, len);
if (key <= MAX_HASH_VALUE && key >= 0)
{
register int index = lookup[key];
if (index >= 0)
{
register const char *s = wordlist[index].name;
if (*str == *s && !strcmp (str + 1, s + 1))
return &wordlist[index];
}
else if (index < -TOTAL_KEYWORDS)
{
register int offset = - 1 - TOTAL_KEYWORDS - index;
register struct resword *wordptr = &wordlist[TOTAL_KEYWORDS + lookup[offset]];
register struct resword *wordendptr = wordptr + -lookup[offset + 1];
while (wordptr < wordendptr)
{
register const char *s = wordptr->name;
if (*str == *s && !strcmp (str + 1, s + 1))
return wordptr;
wordptr++;
}
}
}
}
return 0;
}

View File

@ -0,0 +1,124 @@
/* C code produced by gperf version 2.7 */
/* Command-line: ../src/gperf -g -o -j1 -t -p -N is_reserved_word */
/* ISO Pascal 7185 reserved words.
*
* For GNU Pascal compiler (GPC) by jtv@hut.fi
*
* run this through the Doug Schmidt's gperf program
* with command
* gperf -g -o -j1 -t -p -N is_reserved_word
*
*/
struct resword { char *name; short token; short iclass;};
#define TOTAL_KEYWORDS 35
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 9
#define MIN_HASH_VALUE 2
#define MAX_HASH_VALUE 43
/* maximum key range = 42, duplicates = 0 */
#ifdef __GNUC__
__inline
#endif
static unsigned int
hash (str, len)
register const char *str;
register unsigned int len;
{
static unsigned char asso_values[] =
{
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 18, 29, 14, 6, 7,
10, 20, 44, 28, 44, 44, 28, 19, 22, 15,
0, 44, 9, 23, 0, 23, 26, 2, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
0, 0, 13, 44, 30, 44, 44, 44, 0, 25,
1, 0, 44, 44, 0, 44, 1, 44, 25, 44,
44, 0, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44
};
return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
}
#ifdef __GNUC__
__inline
#endif
struct resword *
is_reserved_word (str, len)
register const char *str;
register unsigned int len;
{
static struct resword wordlist[] =
{
{""}, {""},
{"To", TO, PASCAL_ISO},
{""},
{"Type", TYPE, PASCAL_ISO},
{"Then", THEN, PASCAL_ISO},
{"Packed", PACKED, PASCAL_ISO},
{"While", WHILE, PASCAL_ISO},
{"Do", DO, PASCAL_ISO},
{"Procedure", PROCEDURE, PASCAL_ISO},
{"End", END, PASCAL_ISO},
{"Else", ELSE, PASCAL_ISO},
{"Downto", DOWNTO, PASCAL_ISO},
{"For", FOR, PASCAL_ISO},
{"File", FILE_, PASCAL_ISO},
{"Record", RECORD, PASCAL_ISO},
{"Repeat", REPEAT, PASCAL_ISO},
{"Or", OR, PASCAL_ISO},
{"Case", CASE, PASCAL_ISO},
{"Function", FUNCTION, PASCAL_ISO},
{"Const", CONST, PASCAL_ISO},
{"And", AND, PASCAL_ISO},
{"Mod", MOD, PASCAL_ISO},
{"Array", ARRAY, PASCAL_ISO},
{"Goto", GOTO, PASCAL_ISO},
{"Nil", NIL, PASCAL_ISO},
{"Not", NOT, PASCAL_ISO},
{"Set", SET, PASCAL_ISO},
{"Until", UNTIL, PASCAL_ISO},
{"Var", VAR, PASCAL_ISO},
{"Of", OF, PASCAL_ISO},
{"In", IN, PASCAL_ISO},
{"Program",PROGRAM,PASCAL_ISO},
{"Label", LABEL, PASCAL_ISO},
{"Div", DIV, PASCAL_ISO},
{"Begin", BEGIN_, PASCAL_ISO},
{"With", WITH, PASCAL_ISO},
{""}, {""}, {""}, {""}, {""}, {""},
{"If", IF, PASCAL_ISO}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
register int key = hash (str, len);
if (key <= MAX_HASH_VALUE && key >= 0)
{
register const char *s = wordlist[key].name;
if (*str == *s && !strcmp (str + 1, s + 1))
return &wordlist[key];
}
}
return 0;
}

View File

@ -0,0 +1,119 @@
GNU `gperf' generates perfect hash functions.
Usage: ../src/gperf [OPTION]... [INPUT-FILE]
If a long option shows an argument as mandatory, then it is mandatory
for the equivalent short option also.
Input file interpretation:
-e, --delimiters=DELIMITER-LIST
Allow user to provide a string containing delimiters
used to separate keywords from their attributes.
Default is ",\n".
-t, --struct-type Allows the user to include a structured type
declaration for generated code. Any text before %%
is considered part of the type declaration. Key
words and additional fields may follow this, one
group of fields per line.
Language for the output code:
-L, --language=LANGUAGE-NAME
Generates code in the specified language. Languages
handled are currently C++, ANSI-C, C, and KR-C. The
default is C.
Details in the output code:
-K, --slot-name=NAME Select name of the keyword component in the keyword
structure.
-H, --hash-fn-name=NAME
Specify name of generated hash function. Default is
`hash'.
-N, --lookup-fn-name=NAME
Specify name of generated lookup function. Default
name is `in_word_set'.
-Z, --class-name=NAME Specify name of generated C++ class. Default name is
`Perfect_Hash'.
-7, --seven-bit Assume 7-bit characters.
-c, --compare-strncmp Generate comparison code using strncmp rather than
strcmp.
-C, --readonly-tables Make the contents of generated lookup tables
constant, i.e., readonly.
-E, --enum Define constant values using an enum local to the
lookup function rather than with defines.
-I, --includes Include the necessary system include file <string.h>
at the beginning of the code.
-G, --global Generate the static table of keywords as a static
global variable, rather than hiding it inside of the
lookup function (which is the default behavior).
-W, --word-array-name=NAME
Specify name of word list array. Default name is
`wordlist'.
-S, --switch=COUNT Causes the generated C code to use a switch
statement scheme, rather than an array lookup table.
This can lead to a reduction in both time and space
requirements for some keyfiles. The COUNT argument
determines how many switch statements are generated.
A value of 1 generates 1 switch containing all the
elements, a value of 2 generates 2 tables with 1/2
the elements in each table, etc. If COUNT is very
large, say 1000000, the generated C code does a
binary search.
-T, --omit-struct-type
Prevents the transfer of the type declaration to the
output file. Use this option if the type is already
defined elsewhere.
Algorithm employed by gperf:
-k, --key-positions=KEYS
Select the key positions used in the hash function.
The allowable choices range between 1-126, inclusive.
The positions are separated by commas, ranges may be
used, and key positions may occur in any order.
Also, the meta-character '*' causes the generated
hash function to consider ALL key positions, and $
indicates the ``final character'' of a key, e.g.,
$,1,2,4,6-10.
-l, --compare-strlen Compare key lengths before trying a string
comparison. This helps cut down on the number of
string comparisons made during the lookup.
-D, --duplicates Handle keywords that hash to duplicate values. This
is useful for certain highly redundant keyword sets.
-f, --fast=ITERATIONS Generate the gen-perf.hash function ``fast''. This
decreases gperf's running time at the cost of
minimizing generated table size. The numeric
argument represents the number of times to iterate
when resolving a collision. `0' means ``iterate by
the number of keywords''.
-i, --initial-asso=N Provide an initial value for the associate values
array. Default is 0. Setting this value larger helps
inflate the size of the final table.
-j, --jump=JUMP-VALUE Affects the ``jump value'', i.e., how far to advance
the associated character value upon collisions. Must
be an odd number, default is 5.
-n, --no-strlen Do not include the length of the keyword when
computing the hash function.
-o, --occurrence-sort Reorders input keys by frequency of occurrence of
the key sets. This should decrease the search time
dramatically.
-r, --random Utilizes randomness to initialize the associated
values table.
-s, --size-multiple=N Affects the size of the generated hash table. The
numeric argument N indicates ``how many times larger
or smaller'' the associated value range should be,
in relationship to the number of keys, e.g. a value
of 3 means ``allow the maximum associated value to
be about 3 times larger than the number of input
keys.'' Conversely, a value of -3 means ``make the
maximum associated value about 3 times smaller than
the number of input keys. A larger table should
decrease the time required for an unsuccessful
search, at the expense of extra table space. Default
value is 1.
Informative output:
-h, --help Print this message.
-v, --version Print the gperf version number.
-d, --debug Enables the debugging option (produces verbose
output to the standard error).
Report bugs to <bug-gnu-utils@gnu.org>.

View File

@ -0,0 +1,32 @@
in word set if
in word set do
NOT in word set int
in word set for
in word set case
NOT in word set char
NOT in word set auto
in word set goto
in word set else
NOT in word set long
NOT in word set void
NOT in word set enum
NOT in word set float
NOT in word set short
NOT in word set union
NOT in word set break
in word set while
NOT in word set const
NOT in word set double
NOT in word set static
NOT in word set extern
NOT in word set struct
in word set return
NOT in word set sizeof
NOT in word set switch
NOT in word set signed
NOT in word set typedef
NOT in word set default
NOT in word set unsigned
NOT in word set continue
NOT in word set register
NOT in word set volatile

View File

@ -1,5 +1,5 @@
/*
Tests the generated perfect has function.
Tests the generated perfect hash function.
The -v option prints diagnostics as to whether a word is in
the set or not. Without -v the program is useful for timing.
*/
@ -8,16 +8,10 @@
#define MAX_LEN 80
#ifdef __STDC__
int in_word_set (char *, unsigned int);
int
main (int argc, char *argv[])
#else
int
main (argc, argv)
int argc;
char *argv[];
#endif
{
int verbose = argc > 1 ? 1 : 0;
char buf[MAX_LEN];

54
contrib/gperf/tests/validate Executable file
View File

@ -0,0 +1,54 @@
#! /bin/sh
# Validate gperf's operation on a given input file.
# Usage: validate languages input.gperf [more gperf options]
# Uses the environment variables GPERF, CC, CFLAGS, CXX, CXXFLAGS.
# Supposes gcc and g++.
# Exit on error
set -e
verbose () {
echo "$@"
"$@"
}
languages=$1
shift
for lang in `echo $languages | sed -e 's/,/ /g'`; do
case "$lang" in
KR-C )
echo "${GPERF} -I -L KR-C $@ > valitest.c"
${GPERF} -I -L KR-C "$@" > valitest.c
grep -n ' const ' valitest.c /dev/null && exit 1
verbose ${CC} ${CFLAGS} -traditional valitest.c -o valitest
./valitest
verbose ${CC} ${CFLAGS} -ansi -pedantic valitest.c -o valitest
./valitest
;;
C )
echo "${GPERF} -I -L C $@ > valitest.c"
${GPERF} -I -L C "$@" > valitest.c
verbose ${CC} ${CFLAGS} -traditional -Dconst= valitest.c -o valitest
./valitest
verbose ${CC} ${CFLAGS} -ansi -pedantic -pedantic-errors valitest.c -o valitest
./valitest
;;
ANSI-C )
echo "${GPERF} -I -L ANSI-C $@ > valitest.c"
${GPERF} -I -L ANSI-C "$@" > valitest.c
verbose ${CC} ${CFLAGS} -ansi -pedantic -pedantic-errors valitest.c -o valitest
./valitest
verbose ${CXX} ${CXXFLAGS} -ansi -pedantic -pedantic-errors valitest.c -o valitest
./valitest
;;
"C++" )
echo "${GPERF} -I -L C++ $@ > valitest.c"
${GPERF} -I -L C++ "$@" > valitest.c
verbose ${CXX} ${CXXFLAGS} -ansi -pedantic -pedantic-errors -DCPLUSPLUS_TEST valitest.c -o valitest
./valitest
;;
esac
done
exit 0