#!/bin/sh # This is a shell archive (produced by GNU sharutils 4.2c). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 2004-09-23 15:20 MDT by . # Source directory was `/home/0077/sy/beebe/tex/bibparse/bibparse-1.06'. # # Existing files will *not* be overwritten unless `-c' is specified. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 1762 -rwxr-xr-x BUILD-BIBPARSE.sh # 4593 -rw-r--r-- ChangeLog # 21108 -rw-r--r-- Makefile.in # 35106 -rw-rw-r-- README # 76436 -rw-r--r-- README.html # 202 -rw-r--r-- acconfig.h # 338 -rw-r--r-- args.h # 987 -rw-r--r-- bibdup.awk # 554 -rwxr-xr-x bibdup.sin # 4224 -rw-r--r-- bibdup.man # 777 -rw-r--r-- bibfiles.sok # 457 -r--r--r-- biblex.dat # 12993 -rw-r--r-- biblex.l # 6983 -rw-r--r-- biblex.man # 1622 -r--r--r-- biblex.ok # 15536 -rw-r--r-- bibparse.man # 13859 -rw-r--r-- bibparse.y # 9530 -rw-r--r-- bibunlex.l # 4014 -rw-r--r-- bibunlex.man # 1418 -rw-r--r-- bibyydcl.h # 183803 -rwxrwxr-x configure # 6242 -rw-r--r-- configure.in # 1847 -rw-rw-r-- config.hin # 1223 -rw-r--r-- lexmain.c # 1528 -rw-r--r-- token.h # 2418 -r--r--r-- test/check.bat # 1599 -r-xr-xr-x test/docheck.sh # 457 -r--r--r-- test/lex001.in # 331 -r--r--r-- test/lex002.in # 457 -r--r--r-- test/lex003.in # 427150 -r--r--r-- test/lex004.in # 81416 -r--r--r-- test/lex005.in # 0 -r--r--r-- test/okay/lex001.err # 1682 -r--r--r-- test/okay/lex001.out # 0 -r--r--r-- test/okay/lex002.err # 896 -r--r--r-- test/okay/lex002.out # 0 -r--r--r-- test/okay/lex003.err # 3576 -r--r--r-- test/okay/lex003.out # 0 -r--r--r-- test/okay/lex004.err # 1369101 -r--r--r-- test/okay/lex004.out # 0 -r--r--r-- test/okay/lex005.err # 242991 -r--r--r-- test/okay/lex005.out # 0 -r--r--r-- test/okay/parse001.err # 0 -r--r--r-- test/okay/parse001.out # 0 -r--r--r-- test/okay/parse002.err # 0 -r--r--r-- test/okay/parse002.out # 0 -r--r--r-- test/okay/parse003.err # 0 -r--r--r-- test/okay/parse003.out # 1298 -r--r--r-- test/okay/parse004.err # 0 -r--r--r-- test/okay/parse004.out # 0 -r--r--r-- test/okay/parse005.err # 0 -r--r--r-- test/okay/parse005.out # 84 -r--r--r-- test/okay/parse006.err # 0 -r--r--r-- test/okay/parse006.out # 55 -r--r--r-- test/okay/parse007.err # 0 -r--r--r-- test/okay/parse007.out # 0 -r--r--r-- test/okay/parse008.err # 0 -r--r--r-- test/okay/parse008.out # 0 -r--r--r-- test/okay/parse009.err # 0 -r--r--r-- test/okay/parse009.out # 0 -r--r--r-- test/okay/parse010.err # 0 -r--r--r-- test/okay/parse010.out # 55 -r--r--r-- test/okay/parse011.err # 0 -r--r--r-- test/okay/parse011.out # 55 -r--r--r-- test/okay/parse012.err # 0 -r--r--r-- test/okay/parse012.out # 0 -r--r--r-- test/okay/parse013.err # 0 -r--r--r-- test/okay/parse013.out # 0 -r--r--r-- test/okay/parse014.err # 0 -r--r--r-- test/okay/parse014.out # 0 -r--r--r-- test/okay/parse015.err # 0 -r--r--r-- test/okay/parse015.out # 0 -r--r--r-- test/okay/unlex001.err # 401 -r--r--r-- test/okay/unlex001.out # 0 -r--r--r-- test/okay/unlex002.err # 350 -r--r--r-- test/okay/unlex002.out # 0 -r--r--r-- test/okay/unlex003.err # 522 -r--r--r-- test/okay/unlex003.out # 0 -r--r--r-- test/okay/unlex004.err # 387933 -r--r--r-- test/okay/unlex004.out # 0 -r--r--r-- test/okay/unlex005.err # 74532 -r--r--r-- test/okay/unlex005.out # 1682 -r--r--r-- test/parse001.in # 896 -r--r--r-- test/parse002.in # 3576 -r--r--r-- test/parse003.in # 1369101 -r--r--r-- test/parse004.in # 242991 -r--r--r-- test/parse005.in # 275 -r--r--r-- test/parse006.in # 12 -r--r--r-- test/parse007.in # 311 -r--r--r-- test/parse008.in # 59076 -r--r--r-- test/parse009.in # 4170 -r--r--r-- test/parse010.in # 579 -r--r--r-- test/parse011.in # 126 -r--r--r-- test/parse012.in # 1287 -r--r--r-- test/parse013.in # 228690 -r--r--r-- test/parse014.in # 15060 -r--r--r-- test/parse015.in # 1682 -r--r--r-- test/unlex001.in # 896 -r--r--r-- test/unlex002.in # 3576 -r--r--r-- test/unlex003.in # 1369101 -r--r--r-- test/unlex004.in # 242991 -r--r--r-- test/unlex005.in # 1388 -r-xr-xr-x test/update.sh # 6775 -rw-rw-r-- bibdup.html # 9915 -rw-rw-r-- biblex.html # 19720 -rw-rw-r-- bibparse.html # 6487 -rw-rw-r-- bibunlex.html # 5064 -rw-r--r-- bibdup.pdf # 8415 -rw-r--r-- biblex.pdf # 15569 -rw-r--r-- bibparse.pdf # 4946 -rw-r--r-- bibunlex.pdf # 8908 -rw-rw-r-- bibdup.ps # 13701 -rw-rw-r-- biblex.ps # 24839 -rw-rw-r-- bibparse.ps # 8645 -rw-rw-r-- bibunlex.ps # 2229 -rw-rw-r-- bibdup.txt # 5267 -rw-rw-r-- biblex.txt # 13919 -rw-rw-r-- bibparse.txt # 1952 -rw-rw-r-- bibunlex.txt # 21083 -r--r--r-- save/Makefile # 27073 -r--r--r-- save/biblex.c # 20947 -r--r--r-- save/bibunlex.c # 30959 -r--r--r-- save/bibparse.c # 602 -r--r--r-- save/config.h # 82621 -r-xr-xr-x save/configure # save_IFS="${IFS}" IFS="${IFS}:" gettext_dir=FAILED locale_dir=FAILED first_param="$1" for dir in $PATH do if test "$gettext_dir" = FAILED && test -f $dir/gettext \ && ($dir/gettext --version >/dev/null 2>&1) then set `$dir/gettext --version 2>&1` if test "$3" = GNU then gettext_dir=$dir fi fi if test "$locale_dir" = FAILED && test -f $dir/shar \ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) then locale_dir=`$dir/shar --print-text-domain-dir` fi done IFS="$save_IFS" if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED then echo=echo else TEXTDOMAINDIR=$locale_dir export TEXTDOMAINDIR TEXTDOMAIN=sharutils export TEXTDOMAIN echo="$gettext_dir/gettext -s" fi if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then shar_n= shar_c=' ' else shar_n=-n shar_c= fi else shar_n= shar_c='\c' fi touch -am 1231235999 $$.touch >/dev/null 2>&1 if test ! -f 1231235999 && test -f $$.touch; then shar_touch=touch else shar_touch=: echo $echo 'WARNING: not restoring timestamps. Consider getting and' $echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi rm -f 1231235999 $$.touch # $echo $shar_n 'x -' 'lock directory' "\`_sh13818': "$shar_c if mkdir _sh13818; then $echo 'created' else $echo 'failed to create' exit 1 fi # ============= BUILD-BIBPARSE.sh ============== if test -f 'BUILD-BIBPARSE.sh' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'BUILD-BIBPARSE.sh' '(file already exists)' else $echo 'x -' extracting 'BUILD-BIBPARSE.sh' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'BUILD-BIBPARSE.sh' && #! /bin/sh # This script configures and builds an optimized version of bibparse on # all local systems at the University of Utah Mathematics and Physics # Departments. # # Usage: # ./BUILD-BIBPARSE.sh # # [08-May-1999] X # Default C compiler CC=c89 YACC=yacc X # Adjustments for particular systems X case "`uname -s`" in X AIX) X CC=c89 X OPT='-O3 -qarch=ppc' X # Don't use -qarch=ppc: AIX doesn't emulate those extra instructions X # on older models that lack them, sigh... Sun does a much better job X OPT='-O3' X ;; X HP-UX) X CC=c89 X OPT='+O4' X ;; X IRIX) X CC='cc -cckr' X OPT='-O2' X # IRIX 5.3 yacc quits with ``Redeclaration of precedence of ASGNOP, line 75'' X # so switch to bison, sigh... X YACC='bison -y' X ;; X IRIX64) X CC=c89 X OPT='-O2' X ;; X Linux) X CC=gcc X OPT='-O3' X ;; X Mach) X CC=gcc X OPT='-O3 -m68030' X ;; X OSF1) X CC=c89 X OPT=-O4 X ;; X SunOS) X case "`uname -r`" in X 4.*) X CC='acc' X OPT='-O2 -dalign -libmil -cg89' X ;; X 5.5) X CC="gcc -ansi" X CC=c89 X OPT='-xO5 -dalign -xlibmil -fsimple=2 -fns -xsafe=mem -xtarget=ultra1/2200' X ;; X 5.*) X CC="gcc -ansi" X CC=c89 X OPT='-xO5 -dalign -xlibmil -fsimple=2 -fns -xsafe=mem -xtarget=ultra2/2300' X ;; X *) X echo "Unrecognized SunOS version...proceeding with defaults and fingers crossed :^)" X CC=c89 X OPT='-O' X ;; X esac X ;; X *) X echo "Unrecognized operating system...proceeding with defaults and fingers crossed :^)" X OPT='-O' X ;; esac X if test -f Makefile then X make distclean else X rm -f *.o config.cache config.log config.status awklex maketab \ X proctab.c ytab.c ytab.h fi X echo 'CC =' $CC echo 'OPT =' $OPT echo 'YACC =' $YACC X env CC="${CC}" ./configure && make OPT="$OPT" YACC="${YACC}" all check SHAR_EOF $shar_touch -am 0508145899 'BUILD-BIBPARSE.sh' && chmod 0755 'BUILD-BIBPARSE.sh' || $echo 'restore of' 'BUILD-BIBPARSE.sh' 'failed' if ( md5sum --help &1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'BUILD-BIBPARSE.sh:' 'MD5 check failed' b1f6627a14dc50f70449c1c64392f910 BUILD-BIBPARSE.sh SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'BUILD-BIBPARSE.sh'`" test 1762 -eq "$shar_count" || $echo 'BUILD-BIBPARSE.sh:' 'original size' '1762,' 'current size' "$shar_count!" fi fi # ============= ChangeLog ============== if test -f 'ChangeLog' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'ChangeLog' '(file already exists)' else $echo 'x -' extracting 'ChangeLog' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'ChangeLog' && 2004-09-23 14:55:19-0600 Nelson H. F. Beebe X X * Release version 1.06. Repackaging to update version number and X address, and use more recent autoconf. X 2001-10-06 17:30:16-0600 Nelson H. F. Beebe X X * Release version 1.05. X X * README.html: Minor tweaks. X X * TO-DO: Update with new bug items. X 1999-05-26 Nelson H. F. Beebe X X * Release version 1.04. Its major new feature for users is the X ability of bibparse to handle BibTeX files directly, as well as X the lexical token streams from biblex and bibclean that previous X versions expected. This version has been tested under more than X 460 combinations of lex (AT&T lex and GNU flex) and yacc (AT&T X yacc, Berkeley byacc, and GNU bison) implementations, and C and X C++ compilers, and the enhancements to the autoconfig process X make it likely to be successful on almost all UNIX platforms, as X well as providing for simple builds on Microsoft Windows 9x and X NT systems. Binaries are provided for IBM PC DOS and Windows X systems. X X * bibyydcl.h: add function prototype for yylex(void). X X * Makefile.in: substantial rewrite with many small changes X too numerous to document here. X X * bibdup.sin: new file from which bibdup.sh (installed as bibdup) X is derived automatically. X X * config.hin: add #undef statements for HAVE_LIBFL and HAVE_LIBL. X X * configure.in: substantial rewirte with many new checks for X programs, more complex tests for lex/flex library variations X to handle GNU/Linux and C++ variations better, and generation X of bibdup.sh from bibdup.sin. X X * biblex.l: token printing now happens only when global variable X do_lex_output is nonzero, so that biblex can be embedded in X bibparse. X X * biblex.l, bibparse.y, bibunlex.l: define YYLMAX in terms of X BIBYYLMAX, which is now set in just a single place, in X Makefile.in. X X * biblex.l: add test against EOF as well as EOFILE, so flex can be X used reliably in place of lex. X X * bibparse.y: extend docstring in file comment header. X X * bibparse.y: add support for direct internal parsing of BibTeX X files, using a renamed biblex() parser linked into bibparse, so X that either token streams or BibTeX files can be used as input; X recognition of the input type is automatic. X X * bibparse.y: add new function zzlex() to handle input of token X stream. Function xxlex() (renamed from yylex() at compile time X in biblex) handles input of BibTeX files. Simple lookahead at X file beginning distinguishes between the two input types, and X pyylex is set to either xxlex or zzlex, and yylex() is defined X to call (*pyylex)(), so that yyparse() continues to work X unmodified, without knowledge of how its token stream was X obtained. X X * *.man: update author address in file comment header and AUTHOR X section. X X * *.man: add additional cross-references to newer BibTeX tools in X SEE ALSO section. X X * bibparse.man: document new direct BibTeX-file input support. X X * bibparse.man: substantially extend DESCRIPTION section. X X * bibparse.man: add entirely new OPTIONS section. X X * bibparse.man: add entirely new BIBTEX GRAMMAR section, so that X the user does not need to refer to the original TUGboat paper, X or the bibparse source code, to find the grammar. X X * bibparse.man: add entirely new PERFORMANCE section. X 1998-06-01 Nelson H. F. Beebe X X * Update biblex/bibparse/bibunlex distribution to use GNU X autoconfigure. This work added new files Makefile.in and X configure.in, from which autoconf produces configure, and X autoheader produces config.hin. When configure is run at the X installer's site, it produces config.h and Makefile. X X * Add new file arg.h with common header code from biblex.l, X bibparse.y, bibunlex.l, and lexmain.c. X X * Add support for flex in place of lex, and bison in place of X yacc. The choice is made by configure, with lex being X preferred. However, some Linux systems lack lex and yacc. X This required a few minor changes in biblex.l to get a lex X description acceptable to both lex and flex, and additional X support in bibyydcl.h for flex. X X * Add subdirectory save/ with backup copies of generated files X Makefile, biblex.c, bibparse.c, bibunlex.c, config.h, and X configure from the author's Sun Solaris 2.6 system. X X * Add .html and .pdf files to the distribution. X X * Update Makefile.in targets to match current GNU conventions. X X * Add ChangeLog and INSTALL files to the distribution. X X * Move symbolic token names into new token.h file to avoid X duplication. SHAR_EOF $shar_touch -am 09231520104 'ChangeLog' && chmod 0644 'ChangeLog' || $echo 'restore of' 'ChangeLog' 'failed' if ( md5sum --help &1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'ChangeLog:' 'MD5 check failed' fbb8b72dae6b4226ae9c36128eb1f7f7 ChangeLog SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'ChangeLog'`" test 4593 -eq "$shar_count" || $echo 'ChangeLog:' 'original size' '4593,' 'current size' "$shar_count!" fi fi # ============= Makefile.in ============== if test -f 'Makefile.in' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'Makefile.in' '(file already exists)' else $echo 'x -' extracting 'Makefile.in' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'Makefile.in' && # ====================================================================== # Makefile for biblex (lexically analyze BibTeX file), bibparse (parse # BibTeX file according to prototype grammar), and bibunlex # (reconstruct BibTeX file from lexical token stream). biblex and # bibunlex are lex/flex-based, and bibparse is yacc/bison-based. # # Current target list: # all (default) make biblex and test # biblex lex-based BibTeX lexer # biblex.o # bibparse.c # bibparse.o # bibparse yacc-based BibTeX parser # bibparse.jar Java Jar distribution archive # bibparse.shr shar bundle of distribution archive # bibparse.tar UNIX tar distribution archive # bibparse.txt ASCII text of formatted manual pages # bibparse.zip InfoZIP distribution archive # bibparse.zoo Zoo distribution archive # bibunlex filter to convert biblex token stream to # BibTeX format # bibunlex.c # bibunlex.o # check same as check-programs # check-docs spelling and doubled-word checks on # documentation # check-programs run validation suite # clean clean up trash and object files # clobber same as distclean # configure regenerate configure script (NB: # requires GNU autoheader and autoconf) # configure.time-stamp dummy file to record that patches # have been applied to the configure script # distclean clean up everything for a rebuild or # redistribution # docs make HTML, PostScript, PDF, and formatted # text files from man pages # dw doubled-word check on manual pages # html-files make HTML files from manual pages # install install bibdup, biblex, bibparse, and # bibunlex in system directories # install-ftp install distributions at author's ftp site # lexmain.o # maintainer-clean remove everything that can be rebuilt # with tools available at the author's # site (for maintainer only: do NOT do this # yourself!) # mostlyclean same as clean # pdf-files make PDF files from PostScript files # programs compile and link executable programs # ps-files make PostScript files from man pages # spell spell check manual pages # TAGS GNU Emacs tags file for fast editing # test-version check version number extraction for # other make targets # txt-files make ASCII text files from man pages # uninstall remove all files installed in system # directories by "make install" # # [08-May-1999] -- update for bibparse version 1.04 release # [01-Jun-1998] -- update for use with GNU autoconfigure # [16-Jan-1993] # ====================================================================== X prefix = @prefix@ X # Change these to suit local conventions: BINDIR = $(prefix)/bin FTPDIR = /u/ftp/pub/bibparse SHRLIBDIR = $(prefix)/share/lib/bibdup MANDIR = $(prefix)/man MANEXT = 1 X # Use lcc or gcc with extra flags for extensive error checking, or use # C++ compiler (g++ or CC). DO NOT CHANGE ANY OF THESE VALUES: # instead, copy one of these to the end of the CC list to select your # compiler. You may also set the DEFINES value below too, though that # is rarely necessary. X ## # NB: On SGI IRIX 4.0.x, if you do not have C++, then you must use ## # 'CC = cc -cckr' to compile biblex.c and bibunlex.c, because the ## # lex-generated code contains a line ## # FILE *yyin = {stdin}, *yyout = {stdout}; ## # which will not compile when the c89 version of stdio.h is used. ## ## CC = c89 ## DEC Alpha OSF/1 Standard C compiler ## CC = cxx ## DEC Alpha OSF/1 C++ compiler ## CC = CC ## C++ for BSD 4.3 UNIX on HP 370 ## CC = CC +a1 -xansi +w ## C++ for SGI IRIX 4.0 (see LOADLIBES below) ## CC = cc -ansiposix -fullwarn -woff 22,24,183,205,262,269,302,303 ## ## C for SGI IRIX 4.0 ## CC = CC +a1 +p +w -D_POSIX_SOURCE -Hansi -D__STDC__ -D_BSD -D_AIX -Dps2 \ ## -DHAVE_TERMIO_H ## ## C++ on AIX 370 and PS/2: +a1 (ANSI ## ## declarations), +p (no anachronisms), +w ## ## (warnings) -D-BSD (to get toupper() and ## ## tolower() declared in ctype.h). ## ## Need -DHAVE_TERMIO_H because termios.h ## ## has wrong prototypes for C++ ## CC = CC +a1 +p +w -D_POSIX_SOURCE -Hansi -D__STDC__ -D_BSD -D_AIX -D_AIX370 ## ## C++ on AIX 370 ## CC = cc -Hansi -D_POSIX_SOURCE ## cc on AIX 370 and AIX PS/2 ## CC = /usr/CC/sun4/CC -I/usr/CC/incl -D__SUNCC__ ## C++ on SunOS 4.1.1 ## CC = acc -Xc -vc -strconst -D__ACC__ -D_POSIX_SOURCE -DHAVE_TERMIOS_H ## ## SunOS Standard C compiler (neither ## ## -DHAVE_SGTTY_H nor -DHAVE_TERMIO_H gives ## ## char-at-a-time input, sigh...; they work ## ## fine on other systems). ## CC = c89 -D_POSIX_SOURCE -D_ALL_SOURCE ## IBM RS/6000 ## CC = xlC ## IBM RS/6000 C++ ## CC = c89 -D_HPUX_SOURCE ## HP 9000/8xx HP-UX A.08 ## CC = cc ## most systems ## CC = cc ## Stardent (NB: remove -g in OPT below) ## CC = cc -systype bsd43 -D__CC__ ## MIPS RCxxxx RISCos 4.52 and 5.2: ## CC = cc $(GCCFLAGS) ## NeXT (cc is really GNU C compiler) ## CC = g++ $(GCCFLAGS) ## GNU C++ ## CC = lcc -A -A -n ## Princeton/AT&T Standard C compiler ## CC = gcc $(GCCFLAGS) ## GNU C ## ## # Compiler for this site: ## CC = g++ $(GCCFLAGS) ## GNU C++ ## CC = gcc $(GCCFLAGS) ## GNU C ## CC = cc -Xc -D__ACC__ -D__solaris ## Sun Solaris 2.x ## X # These values are set when configure is run: CC = @CC@ CXX = @CXX@ CFLAGS = @CFLAGS@ $(DEFINES) $(INCLUDES) $(OPT) CXXFLAGS = @CXXFLAGS@ $(DEFINES) $(INCLUDES) $(OPT) X # ====================================================================== # The remainder of this Makefile should not need changes X # Need new awk (nawk) or gawk here: AWK = @AWK@ X # Where the executables are during "make check": BIBLEX = ../biblex X BIBPARSE = ../bibparse X BIBUNLEX = ../bibunlex X # Because we need to support rather long BibTeX tokens (e.g., a long # abstract string), we need a MUCH larger yytext[] token buffer than the # default, which is often just 512 or 1024. # # Unfortunately, some lex implementations (e.g., Sun Solaris 2.x) emit # use of YYLMAX before the code from the %{...%} section of the .l file, # or without allowing a command-line definition to set it, so even # though biblex.l redefines YYLMAX internally, that definition may be # too late. # # Thus, we must also define it on the compiler command line, and use it # in $(SEDFILTER) below. # # These values MUST all match, so we call them all BIBYYLMAX. This # is now the ONLY place where the magic value is set, so it can be # trivially redefined at make time if needed. # # Note: For a long time, this value was 40960 (or 32768 on IBM PC # systems). However, a few bibliographies in the TeX User Group # collection have even longer strings, and setting it to 81920 proved # to be big enough for all of them. To allow for growth, we set it # even larger, to 128K. BIBYYLMAX = 131072 X CHMOD = @CHMOD@ X # Extra flags for gcc and g++ to get maximal checking GCCFLAGS = -Wall -Wshadow -Wcast-qual -Wpointer-arith -Wwrite-strings X COMPRESS = @COMPRESS@ X CP = @CP@ X DEFINES = @DEFINES@ -DBIBYYLMAX=$(BIBYYLMAX) X DEROFF = @DEROFF@ X DIFF = @DIFF@ X DISTILL = @DISTILL@ X DITROFF = @DITROFF@ X ETAGS = @ETAGS@ X EXPAND = @EXPAND@ X INCLUDES = -I. X JAR = @JAR@ X LDFLAGS = @LDFLAGS@ X LIBS = @LIBS@ X # For flex, need to manually remove the %a and %o table size lines LEX = @LEX@ X LN = @LN@ -s X LS = @LS@ X # man2html is available at ftp://ftp.math.utah.edu/pub/sgml/man2html-x.yy.* MAN2HTML = @MAN2HTML@ X MKDIR = @MKDIR@ -p X MV = @MV@ X NROFF = @NROFF@ X # This variable defined to be empty, with the intent that the user can # set it on the make command line at build time to choose fancy # compiler-dependent optimization switches. OPT = X # NB: Put bibparse before biblex to avoid unnecessary recompilation # of biblex: bibparse creates a special temporary version of biblex.o PROGRAMS = bibparse biblex bibunlex X RM = @RM@ -f X RMDIR = @RMDIR@ X SED = @SED@ X # See above for why we need to substitute YYLMAX by BIBYYLMAX in the # first sed pattern. # # The peculiar second sed pattern removes a line generated by HP HP-UX # 10.x lex which causes a fatal compilation error because of an # argument mismatch with the real definition of main(). # # The third sed pattern resets any definition of YYLMAX to make it # equal to BIBYYLMAX, in case it gets used before it is reset later. # # The fourth sed pattern removes an erroneous declation of getenv() by # yacc on GNU/Linux systems. SEDFILTER = $(SED) -e 's/char *yytext *\[YYLMAX\]/char yytext[$(BIBYYLMAX)]/' \ X -e '/static void __yy__unused() { main(); }/d' \ X -e 's/\#[ ]*define[ ]*YYLMAX.*$$/\#define YYLMAX BIBYYLMAX/' \ X -e '/extern[ ]*char[ ]*[*]getenv[ ]*[(][ ]*[)]/d' X SHAR = @SHAR@ X # This variable is not used directly, but some make implementations # (e.g., SGI IRIX) use it to decide what shell to invoke commands in. # We require the original Bourne shell, sh (or a syntax-compatible # variant, such as ksh or bash). SHELL = /bin/sh X SPELL = @SPELL@ +bibfiles.sok X TAR = @TAR@ X TOUCH = @TOUCH@ X UNZIP = @UNZIP@ X VERSION = `$(AWK) '/^[ \t]*version *= *"[0-9.]+", *$$/ \ X { gsub(/[^0-9.]/,"",$$3); print $$3 }' bibparse.y` X YACC = @YACC@ X YFLAGS = -v @YFLAGS@ X ZIP = @ZIP@ X ZOO = @ZOO@ X #======================================================================= # File lists: X BASEPROGS = $(PROGRAMS) bibdup X CHECK-FILES = test/check.bat test/docheck.sh test/lex001.in \ X test/lex002.in test/lex003.in test/lex004.in test/lex005.in \ X test/okay/lex001.err test/okay/lex001.out \ X test/okay/lex002.err test/okay/lex002.out \ X test/okay/lex003.err test/okay/lex003.out \ X test/okay/lex004.err test/okay/lex004.out \ X test/okay/lex005.err test/okay/lex005.out \ X test/okay/parse001.err test/okay/parse001.out \ X test/okay/parse002.err test/okay/parse002.out \ X test/okay/parse003.err test/okay/parse003.out \ X test/okay/parse004.err test/okay/parse004.out \ X test/okay/parse005.err test/okay/parse005.out \ X test/okay/parse006.err test/okay/parse006.out \ X test/okay/parse007.err test/okay/parse007.out \ X test/okay/parse008.err test/okay/parse008.out \ X test/okay/parse009.err test/okay/parse009.out \ X test/okay/parse010.err test/okay/parse010.out \ X test/okay/parse011.err test/okay/parse011.out \ X test/okay/parse012.err test/okay/parse012.out \ X test/okay/parse013.err test/okay/parse013.out \ X test/okay/parse014.err test/okay/parse014.out \ X test/okay/parse015.err test/okay/parse015.out \ X test/okay/unlex001.err test/okay/unlex001.out \ X test/okay/unlex002.err test/okay/unlex002.out \ X test/okay/unlex003.err test/okay/unlex003.out \ X test/okay/unlex004.err test/okay/unlex004.out \ X test/okay/unlex005.err test/okay/unlex005.out \ X test/parse001.in test/parse002.in test/parse003.in \ X test/parse004.in test/parse005.in test/parse006.in \ X test/parse007.in test/parse008.in test/parse009.in \ X test/parse010.in test/parse011.in test/parse012.in \ X test/parse013.in test/parse014.in test/parse015.in \ X test/unlex001.in test/unlex002.in test/unlex003.in \ X test/unlex004.in test/unlex005.in test/update.sh X # These variables list the basenames of the test files. Those named XXX*.in # are input files for bibXXX, those named okay/XXX*.out contain correct # output on stdout from bibXXX for comparison with the .out files created by # "make check", and those named okay/XXX*.err contain correct output on # stderr from bibXXX for comparison with the XXX*.err files created by "make # check". All of these tests are done in the test subdirectory. X CHECK-NAMES-LEX = lex001 lex002 lex003 lex004 lex005 X CHECK-NAMES-PARSE = parse001 parse002 parse003 parse004 parse005 \ X parse006 parse007 parse008 parse009 parse010 \ X parse011 parse012 parse013 parse014 parse015 X CHECK-NAMES-UNLEX = unlex001 unlex002 unlex003 unlex004 unlex005 X # This is the list of everything that is distributed in the various # archive formats installed in the ftp tree: X DIST-FILES = BUILD-BIBPARSE.sh ChangeLog Makefile.in README README.html \ X acconfig.h args.h bibdup.awk bibdup.sin bibdup.man \ X bibfiles.sok biblex.dat biblex.l biblex.man biblex.ok \ X bibparse.man bibparse.y bibunlex.l bibunlex.man bibyydcl.h \ X configure configure.in config.hin lexmain.c token.h \ X $(CHECK-FILES) $(HTML-FILES) $(PDF-FILES) $(PS-FILES) \ X $(TXT-FILES) save/Makefile save/biblex.c save/bibunlex.c \ X save/bibparse.c save/config.h save/configure X HTML-FILES = $(MAN-FILES:.man=.html) X MAN-FILES = bibdup.man biblex.man bibparse.man bibunlex.man X PDF-FILES = $(MAN-FILES:.man=.pdf) X PS-FILES = $(MAN-FILES:.man=.ps) X TAGS-FILES = biblex.l bibparse.y bibunlex.l X TXT-FILES = $(MAN-FILES:.man=.txt) X #======================================================================= X X.SUFFIXES: .html .pdf .ps .txt .man .i .c .y X X.c.i: X $(CC) -E $(CFLAGS) $< >$@ X X.l.c: X $(LEX) -t $< | $(SEDFILTER) > $@ X X.man.html: X $(MAN2HTML) $< X X.ps.pdf: X $(DISTILL) $< X X.y.c: X $(YACC) $(YFLAGS) $< X $(SEDFILTER) < y.tab.c > $@ X -$(RM) y.tab.c X X.y.i: X $(MAKE) $*.c X $(MAKE) $*.i X -$(RM) $*.c X X.man.ps: X $(DITROFF) -Tps -man $? >$@ X X.man.txt: X $(DITROFF) -Tascii -man $? >$@ X #======================================================================= X all: programs X bibdup.sh: bibdup.sin Makefile X -$(RM) -f $@ X $(SED) -e 's=_LIBDIR_=$(SHRLIBDIR)=g' \ X -e 's=_BINDIR_=$(BINDIR)=g' \ X -e 's=_AWK_=$(AWK)=g' \ X $@ X $(CHMOD) 555 $@ X biblex: lexmain.c biblex.c args.h bibyydcl.h token.h X $(CC) $(CFLAGS) -o biblex lexmain.c biblex.c $(LDFLAGS) $(LIBS) X biblex.c: biblex.l X bibparse.c: bibparse.y X # We create a temporary empty yacc.h file to avoid a compilation # error from HP's version, and g++'s failure to find it at all. # This is harmless on other systems. bibparse.o: bibparse.c args.h bibyydcl.h X @$(TOUCH) yacc.h X $(CC) $(CFLAGS) -c bibparse.c X @-$(RM) yacc.h X # We make this dependency on biblex.c, not biblex.o, because we need # to recompile it with yylex changed to xxlex for use inside bibparse bibparse: bibparse.o biblex.c args.h bibyydcl.h token.h X $(CC) $(CFLAGS) -Dyylex=xxlex -o bibparse bibparse.o biblex.c $(LDFLAGS) $(LIBS) X @-$(RM) biblex.o X bibparse.jar: $(DIST-FILES) X -$(RM) bibparse.jar bibparse.jar-lst X $(JAR) cf bibparse.jar $(DIST-FILES) X -$(MKDIR) bibparse-$(VERSION) X cd bibparse-$(VERSION); $(JAR) xf ../bibparse.jar X $(JAR) cf bibparse-$(VERSION).jar bibparse-$(VERSION) X -$(RM) -rf bibparse-$(VERSION) X -$(RM) bibparse.jar X $(LN) bibparse-$(VERSION).jar bibparse.jar X # The shar bundle intentionally omits the leading directory name, # bibparse-x.y.z, because shar bundles can be extracted on other systems # (e.g., IBM PC DOS) which do not permit multiple periods in file names, or # seriously limit the length of file names. bibparse.shr: $(DIST-FILES) X -$(RM) bibparse*.shr X $(SHAR) $(DIST-FILES) >bibparse-$(VERSION).shr X $(LN) bibparse-$(VERSION).shr bibparse.shr X bibparse.tar: $(DIST-FILES) X -$(RM) bibparse.tar bibparse.tar-lst X $(TAR) chf bibparse.tar $(DIST-FILES) X -$(MKDIR) bibparse-$(VERSION) X cd bibparse-$(VERSION); tar xf ../bibparse.tar X $(TAR) cf bibparse-$(VERSION).tar bibparse-$(VERSION) X -$(RM) -r bibparse-$(VERSION) X -$(RM) bibparse.tar X $(LN) bibparse-$(VERSION).tar bibparse.tar X bibparse.txt: bibparse.man X $(NROFF) -man bibparse.man | col -b | $(EXPAND) >$@ X bibparse.zip: $(DIST-FILES) X -$(RM) bibparse*.zip bibparse*.zip-lst X $(ZIP) bibparse-$(VERSION).zip $(DIST-FILES) X $(UNZIP) -v bibparse-$(VERSION).zip >bibparse-$(VERSION).zip-lst X $(LN) bibparse-$(VERSION).zip bibparse.zip X bibparse.zoo: $(DIST-FILES) X -$(RM) bibparse*.zoo bibparse*.zoo-lst X $(ZOO) a bibparse-$(VERSION).zoo $(DIST-FILES) X $(ZOO) v bibparse-$(VERSION).zoo >bibparse-$(VERSION).zoo-lst X $(LN) bibparse-$(VERSION).zoo bibparse.zoo X bibunlex: bibunlex.c X $(CC) $(CFLAGS) -o bibunlex bibunlex.c $(LDFLAGS) $(LIBS) X bibunlex.c: bibunlex.l X check: check-programs X check-docs: dw spell X check-programs: check-biblex check-bibparse check-bibunlex X check-biblex: biblex X @echo "" X @echo "The following checks should produce no output, other than their names" X @cd test; ./docheck.sh $(BIBLEX) $(CHECK-NAMES-LEX) X check-bibparse: bibparse X @echo "" X @echo "The following checks should produce no output, other than their names" X @cd test; ./docheck.sh $(BIBPARSE) $(CHECK-NAMES-PARSE) X check-bibunlex: bibunlex X @echo "" X @echo "The following checks should produce no output, other than their names" X @cd test; ./docheck.sh $(BIBUNLEX) $(CHECK-NAMES-UNLEX) X clean: X -$(RM) *.i X -$(RM) *.o X -$(RM) *~ X -$(RM) \#* X -$(RM) biblex.tmp X -$(RM) bibparse.output X -$(RM) core X -$(RM) lex.yy.c X -$(RM) y.output X -$(RM) yacc.h X cleandist: X -$(RM) bibparse*.jar X -$(RM) bibparse*.jar-lst X -$(RM) bibparse*.shr X -$(RM) bibparse.tab.c X -$(RM) bibparse*.tar X -$(RM) bibparse*.tar-lst X -$(RM) bibparse*.zip X -$(RM) bibparse*.zip-lst X -$(RM) bibparse*.zoo X -$(RM) bibparse*.zoo-lst X clobber: distclean X configure: X autoconf X autoheader X -$(RM) config.cache X $(MAKE) configure.time-stamp X # Work around a serious flaw in GNU configure: it always inserts -g # -O2 in CFLAGS and CXXFLAGS. -g cannot be used with $(OPT) on many # systems, and -O2 is not supported on many systems. configure.time-stamp: configure Makefile.in X $(MV) configure configure.tmp X $(SED) \ X -e 's/CFLAGS=" *-g */CFLAGS="/' \ X -e 's/CFLAGS=" *-O2 */CFLAGS="/' \ X -e 's/CXXFLAGS=" *-g */CXXFLAGS="/' \ X -e 's/CXXFLAGS=" *-O2 */CXXFLAGS="/' \ X < configure.tmp > configure X $(CHMOD) 775 configure X $(TOUCH) configure.time-stamp X -$(RM) configure.tmp X dist: bibparse.jar bibparse.shr bibparse.tar bibparse.zip \ X bibparse.zoo X distclean: cleandist mostlyclean X -$(RM) $(PROGRAMS) bibdup.sh X -$(RM) Makefile X -$(RM) TAGS X -$(RM) bibparse.output X -$(RM) config.cache X -$(RM) config.h X -$(RM) config.log X -$(RM) config.status X -$(RM) y.output X -$(RM) y.tab.c X docs: html-files ps-files pdf-files txt-files X dw: X @for f in $(MAN-FILES) ; \ X do \ X echo "==================== doubled words in $$f\ ====================" ; \ X $(DEROFF) $$f | dw ; \ X done X html-files: $(HTML-FILES) X install: install-programs install-lib install-man install-show X install-ftp: dist uninstall-ftp X $(CP) bibparse-$(VERSION).jar $(FTPDIR) X $(JAR) tvf bibparse-$(VERSION).jar 2>$(FTPDIR)/bibparse-$(VERSION).jar-lst X $(CP) bibparse-$(VERSION).shr $(FTPDIR) X $(TAR) tvf bibparse-$(VERSION).tar >$(FTPDIR)/bibparse-$(VERSION).tar-lst X $(COMPRESS) $(FTPDIR)/bibparse-$(VERSION).tar.gz X $(CP) bibparse-$(VERSION).zip $(FTPDIR) X $(CP) bibparse-$(VERSION).zip-lst $(FTPDIR) X $(CP) bibparse-$(VERSION).zoo $(FTPDIR) X $(CP) bibparse-$(VERSION).zoo-lst $(FTPDIR) X $(LS) -l $(FTPDIR)/bibparse-$(VERSION)* X install-lib: uninstall-lib X -$(MKDIR) $(SHRLIBDIR) X $(CP) bibdup.awk $(SHRLIBDIR)/bibdup.awk X $(CHMOD) 664 $(SHRLIBDIR)/bibdup.awk X install-man: uninstall-man X for program in $(BASEPROGS) ; \ X do \ X $(CP) $$program.man $(MANDIR)/man$(MANEXT)/$$program.1 ; \ X $(CHMOD) 664 $(MANDIR)/man$(MANEXT)/$$program.1 ; \ X done X install-programs: $(PROGRAMS) bibdup.sh uninstall-programs X for program in $(PROGRAMS) ; \ X do \ X $(CP) $$program $(BINDIR)/$$program ; \ X $(CHMOD) 775 $(BINDIR)/$$program ; \ X done ; \ X $(CP) bibdup.sh $(BINDIR)/bibdup ; \ X $(CHMOD) 775 $(BINDIR)/bibdup X install-show: X @echo '' X @echo Installed files... X @for program in $(BASEPROGS) ; \ X do \ X $(LS) -l $(BINDIR)/$$program ; \ X done X @for program in $(BASEPROGS) ; \ X do \ X $(LS) -l $(MANDIR)/man$(MANEXT)/$$program.$(MANEXT) ; \ X done X @if test -d $(SHRLIBDIR) ; then $(LS) -lR $(SHRLIBDIR)/* ; fi X @echo '' X maintainer-clean: distclean X @echo "This command is intended for maintainers to use;" X @echo "it deletes files that may require special tools to rebuild." X -for f in $(PROGRAMS) ; \ X do \ X $(RM) $$.html ; \ X $(RM) $$.ps ; \ X $(RM) $$.pdf ; \ X $(RM) $$.txt ; \ X done X -$(RM) config.hin X -$(RM) configure X -$(RM) configure.time-stamp X mostlyclean: clean X -$(RM) biblex.c X -$(RM) bibparse.c X -$(RM) bibunlex.c X pdf-files: $(PDF-FILES) X programs: $(PROGRAMS) X ps-files: $(PS-FILES) X spell: X @for f in $(MAN-FILES) ; \ X do \ X echo "==================== spelling exceptions in $$f\ ====================" ; \ X $(DEROFF) $$f | $(SPELL) ; \ X done X TAGS: $(TAGS-FILES) X $(ETAGS) $(TAGS-FILES) X test-version: Makefile X @echo "Version number is ""'"$(VERSION)"'" X txt-files: $(TXT-FILES) X uninstall: uninstall-programs uninstall-lib uninstall-man X uninstall-ftp: X -$(RM) $(FTPDIR)/bibparse-$(VERSION).jar X -$(RM) $(FTPDIR)/bibparse-$(VERSION).jar-lst X -$(RM) $(FTPDIR)/bibparse-$(VERSION).shr X -$(RM) $(FTPDIR)/bibparse-$(VERSION).tar-lst X -$(RM) $(FTPDIR)/bibparse-$(VERSION).tar.gz X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zip X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zip-lst X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zoo X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zoo-lst X uninstall-lib: X -$(RM) $(SHRLIBDIR)/bibdup.awk X -$(RMDIR) $(SHRLIBDIR) X uninstall-man: X -for program in $(BASEPROGS) ; \ X do \ X $(RM) $(MANDIR)/man$(MANEXT)/$$program.1 ; \ X $(RM) $(MANDIR)/man$(MANEXT)/../cat$(MANEXT)/$$program.1 ; \ X done X uninstall-programs: X -for program in $(BASEPROGS) ; \ X do \ X $(RM) $(BINDIR)/$$program ; \ X done SHAR_EOF $shar_touch -am 09231515104 'Makefile.in' && chmod 0644 'Makefile.in' || $echo 'restore of' 'Makefile.in' 'failed' if ( md5sum --help &1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'Makefile.in:' 'MD5 check failed' 7cb3fb8289aa91c9ccf6a97214d63625 Makefile.in SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'Makefile.in'`" test 21108 -eq "$shar_count" || $echo 'Makefile.in:' 'original size' '21108,' 'current size' "$shar_count!" fi fi # ============= README ============== if test -f 'README' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'README' '(file already exists)' else $echo 'x -' extracting 'README' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'README' && X X README: Installation instruction for bibparse-1.06 X Table of contents X X * [1]Jump start X * [2]Introduction X * [3]Installation X * [4]Bug reports X * [5]UNIX Systems X * [6]IBM PC DOS X * [7]Test suite X * [8]Sample build output for UNIX X * [9]Implementation Notes X Jump start X X As with most GNUware, you can build, test, and install this program on X most UNIX systems by these simple steps csh et amici: X setenv CC ...your favorite C or C++ compiler... X ./configure && make all check install X sh et amici: X CC=...your favorite C or C++ compiler... X export CC X ./configure && make all check install X X Or in one line, if you have env (most modern UNIX systems do): X env CC=... ./configure && make all check install X X If you don't set the CC environment variable, then gcc (or cc, if gcc X is not available) will be assumed. X X If you wish to undo a make install, just do make uninstall; this will X remove any files in system directories put there by make install. X X See below for further details, and for instructions for non-UNIX X systems. X Introduction X X This directory contains bibparse, biblex, bibunlex, and bibdup, a X suite of programs for support of BibTeX bibliography files. They are X described in the following paper: @String{TUGboat = "TUGboat"} X @Article{Beebe:TB14-4-395, author = "Nelson Beebe", title = "{{Bibliography prettyprinting and syntax checking}}", journal = [10]TUGboat, year = "1993", volume = "14", number = "4", pages = "395--419", month = Dec, } X X The complete text of the TUGboat article is included with bibclean X 2.08 and later versions. X X You can find distributions of bibclean in a variety of formats in the X same place that you found the bibparse (et al) distribution. The X master location is ftp://ftp.math.utah.edu/pub/tex/bib. Via electronic X mail, a message with the body X help X send index from tex/bib X X to tuglib@math.utah.edu will get you started. X X Three files, biblex.c, bibparse.c, and bibunlex.c, are generated by X lex (or flex), and yacc (or bison). Copies of these files from the X author's site are preserved in the save subdirectory for manual X bootstrapping, but on UNIX systems, they should be generated X automatically as part of the installation process. X Installation X X Starting with version 1.03, bibparse has been adapted to use the GNU X autoconf automatic configuration system for UNIX installations. X X GNU autoconf is run at the author's site to produce the configure X script from configure.in. X X The configure script is run at each installer's UNIX site to produce X Makefile from Makefile.in , bibdup.sh from bibdup.sin, and config.h X from config.hin. The configure script is a large (2900+ lines) X automatically-generated Bourne shell program that investigates various X aspects of the local C implementation, and records its conclusions in X config.h. X X Should you do a make maintainer-clean [not recommended, except at the X author's site], the configure script will be deleted, and you will X need recent versions of both GNU m4 and autoconf correctly installed X to reconstruct things, which can be done this way: X autoheader # Regenerate config.hin X autoconf # Regenerate unedited configure X make configure.time-stamp # To fix configure script X X For convenience and safety, the distribution includes a subdirectory X named save that contains read-only copies of the files Makefile, X config.h, and configure created by autoconf and make configure, plus X the files biblex.c and bibunlex.c generated by lex, and the file X bibparse.c generated by yacc. This will allow recovery from a lost or X damaged configure file, and support manual bootstrapping on systems X that lack lex/flex and yacc/bison support, or have broken X implementations of those programs. X X Suitable hand-crafted config.h files are provided for non-UNIX X systems, and in the unlikely event of a failure of the configure X script on a UNIX system, config.h can be manually produced from a copy X of config.hin with a few seconds of editing work. If you do this, X remember to save a copy of your config.h under a different name, X because running configure will destroy it. If you have GNU autoconf X installed (the installation is very simple and source code is X available from X ftp://prep.ai.mit.edu/pub/gnu/autoconf/autoconf-x.y.tar.gz), (x.y = X 2.13 at the time of writing this), you might try augmenting X configure.in instead, then run autoheader, autoconf, and configure. X X Thus, on UNIX, installation normally consists of just two steps X (assuming a csh -compatible shell): X setenv CC ...your favorite C or C++ compiler... X ./configure && make all check install X X If you like, add OPT='your favorite optimization flags' to the make X command; by default, no optimization flags are set. X X The GNU standard installation directories /usr/local/bin for binaries, X and /usr/local/man/man1 for manual pages are assumed. The prefix X /usr/local can be overridden by providing an alternate definition for X the make variable, prefix, on the command line: X make prefix=/some/other/path install X X After installation, you can do X make distclean X X to restore the directories to their distribution state. You should X also do this between builds for different architectures from the same X source tree; neglecting to do so will almost certainly lead to X failure, because the config.cache file created by configure will lead X to an incorrect config.h and Makefile for the next build. X Bug reports X X Please report all problems, suggestions, and comments to the author: X X X Nelson H. F. Beebe X University of Utah X Department of Mathematics, 110 LCB X 155 S 1400 E RM 233 X Salt Lake City, UT 84112-0090 X USA X Tel: +1 801 581 5254 X FAX: +1 801 585 1640, +1 801 581 4148 X Email: [11]beebe@math.utah.edu , [12]beebe@acm.org , X [13]beebe@computer.org , [14]beebe@ieee.org (Internet) X WWW URL: [15]http://www.math.utah.edu/~beebe/ X UNIX Systems X X The code can be compiled with either C (K&R or ISO/ANSI Standard C) or X C++ compilers, although whether C++ can be used for the lex/flex- and X yacc/bison-generated code depends on how modern their versions are. X With some C++ compilers, it may be necessary to supply additional X switches for force the compiler to stay in C++ mode, rather than X reverting to C mode (e.g., on DEC Alpha OSF/1, you must do setenv CC X "cxx -x cxx"). X X On UNIX systems, the only variables that you are likely to need to X override on the make command line are the Makefile settings of CC and X OPT, and if you wish to do make install, the setting of prefix. X X If you are installing bibparse on a new system, you should definitely X run make check before installing it on your system. Sample output of X make check from a UNIX system is given below. X X These programs have been built, tested, and validated with two X independent lexers (flex and lex), and three independent parser X generators (bison, byacc, and yacc), using all available C and C++ X compilers on these 11 UNIX systems for the 1.04 release: 413 X successful builds, and 49 failures. Because some compilers are stored X in two different directories, or under two separate names, the actual X number of independent builds is somewhat less. X X While the large number of successful builds is gratifying, the X failures are potentially even more important if they can be traced to X deficiencies in my code. Close examination of the build logs shows X that they are not: they are entirely due to one of the following: X * Code from lex/flex and/or bison/byacc/yacc which is not X C++-compatible; there is no excuse for such vendor sloppiness, but X it exists. C has had an ANSI/ISO Standard since December 1989, and X the draft standard was stable at least two years before that, so X the target language has been publicly defined for about a dozen X years. All C-Standard-conforming code should compile without X problems under C++ (barring use of C++ reserved words). X * Lack of compiler support for the non-standard stack memory X allocator, alloca(), used in bison-generated code. X * Internal compiler errors (e.g., lcc on NeXT and SGI IRIX 6.x X systems). X * Broken vendor-provided yacc (SGI IRIX 5.3). X * Broken vendor-provided header file, alloca.h (pgCC). A bug report X about this to the vendor, The Portland Group X [16](http://www.pgroup.com), produced a prompt response with the X following patch: #ifdef __cplusplus extern "C" char * __builtin_alloca (int); #endif X *** /usr/pgi/linux86/include/alloca.h Thu Apr 22 18:57:51 1999 --- ./alloca.h Tue May 11 11:52:01 1999 *************** *** 36,41 **** --- 36,44 ---- X X # define __alloca(size) __builtin_alloca (size) X # define alloca(size) __alloca (size) + #ifdef __cplusplus + extern "C" char * __builtin_alloca (int); + #endif X X __END_DECLS X X Successes X X flex + bison (70 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /usr/bin/c89 X /usr/bin/cc X /bin/cc X /bin/c89 X /bin/cxx -x cxx X /usr/ucb/cc X /usr/ccs/bin/cc X /usr/ccs/bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X HP 9000/735 HP-UX 10.01 /usr/bin/c89 X /usr/ccs/bin/cc X /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/c89 X /bin/cc X IBM PowerPC 43P AIX 4.2 /bin/xlC X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/bin/c89 X /usr/bin/cc X /bin/cc X /bin/c89 X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/bin/cc X /usr/pgi/linux86/bin/pgcc X /usr/bin/gcc X /usr/bin/g++ X /usr/local/bin/gcc X /usr/local/bin/g++ X Intel Pentium II MMX GNU/Linux 2.0.35 /usr/bin/gcc X /usr/bin/g++ X /usr/bin/cc X /usr/local/bin/lcc -A -A X /usr/local/bin/gcc X /usr/local/bin/g++ X NeXT Turbostation Mach 3.3 /bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X SGI Challenge L IRIX 5.3 /bin/cc X /usr/bin/CC X /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/CC X SGI Origin/200-4 IRIX 6.4 /bin/CC X /usr/bin/cc X /bin/cc X /bin/c89 X /usr/bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/bin/CC X Sun SPARC 10/412 GNU/Linux 2.0.35 /usr/bin/cc X /usr/bin/gcc X /usr/bin/g++ X Sun SPARC LX Solaris 2.5 /opt/SUNWspro/bin/c89 X /usr/ucb/cc X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/local/bin/lcc -A -A X Sun Ultra Enterprise 5500 Solaris 2.6 /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/local/bin/lcc -A -A X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/c89 X /opt/SUNWspro/bin/cc X /usr/ucb/cc X X flex + byacc (75 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /usr/bin/c89 X /bin/c89 X /bin/cc X /usr/ccs/bin/c89 X /usr/ucb/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/cxx -x cxx X /usr/local/bin/lcc -A -A X /usr/ccs/bin/cc X /usr/bin/cc X HP 9000/735 HP-UX 10.01 /usr/bin/cc X /bin/cc X /usr/ccs/bin/cc X /usr/bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/c89 X /usr/bin/CC X /bin/CC X IBM PowerPC 43P AIX 4.2 /bin/xlC X /usr/bin/c89 X /bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/c89 X /usr/bin/cc X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/bin/cc X /usr/pgi/linux86/bin/pgCC X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/pgi/linux86/bin/pgcc X /usr/bin/gcc X /usr/bin/g++ X Intel Pentium II MMX GNU/Linux 2.0.35 /usr/local/bin/lcc -A -A X /usr/bin/gcc X /usr/bin/g++ X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/bin/cc X NeXT Turbostation Mach 3.3 /bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X SGI Challenge L IRIX 5.3 /bin/cc X /usr/local/bin/gcc X /usr/local/bin/lcc -A -A X /usr/local/bin/g++ X /usr/bin/CC X /usr/bin/cc X /bin/CC X SGI Origin/200-4 IRIX 6.4 /bin/CC X /usr/bin/CC X /usr/bin/c89 X /bin/cc X /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/c89 X Sun SPARC 10/412 GNU/Linux 2.0.35 /usr/bin/gcc X /usr/bin/g++ X /usr/bin/cc X Sun SPARC LX Solaris 2.5 /usr/ucb/cc X /opt/SUNWspro/bin/c89 X /usr/local/bin/lcc -A -A X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X Sun Ultra Enterprise 5500 Solaris 2.6 /usr/local/bin/lcc -A -A X /usr/local/bin/gcc X /usr/local/bin/g++ X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/cc X /opt/SUNWspro/bin/c89 X /usr/ucb/cc X X flex + yacc (66 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /usr/bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/c89 X /usr/ucb/cc X /bin/cxx -x cxx X /usr/ccs/bin/c89 X /usr/bin/cc X /usr/ccs/bin/cc X /usr/local/bin/lcc -A -A X /bin/cc X HP 9000/735 HP-UX 10.01 /bin/CC X /usr/ccs/bin/cc X /usr/bin/CC X /bin/cc X /usr/bin/cc X /bin/c89 X /usr/bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X IBM PowerPC 43P AIX 4.2 /usr/bin/cc X /bin/cc X /bin/c89 X /bin/xlC X /usr/bin/c89 X /usr/local/bin/gcc X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/bin/gcc X /usr/bin/g++ X /usr/pgi/linux86/bin/pgCC X /usr/pgi/linux86/bin/pgcc X /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X Intel Pentium II MMX GNU/Linux 2.0.35 /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/bin/gcc X /usr/bin/g++ X /usr/local/bin/lcc -A -A X NeXT Turbostation Mach 3.3 /bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X SGI Origin/200-4 IRIX 6.4 /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/bin/CC X /bin/CC X /usr/bin/cc X /bin/cc X /bin/c89 X /usr/bin/c89 X Sun SPARC 10/412 GNU/Linux 2.0.35 /usr/bin/cc X /usr/bin/gcc X /usr/bin/g++ X Sun SPARC LX Solaris 2.5 /usr/local/bin/gcc X /usr/local/bin/g++ X /opt/SUNWspro/bin/cc X /usr/ucb/cc X /opt/SUNWspro/bin/c89 X /opt/SUNWspro/bin/CC X Sun Ultra Enterprise 5500 Solaris 2.6 /opt/SUNWspro/bin/c89 X /usr/ucb/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/local/bin/lcc -A -A X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/cc X X lex + bison (67 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /usr/ccs/bin/cc X /usr/bin/c89 X /usr/ucb/cc X /usr/local/bin/gcc X /usr/ccs/bin/c89 X /bin/cc X /bin/c89 X /usr/bin/cc X HP 9000/735 HP-UX 10.01 /usr/bin/cc X /usr/ccs/bin/cc X /bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/cc X /usr/bin/c89 X IBM PowerPC 43P AIX 4.2 /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/bin/c89 X /bin/c89 X /bin/xlC X /bin/cc X /usr/bin/cc X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/bin/gcc X /usr/bin/g++ X /usr/bin/cc X /usr/pgi/linux86/bin/pgcc X /usr/local/bin/gcc X /usr/local/bin/g++ X Intel Pentium II MMX GNU/Linux 2.0.35 /usr/bin/cc X /usr/bin/gcc X /usr/bin/g++ X /usr/local/bin/gcc X /usr/local/bin/lcc -A -A X /usr/local/bin/g++ X NeXT Turbostation Mach 3.3 /usr/local/bin/gcc X /bin/cc X SGI Challenge L IRIX 5.3 /bin/CC X /usr/bin/CC X /bin/cc X /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X SGI Origin/200-4 IRIX 6.4 /usr/bin/cc X /usr/bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/CC X /bin/cc X /usr/bin/CC X /bin/c89 X Sun SPARC 10/412 GNU/Linux 2.0.35 /usr/bin/cc X /usr/bin/gcc X /usr/bin/g++ X Sun SPARC LX Solaris 2.5 /usr/local/bin/gcc X /usr/local/bin/g++ X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/cc X /usr/ucb/cc X /usr/local/bin/lcc -A -A X /opt/SUNWspro/bin/c89 X Sun Ultra Enterprise 5500 Solaris 2.6 /opt/SUNWspro/bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X /opt/SUNWspro/bin/CC X /usr/ucb/cc X /opt/SUNWspro/bin/cc X /usr/local/bin/lcc -A -A X X lex + byacc (72 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /bin/cc X /usr/local/bin/gcc X /usr/local/bin/lcc -A -A X /usr/ccs/bin/cc X /usr/ucb/cc X /usr/bin/c89 X /usr/ccs/bin/c89 X /usr/bin/cc X /bin/c89 X HP 9000/735 HP-UX 10.01 /bin/CC X /bin/cc X /usr/ccs/bin/cc X /bin/c89 X /usr/bin/CC X /usr/local/bin/gcc X /usr/bin/cc X /usr/local/bin/g++ X /usr/bin/c89 X IBM PowerPC 43P AIX 4.2 /usr/bin/cc X /usr/bin/c89 X /bin/c89 X /bin/cc X /bin/xlC X /usr/local/bin/gcc X /usr/local/bin/g++ X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/bin/gcc X /usr/bin/g++ X /usr/bin/cc X /usr/pgi/linux86/bin/pgCC X /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/pgi/linux86/bin/pgcc X Intel Pentium II MMX GNU/Linux 2.0.35 /usr/local/bin/lcc -A -A X /usr/bin/gcc X /usr/bin/g++ X /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X NeXT Turbostation Mach 3.3 /usr/local/bin/gcc X /bin/cc X SGI Challenge L IRIX 5.3 /usr/bin/cc X /usr/local/bin/lcc -A -A X /bin/CC X /bin/cc X /usr/local/bin/gcc X /usr/bin/CC X /usr/local/bin/g++ X SGI Origin/200-4 IRIX 6.4 /usr/bin/c89 X /usr/bin/CC X /usr/bin/cc X /bin/c89 X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/CC X /bin/cc X Sun SPARC 10/412 GNU/Linux 2.0.35 /usr/bin/gcc X /usr/bin/g++ X /usr/bin/cc X Sun SPARC LX Solaris 2.5 /usr/local/bin/lcc -A -A X /opt/SUNWspro/bin/CC X /usr/local/bin/gcc X /usr/local/bin/g++ X /opt/SUNWspro/bin/cc X /usr/ucb/cc X /opt/SUNWspro/bin/c89 X Sun Ultra Enterprise 5500 Solaris 2.6 /usr/local/bin/lcc -A -A X /opt/SUNWspro/bin/c89 X /usr/ucb/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/cc X X lex + yacc (63 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /usr/ccs/bin/c89 X /usr/bin/c89 X /bin/c89 X /usr/ccs/bin/cc X /usr/local/bin/gcc X /usr/ucb/cc X /usr/local/bin/lcc -A -A X /bin/cc X /usr/bin/cc X HP 9000/735 HP-UX 10.01 /usr/ccs/bin/cc X /usr/bin/c89 X /usr/bin/CC X /bin/c89 X /usr/bin/cc X /bin/CC X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/cc X IBM PowerPC 43P AIX 4.2 /usr/bin/c89 X /usr/local/bin/gcc X /bin/cc X /bin/c89 X /bin/xlC X /usr/bin/cc X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/pgi/linux86/bin/pgcc X /usr/bin/gcc X /usr/local/bin/gcc X /usr/bin/g++ X /usr/local/bin/g++ X /usr/bin/cc X /usr/pgi/linux86/bin/pgCC X Intel Pentium II MMX GNU/Linux 2.0.35 /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/bin/gcc X /usr/bin/g++ X /usr/bin/cc X /usr/local/bin/lcc -A -A X NeXT Turbostation Mach 3.3 /bin/cc X /usr/local/bin/gcc X SGI Origin/200-4 IRIX 6.4 /bin/cc X /usr/bin/c89 X /usr/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/c89 X /bin/CC X /usr/bin/CC X Sun SPARC 10/412 GNU/Linux 2.0.35 /usr/bin/cc X /usr/bin/gcc X /usr/bin/g++ X Sun SPARC LX Solaris 2.5 /usr/local/bin/gcc X /usr/local/bin/g++ X /usr/ucb/cc X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/c89 X /opt/SUNWspro/bin/cc X Sun Ultra Enterprise 5500 Solaris 2.6 /usr/ucb/cc X /opt/SUNWspro/bin/CC X /opt/SUNWspro/bin/cc X /usr/local/bin/gcc X /usr/local/bin/g++ X /opt/SUNWspro/bin/c89 X /usr/local/bin/lcc -A -A X _________________________________________________________________ X X Failures X X flex + bison (7 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /usr/local/bin/lcc -A -A X HP 9000/735 HP-UX 10.01 /usr/bin/CC X /bin/CC X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/pgi/linux86/bin/pgCC X NeXT Turbostation Mach 3.3 /usr/local/bin/lcc -A -A X SGI Challenge L IRIX 5.3 /usr/local/bin/lcc -A -A X SGI Origin/200-4 IRIX 6.4 /usr/local/bin/lcc -A -A X X flex + byacc (2 compilers) X X Machine and model O/S Compilers X NeXT Turbostation Mach 3.3 /usr/local/bin/lcc -A -A X SGI Origin/200-4 IRIX 6.4 /usr/local/bin/lcc -A -A X X flex + yacc (11 compilers) X X Machine and model O/S Compilers X IBM PowerPC 43P AIX 4.2 /usr/local/bin/g++ X NeXT Turbostation Mach 3.3 /usr/local/bin/lcc -A -A X SGI Challenge L IRIX 5.3 /usr/local/bin/lcc -A -A X /usr/local/bin/gcc X /bin/cc X /bin/CC X /usr/bin/cc X /usr/bin/CC X /usr/local/bin/g++ X SGI Origin/200-4 IRIX 6.4 /usr/local/bin/lcc -A -A X Sun SPARC LX Solaris 2.5 /usr/local/bin/lcc -A -A X X lex + bison (10 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /usr/local/bin/g++ X /usr/local/bin/lcc -A -A X /bin/cxx -x cxx X HP 9000/735 HP-UX 10.01 /bin/CC X /usr/bin/CC X Intel Pentium II 450MHz GNU/Linux 2.1.132 /usr/pgi/linux86/bin/pgCC X NeXT Turbostation Mach 3.3 /usr/local/bin/lcc -A -A X /usr/local/bin/g++ X SGI Challenge L IRIX 5.3 /usr/local/bin/lcc -A -A X SGI Origin/200-4 IRIX 6.4 /usr/local/bin/lcc -A -A X X lex + byacc (5 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /bin/cxx -x cxx X /usr/local/bin/g++ X NeXT Turbostation Mach 3.3 /usr/local/bin/lcc -A -A X /usr/local/bin/g++ X SGI Origin/200-4 IRIX 6.4 /usr/local/bin/lcc -A -A X X lex + yacc (14 compilers) X X Machine and model O/S Compilers X DEC Alpha 2100-5/250 OSF/1 3.2 /bin/cxx -x cxx X /usr/local/bin/g++ X IBM PowerPC 43P AIX 4.2 /usr/local/bin/g++ X NeXT Turbostation Mach 3.3 /usr/local/bin/lcc -A -A X /usr/local/bin/g++ X SGI Challenge L IRIX 5.3 /usr/local/bin/gcc X /usr/local/bin/g++ X /bin/cc X /bin/CC X /usr/local/bin/lcc -A -A X /usr/bin/cc X /usr/bin/CC X SGI Origin/200-4 IRIX 6.4 /usr/local/bin/lcc -A -A X Sun SPARC LX Solaris 2.5 /usr/local/bin/lcc -A -A X IBM PC DOS X X Of all the compilers that I have available on the IBM PC under X Microsoft DOS and Windows (two versions of Turbo C, four of Microsoft X C, and two of Watcom C), none support 32-bit int data. This prevents X the use of the yacc version of bibparse.c, because it requires an X integer type that can hold values as large as -10000000. Had all such X data been given a type defined by a typedef, a one-line change from X int to long would permit the transfer of the code to an environment X with 32-bit long support. Sadly, such is not the case. Perhaps the X commercial Mortice-Kern MKS Tools package of UNIX tools on DOS X addresses this issue, but I do not yet have it. X X Another problem is that the parser tables are too big for the X obnoxious 64KB-segment limit of the Intel x86 architecture, and none X of the compilers, except for the Watcom 386 compiler, will compile the X code. X X Fortunately, the solution is simply to use bison instead of yacc. It X has been designed to work with integers as small as 16 bits, and its X parser tables are more compact. X X The three programs can be built standalone in this environment, X without the need for lex, flex, or yacc libraries, provided that the X symbol HAVE_IBMPC is defined in the config.h file, and the symbol X HAVE_FILENO is undefined there. This will enable a simple version of X the yywrap() function, and also reduce the memory requirements to fit X in the 64KB-segment limit. X X The ibmpc/dos/README file contains details of the builds and tests of X bibparse under several IBM PC DOS C and C++ compilers, and X instructions for building and testing bibparse with other compilers. X X Since bibparse uses no floating-point arithmetic, and PC DOS has no X shared libraries, I expect that the executables will run on any X version of DOS greater than 4.0. They may also run on earlier X versions. At the time of writing, MS-DOS 6.22 is current, and the X bibparse executables work fine on it. They also work on Caldera X OpenDOS 7.01, the version supplied by Sun under Solaris 2.6 for the X SunPC emulator, and on the Windows version of DOS under Windows 95. X Test suite X X The bibparse distribution includes a comprehensive test suite which is X run by X make check X X For use on other operating systems, the ibmpc/dos/check.bat file for X PC DOS may serve as a useful starting point for preparing a script to X run the tests. X X Please do run the validation suite at your site before installing the X program. Compilers are complex software systems that also have bugs, X so the fact that the program runs correctly somewhere else does not X mean that it will do so on a different system. X Sample build output for UNIX X X Here is a log of a successful build on Sun Solaris 2.6 using the X native C++ compiler, CC: env CC=/opt/SUNWspro/bin/CC ./configure && make creating cache ./config.cache checking for gcc... /opt/SUNWspro/bin/CC checking whether the C compiler (/opt/SUNWspro/bin/CC ) works... yes checking whether the C compiler (/opt/SUNWspro/bin/CC ) is a cross-compiler.. X. no checking whether we are using GNU C... no checking whether /opt/SUNWspro/bin/CC accepts -g... yes checking for c++... c++ checking whether the C++ compiler (c++ ) works... yes checking whether the C++ compiler (c++ ) is a cross-compiler... no checking whether we are using GNU C++... yes checking whether c++ accepts -g... yes checking for compiler language... C++ checking how to run the C preprocessor... /opt/SUNWspro/bin/CC -E checking for alloca.h... yes checking for stdlib.h... yes checking for nawk... nawk checking for chmod... chmod checking for gzip... /usr/local/bin/gzip checking for scp... scp -p checking for rcp... (cached) scp -p checking for cp... (cached) scp -p checking for deroff... deroff checking for diff... diff checking for distill... /usr/local/bin/distill checking for ditroff... no checking for groff... groff checking for etags... etags checking for expand... expand checking for jar... jar checking for lex... lex checking for flex... (cached) lex checking for ln... ln checking for ls... ls checking for man2html... /usr/local/bin/man2html checking for mkdir... mkdir checking for mv... mv checking for nroff... nroff checking for rm... rm checking for rmdir... rmdir checking for sed... sed checking for shar... shar checking for spell... spell checking for tar... tar checking for touch... touch checking for unzip... unzip checking for yacc... yacc checking for zip... zip checking for zoo... zoo checking for fileno... no checking for alloca in -lPW... no checking for lex/flex library... -ll checking for yacc library... -ly checking for bison flags... checking for preprocessor symbols needed on Sun Solaris... -D__EXTERN_C__ updating cache ./config.cache creating ./config.status creating Makefile creating bibdup.sh creating config.h yacc -v bibparse.y X conflicts: 6 shift/reduce sed -e 's/char *yytext *\[YYLMAX\]/char yytext[40960]/' -e '/static void __yy__ unused() { main(); }/d' -e 's/#[ ]*define[ ]*YYLMAX.*$/#define YY LMAX BIBYYLMAX/' -e '/extern[ ]*char[ ]*[*]getenv[ ]*[(][ ]*[)] /d' < y.tab.c > bibparse.c rm -f y.tab.c /opt/SUNWspro/bin/CC -D__EXTERN_C__ -DBIBYYLMAX=40960 -I. -c bibparse.c lex -t biblex.l | sed -e 's/char *yytext *\[YYLMAX\]/char yytext[40960]/' -e '/ static void __yy__unused() { main(); }/d' -e 's/#[ ]*define[ ]*YYLM AX.*$/#define YYLMAX BIBYYLMAX/' -e '/extern[ ]*char[ ]*[*]getenv[ X ]*[(][ ]*[)]/d' > biblex.c 136/1000 nodes(%e), 311/2500 positions(%p), 50/500 (%n), 3095 transitions, 188/10000 packed char classes(%k), 230/3000 packed transitions(%a), 265/6000 output slots(%o) /opt/SUNWspro/bin/CC -D__EXTERN_C__ -DBIBYYLMAX=40960 -I. -Dyylex=xxlex -o bi bparse bibparse.o biblex.c -ll -ly /opt/SUNWspro/bin/CC -D__EXTERN_C__ -DBIBYYLMAX=40960 -I. -o biblex lexmain.c X biblex.c -ll -ly lexmain.c: biblex.c: lex -t bibunlex.l | sed -e 's/char *yytext *\[YYLMAX\]/char yytext[40960]/' -e '/static void __yy__unused() { main(); }/d' -e 's/#[ ]*define[ ]*YYLM AX.*$/#define YYLMAX BIBYYLMAX/' -e '/extern[ ]*char[ ]*[*]getenv[ X ]*[(][ ]*[)]/d' > bibunlex.c /opt/SUNWspro/bin/CC -D__EXTERN_C__ -DBIBYYLMAX=40960 -I. -o bibunlex bibunle x.c -ll -ly X The following checks should produce no output, other than their names lex001 lex002 lex003 lex004 lex005 X The following checks should produce no output, other than their names parse001 parse002 parse003 parse004 parse005 parse006 parse007 parse008 parse009 parse010 parse011 parse012 parse013 parse014 parse015 X The following checks should produce no output, other than their names unlex001 unlex002 unlex003 unlex004 unlex005 X Implementation Notes X X While the GNU autoconfigure system is a great boon for end users, it X is a painful system for developers to implement for their code. X Despite already having adapted several other programs to use this X system, I spent two long and tedious days at bibparse 1.03 X experimenting with settings in the configure.in file before the tests X succeeded on a large enough number of systems that I can have some X confidence that the installations will go smoothly at most end-user X sites. X X At version 1.04, when I ported bibparse to even more systems, and a X new parser generator, byacc, it took another four days of tuning the X configure.in file to handle system peculiarities, notably on X GNU/Linux. X X A major problem with autoconfigure is that it is not sufficiently X C++-aware. The simple test files that it creates for probing features X of the host implementation lack correct prototypes, and compilation X failures then lead to incorrect setting of values in config.h and X Makefile. X X On most of the test systems, the vendor-provided lex is not C++-aware X either, so that compilation failures from missing prototypes, or X inconsistent or old-style function declarations, are common. X X One vendor, HP, generates a reference to an non-standard external X header file, yacc.h, in yacc output, but the location of that header X file is unknown to g++. In any event, that file is wrong anyway, X because it declares yyparse() to have C linkage, but the version in X the generated C file will be compiled with C++ linkage. This was X solved by created a temporary empty yacc.h file in the rules for X bibparse.o in Makefile.in. X X The same vendor, HP, generates a call to main() in lex output which X then fails to match the prototype, and causes compilation failure. X This was solved by an edit step in Makefile.in to removed the X offending line. X X Another problem for C++ use is that, on some systems, the normal lex X functions input() and output() must be renamed to avoid conflicts with X uses of those names in C++ header files. On Sun Solaris 2.x, they X become lex_input() and lex_output(), so bibyydcl.h has to handle this X case specially. I don't see any good way to do this with configure, X since it is very awkward to produce tests in languages other than C. X X The GNU/Linux (Caldera Light 2.0.30) system on which I tested bibparse X 1.03 had yacc, but not its library, -ly, so a more complex test had to X be generated in configure.in to handle that irregularity. X X The RedHat GNU/Linux systems on Intel Pentium and Sun SPARC hardware X on which I tested bibparse 1.04 have lex, but not its library, -ll, X and worse, that lex is really flex, which does not behave compatibly, X unless it is invoked with the compatibility-mode flag, -l. However, X that flag cannot be used with ordinary lex: on HP systems, it produces X a warning; on IBM systems, it produces garbage in the output C file; X on SGI systems, it causes lex to hang in an apparent I/O wait. It took X several tries on various systems before I settled on the code finally X used in configure.in to handle these variations. X X On SGI IRIX 5.3 systems, there is a bug in yacc which results in a X bogus complaint UX:yacc: ERROR: Redeclaration of precedence of TOKEN_EQUALS, line 210 X X Thus, on that system, either bison or byacc (Berkeley yacc) must be X used, and neither are provided by the vendor. X X You can get bison at the Free Software Foundation archive (or one of X its several [17]mirrors): X [18]ftp://ftp.gnu.org/gnu/bison/bison-1.28.tar.gz X X The most recent version of Berkeley byacc that I could find is at the X Cygnus FTP site: X [19]ftp://sourceware.cygnus.com/pub/gdb/infrastructure/byacc-940324.ta X r.gz That version has been make to run with an early version of GNU X autoconfig, and has bug fixes beyond the byacc version 1.9 of X 22-Feb-1993 that I found at the Berkeley BSD development site: X [20]ftp://ftp.cs.berkeley.edu/pub/4bsd/byacc.1.9.tar.Z Even though the X Cygnus version is newer (23-Mar-1994), it produces code that did not X compile under C++ until I made this patch: =================================================================== RCS file: byacc-940324/byacc/RCS/skeleton.c,v retrieving revision 1.1 diff -r1.1 byacc-940324/byacc/skeleton.c 98a99,102 > "#ifdef __cplusplus", > "extern \"C\"", > "#endif", > " extern char *getenv();", 105,108d108 < "#ifdef __cplusplus", < "extern \"C\"", < "#endif", < " extern char *getenv();", =================================================================== X X On Sun Solaris 2.x, the symbol __EXTERN_C__ must be defined in order X to expose certain function prototypes in the code generated by lex and X yacc. configure.in has a special test for this system to generate the X needed definition. X X The linkers on some UNIX systems do not search /usr/local/lib by X default, even though this has long been a standard location for X locally-installed libraries. Consequently, the configure.in rules add X this directory to the library search path when the flex library -lfl X is required. If your site has a non-standard location for this X library, where your linker cannot find it without help, then you'll X have to override the LDFLAGS value when you run make, e.g., make LDFLAGS='-L/my/private/lib' X References X X 1. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#Jump-start X 2. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#Introduction X 3. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#Installation X 4. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#Bug-reports X 5. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#UNIX-Systems X 6. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#IBM-PC-DOS X 7. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#test-suite X 8. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#Sample-build-output-for-UNIX X 9. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#implementation-notes X 10. file://localhost/home/0077/sy/beebe/tex/bibparse/bibparse-1.06/README.html#TUGboat X 11. mailto:beebe@math.utah.edu X 12. mailto:beebe@acm.org X 13. mailto:beebe@computer.org X 14. mailto:beebe@ieee.org X 15. http://www.math.utah.edu/~beebe/ X 16. http://www.pgroup.com/ X 17. http://www.gnu.org/server/list-mirrors.html X 18. ftp://ftp.gnu.org/gnu/bison/bison-1.28.tar.gz X 19. ftp://sourceware.cygnus.com/pub/gdb/infrastructure/byacc-940324.tar.gz X 20. ftp://ftp.cs.berkeley.edu/pub/4bsd/byacc.1.9.tar.Z SHAR_EOF $shar_touch -am 09231510104 'README' && chmod 0664 'README' || $echo 'restore of' 'README' 'failed' if ( md5sum --help &1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'README:' 'MD5 check failed' ae36eebf6dd3a641bb8f8fbdabb7c846 README SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'README'`" test 35106 -eq "$shar_count" || $echo 'README:' 'original size' '35106,' 'current size' "$shar_count!" fi fi # ============= README.html ============== if test -f 'README.html' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'README.html' '(file already exists)' else $echo 'x -' extracting 'README.html' '(binary)' sed 's/^X//' << 'SHAR_EOF' | uudecode && begin 600 README.html M/"$M+2`M*BUH=&UL+2HM("TM/@H\(2TM(%)%041-12`M+3X*/"$M+2!07-T96US(CX*("`@("`@ M("`@("`@("`@("`@("!53DE8(%-Y6]U6]U(&AA=F4@/%14/F5N=CPO5%0^("AM;W-T"B`@ M("`@("`@("`@(&UO9&5R;B!53DE8('-Y6]U('=I7-T96US+@H@("`@("`@(#PO4#X*("`@("`@ M("`\(2TM(#T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/2`M+3X*("`@("`@("`\2#(^"B`@ M("`@("`@("`@(#Q!($Y!344](DEN=')O9'5C=&EO;B(^"B`@("`@("`@("`@ M("`@("!);G1R;V1U8W1I;VX*("`@("`@("`@("`@/"]!/@H@("`@("`@(#PO M2#(^"B`@("`@("`@/%`^"B`@("`@("`@("`@(%1H:7,@9&ER96-T;W)Y(&-O M;G1A:6YS(#Q45#YB:6)P87)S93PO5%0^+"`\5%0^8FEB;&5X/"]45#XL"B`@ M("`@("`@("`@(#Q45#YB:6)U;FQE>#PO5%0^+"!A;F0@/%14/F)I8F1U<#PO M5%0^+"!A('-U:71E(&]F('!R;V=R86US"B`@("`@("`@("`@(&9OT)I8FQI;V=R87!H>2!P0H@("`@("`@ M("`@("!O9B!F;W)M871S(&EN('1H92!S86UE('!L86-E('1H870@>6]U(&9O M=6YD('1H92`\5%0^8FEB<&%R"]B M:6(\+U14/BX@(%9I82!E;&5C=')O;FEC"B`@("`@("`@("`@(&UA:6PL(&$@ M;65S"!F"]B:6(*/"]04D4^"B`@("`@("`@/%`^ M"B`@("`@("`@("`@('1O(#Q45#YT=6=L:6)`;6%T:"YU=&%H+F5D=3PO5%0^ M('=I;&P@9V5T('EO=2!S=&%R=&5D+@H@("`@("`@(#PO4#X*("`@("`@("`\ M4#X*("`@("`@("`@("`@5&AR964@9FEL97,L(#Q45#YB:6)L97@N8SPO5%0^ M+"`\5%0^8FEB<&%R2`\5%0^;&5X/"]45#X@ M*&]R(#Q45#X*("`@("`@("`@("`@9FQE>#PO5%0^*2P@86YD(#Q45#YY86-C M/"]45#X@*&]R(#Q45#YB:7-O;CPO5%0^*2X@($-O<&EE2!F;W(@;6%N=6%L(&)O;W1S=')A<'!I;F2UG96YE6]U(&1O(&$@/$5- M/FUA:V4@;6%I;G1A:6YE"!C;VYF:6=U2P@=&AE(&1I2!N86UE9"`\5%0^"YC/"]45#X@86YD"B`@("`@("`@("`@(#Q45#YB:6)U;FQE>"YC/"]4 M5#X@9V5N97)A=&5D(&)Y(#Q45#YL97@\+U14/BP@86YD('1H92!F:6QE"B`@ M("`@("`@("`@(#Q45#YB:6)P87)S92YC/"]45#X@9V5N97)A=&5D(&)Y(#Q4 M5#YY86-C/"]45#XN("!4:&ES('=I;&P*("`@("`@("`@("`@86QL;W<@2!E=F5N="!O9B!A(&9A:6QU2!P2!O9B`\5%0^"B`@("`@ M("`@("`@(&-O;F9I9RYH:6X\+U14/B!W:71H(&$@9F5W('-E8V]N9',@;V8@ M961I=&EN9R!W;W)K+B`@268@>6]U"B`@("`@("`@("`@(&1O('1H:7,L(')E M;65M8F5R('1O('-A=F4@82!C;W!Y(&]F('EO=7(@/%14/F-O;F9I9RYH/"]4 M5#X*("`@("`@("`@("`@=6YD97(@82!D:69F97)E;G0@;F%M92P@8F5C875S M92!R=6YN:6YG(#Q45#YC;VYF:6=U"YY M/"]%33X\5%0^+G1ACPO5%0^*2P*("`@("`@("`@("`@*#Q45#YX+GD\ M+U14/B`](#(N,3,@870@=&AE('1I;64@;V8@=W)I=&EN9R!T:&ES*2P@>6]U M"B`@("`@("`@("`@(&UI9VAT('1R>2!A=6=M96YT:6YG(#Q45#YC;VYF:6=U M2!C;VYS:7-T6]U M2!P M2!L96%D('1O(&9A:6QU2`\ M5%0^8V]N9FEG=7)E/"]45#X*("`@("`@("`@("`@=VEL;"!L96%D('1O(&%N M(&EN8V]R2!O9B!5=&%H/$)2/@H@("`@ M("`@("`@("!$97!A2P@550@.#0Q,3(M,#`Y,#Q"4CX*("`@("`@ M("`@("`@55-!/$)2/@H@("`@("`@("`@("!496PZ("`K,2`X,#$@-3@Q(#4R M-30\0E(^"B`@("`@("`@("`@($9!6#H@("LQ(#@P,2`U.#4@,38T,"P@*S$@ M.#`Q(#4X,2`T,30X/$)2/@H@("`@("`@("`@("!%;6%I;#H*("`@("`@("`@ M("`@/$$@2%)%1CTB;6%I;'1O.F)E96)E0&UA=&@N=71A:"YE9'4B/@H@("`@ M("`@("`@("`@("`@8F5E8F5`;6%T:"YU=&%H+F5D=0H@("`@("`@("`@("`\ M+T$^+`H@("`@("`@("`@("`\02!(4D5&/2)M86EL=&\Z8F5E8F5`86-M+F]R M9R(^"B`@("`@("`@("`@("`@("!B965B94!A8VTN;W)G"B`@("`@("`@("`@ M(#PO03XL"B`@("`@("`@("`@(#Q!($A2148](FUA:6QT;SIB965B94!C;VUP M=71E7-T96US"B`@("`@("`@("`@(#PO03X*("`@("`@("`\+T@R/@H@("`@ M("`@(#Q0/@H@("`@("`@("`@("!4:&4@8V]D92!C86X@8F4@8V]M<&EL960@ M=VET:"!E:71H97(@0R`H2R9A;7`[4B!O#PO5%0^+2!A;F0*("`@("`@("`@("`@/%14/GEA M8V,\+U14/B\\5%0^8FES;VX\+U14/BUG96YE0H@("`@("`@("`@ M("!B92!N96-E'@@+7@@8WAX M)B,S-#L\+U14/BDN"B`@("`@("`@/"]0/@H@("`@("`@(#Q0/@H@("`@("`@ M("`@("!/;B!53DE8('-Y#PO5%0^+@H@("`@("`@ M(#PO4#X*("`@("`@("`\4#X*("`@("`@("`@("`@268@>6]U(&%R92!I;G-T M86QL:6YG(#Q45#YB:6)P87)S93PO5%0^(&]N(&$@;F5W('-Y6]U M"B`@("`@("`@("`@('-H;W5L9"!D969I;FET96QY(')U;B`\14T^;6%K92!C M:&5C:SPO14T^(&)E9F]R92!I;G-T86QL:6YG"B`@("`@("`@("`@(&ET(&]N M('EO=7(@&5R#PO5%0^*2P@86YD"B`@ M("`@("`@("`@('1H6%C8SPO5%0^*2P@=7-I;F<@86QL(&%V86EL86)L92!#"B`@ M("`@("`@("`@(&%N9"!#*RL@8V]M<&EL97)S(&]N('1H97-E(#$Q(%5.25@@ M6EN9RP*("`@("`@("`@("`@=&AE(&9A:6QU2!E=F5N(&UO2!A2!D=64@=&\@;VYE(&]F('1H92!F;VQL;W=I;F#PO5%0^(&%N9"]O<@H@("`@("`@("`@ M("`\5%0^8FES;VXO8GEA8V,O>6%C8SPO5%0^('=H:6-H(&ES(&YO="!#*RLM M8V]M<&%T:6)L93L*("`@("`@("`@("`@=&AE65A"!S>7-T96US*2X*("`@("`@("`@(#PO3$D^"B`@ M("`@("`@("`\3$D^"B`@("`@("`@("`@($)R;VME;B!V96YD;W(M<')O=FED M960@/%14/GEA8V,\+U14/B`H4T=)($E225@@-2XS*2X*("`@("`@("`@(#PO M3$D^"B`@("`@("`@("`\3$D^"B`@("`@("`@("`@($)R;VME;B!V96YD;W(M M<')O=FED960@:&5A9&5R(&9I;&4L(#Q45#YA;&QO8V$N:#PO5%0^("AP9T-# M*2X*("`@("`@("`@("`@02!B=6<@F4I("`@ M("`@(%]?8G5I;'1I;E]A;&QO8V$@*'-I>F4I"B`@(R!D969I;F4@86QL;V-A M*'-I>F4I(%]?86QL;V-A("AS:7IE*0HK("-I9F1E9B!?7V-P;'5S<&QU2!B>2`@+2T^"@D\(2TM("XO8G5I;&0M2YS:"`O=&UP+V)I8G!A"`K(&)I'@@+7@@8WAX/$)2/@H@("`@("`@("`@("`@("`@("`@("]U&Q#/$)2/@H@("`@("`@("`@("`@("`@("`@("]U M@H@("`@("`@("`@("`@("`@/"]41#X*("`@("`@("`@("`@("`@(#Q4 M1#X*("`@("`@("`@("`@("`@("`@("!'3E4O3&EN=7@@,BXQ+C$S,@H@("`@ M("`@("`@("`@("`@/"]41#X*("`@("`@("`@("`@("`@(#Q41#X*("`@("`@ M("`@("`@("`@("`@("`O=7-R+V)I;B]C8SQ"4CX*("`@("`@("`@("`@("`@ M("`@("`O=7-R+W!G:2]L:6YU>#@V+V)I;B]P9V-C/$)2/@H@("`@("`@("`@ M("`@("`@("`@("]U"`R+C`N,S4*("`@("`@("`@("`@("`@ M(#PO5$0^"B`@("`@("`@("`@("`@("`\5$0^"B`@("`@("`@("`@("`@("`@ M("`@+W5S6%C8R`H-S4@8V]M<&EL M97)S*0H@("`@("`@(#PO2#0^"B`@("`@("`@/%1!0DQ%($)/4D1%4CTB,2(^ M"B`@("`@("`@("`@(#Q44CX*("`@("`@("`@("`@("`@(#Q41#X*("`@("`@ M("`@("`@("`@("`@("`\0CY-86-H:6YE(&%N9"!M;V1E;#PO0CX*("`@("`@ M("`@("`@("`@(#PO5$0^"B`@("`@("`@("`@("`@("`\5$0^"B`@("`@("`@ M("`@("`@("`@("`@/$(^3R]3/"]"/@H@("`@("`@("`@("`@("`@/"]41#X* M("`@("`@("`@("`@("`@(#Q41#X*("`@("`@("`@("`@("`@("`@("`\0CY# M;VUP:6QE"`M>"!C>'@\0E(^"B`@("`@("`@("`@("`@("`@("`@+W5S"`R+C`N,S4*("`@("`@("`@("`@("`@(#PO5$0^"B`@("`@ M("`@("`@("`@("`\5$0^"B`@("`@("`@("`@("`@("`@("`@+W5S6%C8R`H-C8@8V]M<&EL97)S*0H@("`@ M("`@(#PO2#0^"B`@("`@("`@/%1!0DQ%($)/4D1%4CTB,2(^"B`@("`@("`@ M("`@(#Q44CX*("`@("`@("`@("`@("`@(#Q41#X*("`@("`@("`@("`@("`@ M("`@("`\0CY-86-H:6YE(&%N9"!M;V1E;#PO0CX*("`@("`@("`@("`@("`@ M(#PO5$0^"B`@("`@("`@("`@("`@("`\5$0^"B`@("`@("`@("`@("`@("`@ M("`@/$(^3R]3/"]"/@H@("`@("`@("`@("`@("`@/"]41#X*("`@("`@("`@ M("`@("`@(#Q41#X*("`@("`@("`@("`@("`@("`@("`\0CY#;VUP:6QE#Q"4CX*("`@("`@("`@("`@("`@("`@("`O=7-R M+V-C&Q#/$)2/@H@("`@("`@("`@("`@("`@("`@("]U@H@("`@("`@("`@("`@("`@/"]4 M1#X*("`@("`@("`@("`@("`@(#Q41#X*("`@("`@("`@("`@("`@("`@("!' M3E4O3&EN=7@@,BXQ+C$S,@H@("`@("`@("`@("`@("`@/"]41#X*("`@("`@ M("`@("`@("`@(#Q41#X*("`@("`@("`@("`@("`@("`@("`O=7-R+V)I;B]G M8V,\0E(^"B`@("`@("`@("`@("`@("`@("`@+W5S"`R+C`N M,S4*("`@("`@("`@("`@("`@(#PO5$0^"B`@("`@("`@("`@("`@("`\5$0^ M"B`@("`@("`@("`@("`@("`@("`@+W5S"`R+C$N,3,R"B`@("`@("`@("`@("`@("`\ M+U1$/@H@("`@("`@("`@("`@("`@/%1$/@H@("`@("`@("`@("`@("`@("`@ M("]U6%C8R`H-S(@8V]M<&EL97)S*0H@("`@("`@ M(#PO2#0^"B`@("`@("`@/%1!0DQ%($)/4D1%4CTB,2(^"B`@("`@("`@("`@ M(#Q44CX*("`@("`@("`@("`@("`@(#Q41#X*("`@("`@("`@("`@("`@("`@ M("`\0CY-86-H:6YE(&%N9"!M;V1E;#PO0CX*("`@("`@("`@("`@("`@(#PO M5$0^"B`@("`@("`@("`@("`@("`\5$0^"B`@("`@("`@("`@("`@("`@("`@ M/$(^3R]3/"]"/@H@("`@("`@("`@("`@("`@/"]41#X*("`@("`@("`@("`@ M("`@(#Q41#X*("`@("`@("`@("`@("`@("`@("`\0CY#;VUP:6QE"`R+C$N,3,R"B`@("`@("`@("`@("`@("`\+U1$/@H@("`@ M("`@("`@("`@("`@/%1$/@H@("`@("`@("`@("`@("`@("`@("]U