# HG changeset patch # User jwe # Date 864356429 0 # Node ID 692ba9d441ecc357dc68eb41b76817d4acc17c89 # Parent e67089e1f2c8c3bcf5ac9de79faec67108ce633e [project @ 1997-05-23 02:58:08 by jwe] diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/AUTHORS --- a/kpathsea/AUTHORS Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -Karl Berry wrote all files not otherwise marked, with help from Kathryn -Hargreaves on some of the original versions. - -The implementation of the link trick in pathsrch.c is taken from GNU -find, implemented by David MacKenzie from Matthew Farwell's suggestion. - -Mike Haertel wrote the GNU malloc source. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/ChangeLog --- a/kpathsea/ChangeLog Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1540 +0,0 @@ -Tue May 20 14:34:34 1997 John W. Eaton - - * Makefile.in: Turn off optimization for hash.c. - -Thu Mar 13 13:08:05 1997 John W. Eaton - - * configure.in: Don't set special PIC options on SGI systems, - since PIC is apparently the default. - -Wed Mar 12 17:00:16 1997 John W. Eaton - - * Makefile.in (install-strip): New target. - -Thu Feb 20 02:41:36 1997 John W. Eaton - - * configure.in (SH_LDFLAGS): Add -fPIC for HP-UX. - (SH_LDFLAGS): Add -shared for alpha OSF/1. - -Tue Feb 18 17:36:03 1997 John W. Eaton - - * Makefile.in (pic/tex-file.o): Delete extra pic/ in commands. - - * configure.in (SH_LDFLAGS): Fix typo in last change. - -Thu Feb 13 17:35:20 1997 John W. Eaton - - * configure.in: Update config for shared libraries. - * Makefile.in (stamp-shared): Use $(SH_LD) $(SH_LDFLAGS) instead - of $(CXX) -shared. - (tex-file.o, pic/tex-file.o, gmalloc.o, pic/gmalloc.o): Update rules. - - * Makefile.in (stamp-picdir): Silence noise about making pic. - -Sat Jan 25 22:33:56 1997 John W. Eaton - - * Makefile.in (bin-dist): New target. - -Thu Dec 5 18:59:44 1996 John W. Eaton - - * config.sub: Update to current version from FSF. - -Sun Nov 3 15:35:46 1996 John W. Eaton - - * c-std.h: Use #ifdef, not #if to checm HAVE_STDLIB_H - * c-unistd.h: Likewise, for HAVE_UNISTD_H - -Tue Oct 29 17:27:06 1996 John W. Eaton - - * Makefile.in (SH_LIBS_TO_INSTALL): Use .$(SHLEXT), not .so. - -Thu Oct 24 21:31:42 1996 John W. Eaton - - * config.guess: Update to same version as used in Octave. - * config.sub: Likewise. - -Mon Oct 14 11:10:41 1996 John W. Eaton - - * Makefile.in (distclean): Also remove libkpathsea.a and - libkpathsea.$(SHLEXT). - -Mon Jun 24 02:33:27 1996 John W. Eaton - - * Makefile.in (install): Use INSTALL_PROGRAM instead of - INSTALL_DATA to install shared libs. - -Fri Mar 29 13:35:09 1996 John W. Eaton - - * Makefile.in (distclean): Remove so_locations, which is generated - on DEC Alpha systems. - -Fri Feb 2 22:57:45 1996 John W. Eaton - - * Makefile.in (tex-file.o): Use correct rule for making shared - version. - -Fri Dec 29 21:41:08 1995 John W. Eaton - - * config.guess, config.sub: New files. - * configure.in, Makefile.in: - Handle shared libraries for Octave. - -Wed Oct 4 02:26:09 1995 John Eaton - - * Makefile.in (uninstall): For use with Octave, don't do anything. - -Fri Sep 29 00:43:05 1995 John Eaton - - * elt-dirs.c (kpse_element_dirs): Do call kpse_expand on elt. - -Sun Feb 26 16:46:32 1995 John Eaton - - * Makefile.in: Depend on ./c-auto.h, not - $(kpathsea_srcdir)/c-auto.h. - -Sun Jan 8 12:14:47 1995 Karl Berry - - * Version 2.6. - -Wed Jan 4 14:44:34 1995 Karl Berry - - * Makefile.in (mostlyclean): Remove kpsewhich. - -Tue Jan 3 11:48:40 1995 Karl Berry - - * kpsewhich.c (long_options): Can't make this automatic. - - * basename.c: Include before testing - HAVE_BASENAME. - - * Makefile.in (kpsewhich): Make the library before kpsewhich.o. - (paths.h): No need for the $(kpathsea_dir)/ any more, now make - depend gets rid of it. - - * rm-suffix.c: Doc fix. - - * kpsewhich.c: Extract the dpi from the filename if possible. - -Mon Jan 2 09:45:17 1995 Karl Berry - - * Makefile.in (kpsexpand): Replace with kpsewhich. - - * proginit.h: Doc fix. - - * texmf.cnf.in (TEXMFCNF): Rename from TEXMF_CNF. - * tex-file.c (kpse_init_format): Likewise. - -Sun Jan 1 14:04:41 1995 Karl Berry - - * Makefile.in (MakeTeXPK): Substitute for web2cdir. - * MakeTeXPK.in: Use it for MakeTeXPK.site. - (install-data): Install texmf.cnf in web2cdir instead of texmf. - * texmf.cnf.in (TEXMF_CNF): Default path includes web2cdir. - -Sat Dec 31 14:26:48 1994 Karl Berry - - * Makefile.in (objects): No more @LIBOBJS@. - * common.ac: Use AC_CHECK_FUNCS for basename, not REPLACE_FUNCS. - The latter doesn't define HAVE_BASENAME. - * basename.c [!HAVE_BASENAME]: Conditionalize whole file. - - * Makefile.in (uninstall-exec): Remove kpsexpand. - (MakeTeXPK): New target. - (install-exec): Install MTPK. - (install-library): New target to replace install-headers. - (install): Don't install-library by default. - -Fri Dec 30 15:53:04 1994 Karl Berry - - * Makefile.in (objects): Don't put @LIBOBJS@ on a line by itself. - From Joachim. - -Mon Dec 26 07:55:40 1994 Karl Berry - - * common.ac (AC_FUNC_CLOSEDIR_VOID): Call this. Reported by - Timothy Murphy . - - * tex-file.c (init_path): If a variable is set to an empty value, - ignore it. Suggested by Stephen Gildea . - - * proginit.c: If passed a NULL mode, put / in the environment here. - * tex-make.c (kpse_make_tex): Don't do STREQ on NULL (though it - should never be NULL in the first place), and properly restore - MAKETEX_MODE if it was /. - -Tue Dec 20 09:57:21 1994 Karl Berry - - * install.texi: Mention how to do optimization. - -Mon Dec 19 13:18:04 1994 Karl Berry - - * tex-file.h: Doc fix. - -Wed Dec 14 14:46:47 1994 Karl Berry - - * Version 2.5. - - * pathsearch.c (log_search): Don't prepend the `kdebug:' to the - search result. - -Sat Dec 10 16:49:12 1994 Karl Berry - - * tex-make.c (set_maketex_mag): Make case of magstep -1 work - properly. From a bug report by - heiko@lotte.sax.de (Heiko Schlittermann). - -Mon Dec 5 11:58:08 1994 Karl Berry - - * Makefile.in (objects): Add @LIBOBJS@. - * common.ac: Check for basename. - - * db.c (db_insert): Include trailing / in directory part, and pass - the key and the value in the right order. From - te@informatik.uni-hannover.de. - -Sun Dec 4 14:26:44 1994 Karl Berry - - * kpsexpand.c: Add extra filename argument. From - ware@cis.ohio-state.edu. - - * common.ac: Use AC_TRY_RUN to test for SMART_PUTENV, not - AC_TRY_LINK. From parkes@sierravista.com. - - * acconfig.h: Use #undef instead of commented-out `/* #define'. - -Sun Nov 27 13:47:06 1994 Karl Berry - - * db.c (db_insert): Don't try to insert into an empty hash table. - From dc@cobi.gsfc.nasa.gov (and others). - - * pathsearch.c (log_search): Call DEBUGF, not printf, for the - filenames. From John I. - - * tex-make.c (kpse_make_tex): If MAKETEX_MODE is /, unset it and - reset it around the command expansion. - (maketex): Back to calling db_insert. - -Sat Nov 26 11:44:09 1994 Karl Berry - - * cnf.c (read_file): If expansion of $TEXMF (KPSE_DB_DIR) fails, - expand DEFAULT_TEXMF. From te@informatik.uni-hannover.de. - -Thu Nov 24 13:41:15 1994 Karl Berry - - * tex-file.c (KPSE_BST_ENVS): Do not look at TEXINPUTS. - - * tex-file.h: Doc fix. - -Tue Nov 15 14:06:56 1994 Karl Berry - - * progname.c (kpse_set_progname): Use basename. - -Fri Nov 11 19:12:23 1994 Karl Berry - - * acconfig.h (HAVE_SIGIO): Add this. - -Tue Nov 8 19:14:12 1994 Karl Berry - - * tex-make.c (kpse_make_tex): Change argument name from - `basename', since now we have a fn by that name. - * magstep.c (kpse_magstep_fix): Initialize mdpi. - * basename.c (basename): Initalize base. - -Mon Nov 7 15:46:21 1994 Karl Berry - - * common.ac: Run autoupdate. - * c-dir.h: Change #if names and NLENGTH to new style. - -Fri Oct 28 21:28:02 1994 K. Berry (karl@terminus.cs.umb.edu) - - * Version 2.4. - - * tex-make.c (maketex): Don't call db_insert, that routine is - buggy. I'll fix it later. In the meantime, trying to get a - semi-stable release. - -Tue Oct 25 16:43:31 1994 Karl Berry - - * Version 2.3. - - * progname.c (kpse_set_progname): Initialize kpathsea_debug from - the KPATHSEA_DEBUG envvar. From neal@ctd.comsat.com. - -Mon Oct 24 13:41:24 1994 Karl Berry - - * db.c (db_insert): New function. - * db.h: Declare it. - * tex-make.c (maketex): db_insert the result if we succeeded. - - * basename.c: New file to define basename. - * lib.h (basename): Declare it. - * Makefile.in (objects): Include basename.o. - - * tex-file.h (kpse_file_format_type): Add missing enum values for - base/fmt/pool files. - * tex-file.c (kpse_init_format): Add cases for these. - From te@informatik.uni-hannover.de. - - * lib.h (WARNING, FATAL): Use fputs instead of fprintf. - * Many files: Use DEBUGF instead of printf ("kdebug". - * debug.h (DEBUGF) [DEBUG]: Define this. - - * xputenv.c (xputenv): Initialize that static saved_env_items to - null, just for documentation's sake. - -Tue Oct 18 13:19:06 1994 Karl Berry - - * tex-file.c (KPSE_*_ENVS): Move environment variable list here. - * tex-file.h: Move them from here. - - * tex-glyph.h: Doc fix. - - * tex-file.c (kpse_find_file): Correct off-by-one in suffix - comparison. From toy@rtp.ericsson.se. - -Mon Oct 17 14:01:02 1994 Karl Berry - - * elt-dirs.c (do_subdir): Find a top-level subdir if it matches - the POST. - - * db.c (kpse_db_search): Allow for the passed name including a - directory part, as in dpi600/cmr10.pk. - * tex-glyph.c (try_format): First search all specs with - must_exist=false. - - * kpsexpand.c: New file, from te@informatik.uni-hannover.de. - * Makefile.in (kpsexpand): New target (a program). - (install-exec): Depend on, and install, kpsexpand. - - * common.ac: Doc fix. - - * cnf.c (do_line): Don't quit just because the variable is in the - environment. From te@informatik.uni-hannover.de. - - * tex-glyph.c (PXL_BITMAP_SPEC): Remove this, we're not going to - support pxl1500. - -Sun Oct 16 20:46:26 1994 Karl Berry - - * kpathsea.texi: Make it clear that names of debugging bits can - never be used. - -Fri Oct 14 10:31:35 1994 Karl Berry - - * Version 2.2. - - * hash.c (hash_lookup) [DEBUG]: Cast to long, not int. - -Thu Oct 13 15:39:34 1994 Karl Berry - - * db.c (db_build): Warn if ls-R contains nothing useful. - - * debug.c (fopen, fclose) [DEBUG]: fflush stdout. - * dir.c (dir_links), - * hash.c (hash_lookup), - * tex-file.c (kpse_init_format), - * elt-dirs.c (kpse_element_dirs): Likewise. - -Thu Oct 13 09:02:56 1994 Karl Berry - - * hash.c (kpse_debug_hash_lookup_int) [DEBUG]: New global. - (hash_lookup): Use it. - * hash.h [DEBUG]: Declare it. - * dir.c (dir_links) [DEBUG]: Set it and reset it. - - * tex-glyph.c (PXL_BITMAP_SPEC): Add this (pxlNNN/cmr10.pk) for - the Bitstream utilities. From abrahams@acm.org. - (try_format): Search for this. - -Tue Oct 11 15:15:49 1994 Karl Berry - - * db.c (db_build): Use kpse_db_dir instead of KPSE_DB_DIR. This - avoids one variable expansion, and te@informatik.uni-hannover.de - says otherwise TeX sometimes can't find ls-R. - -Sun Oct 9 17:18:23 1994 Karl Berry - - * kdefault.c: Rename from default.c. - * Makefile.in (objects): Likewise. - -Fri Oct 7 12:58:33 1994 Karl Berry - - * tex-file.c (kpse_init_format): Call INIT_MT for the any_glyph - case. From carson@lehman.com. - -Sun Oct 2 14:11:20 1994 Karl Berry - - * magstep.c: Doc fix. - -Sun Sep 25 17:11:40 1994 Karl Berry - - * Makefile.in: Include library.make. - -Thu Sep 22 15:34:40 1994 Karl Berry - - * tex-file.h (kpse_file_format_type): Don't make equal to the last - element index, make one more. From Eric Auborg. - -Thu Sep 15 19:24:30 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (distdir): Include install.texi in the distribution. - -Mon Sep 12 11:05:18 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.1. - -Sun Sep 11 15:03:18 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (install-data): Install texmf.cnf if it didn't exist. - -Sat Sep 10 13:28:29 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (texmf.sed, paths.h): Use tr 012 instead of \n. - From John Interrante. - - * Makefile.in (distdir): Include the .aux and .cps files in the - distribution. Don't include paths.h (from John Interrante). - - * kpathsea.texi: Fix overfull boxes and other TeX errors. - -Wed Sep 7 16:28:37 1994 Karl Berry (karl@cs.umb.edu) - - * Version 2.0. - -Tue Sep 6 10:33:18 1994 Karl Berry (karl@cs.umb.edu) - - * dir.c (dir_links): Use %ld for ret, since it's now a long. - -Sat Sep 3 09:01:25 1994 Karl Berry (karl@cs.umb.edu) - - * dir.c (dir_links): Use long instead of int for the cast and the - variable, to avoid warnings on the Alpha. - - * c-std.h (SYSV, X_NOT_STDC_ENV): Don't define these here. - * c-memstr.h (SYSV): Define this. - (_XFUNCS_H_): And this. - - * Makefile.in (distclean): Add texmf.cnf and texmf.sed. - -Thu Sep 1 14:22:48 1994 Karl Berry (karl@cs.umb.edu) - - * xputenv.c (putenv): Declare this to avoid a warning. - * xstat.c (lstat): And this. - - * common.ac (SMART_PUTENV): Use program to test for this. From - mike@cs.utah.edu. - - * tex-glyph.c (try_fallback_resolutions): Quit early if there's no - resolutions in the list. From sanjoy@dope.caltech.edu. - -Tue Aug 30 14:26:48 1994 Karl Berry (karl@cs.umb.edu) - - * acconfig.h (FOIL_X_WCHAR_T): New definition. - - * c-std.h (hypot) [!hypot]: Conditionalize declaration. - -Fri Aug 26 09:00:24 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (install-data): Install headers into - $(includedir)/kpathsea, not just $(includedir). From john@wpi.edu. - - * pathsearch.c (search): Show results of the search as well as the - start of it. - -Thu Aug 25 13:40:29 1994 Karl Berry (karl@cs.umb.edu) - - * proginit.c (kpse_init_prog): Newline at end of fputs. - - * pathsearch.c (search): Add debug statement. - * debug.h (KPSE_DEBUG_SEARCH): New bit. - - * tex-file.h (kpse_format_info_type): Rename `font_override_p' from - `font_p'. Also `program_enabled' => `program_enabled_p'. - Also new member `suffix_search_only'. - * tex-file.c (kpse_find_file): Avoid searching for foo.tex.tex, etc. - -Tue Aug 16 09:29:59 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.c (maketex): Announce that we are running the script - before running it. - -Mon Aug 15 11:18:19 1994 Karl Berry (karl@cs.umb.edu) - - * texmf.cnf.in (PKFONTS.xdvi): Write program-specific definition - to include gsftopk and ps2pk ``modes''. - -Sat Aug 13 16:34:43 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (lib): Rename to program to simplify rules. - - * magstep.h: Doc fix. - - * common.ac (AC_HAVE_FUNCS): Test for bcopy. - -Tue Aug 9 14:18:56 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.c (misstex): Prepend kpathsea: to the missfont.log - message. - -Mon Aug 8 17:53:58 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.c (set_maketex_mag): Rewrite to call kpse_magstep_fix. - * magstep.[ch]: New files. - -Fri Aug 5 14:07:51 1994 Karl Berry (karl@cs.umb.edu) - - * db.c (match): Allow a trailing component in the filename. - -Tue Aug 2 08:55:21 1994 Karl Berry (karl@cs.umb.edu) - - * Change `debug:' to `kdebug:'. - * hash.c (hash_lookup): Print results of lookup if DEBUG_HASH. - * debug.h (KPSE_DEBUG_HASH): New bit, replacing DB_BUILD. - * db.c (db_build): Don't print the built hash table. - - * db.c (match): Implement this. Petr Sojka and Zdenek Salvet(?) - supplied code for this, but I wound up writing my own. - * variable.c (expand): Do variable expansion on the value. - - * texmf.cnf.in (TEXINPUTS): Put this after the .prog-specific entries. - - * tex-file.c (kpse_pict_format): Remember to break after setting - the type. - (EXPAND_DEFAULT, init_path): Keep raw_path as pre-default expansion. - -Sun Jul 31 14:18:09 1994 Karl Berry (karl@cs.umb.edu) - - * debug.c: Don't include debug.h, it's already in debug.h. - - * Makefile.in (db.o,pathsearch.o): Don't need these special cases - since tossed db_dir from paths.make. - * db.h (DB_DIR): Change default to $TEXMF, rename to KPSE_DB_DIR. - (kpse_db_dir): New global variable (sigh). - * db.c (kpse_db_dir): Define. - * cnf.c: Include db.h for KPSE_DB_DIR. - (read_files): Set kpse_db_dir after all have been read. - * pathsearch.c (elt_in_db): Check if kpse_db_dir is null. - (path_search): Do not initialize db_dir. - -Sat Jul 30 06:12:12 1994 Karl Berry (karl@cs.umb.edu) - - * c-dir.h [_POSIX_VERSION]: Remove this condition; just use DIRENT. - -Fri Jul 29 11:36:25 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.c (init_path): Look up cnf file value if no suffix. - - * xstat.h (SAME_FILE_P): Move here. - * c-stat.h (SAME_FILE_P): From here. - * file-p.c: Change include. - * lib.h (dir_p, dir_links): Declare here. - * dir.h: Split into xopendir.h and c-dir.h; Sun 3 include files - get confused otherwise, according to john@minster.york.ac.uk. - * xopendir.c: Include xopendir.h. - * elt-dirs.c, dir.c: Change includes. - -Sun Jul 17 10:21:16 1994 Karl Berry (karl@cs.umb.edu) - - * hash.c (hash_insert): Put new elements in at the end of the - list, instead of the beginning. - * hash.h: Document this. - - * texmf.cnf.in (TEXMFROOT): Change to TEXMF. - * kpathsea.texi: Likewise. - - * cnf.c (do_line): assert program_invocation_short_name. - * progname.c: Doc fix. - - * absolute.[ch] (kpse_absolute_p): Take additional arg relative_ok. - * pathsearch.c (log_search): Call it (with false). - * tex-glyph.c: Change call. - - * pathsearch.c (path_search): Initialize db_dir here. - (elt_in_db): Not here. - -Fri Jul 15 11:44:15 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.h: Doc fix. - - * pathsearch.c (log_search): Pass in the whole str_list; anything - else is unreliable. - - * proginit.[ch] (kpse_init_prog): Don't pass in argv0; we need it - earlier. - -Tue Jul 12 11:56:54 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.c (init_path): Use the first envvar that's *set*, not - the first in the list. - - * tex-file.h (kpse_format_info_type): New member `type'. - * tex-file.c (kpse_init_format): Initialize it. - - * pathsearch.c (log_search): New fn. - (search): Call it. - -Fri Jul 1 11:54:29 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.c: Doc fix. - -Mon Jun 27 10:18:59 1994 Karl Berry (karl@cs.umb.edu) - - * db.c (db_build): Call kpse_var_expand on the db filename. - * pathsearch.c (elt_in_db): Likewise. - - * tex-glyph.h (kpse_find_gf): By analogy with kpse_find_pk. - -Sat Jun 25 16:09:05 1994 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (try_format): Try both Unix and DOS bitmap specs, - instead of just one or the other. - (bitmap_name): No longer needed. - -Fri Jun 24 11:52:32 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.c (kpse_find_file): Don't try the suffix if it doesn't - exist. - - * tex-file.h (kpse_find_{dvips_header,pict}): New definition. - -Thu Jun 23 16:57:58 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.h (kpse_{pict,dvips_header}_format): New consts. - (KPSE_{PICT,DVIPS_HEADER}_ENVS): Likewise. - -Tue Jun 21 11:53:09 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.c (kpse_find_file): Try the name as given if the name - concatenated with the suffix fails, for the sake of, e.g., EPS files. - - * tex-file.h (kpse_find_tex): New definition. - - * absolute.[ch]: Make arg const. - - * tex-glyph.[ch]: (kpse_bitmap_tolerance): Move here from tex-make. - - * c-proto.h (P6[CH]): New definitions. - - * Makefile.in (objects): Add proginit.o. - * proginit.[ch]: New files. - -Mon Jun 20 14:55:57 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.c (kpse_init_format): Make override path not apply to - TFM and VF files. - - * tex-glyph.c (kpse_find_glyph_format): Rename to kpse_find_glyph, - and don't call MakeTeXPK if the filename is absolute. - * tex-glyph.h: Likewise. - -Sun Jun 19 11:00:50 1994 Karl Berry (karl@cs.umb.edu) - - * common.ac (HAVE_PROGRAM_INVOCATION_NAME): Test for this. - * acconfig.h: #undef this by default. - * progname.[ch]: New files. - * Makefile.in (objects): Add progname.o. - * cnf.c (do_line): Check for . qualification. - -Sat Jun 18 16:55:36 1994 Karl Berry (karl@cs.umb.edu) - - * elt-dirs.c (kpse_element_dirs): Avoid stats in leaf directories - found via a non-null post. - -Fri Jun 17 14:25:08 1994 Karl Berry (karl@cs.umb.edu) - - * elt-dirs.c (kpse_element_dirs) [DEBUG]: Print the directory - expansion of the path element. - - * str-llist.h: Doc fix. - - * elt-dirs.c (do_subdir): Ignore anything beginning with ., not - just `.' and `..'. - -Tue Jun 14 11:53:49 1994 Karl Berry (karl@cs.umb.edu) - - * dir.c (dir_links): Cache the lookups. - - * elt-dirs.c (kpse_element_dirs): Don't expand the argument. - * expand.h (kpse_path_expand): New routine. - * expand.c: Define it. - * pathsearch.h: Doc fix. - - * db.c, tex-file.c [DEBUG]: Prefix output lines with `debug:'. - - * tex-file.h (kpse_format_info_type): Add cnf_path to the struct. - * tex-file.c (kpse_init_path): Print the cnf_path. - (init_path): Set it, instead of a local variable. - - * pathsearch.c (path_search): Use !! for no-disk-search instead of - %%, because now % is the comment char in cnf files. - * kpathsea.texi: Document this. Also change all `Kpathsearch' to - `kpathsea'. - -Mon Jun 13 10:15:49 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.h (kpse_set_maketex_mag): Remove. - * tex-make.c (kpse_set_maketex_mag): Make static, remove kpse_ - prefix, and use KPATHSEA_DPI and MAKETEX_BASE_DPI instead of args. - -Sun Jun 12 13:49:15 1994 Karl Berry (karl@cs.umb.edu) - - * db.c (db_build): Put a header on the hash table. - - * tex-glyph.c (try_format): Set extension and path after - kpse_init_format, natch. - -Sat Jun 11 14:26:34 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (objects): Add cnf.o. - * variable.c (expand): Call kpse_cnf_get if no envvar value. - -Fri Jun 10 11:20:23 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.h: Remove spec type and variable. - -Thu Jun 9 13:42:21 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (objects): Remove init-path.o. - * tex-file.c (kpse_find_file): Rewrite to initialize the paths - only once, and keep all path info in a structure. - * tex-file.h: Vastly simplify. - * tex-glyph.h (kpse_font_file_type): Move here, since it's really - only for glyphs. - * tex-glyph.c: Corresponding changes. - * debug.h (KPSE_DEBUG_PATHS): New debug bit. - - * default.h, str-list.h: Doc fix. - -Tue May 31 10:06:51 1994 Karl Berry (karl@cs.umb.edu) - - * debug.c: Doc fix. - -Mon May 23 11:50:03 1994 Karl Berry (karl@cs.umb.edu) - - * c-fopen.h (FOPEN_A_MODE): Define this. - * tex-make.c (misstex, maketex): Split up kpse_make_tex into - these, and create missfont.log if appropriate. - -Sun May 22 17:39:52 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.h: Doc fix. - -Wed May 11 13:25:58 1994 Karl Berry (karl@cs.umb.edu) - - * configure.in (AC_OUTPUT): Use just `Makefile' instead of - `./Makefile', to avoid a bug in Autoconf (through 1.10). - -Sun Apr 17 16:18:00 1994 Karl Berry (karl@ra.cs.umb.edu) - - * debug.h: Prefix macros with KPSE_. - * db.c, dir.c: Change calls. - - * common.ac: Remove :: VPATH stuff; that made it in to Autoconf 1.8. - - * Makefile.in (top_srcdir): Define this for configure to substitute. - -Thu Apr 7 17:52:05 1994 Karl Berry (karl@ra.cs.umb.edu) - - * debug.[ch]: Implement fopen/fclose tracing. - -Thu Mar 31 07:25:49 1994 Karl Berry (karl@cs.umb.edu) - - * Version 1.8. - -Thu Mar 24 10:01:20 1994 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c: Doc fix. - - * pathsearch.c (path_search): Don't search the disk if there is - magic in the path spec. - - * db.c: Doc fix. - -Wed Mar 16 13:50:17 1994 Karl Berry (karl@cs.umb.edu) - - * readable.c (kpse_readable_file): Complain if errno == EPERM. - -Sun Mar 13 11:14:19 1994 Karl Berry (karl@cs.umb.edu) - - * pathsearch.h (kpse_path_search): Take an extra arg must_exist. - * pathsearch.c (kpse_path_search, search, path_search): Likewise. - * tex-file.c (kpse_find_file): Change call. - * tex-file.h (kpse_find_*): Change these calls, too. - - * hash.c (hash_create): Don't use xcalloc to init pointers to null. - - * db.c (kpse_db_search): Don't free the pointer after incrementing it. - From Frank Jensen. - -Sat Mar 12 17:55:36 1994 Karl Berry (karl@cs.umb.edu) - - * db.h (kpse_db_search): Returns a pointer. - * db.c (kpse_db_search): If db can't be built, return NULL, else a - pointer to the (possibly empty) list. - (db_build): Return whether we found the file. - * pathsearch.c (path_search): Change call. - -Thu Mar 10 07:45:13 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (install-info): New target. - -Fri Mar 4 08:06:16 1994 Karl Berry (karl@cs.umb.edu) - - * hash.c (hash): Change hash function to spread out the values a - bit better. - - * debug.h (DEBUG_DB_BUILD): New debug bit. - * db.c (db_build) [DEBUG]: If bit is set, print hash table. - * hash.h (hash_print): Declare. - -Thu Mar 3 08:52:01 1994 Karl Berry (karl@cs.umb.edu) - - * Version 1.7. - -Sun Feb 27 15:57:30 1994 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (objects): Add db.o, hash.o. - * db.[ch]: New files. - * hash.[ch]: Also new files. - * pathsearch.c (path_search): Try db search. - * tex-glyph.c, fontmap.c: Use general hash functions. - -Sat Feb 26 13:15:53 1994 Karl Berry (karl@cs.umb.edu) - - * fontmap.c: Doc fix. - - * pathsearch.c (INIT_ALLOC): Increase to 75, what the heck. - -Fri Feb 25 08:30:50 1994 Karl Berry (karl@cs.umb.edu) - - * tex-file.[ch]: Decare args const. - -Thu Feb 24 07:55:43 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.h: Include tex-file.h, not init-path.h. - - * init-path.h (KPSE_*_{ENVS,PATHS}, kpse_font_override_path): Move - to tex-font.h. - * tex-font.h (kpse_find_{file,tfm,vf}): Also declare these. - * tex-font.c (kpse_find_file): Define these. - (kpse_font_override_path): Move definition here. - - * tex-file.*: Rename from tex-font.*. - * GNUmakefile: Corresponding changes. - - * elt-dirs.c (do_subdir): Only append the / once we know it's a - directory. - -Wed Feb 23 16:41:31 1994 Karl Berry (karl@cs.umb.edu) - - * elt-dirs.c (do_subdir): Don't tack POST on if it is exactly the - d_name, so we can find a/b with a path of a//b. - - * c-vararg.h (PVAR3[CH]): New defines. - - * init-path.h: Include KPSE_*_{ENVS,PATHS} here. - (kpse_init_path): Take an additional arg font_p. - * init-path.c (kpse_override_path): Rename kpse_font_override_path. - (kpse_init_path): Only use kpse_font_override_font if font_p. - -Mon Feb 21 15:38:53 1994 Karl Berry (karl@cs.umb.edu) - - * common.ac (extrasub): Define to remove VPATH lines if srcdir = `.'. - -Thu Feb 3 06:19:49 1994 Karl Berry (karl@cs.umb.edu) - - * Version 1.6. - - * fn.c (fn_copy0): Remember to allocate space for the null. - Thanks, simon. - -Wed Feb 2 09:57:47 1994 Karl Berry (karl@cs.umb.edu) - - * tex-make.h (KPSE_BITMAP_TOLERANCE): Move to here from tex-glyph.c - (kpse_check_bitmap_tolerance): Declare. - * tex-make.c (kpse_check_bitmap_tolerance): Define. - -Tue Feb 1 10:42:03 1994 Karl Berry (karl@cs.umb.edu) - - * c-std.h (*alloc) [! _MALLOC_INTERNAL]: Make decl conditional. - - * c-std.h [HAVE_STDLIB_H]: Change #if for including to this. - * common.ac (AC_HAVE_HEADERS): Check for stdlib.h. - - * Makefile.in (paths.h): Do all substitutions globally. - - * absolute.c [DOS]: Include c-ctype.h. - * tex-glyph.c (KPATHSEA_BITMAP_NAME) [DOS]: Double the backslash. - * elt-dirs.c (do_subdir) [!UNIX_ST_LINK]: Avoid dangling else. - From Wayne. - - * paths.h.in: Doc fix. - - * xputenv.c (xputenv): Check entire variable name for being saved, - not just a prefix of it. - -Mon Jan 31 12:05:30 1994 Karl Berry (karl@cs.umb.edu) - - * fn.c (fn_copy0): Allocate LEN if that's bigger than CHUNK_SIZE. - (CHUNK_SIZE): Increase to 75. - -Sat Jan 22 15:36:08 1994 Karl Berry (karl@cs.umb.edu) - - * Version 1.5. - - * common.ac (AC_HAVE_FUNCS): Check for memmove. - - * paths.h.in (DEFAULT_MF_PATH): Don't search just public/, cause - we need ams/. - -Mon Jan 17 15:09:36 1994 Karl Berry (karl@cs.umb.edu) - - * paths.h.in (DEFAULT_{FMT,BASE}_PATH): Include `.'. - -Sun Jan 16 14:50:02 1994 Karl Berry (karl@cs.umb.edu) - - * paths.h.in (DEFAULT_PK_PATH): Search subdirs of pk. - -Mon Jan 10 16:40:35 1994 Karl Berry (karl@cs.umb.edu) - - * xputenv.c (xputenv): Don't try to be smart about saving/freeing - stuff if SMART_PUTENV is defined. - - * c-std.h (assert) [!HAVE_ASSERT_H]: Define as nothing, to avoid - undefined references to assert. - -Tue Dec 21 16:28:13 1993 Karl Berry (karl@cs.umb.edu) - - * c-std.h (SYSV) [STDC_HEADERS]: Define, to get around old X - include files under hpux. - -Sun Dec 19 13:06:15 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (objects): Put tex-font.o first. - -Sat Dec 18 15:03:57 1993 Karl Berry (karl@cs.umb.edu) - - * config.h (GCC_WCHAR_T, _GCC_WCHAR_T): Remove these; I have - another theory now for wchar_t, done in xdvi.h and x11.c. - -Sat Dec 18 14:41:15 1993 Karl Berry (karl@owl.hq.ileaf.com) - - * c-memstr.h ([r]index) [STDC_HEADERS]: Conditionalize #define. - -Tue Dec 14 17:43:30 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (paths.h): Change substitutions accordingly. - * paths.h.in (DEFAULT_FMT_PATH): Variable is now fmtdir. - (DEFAULT_{BIB,BST}_PATH): Variable is now texmf_prefix. - -Sat Dec 11 13:21:43 1993 Karl Berry (karl@cs.umb.edu) - - * tex-make.c (ABS): New macro. - (kpse_set_maketex_mag): Use it, instead of fabs. - -Fri Dec 10 15:31:16 1993 Karl Berry (karl@cs.umb.edu) - - * xmalloc.c, xrealloc.c: Use exit instead of abort, remove abort - decls, and reword error messages to be less cryptic. From - john@minster.york.ac.uk. - - * dir.h: use `defined' instead of just `DIRENT || _POSIX_VERSION'. - How annoying. From kretschm@aitxu3.ait.physik.uni-tuebingen.de. - - * xputenv.c (putenv): Remove declaration, as different systems do - it differently. From kayvan@satyr.sylvan.com. - -Thu Dec 9 09:12:33 1993 Karl Berry (karl@cs.umb.edu) - - * tex-make.c (kpse_set_maketex_mag): Allow off-by-1 when deciding - if a dpi is a magstep. - -Tue Dec 7 11:03:51 1993 Karl Berry (karl@cs.umb.edu) - - * tex-make.c (kpse_set_maketex_mag): New routine from dvips, - called by dvipsk and xdvik to ensure consistency. - (magstep): Subroutine of above, also from dvips. - * tex-make.h: Declare it. - - * tex-doc.texi: Correct menu item (from maechler@stat.math.ethz.ch). - -Fri Dec 3 12:53:38 1993 Karl Berry (karl@cs.umb.edu) - - * c-pathmx.h: Doc fix. - -Sat Nov 27 14:36:11 1993 Karl Berry (karl@cs.umb.edu) - - * default.h: Doc fix. - - * paths.h.in (texfontdir): This has been renamed to fontdir. - -Sun Nov 21 08:28:41 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (distdir): Include HIER in the distribution, until - we merge it into the manual. - -Sun Nov 7 14:54:47 1993 Karl Berry (karl@cs.umb.edu) - - * c-namemx.h (NAME_MAX): Avoid use of pathconf. - * c-pathmx.h: Doc fix. - -Thu Nov 4 14:50:45 1993 Karl Berry (karl@cs.umb.edu) - - * config.h (_GCC_WCHAR_T) [!GCC_WCHAR]: Conditionalize. - - * c-std.h (EXIT_SUCCESS) [!EXIT_SUCCESS]: Move these defines - outside of !STDC_HEADERS, for the sake of SunOS 4.1.1. (From - vonbrand@inf.utfsm.cl.) - -Wed Nov 3 14:43:05 1993 Karl Berry (karl@cs.umb.edu) - - * Version 1.4. - -Wed Nov 3 07:05:48 1993 Karl Berry (karl@cs.umb.edu) - - * paths.h.in (DEFAULT_{BASE,FMT}_PATH): Had these definitions reversed. - -Fri Oct 29 19:27:36 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (try_fallback_resolutions): Initialize ret in all cases. - -Thu Oct 28 14:32:34 1993 Karl Berry (karl@cs.umb.edu) - - * lib.h: Doc fix. - - * common.h (AC_UNISTD_H): Replace this with unistd.h in the list - of HAVE_HEADERS. - -Tue Oct 26 13:59:33 1993 Karl Berry (karl@cs.umb.edu) - - * str-llist.[ch]: New files. - * Makefile.in (objects): Add str_llist.o. - * elt-dirs.[ch]: Use str_llist_type throughout. - * pathsearch.c (dir_list_search): Take a str_llist_type, and float - a successful dir towards the top. - (path_search): Change call of kpse_element_dirs. - -Sun Oct 24 19:41:49 1993 Karl Berry (karl@cs.umb.edu) - - * elt-dirs.c (do_optional): Remove this stub. - (expand_elt): Don't call it. - -Fri Oct 22 14:46:44 1993 Karl Berry (karl@cs.umb.edu) - - * xmalloc.c, xrealloc.c, line.c, pathsearch.c: Doc fix. - -Tue Oct 19 12:11:32 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (try_fallback_resolutions): New routine. - (kpse_find_glyph_format): Call it, instead of repeating (the now - pretty complicated) code. - * tex-font.c (kpse_init_fallback_resolutions): Pass the value of - any environment variable, not its name. From R.Kooijman@et.tudelft.nl. - - * c-memstr.h (str[r]chr) [!str[r]chr]: Conditionalize. From - maarrrk@seidel.ece.ucsb.edu. - -Tue Oct 12 16:26:48 1993 Karl Berry (karl@cs.umb.edu) - - * tex-make.c: Doc fix. - -Thu Oct 7 13:13:57 1993 Karl Berry (karl@cs.umb.edu) - - * xmalloc.c: Rewrite to not require . - * xrealloc.c: Likewise. - - * make-suffix.c (make_suffix): Declare variables const. - * remove-suffx.c (remove_suffix): Likewise. Also rename to - rm-suffix.c. - * xputenv.c (putenv): Declare with correct prototype. - * fontmap.c (internal routines): Likewise. - * line.c (xmalloc, xrealloc): Declare as void *. - (From john@minster.york.ac.uk.) - -Wed Oct 6 06:49:53 1993 Karl Berry (karl@cs.umb.edu) - - * Version 1.3. - - * tilde.c (kpse_tilde_expand): Always return a malloc-ed value. - (From ken@cs.toronto.edu.) - -Sun Oct 3 14:11:33 1993 Karl Berry (karl@cs.umb.edu) - - * config.h (_GCC_WCHAR_T): Define. - -Sat Oct 2 17:17:32 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (install-*): Don't reassign PATH, just invoke - mkdirchain explicitly. - - * tex-glyph.c (KPATHSEA_BITMAP_NAME) [DOS]: Define what I think - will work for this ... - - * paths.h.in: Doc fix. - - * Makefile.in: Doc fix. - - * tex-glyph.c (kpse_find_glyph_format): Unconditionally initialize - glyph_paths[*], since we might use them both in try_size. From - worsch@ira.uka.de. - -Fri Oct 1 12:02:11 1993 Karl Berry (karl@cs.umb.edu) - - * expand.c: Doc fix. - -Wed Sep 29 15:21:49 1993 (karl@terminus.cs.umb.edu) - - * Version 1.2. - -Sat Sep 25 14:12:00 1993 Karl Berry (karl@cs.umb.edu) - - * pathsearch.c (path_search, absolute_search): Don't initialize - structs. - -Fri Sep 24 12:50:00 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (try_size): Skip the simultaneous stuff. - (try_format): Set the envvar here. - (bitmap_name): Not here. - * pathsearch.c (kpse_*_multi_search): Delete. - Change most other routines to take only a single name again, - instead of a name list. - * pathsearch.h: Delete decls. - - * tex-glyph.c (init-path.h): Don't need to include this. - - * tex-glyph.c (kpse_find_glyph_format): Try the fallback - resolutions for the fallback font. - - * Makefile.in (warn_more, MAKEINFO_FLAGS) [hayley]: Define these - for development and distribution. - - * Makefile.in (dvi): Make analogous to info (including use of new - suffix rule). - - * tex-glyph.c (kpse_find_glyph_format): Set KPATHSEA_NAME to the - fallback font if we get that far. - -Wed Sep 15 19:29:56 1993 Karl Berry (karl@cs.umb.edu) - - * filefmt.h (KPSE_*_PATH): Pass NULL as first arg. - - * xputenv.c (xputenv): Rewrite again to save the variable names, - not the old items. - -Mon Sep 13 06:55:29 1993 Karl Berry (karl@cs.umb.edu) - - * concatn.h: Doc fix. - -Sun Sep 12 15:54:55 1993 Karl Berry (karl@cs.umb.edu) - - * lib.h (XTALLOC): Parenthesize the cast. - - * xputenv.c (xputenv): Rewrite to collect some of the garbage. - -Fri Sep 10 14:00:35 1993 Karl Berry (karl@cs.umb.edu) - - * lib.h (ENVVAR_SET_DEFAULT): No longer needed. - - * xputenv.c (xputenv_int): New routine. - -Thu Sep 9 14:58:00 1993 Karl Berry (karl@cs.umb.edu) - - * tex-make.c (MAKE_TEX_PK_SPEC): Change MAKETEX_DPI to - KPATHSEA_DPI. - - * tex-glyph.c (try_fontmap): Use KPSE_GLYPH_PATH. - * filefmt.c (KPSE_GLYPH_{PATH,ENVS}): New macros. - (KPSE_{GF,PK}_ENVS): Use GLYPH_ENVS. - - * tex-glyph.c (bitmap_name): Rewrite to use a variable spec, - introducing KPATHSEA_{BITMAP_NAME,FORMAT,DPI,NAME}. - (kpse_find_glyph_format): Set KPATHSEA_DPI instead of MAKETEX_DPI; - also set KPATHSEA_NAME. - (try_fontmap): Also set KPATHSEA_NAME here. - (try_size): Set KPATHSEA_DPI here. - - * tex-glyph.c (try_name): Delete this routine. - (kpse_find_glyph_format): Try fallback resolutions here, call - try_resolution directly. - (try_fontmap): Call try_resolution directly. - - * init-path.h: Need not include c-proto.h. - -Sun Aug 29 13:34:25 1993 Karl Berry (karl@cs.umb.edu) - - * tex-make.c: Doc fix. - - * filefmt.h: Don't need c-proto.h or types.h. - -Fri Aug 27 10:36:46 1993 Karl Berry (karl@cs.umb.edu) - - * c-vararg.h (PVAR2C): Take AP as an arg. - - * init-path.[ch] (kpse_init_path): Take the current value as an - additional argument, separate from the default path, and always - expand_default. - - * uppercasify.c (uppercasify): Don't discard upcased result! - -Thu Aug 26 10:36:28 1993 Karl Berry (karl@cs.umb.edu) - - * Version 1.1. - -Sun Aug 22 19:18:35 1993 Karl Berry (karl@cs.umb.edu) - - * install-data (install-data): Replace nonexistent - $(kpath_includedir) with $(includedir), and define it. Also - remove c-auto.h. - -Thu Aug 5 09:03:22 1993 Karl Berry (karl@cs.umb.edu) - - * Version 1.0. - -Wed Aug 4 13:51:24 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (kpse_find_glyph_format): Fill in the font_file - struct in the maketex case. - - * Makefile.in (info): Just depend on kpathsea.info, and rely on - new suffix rule to do the work. - -Tue Aug 3 17:50:40 1993 Karl Berry (karl@fishbowl.hq.ileaf.com) - - * tex-glyph.c (try_name): Don't free expanded_name if we're - returning it. - -Tue Aug 3 10:13:43 1993 Karl Berry (karl@owl.hq.ileaf.com) - - * version.c (kpathsea_version_string): Do not declare const. - - * line.h (read_line): Protoize decl. - -Tue Aug 3 09:10:07 1993 Karl Berry (karl@blood.hq.ileaf.com) - - * c-memstr.h (bcmp, bcopy, bzero) [!HAVE_BCOPY]: Conditionalize. - - * putenv.c: Include , and use const when - calling memcpy. - -Sun Aug 1 08:48:49 1993 Karl Berry (karl@cs.umb.edu) - - * Add new features to manual. - - * Makefile.in (objects): Include putenv.o. - * putenv.c: New file from gdb. - * common.ac: Test for putenv. - -Sat Jul 31 11:54:31 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (distclean): Remove paths.h. - - * Most files: changes for traditional C compatibility. - - * filefmt.h: Add new KPSE_..._PATH's for the other formats. - * paths.h.in: Add defaults. - * Makefile.in (paths.h): sed the values in. - -Fri Jul 30 17:23:10 1993 Karl Berry (karl@cs.umb.edu) - - * filefmt.h (KPSE_VF_PATH): Add empty parens. - - * tex-paths.h*: Rename to just paths.h*. - -Tue Jul 27 09:00:58 1993 Karl Berry (karl@cs.umb.edu) - - * filefmt.h: Include tex-paths.h, and use default paths in - KPSE_..._PATH macros. - - * find-suffix.c: Correct logic. - - * filefmt.h: Include init-path.h. - -Sat Jul 24 10:44:21 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (kpse_find_glyph_format): Assign to it. - * tex-font.h (kpse_font_file_type): New member `source'. - (KPSE_FONT_FILE_SOURCE): Accessor macro. - (kpse_source_type): New type. - -Wed Jul 21 19:45:45 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (configclean): New target. - -Sun Jul 18 13:53:38 1993 Karl Berry (karl@cs.umb.edu) - - * tilde.[ch] (kpse_expand_tilde): Rename to kpse_tilde_expand. - - * elt-dirs.c, pathsearch.c, tex-glyph.c: Replace calls to - kpse_expand_tilde with kpse_expand. - * expand.[ch]: New files. - * Makefile.in (objects): Add it. - - * fn.[ch]: New files. - * elt-dirs.c (fn*): Moved to fn.c. - * tex-make.c, variable.c: Use the new routines. - * *obstack*: No longer needed. - * Makefile.in (objects): Appropriate changes. - -Sat Jul 17 13:25:25 1993 Karl Berry (karl@cs.umb.edu) - - * concat.c: Doc fix. - - * pathsearch.c (search, path_search): Expand variable references. - - * itoa.c: New file. - * lib.h (itoa): Declare it. - * Makefile.in (objects): Add it. - - * lib.h (ENVVAR_SET_DEFAULT): New macro. - * tex-glyph.c (kpse_find_glyph_format): Call it to set the dpi. - -Fri Jul 16 09:10:52 1993 Karl Berry (karl@cs.umb.edu) - - * xputenv.c: New file. - * Makefile.in (objects): Add it. - * lib.h (xputenv): Declare it. - - * c-obstack.h: New file. - * variable.[ch]: New files. - * Makefile.in (objects): Add it. - - * uppercasify.c: New file. - * Makefile.in (objects): add it. - * lib.h (uppercasify): Declare it. - -Tue Jul 13 13:47:54 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (kpse_find_glyph_format): Simplify path initialization. - * filefmt.h: New file; add abbrevs for GF and PK inits. - - * Makefile.in (objects): Add obstack.o and tex-make.o. - * obstack.[ch]: New files from GNU. - * concatn.[ch], tex-make.[ch]: New files. - * init-path.c: Doc fix. - - * elt-dirs.c: Doc fix. - * readable.[ch]: Doc fixes. - -Sun Jul 11 13:37:02 1993 Karl Berry (karl@cs.umb.edu) - - * tex-font.h (kpse_font_format_type): Rename to kpse_file_format_type, - and include the other file formats. - * tex-glyph.c: Change uses. - -Tue Jul 6 08:09:10 1993 Karl Berry (karl@cs.umb.edu) - - * tex-font.c (kpse_fallback_font): Initialize to NULL. - -Mon Jul 5 08:23:09 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (try_size): Don't fill in FONT_FILE if it's null. - - * tex-font.c (kpse_init_fallback_resolutions): Look for TEXSIZES - after the program-specific *SIZES var. - - * tex-glyph.c (kpse_find_glyph_format): Use kpse_init_path. - * Makefile.in (objects): Add init_path.o. - * tex-font.[ch] (kpse_override_path): Move to init-path.[ch]. - * init-path.[ch]: New files. - * c-vararg.h: New file. - -Sun Jul 4 11:26:17 1993 Karl Berry (karl@cs.umb.edu) - - * tex-font.c (kpse_init_fallback_resolutions): New routine. - * tex-font.h: Declare it, and companion return type. - -Fri Jul 2 10:43:11 1993 Karl Berry (karl@cs.umb.edu) - - * tex-glyph.c (kpse_find_glyph_format): Take first successful - fontmap entry. - - * fontmap.c (map_file_parse): Take first % on line as starting the - comment, not the last. - - * fontmap.c (map_insert): Always insert the new element. - -Thu Jul 1 19:21:35 1993 Karl Berry (karl@cs.umb.edu) - - * fontmap.c (map_lookup): Return a list, not a single string. - (map_lookup_str): Likewise. - * fontmap.h (map_lookup): Change decl. - * tex-glyph.c (kpse_find_glyph_format): Change caller. - -Sat Jun 26 11:48:36 1993 Karl Berry (karl@cs.umb.edu) - - * tex-font.h: Doc fix. - -Thu Jun 24 11:16:41 1993 Karl Berry (karl@cs.umb.edu) - - * configure.in (MISSING_HEADERS): Toss in favor of HAVE_HEADERS. Sigh. - Also, move all this to an include file. - Change uses in several files. - - * stat.h: Rename to c-stat.h, and change includers. - - * Makefile.in (objects): Add tex-glyph.o. - * pathsearch.[ch] (kpse_*_multi_search): New routines. - -Sat Jun 19 11:37:18 1993 Karl Berry (karl@cs.umb.edu) - - * str-list.c (str_list_free): New routine. - -Fri Jun 18 13:54:08 1993 Karl Berry (karl@cs.umb.edu) - - * fontmap.c (map_create): Rewrite to use kpse_all_path_search. - Include const in various subroutines. - -Tue Jun 15 15:58:18 1993 Karl Berry (karl@cs.umb.edu) - - * Change to pathsearch. Rename the files - themselves. - - * elt-dirs.c (cache): Copy the key into our own storage, since it - comes from kpse_path_element and might get overwritten. Should we - copy all the values, too? - -Sun Jun 13 16:49:09 1993 Karl Berry (karl@cs.umb.edu) - - * pathsearch.c (dir_list_search): Don't need to append the null - here; in fact, it's wrong, since then the final list might have - nulls in the middle. - - * elt-dirs.c (dir_list_add): Correct check for new directory - already ending in /. - -Fri Jun 11 10:45:33 1993 Karl Berry (karl@cs.umb.edu) - - * str-list.[ch]: New files. - * pathsrch.c: Use it for the dir_list routines. - * Many changes and new files throughout for new implementation - including TeX-font-lookup routines. - -Tue Jun 8 14:00:54 1993 Karl Berry (karl@cs.umb.edu) - - * Most files: Change `const string' (constant pointer) to `const - char *' (pointer to constant data). What a crock. - -Mon Jun 7 09:43:21 1993 Karl Berry (karl@cs.umb.edu) - - * debug.[ch]: New files. - * config.h: Include debug.h. - - * dir-p.c: Rename to dir.c. - (dir_links): New routine. - - * c-std.h (assert.h) [!ASSERT_H_MISSING]: Include this. - * configure.in: Check for it with new macro AC_MISSING_HEADERS. - -Thu Jun 3 10:12:12 1993 Karl Berry (karl@cs.umb.edu) - - * dirio.h (leaf_dir_p): No longer defined; rename to dir.h. - * xopendir.c, dir-p.c, pathsrch.c: Change include. - -Mon May 31 07:49:16 1993 Karl Berry (karl@cs.umb.edu) - - * c-std.h (EXIT_{SUCCESS,FAILURE}): Define these if they're undefined. - - * config.h: Use instead "...". - - * kpathlib.h: Had #ifndef protection messed up. Rename to lib.h. - - * c-memstr.h (index, rindex) [!index, !rindex]: Make definitions - conditional. - -Tue May 25 10:07:00 1993 Karl Berry (karl@cs.umb.edu) - - * c-{namemx,pathmx,pathch,...}.h: Doc fixes. - - * c-systypes.h: New file. - * c-std.h: Include it. - - * stat.h: New file. - * xstat.h: Include it. - - * configure.in (AC_HAVE_HEADERS): Test for `pwd.h'. - -Sun May 23 19:06:22 1993 Karl Berry (karl@cs.umb.edu) - - * pathsrch.[ch]: Doc fixes. - -Fri May 21 11:27:54 1993 Karl Berry (karl@cs.umb.edu) - - * line.c (free): Declare. - - * pathsrch.c, find-suffix.c: Change caller. - * c-pathch.h ({IS_,}{DIR,ENV}_SEP): Rename existing confusing - definitions to these. Suggested by rocky. - -Mon May 17 08:18:18 1993 Karl Berry (karl@cs.umb.edu) - - * Version 0.3. - - * pathsrch.c (expand_default): Handle doubled colon and - nothing-but-colon cases. - - * Write documentation, change Makefile accordingly. - -Thu May 13 16:32:34 1993 Karl Berry (karl@cs.umb.edu) - - * c-std.h (popen) [VMS]: Make decl conditional, and include - and . - -Mon May 10 07:12:50 1993 Karl Berry (karl@cs.umb.edu) - - * Version 0.2. - - * version.c: Put in placeholder. - -Sun May 9 10:42:34 1993 Karl Berry (karl@cs.umb.edu) - - * config.h (c-auto.h): Use <...> instead of "...". - -Tue May 4 14:54:41 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (info check dvi): New targets (that do nothing). - -Mon May 3 13:46:17 1993 Karl Berry (karl@claude.cs.umb.edu) - - * Version 0.1. - - * Use KPATHSEARCH_ prefix for various headers' cpp protections. - -Sun May 2 10:28:25 1993 Karl Berry (karl@cs.umb.edu) - - * Makefile.in (dist): Depend on TAGS, and put it in the dist. - - * Makefile.in (c-auto.h.in): Remove extra $(srcdir). - -Sun Apr 25 11:22:12 1993 Karl Berry (karl@cs.umb.edu) - - * pathsrch.h: Include c-proto.h. - - * make-suffix.c: New file. - * Makefile.in (objects): Add the .o. - - * file-p.c: Use the SAME_FILE_P macro. - - * fontmap.h: Include c-proto.h and types.h. - - * lib.h: Rename to kpathlib.h. - * config.h: Include changed. - - * c-proto.h, c-std.h: Doc fix. - - * c-limits.h [LIMITS_H_MISSING]: Conditionalize include of c-std.h. - - * xstat.h: Include c-std.h. - - * Makefile.in (c-auto.h.in): Add unused warning to top. - - * dirio.h: Include c-proto.h and types.h. - -Fri Apr 23 16:11:13 1993 Karl Berry (karl@cs.umb.edu) - - * line.c: Don't include config.h, just declare xmalloc and - xrealloc explicitly. - - * pathsrch.c: paths.h need not be included. - - * Created. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/HIER --- a/kpathsea/HIER Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -Here is the installed TeX & Metafont hierarchy (as of 4sep94) that -we have been working on. Please send comments to mackay@cs.washington.edu, -unixtex@u.washington.edu, and kb@cs.umb.edu. -(Especially if you try to actually install TeX like this!) - -First, pick a root directory for the library files: -TEXMF = /usr/local/lib/texmf - -(Or, in make variable terms: $(datadir)/texmf.) - -All the files are installed relative to $TEXMF. Top-level directories: -bibtex -- bib/*.bib, bst/*.bst -doc -- bibtex/, fontname/, eplain/, ... -fonts -- see below -tex -- see below -mf -- utility MF sources - ({plain, expr, null, io, slant, modes, ...}.mf) -ini -- .base, .fmt, .pool -dvips -- only if you have a PostScript printer, naturally - -In general, where possible, the same setup as ctan is clearly a win. - -Under dvips, have the .pro/.ps/psfonts.map files. - -Under tex, at least: -plain ({plain, manmac, null, plain, story, testfont, webmac}.tex, - perhaps also texinfo.tex, eplain.tex, other single-file sources) -latex (with subdirectories base/ for M&S's files, - misc/ for one-file styles, and other distributions by directory) -tugboat (tugboat.cmn, tugboat.sty, etc.) -mft (*.mft) - -Under fonts: -// - for in public, adobe, ams, bitstream, urw, ... - for public/ in cm, concrete, punk, ... - for ams/ in euler, symbols, ... - for adobe/ in times, palatino, avantgar, ... - See the *.map files in fontname 2.0 for canonical directory names. - -Under .../// -src/*.mf -tfm/*.tfm -vf/*.vf -afm/*.afm -pk/$MAKETEX_MODE (including pseudo-modes for gsrenderfont, ps2pk, gsftopk) -type1/*.{pfa,pfb,gsf} -truetype/*.ttf - -See the TeX directory structure node in the manual for an additional -complication with MAKETEX_MODE. - -For example: -texmf/fonts/public/cm/pk/cx/cmr10.300pk -texmf/fonts/public/sauter/src/b-cmbx.mf -texmf/fonts/adobe/utopia/type1/putr.pfa - - -For default path values, see texmf.cnf[.in]. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/INSTALL --- a/kpathsea/INSTALL Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,410 +0,0 @@ -Contents: - -Installation - Default paths - Common problems - Unable to find files - Slow path searching - `XtInherit' - `wchar_t' - `ShellWidgetClass' - Pointer combination warnings - Shared library - Reporting bugs - - -Installation -************ - - Here are the basic steps for configuration and installation: - - 1. Edit the file `make/paths.make' if you want to make changes to the - installation directories or paths that will have effect across - different runs of `configure'. Alternatively, override the Make - variables on the command line when you run Make. - - Exception: to reliably change the top-level `prefix', you must give - `configure' the option `-prefix=PREFIX', instead of changing the - value in `paths.make'. - - 2. Edit `kpathsea/texmf.cnf.in' to change the local paths to match - your local setup. *Note Default paths: (kpathsea)Default paths, - for more details on changing the paths. A copy is in - `kpathsea/INSTALL'. See `kpathsea/HIER' for an explanation of the - default setup. - - If the paths do not match where the files actually are, the - programs will probably start up Very, Very, Slowly, and/or not be - able to find the fonts or other input files. - - 3. `sh configure' (in the top-level directory). This makes - system-dependent `#define's' in `*/c-auto.h' (from the - corresponding `c-auto.h.in') and creates a `Makefile' (from the - corresponding `Makefile.in', by doing `@VAR@' and `ac_include' - substitutions). - - Perhaps the most common desire is to compile with optimization - instead of or as well as debugging. You can change the options - passed to the compiler by changing `CFLAGS', either for - `configure' or `make'. For example: - - prompt$ env CFLAGS="-g -O" configure - prompt$ make - or - prompt$ configure - prompt$ make CFLAGS="-g -O" - - *Note Running `configure' scripts: (autoconf)Invoking configure, - for detailed `configure' options. (A copy is in - `kpathsea/CONFIGURE'.) - - 4. `make' (still in the top-level directory). Barring configuration - and compiler bugs, this will compile all the programs. *Note - Common problems: (kpathsea)Common problems, for system-dependent - problems (this section is also in `kpathsea/INSTALL'). - - This also creates the `texmf.cnf' and `paths.h' files that define - the default search paths. - - 5. `make install'. This installs the library, header files, and - documentation. Or `make install-data' to just install the - architecture-independent files. Or `make install-exec' to just - install the (binary) archive library file. - - Since I only distribute Kpathsea as part of another package, you - will probably be doing the above in a top-level directory that - contains a `Makefile', `kpathsea', and the other package. But you - can do the installation in `kpathsea' itself, if you only want to - install the library, not the other package. - - 6. The first time you install any manual in Info, you have to add a - line (you choose where) to the `dir' file in your `$(infodir)' - directory. A sample line to add is given near the top of the - Texinfo source files (`kpathsea/kpathsea.texi' and - `dvipsk/dvips.texi'). - - 7. `make distclean'. This removes all files created by the build. - - - *Note Filename database::, for a description of an -externally-generated database that can help speed searches. - - *Note Debugging::, for runtime debugging support that may help track -down problems. - - Do not attempt to use any version of Kpathsea with any program except -the version that the program came with, unless you are a glutton for -punishment. - -Default paths -============= - - To summarize the chain of events that go into defining the default -paths: - - 1. `configure' creates a `Makefile' from each `Makefile.in'. - - 2. When Make runs in the `kpathsea' directory, it creates a file - `texmf.sed' that substitutes the Make value of `$(var)' for a - string `@var@'. The variables in question are the one that define - the installation directories. - - 3. `texmf.sed' (and a little extra magic--see `kpathsea/Makefile') is - applied to `texmf.cnf.in' to generate `texmf.cnf'. This is the - file that will eventually be installed and used by the programs to - look up programs. - - 4. The definitions in `texmf.cnf' are changed into the form of C - `#define''s, producing `paths.h'. These values will be the - compile-time defaults; they are not used unless no `texmf.cnf' file - can be found at runtime. - - (That's a partial lie: the compile-time defaults are what extra - `:''s in `texmf.cnf' expand into; but the paths as distributed - have no extra `:''s, and there's no particular reason for them to.) - - - The purpose of this elaborate sequence is to avoid having the same -information in more than one place. If you change the installation -directories or top-level prefix before running `configure', those -changes will propagate through the whole sequence. If you change the -default paths in `texmf.cnf.in', those changes are propagated to the -compile-time defaults. - - Alternatively, you can ignore the whole mess and edit `texmf.cnf' -after it is installed. Maybe even copying it into place beforehand so -you can complete the installation, if TeX or Metafont is having trouble -finding their input files. - - Unfortunately, editing `Makefile.in' *does not work* in one common -case--changing the `prefix' or `exec_prefix' variables. For these, you -must use the `-prefix' or `-exec-prefix' options to `configure'. *Note -Running `configure' scripts: (autoconf)Running configure Scripts. -(That's another partial lie: editing does work, as long as a program -named `tex' is not in your `PATH'.) - - *Note TeX directory structure: TeX directory structure, for a -description of some ways to arrange the TeX library files, and some -features of the distributed paths that may not be obvious. The file -`kpathsea/HIER' is a copy of that section. - - The Make definitions are all repeated in several `Makefile''s; but -changing the top-level `Makefile' should suffice, as it passes down all -the variable definitions, thus overriding the submakes. (The -definitions are repeated so you can potentially run Make in the -subdirectories.) - -Common problems -=============== - - Some common problems with compilation, linking, or execution are -described below. - -Unable to find files --------------------- - - If a program complains it cannot find fonts (or other input files), -any of several things might be wrong: - - * You don't have the fonts (or whatever) installed. Nothing will - automatically generate TFM files or TeX and Metafont sources for - you (by default). *Note Obtaining Web2c: (web2c)Obtaining Web2c. - - You can, however, configure TeX and Metafont to run a script to - generate these input files, if you have (or write) such scripts. - *Note `MakeTeX'... invocation: (web2c)MakeTeX... invocation. - - * You have (perhaps unknowingly) told Kpathsea to use search paths - that don't reflect where the files actually are. One common cause - is having environment variables set, thus overriding what you - carefully set in `texmf.cnf'. *Note TeX environment variables: TeX - environment variables. - - * Your files reside in a directory that is only pointed to via a - symbolic link, in a leaf directory. - - Unfortunately, Kpathsea's subdirectory searching has a (congenital) - deficiency: If a directory D being searched for subdirectories - contains plain files and symbolic links to other directories, but - no true subdirectories, D will be considered a leaf directory, - i.e., the symbolic links will not be followed. *Note Subdirectory - expansion::, for an explanation of why this happens. - - You can work around this problem by creating an empty dummy - subdirectory in D. Then D will no longer be a leaf, and the - symlinks will be followed. - - The directory immediately followed by the `//' in the path - specification, however, is always searched for subdirectories, - even if it is a leaf. This is since presumably you would not have - asked for the directory to be searched for subdirectories if you - didn't want it to be. - - * There is a bug in the library. *Note Reporting bugs::. - - In any case, you may find the debugging options helpful in determining -precisely where the fonts (or whatever) are being looked for. See the -program's documentation for its debugging options, and also *note -Debugging::.. - -Slow path searching -------------------- - - If your program takes an excessively long time to find fonts or other -input files, but does eventually succeed, here are some possible -culprits: - - * Most likely, you just have a lot of directories to search, and that - takes a noticeable time. The solution is to create and maintain a - separate `ls-R' file that lists all the files in your main TeX - hierarchy. *Note Filename database::. (Kpathsea always uses `ls-R' - if it's present; there's no need to recompile or reinstall any of - the programs.) - - * Your recursively-searched directories (e.g., - `/usr/local/lib/tex/fonts//'), contain a mixture of files and - directories. This prevents Kpathsea from using a useful - optimization (*note Subdirectory expansion::.). - - It is best to have only directories (and perhaps a `README') in the - upper levels of the directory structure, and it's very important - to have *only* files, and no subdirectories, in the directories - where the dozens of TFM, PK, or whatever files reside. - - * Finally, one simple-to-fix (but unlikely) cause: If you recursively - search `$HOME' or `~', and you are running as `root', you will - search every directory on the system. This typically takes quite - some time! - - In any case, you may find the debugging options helpful in determining -precisely when the disk or network is being pounded. *Note Debugging::, -and also see the program's documentation. - -`XtInherit' ------------ - - On DEC OSF/1 1.x systems, the loader has a bug that manifests itself -in the following error (all on one line, but for the sake of the paper -width it's broken here): - - xdvik/xdvi: /sbin/loader: Fatal Error: search_for_undefineds: - symbol _XtInherit should not have any relocation entry - -According to Michael Rickabaugh `': - - This is a bug fixed in DEC OSF/1 2.0. - - If you know how, installing `/sbin/loader' from a 2.0 system onto a - 1.3 system will work. Make sure that `/usr' is *not* mounted - when you do this. (If you forget about umounting `/usr', it is - possible most of your filesystems will become corrupted.) - - Otherwise, I suggest getting a hold of a 2.0 CD and running - `/usr/sbin/installupdate'. - - Alternatively, you may be able to use the freely available X11 -libraries that come with the MIT distribution (on `ftp.x.org', for -example). - - Linking statically, perhaps only with some of the X libraries, may -also work. (if you find the definitive workaround, please let me know.) - -`wchar_t' ---------- - - The upshot of all the following is that if you get error messages -regarding `wchar_t', try defining `NO_FOIL_X_WCHAR_T' (for Web2c) or -`FOIL_X_WCHAR_T' (for everything else). - - `wchar_t' has caused infinite trouble. None of my code ever uses -`wchar_t'; all I want to do is include X header files and various -system header files, possibly compiling with GCC. This seems an -impossible task! - - The X11 header `' and GCC's `' have conflicting -definitions for wchar_t. - - The particulars: `' from MIT X11R5 defines `wchar_t' if -`X_WCHAR' is defined, which is defined if `X_NOT_STDC_ENV' is defined, -and we define *that* if `STDC_HEADERS' is not defined (`configure' -decides if STDC_HEADERS gets defined). But when compiling with gcc on -SunOS 4.1.x, `STDC_HEADERS' is not defined (`string.h' doesn't declare -the `mem'* functions), so we do get X's `wchar_t'--and we also get -gcc's `wchar_t' from its `'. Conflict. - - On the other hand, SunOS 4.1.1 with some other X configurations -actually needs GCC to define `wchar_t', and fails otherwise. - - My current theory is to define `wchar_t' to a nonsense symbol before -the X include files are read; that way its definition (if any) will be -ignored by other system include files. Going along with that, define -`X_WCHAR' to tell X not to use `', that we've already -included, but instead to make its own definition. - - But this is not the end of the story. The X11 include files -distributed with DG/UX 5.4.2 for the Aviion have been modified to -include `<_int_wchar_t.h>' if `X_WCHAR', so our `#define' will not have -any typedef to change--but the uses of `wchar_t' in the X include files -will be changed to reference this undefined symbol. So there's nothing -to foil in this case. I don't know how to detect this automatically, so -it's up to you to define `NO_FOIL_X_WCHAR_T' yourself. - -`ShellWidgetClass' ------------------- - - This section is adapted from question 47 from the -`comp.sys.sun.admin' FAQ. - - If you are linking with Sun's OpenWindows libraries in SunOS 4.1.x, -you may get undefined symbols `_get_wmShellWidgetClass' and -`_get_applicationShellWidgetClass'. This problem does not arise with -the standard MIT libraries under SunOS. - - The cause is bugs in the `Xmu' shared library as shipped from Sun. -There are several fixes: - - * Get the Openwindows patches that apply to this problem. - - * Statically link the `Xmu' library into the executable. - - * Avoid using `Xmu' at all. For this last, if you are compiling - Metafont, *note Online Metafont graphics: (Web2c)Online Metafont - graphics.. If you are compiling Xdvi, see the `-DNOTOOL' option in - `xdvik/INSTALL'. - - * Ignore the errors. The binary runs fine regardless. - - Here is the information for getting the two patches: - - Patch ID: 100512-02 - Bug ID's: 1086793, 1086912, 1074766 - Description: 4.1.x OpenWindows 3.0 `libXt' jumbo patch - - Patch ID: 100573-03 - Bug ID: 1087332 - Description: 4.1.x OpenWindows 3.0 undefined symbols when using shared - `libXmu'. - - The way to statically link with `libXmu' depends on whether you are -using a Sun compiler (e.g., `cc') or `gcc'. If the format, alter the -`x_libs' make variable to include - - -Bstatic -lXmu -Bdynamic - - If you are using `gcc', include `-static' in `LDFLAGS'; this will -link all libraries statically. If you want to link only `Xmu' -statically and everything else dynamically, you have to do it by hand: -run `gcc -v', grab the `ld' line, and add the `-B''s given above around -`-lXmu'. - - The reason is that gcc moves all linker options to the front of the -`ld' command line. So you can't specify different options for -different libraries. When I reported this to the GCC maintainers, the -reply was that they would happily merge in the changes, but they didn't -want to take the time to do it themselves. - -Pointer combination warnings ----------------------------- - - When compiling with old C compilers, you may get some warnings about -"illegal pointer combinations". These are spurious; just ignore them. -I decline to clutter up the source with casts to get rid of them. - - In general, if you have trouble with a system C compiler, I advise -trying the GNU C compiler. (And vice versa, unfortunately; but in that -case I also recommend reporting a bug to the GCC bug list.) - -Shared library -============== - - You can compile Kpathsea as a shared library. The advantage in doing -this is that the different executables can then share the code, -decreasing memory usage. (The other advantage in general of shared -libraries is that it's possible to update the library and programs -independently. But since the Kpathsea interface is not and can not be -frozen, that doesn't apply here.) - - Under Solaris, use `-K pic -xstrconst' if you compile with a Sun -compiler, `-fpic' if you use GCC. Also add `-L$(LIBDIR) -R$(LIBDIR)' -to `LDFLAGS' when you link the binaries, so that the library can be -found, and users do not have set `LD_LIBRARY_PATH'. - - (If you know how to make Kpathsea shared on other systems, please -send a message to the bug address in the next section.) - -Reporting bugs -============== - - If you encounter problems, please report them to `tex-k@cs.umb.edu'. -Include the version number of the library, the system you are using, and -enough information to reproduce the bug in your report. To get on this -mailing list yourself, email `tex-k-request@cs.umb.edu' with a message -whose body contains a line - subscribe YOU@YOUR.PREFERRED.ADDRESS - - To avoid wasted effort and time (both mine and yours), I strongly -advise applying the principles given in the GNU C manual (*note -Reporting Bugs: (gcc)Bugs.) to your bug reports. - - Please also report bugs in this documentation--not only factual -errors, but unclear explanations, typos, wrong fonts, ... diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/MakeTeXPK.in --- a/kpathsea/MakeTeXPK.in Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,276 +0,0 @@ -#!/bin/sh -# original MakeTeXPK -- make a new PK font, because one wasn't found. -# Version of 12dec94. -# -# (If you change or delete the word `original' on the previous line, -# installation won't write this MakeTeXPK over yours.) -# -# This script must echo the name of the generated PK file (and nothing -# else) to standard output. Yes, this is different from the original dvips. -# -# Parameters: -# name dpi bdpi magnification [mode [destdir]] -# -# `name' is the base name of the font, such as `cmr10'. -# `dpi' is the resolution the font is needed at. -# `bdpi' is the base resolution, used to intuit the mode to use. -# `magnification' is a string to pass to MF as the value of `mag'. -# `mode', if supplied, is the mode to use. Unless it's `default', in -# which case we guess. (This is so people can specify a destdir -# without a mode.) -# `destdir', if supplied, is either the absolute directory name to use -# (if it starts with a /) or relative to the default DESTDIR (if not). - -# The root of where to put the new file. (Using the sh construct -# ${var=value} is the tersest construct that lets an environment -# variable `var' override the value given here.) -: ${DESTROOT=${MTPK_DESTROOT-@fontdir@}} - -# Define to `gsftopk' or `ps2pk' or whatever to make PK files for -# PostScript fonts. If this is defined, PSMAPFILE must also be defined to -# be your psfonts.map file or some equivalent. -: ${ps_to_pk=gsftopk} -: ${PSMAPFILE=@psheaderdir@/psfonts.map} - -# Location of the files that map font name parts to directory names. -: ${NAMEMAPDIR=@fontnamedir@} - -# This is needed only if all the font directories were not included in -# the compile-time path for gsftopk. -: ${DVIPSHEADERS=@datadir@/ghostscript/type1:} - -# If this directory doesn't exist, the DC fonts won't be attempted. -: ${dcfontdir=@dcfontdir@} - -# If this directory doesn't exist, the Sauter stuff won't be attempted. -: ${sauterdir=@sauterdir@} - -# If the true typeface directory cannot be determined from the fontname, -# the files are installed here, relative to $DESTROOT. -: ${default_namepart=tmp/pk} - -# TEMPDIR needs to be unique for each process because of the possibility -# of processes simultaneously running this script. -TEMPDIR=${TMPDIR-/tmp}/mtpk.$$ - -if test $# -lt 4; then - echo "Usage: $0 name dpi bdpi mag [mode [destdir]]." >&2 - exit 1 -fi - -NAME=$1 -DPI=$2 -BDPI=$3 -MAG=$4 -MODE=$5 - -# DESTDIR is harder. -case "$6" in - "") - # Nothing specified, so try to intuit the directory from the - # fontname. First the special cases: either $NAME matches an entire - # name in special.map, or it matches the abbreviation in - # special.map and ends with a numeral (for the pointsize). - # We (painfully) use only the minimal features in original awk. - if test -r $NAMEMAPDIR/special.map; then - namepart=`awk \ -'{if ($1 == NAME || (substr (NAME, 1, length ($1)) == $1 \ - && substr (NAME, length (NAME), 1) ~ /[0-9]/)) \ - { print $2 "/" $3; exit; }}' NAME=$NAME $NAMEMAPDIR/special.map` - - if test -z "$namepart"; then - # Try the normal case. Source first. - s_abbrev=`echo $NAME | cut -c 1-1` - sourcedir=`awk '{ if ($1 == s_abbrev) { print $2; exit; }}' \ - s_abbrev=$s_abbrev $NAMEMAPDIR/source.map` - - if test -n "$sourcedir"; then - # We found the source. Try for the typeface. - t_abbrev=`echo $NAME | cut -c 2-3` - typefacedir=`awk '{ if ($1 == t_abbrev) { print $2; exit; }}' \ - t_abbrev=$t_abbrev $NAMEMAPDIR/typeface.map` - - if test -n "$typefacedir"; then - # Found everything. - namepart=$sourcedir/$typefacedir - - else - echo "$0: Could not map typeface abbreviation $t_abbrev." >&2 - fi - else - echo "$0: Could not map source abbreviation $s_abbrev." >&2 - fi - fi - else - # No map files. - : - fi - if test -z "$namepart"; then - # If we failed for whatever reason, default to a generic subdir. - namepart=$default_namepart - else - # Otherwise, get the `pk' in before we append the mode. - namepart=$namepart/pk - fi - - # Finally, update the parent of the installation directory. - DESTROOT="$DESTROOT/$namepart" - ;; - /*) DESTDIR=$6;; # Absolute, explicit destdir => use it. - *) DESTDIR=$DESTROOT/$6;; # Relative destdir => append to the default. -esac - -GFNAME=$NAME.$DPI'gf' -PKNAME=$NAME.$DPI'pk' - -# Clean up on normal or abnormal exit. DESTDIR changes, hence the eval. -trap "cd /; eval rm -rf $TEMPDIR \$DESTDIR/pktmp.$$" 0 1 2 15 - -# Allow fonts to be read and written (especially in case we make -# directories) by everyone. -umask 0 - -# Possible local customizations? -test -r @web2cdir@/MakeTeXPK.site && . @web2cdir@/MakeTeXPK.site - -# Remember where we were for the paths. We'd most like to replace `.', -# wherever it is in the path, with $SAVEPWD, but we don't have access to the -# compile-time path. So we are conservative, and put this at the end. -SAVEPWD=`pwd` - -# Go to the unique working directory. -test -d $TEMPDIR || mkdir $TEMPDIR -cd $TEMPDIR || exit 1 - -# grep for the font in $PSMAPFILE, if some ps-to-pk is claimed to be supported. -# We have to figure out the name of the base font -- $NAME is probably -# something like pplr, but it's rpplr or pplr0 or pplr8r that's in psfonts.map. -pattern="^r?$NAME"'(0|8r)?([ ]|$)' -test -n "$ps_to_pk" && egrep "$pattern" $PSMAPFILE >psline -if test -s psline; then - # This is a PostScript font. - MODE=$ps_to_pk - case $ps_to_pk in - ps2pk*) special_part=`cat psline | sed -e 's/^.*"//' -e 's/".*$//'` - # .167 SlantFont - slant=`echo $special_part \ - | awk '{ if ($2 == SlantFont) print "-S" $1 }'` - extend=`echo $special_part \ - | awk '{ if ($2 == ExtendFont) print "-E" $1 }'` - cmd="$ps_to_pk -v -X$DPI $slant $extend $NAME";; - *) cmd="$ps_to_pk $NAME $DPI";; - esac - - # Update DESTDIR for new mode, and check if we were spuriously called. - test -z "$6" && DESTDIR="$DESTROOT/$MODE" - if test -r $DESTDIR/$PKNAME; then # sigh, this is repeated below - echo "$0: $DESTDIR/$PKNAME already exists." >&2 - echo $DESTDIR/$PKNAME - exit 0 - fi - - DVIPSHEADERS="$DVIPSHEADERS:$SAVEPWD" - export DVIPSHEADERS - echo "$0: Running $cmd" >&2 - $cmd >&2 || { echo "$0: $ps_to_pk failed." >&2; exit 1; } - -else - # Try Metafont. - MFINPUTS="$MFINPUTS:$SAVEPWD" - export MFINPUTS - - # If an explicit mode is not supplied, try to guess. You can get a - # list of extant modes from ftp.cs.umb.edu:pub/tex/modes.mf. - if test -z "$MODE" || test "$MODE" = default; then - case "$BDPI" in - 85) MODE=sun;; - 300) MODE=cx;; - 600) MODE=ljfour;; - 1270) MODE=linolo;; - *) echo "$0: Can't guess mode for $BDPI dpi devices." >&2 - echo "$0: Use a config file, or update me." >&2 - exit 1 - esac - fi - - # If no destination directory specified, install font in directory - # named for the mode. - test -z "$6" && DESTDIR="$DESTROOT/$MODE" - - if test -r $DESTDIR/$PKNAME; then # sigh, this is repeated above - echo "$0: $DESTDIR/$PKNAME already exists." >&2 - echo $DESTDIR/$PKNAME - exit 0 - fi - - # Run Metafont. Always use plain Metafont, since reading cmbase.mf - # does not noticeably slow things down. Separate the filename from the - # rest, since we have to use ./$NAME if we generate something. - cmd="mf \mode:=$MODE; mag:=$MAG; scrollmode; input" - echo "$0: Running $cmd $NAME" >&2 - if $cmd $NAME &2; then - : # Success already. - - else - # These other cases should really be part of MakeTeXMF. - # First have to figure out the real magnification, which means - # extracting the point size from the name -- a trailing number. - rootname=`echo $NAME | sed 's/[0-9]*$//'` - pointsize=`echo $NAME | sed "s/^$rootname//"` - case "$pointsize" in - 11) realsize=10.95444;; # \magstephalf - 14) realsize=14.4;; # \magstep2 - 17) realsize=17.28;; # \magstep3 - 20) realsize=20.74;; # \magstep4 - 25) realsize=24.88;; # \magstep5 - *) realsize=$pointsize;; - esac - mfname=$NAME.mf - rm -f $mfname # We are in $TEMPDIR, so this is safe. - - if test -z "$pointsize"; then - # No point size, so it can't be a DC or Sauter font. Give up. - : - - elif echo $NAME | grep '^dc' >/dev/null; then - echo "$0: Trying DC font." >&2 - echo "if unknown dxbase: input dxbase fi;" >$mfname - echo "gensize:=$realsize;" >>$mfname - echo "generate $rootname." >>$mfname - echo "$0: Running $cmd ./$NAME" >&2 - $cmd ./$mfname &2 - - elif test -d $sauterdir; then - echo "$0: Trying interpolated/extrapolated (Sauter) font." >&2 - echo "design_size:=$realsize;" >>$mfname - echo "input b-$rootname;" >>$mfname - echo "$0: Running $cmd ./$NAME" >&2 - $cmd ./$mfname &2 - # Result should go in the sauterdir, not the cm dir. - test -z "$6" && $DESTDIR=$sauterdir/pk/$MODE - fi # alternative mf sources - fi # first mf failed - - # If we couldn't make the font, quit. - test -r $GFNAME || \ - { echo "$0: Metafont failed to make $GFNAME." >&2; exit 1; } - - # Success. Make the PK file. - gftopk ./$GFNAME $PKNAME || exit 1 -fi - -# If we get here, we've succeeded; move the final font to $DESTDIR. -test -d $DESTDIR \ - || mkdir $DESTDIR \ - || { echo "$0: Could not mkdir $DESTDIR." >&2; exit 1; } - -# Install the PK file carefully, since others may be working simultaneously. -mv $PKNAME $DESTDIR/pktmp.$$ \ - || { echo "$0: Could not mv $PKNAME $DESTDIR/pktmp.$$." >&2; exit 1; } - -cd $DESTDIR || exit 1 -mv pktmp.$$ $PKNAME - -# If this line (or an equivalent) is not present, dvipsk/xdvik/dviljk -# will think MakeTeXPK failed. Any other output to stdout will also lose. -echo $DESTDIR/$PKNAME diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/Makefile.in --- a/kpathsea/Makefile.in Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,635 +0,0 @@ -# Makefile for kpathsea --kb@cs.umb.edu. -version = 2.52 - -ac_include ../make/paths.make -ac_include ../make/makevars.make - -# Add -DNO_DEBUG to disable debugging, for unnoticeably better performance. -DEFS = $(XDEFS) - -ac_include ../make/common.make -ac_include ../make/library.make -ac_include ../make/programs.make -ac_include ../make/texi.make - -# Install these header files (except c-auto.h). -install_headers = *.h - -##ifdef HOSTNAME -##warn_more = -Wmissing-prototypes -Wwrite-strings -Wshadow -##MAKEINFO_FLAGS := $(MAKEINFO_FLAGS) --no-split -##malloc = onefile.o # gmalloc.o -##endif - -# Put tex-file.o first, because it's what depends on the paths, and may -# reduce frustration if the paths are wrong by doing it first. - -objects = tex-file.o absolute.o basename.o cnf.o concat.o concat3.o \ -concatn.o db.o debug.o dir.o elt-dirs.o expand.o extend-fname.o file-p.o \ -find-suffix.o fn.o fontmap.o getopt.o getopt1.o hash.o itoa.o kdefault.o \ -line.o magstep.o make-suffix.o path-elt.o pathsearch.o proginit.o \ -progname.o putenv.o readable.o rm-suffix.o str-list.o str-llist.o \ -tex-glyph.o tex-make.o tilde.o truncate.o uppercasify.o variable.o \ -version.o xcalloc.o xfopen.o xmalloc.o xopendir.o xputenv.o xrealloc.o \ -xstat.o xstrdup.o $(malloc) - -LIBS_TO_INSTALL = libkpathsea.a - -SH_LIBS_TO_INSTALL = libkpathsea.$(SHLEXT) - -ifeq ($(SHARED_LIBS), true) - BINDISTFILES = libkpathsea.$(SHLEXT) - BINDISTLIBS = $(addprefix kpathsea/, libkpathsea.$(SHLEXT)) -endif - -default all: stamp-picdir kpsewhich MakeTeXPK kpathsea.info stamp-shared - -stamp-picdir: - @if $(SHARED_LIBS); then \ - if [ -n "$(CPICFLAG)" ]; then \ - if [ -d pic ]; then \ - true ; \ - else \ - echo "mkdir pic" ; \ - mkdir pic ; \ - fi ; \ - else \ - true ; \ - fi ; \ - fi - touch stamp-picdir - -libkpathsea.a: $(objects) - rm -f $@ - $(AR) $(ARFLAGS) $@ $(objects) - $(RANLIB) $@ - -ifeq ($(SHARED_LIBS), true) - ifdef CPICFLAG - PICOBJ := $(addprefix pic/, $(objects)) - else - PICOBJ := $(objects) - endif -endif - -stamp-shared: $(PICOBJ) - if $(SHARED_LIBS); then \ - $(SH_LD) $(SH_LDFLAGS) -o libkpathsea.$(SHLEXT) $(PICOBJ) ; \ - fi - touch stamp-shared - -kpsewhich: libkpathsea.a kpsewhich.o - $(link_command) kpsewhich.o $(LOADLIBES) - -MakeTeXPK: MakeTeXPK.in $(top_srcdir)/../make/paths.make - sed -e 's,@datadir@,$(datadir),g' \ - -e 's,@psheaderdir@,$(psheaderdir),g' \ - -e 's,@fontnamedir@,$(fontnamedir),g' \ - -e 's,@fontdir@,$(fontdir),g' \ - -e 's,@dcfontdir@,$(dcfontdir),g' \ - -e 's,@sauterdir@,$(sauterdir),g' \ - -e 's,@web2cdir@,$(web2cdir),g' \ - <$(srcdir)/MakeTeXPK.in >$@.tmp - mv $@.tmp $@ - -chmod a+x $@ - -# Besides the straight variable substitutions, also change all -# occurrences of `$(texmf)/' to `$TEXMF', so simply setting that envvar -# changes the root of the whole tree. -texmf.cnf: texmf.cnf.in texmf.sed - sed -f texmf.sed -e 's%$(texmf)/%$$TEXMF/%g' $(srcdir)/texmf.cnf.in >$@ - -# The idea is to turn each var=value into s%@var@%value%g. Seems simpler -# to put the substitutions in a file than to play shell games. -texmf.sed: $(top_srcdir)/../make/makevars.make - echo $(makevars) \ - | tr ' ' '\012' \ - | sed -e 's/^/s%@/' -e 's/=/@%/' -e 's/$$/%/' -e 's/$$/g/' \ - >$@ - -# First null out comments and leading/trailing whitespace, then remove -# lines that define invalid C identifiers, then remove blank lines. Each -# line remaining looks like -# = -# (but = and surrounding spaces are optional, hence can't remove all spaces). -# Change this to #ifndef DEFAULT_name@#define DEFAULT_name "value"@#endif, -# then change the @'s to newlines (sed isn't good at multiline replacements), -# then change $TEXMF back to $(texmf) -# -# No backslash-newline escapes in the long sed replacement because that -# will turn into a space in the output. -# -# Without the $TEXMF substitution, if the cnf file was not found for -# some reason, none of the compile-time paths would be of any use, since -# TEXMF wouldn't be defined. Alternatively, we could have a way to -# specify compile-time default values for variables in general, but I -# think it's better to keep the last-resort paths as simple as possible. -# -# The definition of DEFAULT_TEXMF (and possibly other variables) -# that winds up in the final paths.h will not be used. -paths.h: texmf.cnf - echo "/* paths.h: Generated from texmf.cnf `date`. */" >$@ - sed -e 's/%.*//' -e 's/^[ ]*//' -e 's/[ ]*$$//' texmf.cnf \ - | grep '^[ ]*[A-Za-z_]*[ =]' \ - | sed '/^$$/d' \ - | sed 's/^\([^ =]*\)[ ]*=*[ ]*\(.*\)/#ifndef DEFAULT_\1@#define DEFAULT_\1 "\2"@#endif/' \ - | tr @ '\012' \ - | sed 's@\$$TEXMF@$(texmf)@g' \ - >>$@ - -# A few object files need extra definitions. The dependencies are below. -tex-file.o: - $(CC) $(CPPFLAGS) $(CFLAGS) \ - -DDEFAULT_FONT_SIZES='"$(default_texsizes)"' -c $(srcdir)/tex-file.c - -pic/tex-file.o: - $(CC) $(CPPFLAGS) $(CPICFLAG) $(CFLAGS) \ - -DDEFAULT_FONT_SIZES='"$(default_texsizes)"'\ - -c $(srcdir)/tex-file.c -o $@ - -# Don't optimize. - -XCC = $(patsubst -O%, , $(CC)) -XCFLAGS = $(patsubst -O%, , $(ALL_CFLAGS)) - -hash.o: - $(XCC) $(CPPFLAGS) $(XCFLAGS) -c $(srcdir)/hash.c - -pic/hash.o: - $(XCC) $(CPPFLAGS) $(CPICFLAG) $(XCFLAGS) -c $(srcdir)/hash.c -o $@ - -# Need the -DHAVE_CONFIG_H. -gmalloc.o: - $(CC) $(CPPFLAGS) @DEFS@ $(CFLAGS) -c $(srcdir)/gmalloc.c - -pic/gmalloc.o: - $(CC) $(CPPFLAGS) $(CPICFLAG) @DEFS@ $(CFLAGS) \ - -c $(srcdir)/gmalloc.c -o pic/gmalloc.o - -check: - -install: - for f in $(LIBS_TO_INSTALL); do \ - if [ -f $$f ]; then $(INSTALL_DATA) $$f $(libdir)/$$f; fi; \ - done - for f in $(SH_LIBS_TO_INSTALL); do \ - if [ -f $$f ]; then $(INSTALL_PROGRAM) $$f $(libdir)/$$f; fi; \ - done - -install-strip: - $(MAKE) INSTALL_PROGRAM="$(INSTALL_PROGRAM) -s" install - -uninstall: - -# Installation of kpathsea itself is complicated by the fact that we -# want to install texmf.cnf, kpathsea.info, and MakeTeXPK by default, -# but not the headers or the .a file itself. So we have a separate -# target `install-library' to install the latter stuff. -#install: install-exec install-data -#uninstall: uninstall-exec uninstall-data -# -#install-exec: kpsewhich MakeTeXPK -# $(SHELL) $(top_srcdir)/../mkdirchain $(bindir) $(scriptdir) -# if grep 'original MakeTeXPK --' $(scriptdir)/MakeTeXPK >/dev/null 2>&1\ -# || test ! -r $(scriptdir)/MakeTeXPK; then \ -# $(INSTALL_PROGRAM) MakeTeXPK $(scriptdir)/MakeTeXPK; \ -# else true; fi -# $(INSTALL_PROGRAM) kpsewhich $(bindir)/kpsewhich -#uninstall-exec: -# rm -f $(bindir)/kpsewhich -# -#install-data: texmf.cnf kpathsea.info -# $(SHELL) $(top_srcdir)/../mkdirchain $(texmf) $(infodir) $(web2cdir) -# if grep 'original texmf.cnf --' $(web2cdir)/texmf.cnf >/dev/null 2>&1 \ -# || test ! -r $(web2cdir)/texmf.cnf; then \ -# $(INSTALL_DATA) texmf.cnf $(web2cdir)/texmf.cnf; \ -# else true; fi -# $(INSTALL_DATA) $(srcdir)/kpathsea.info $(infodir)/kpathsea.info -#uninstall-data: -# rm -f $(infodir)/kpathsea.info* -# -#install-library: libkpathsea.a -# $(SHELL) $(top_srcdir)/../mkdirchain $(includedir)/kpathsea $(libdir) -# $(INSTALL_DATA) libkpathsea.a $(libdir)/libkpathsea.a -# for f in $(install_headers); do \ -# $(INSTALL_DATA) $$f $(includedir)/kpathsea/$$f; done -# rm -f $(includedir)/kpathsea/c-auto.h -#uninstall-library: -# rm -f $(libdir)/libkpathsea.a -# for f in $(install_headers); do rm -f $(includedir)/$$f; done - -# distdir is used by other distributions; they define $(distdir). -distdir: INSTALL TAGS kpathsea.info kpathsea.dvi - rm -rf $(distdir) - mkdir -p $(distdir) - ln $(ln_files) $(distdir) - cp -p $(HOME)/gnu/gnuorg/*.texi $(distdir) - touch *.info* - ln *.info* *.texi kpathsea.aux kpathsea.cps $(distdir) - ln CONFIGURE HIER common.ac $(distdir) - cd $(distdir); rm -f paths.h - cd $(distdir); add-version $(version) version.c - -bin-dist: - if [ -n "$(BINDISTFILES)" ]; then \ - ln $(BINDISTFILES) ../`cat ../.fname`/kpathsea ; \ - fi - if [ -n "$(BINDISTLIBS)" ]; then \ - echo $(BINDISTLIBS) >> ../`cat ../.fname`/LIBRARIES ; \ - fi -.PHONY: bin-dist - -ac_include ../make/config.make - -info: kpathsea.info -dvi: kpathsea.dvi -INSTALL: kpathsea.texi install.texi - $(MAKEINFO) $(MAKEINFO_FLAGS) --no-headers $< -o - \ - | sed -n -e '/^Installation/,/wrong fonts/'p >$@ - add-info-toc $@ - -ac_include ../make/misc.make - -mostlyclean:: - rm -f kpsewhich -distclean:: - rm -f paths.h texmf.cnf texmf.sed so_locations - rm -f libkpathsea.a libkpathsea.$(SHLEXT) - -ac_include ../make/rdepend.make -absolute.o: absolute.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/absolute.h $(kpathsea_srcdir)/c-pathch.h -basename.o: basename.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h -cnf.o: cnf.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-fopen.h $(kpathsea_srcdir)/c-ctype.h \ - $(kpathsea_srcdir)/cnf.h $(kpathsea_srcdir)/db.h $(kpathsea_srcdir)/str-list.h \ - $(kpathsea_srcdir)/hash.h $(kpathsea_srcdir)/line.h paths.h \ - $(kpathsea_srcdir)/pathsearch.h $(kpathsea_srcdir)/str-llist.h $(kpathsea_srcdir)/tex-file.h \ - $(kpathsea_srcdir)/variable.h -concat.o: concat.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -concat3.o: concat3.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -concatn.o: concatn.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/concatn.h $(kpathsea_srcdir)/c-vararg.h -db.o: db.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-fopen.h $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/db.h \ - $(kpathsea_srcdir)/str-list.h $(kpathsea_srcdir)/hash.h $(kpathsea_srcdir)/line.h \ - $(kpathsea_srcdir)/readable.h $(kpathsea_srcdir)/variable.h -debug.o: debug.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -dir.o: dir.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-dir.h \ - $(kpathsea_srcdir)/c-stat.h \ - $(kpathsea_srcdir)/hash.h -elt-dirs.o: elt-dirs.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/expand.h $(kpathsea_srcdir)/fn.h \ - $(kpathsea_srcdir)/pathsearch.h $(kpathsea_srcdir)/str-llist.h $(kpathsea_srcdir)/xopendir.h \ - $(kpathsea_srcdir)/c-dir.h -expand.o: expand.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/expand.h $(kpathsea_srcdir)/pathsearch.h \ - $(kpathsea_srcdir)/str-llist.h $(kpathsea_srcdir)/tilde.h $(kpathsea_srcdir)/variable.h -extend-fname.o: extend-fname.c $(kpathsea_srcdir)/config.h ./c-auto.h \ - $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -file-p.o: file-p.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/xstat.h $(kpathsea_srcdir)/c-stat.h -find-suffix.o: find-suffix.c $(kpathsea_srcdir)/config.h ./c-auto.h \ - $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h -fn.o: fn.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h $(kpathsea_srcdir)/fn.h -fontmap.o: fontmap.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-fopen.h $(kpathsea_srcdir)/fontmap.h $(kpathsea_srcdir)/hash.h \ - $(kpathsea_srcdir)/line.h $(kpathsea_srcdir)/pathsearch.h $(kpathsea_srcdir)/str-llist.h \ - $(kpathsea_srcdir)/str-list.h -getopt.o: getopt.c \ - getopt.h -getopt1.o: getopt1.c getopt.h -hash.o: hash.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/hash.h $(kpathsea_srcdir)/str-list.h -itoa.o: itoa.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -kdefault.o: kdefault.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/default.h -kpsewhich.o: kpsewhich.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/getopt.h $(kpathsea_srcdir)/line.h $(kpathsea_srcdir)/proginit.h \ - $(kpathsea_srcdir)/progname.h $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/tex-glyph.h \ - $(kpathsea_srcdir)/variable.h -kpsexpand.o: kpsexpand.c \ - tex-file.h $(kpathsea_srcdir)/c-proto.h $(kpathsea_srcdir)/types.h -line.o: line.c -magstep.o: magstep.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/magstep.h -make-suffix.o: make-suffix.c $(kpathsea_srcdir)/config.h ./c-auto.h \ - $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -path-elt.o: path-elt.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/pathsearch.h $(kpathsea_srcdir)/str-llist.h -pathsearch.o: pathsearch.c $(kpathsea_srcdir)/config.h ./c-auto.h \ - $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-fopen.h $(kpathsea_srcdir)/absolute.h $(kpathsea_srcdir)/expand.h \ - $(kpathsea_srcdir)/db.h $(kpathsea_srcdir)/str-list.h $(kpathsea_srcdir)/pathsearch.h \ - $(kpathsea_srcdir)/str-llist.h $(kpathsea_srcdir)/readable.h $(kpathsea_srcdir)/variable.h -proginit.o: proginit.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/proginit.h $(kpathsea_srcdir)/progname.h \ - $(kpathsea_srcdir)/tex-file.h -progname.o: progname.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/progname.h -putenv.o: putenv.c ./c-auto.h -readable.o: readable.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-stat.h \ - $(kpathsea_srcdir)/readable.h $(kpathsea_srcdir)/truncate.h -rm-suffix.o: rm-suffix.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -str-list.o: str-list.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/str-list.h -str-llist.o: str-llist.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/str-llist.h -tex-file.o: tex-file.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-vararg.h $(kpathsea_srcdir)/cnf.h $(kpathsea_srcdir)/default.h \ - $(kpathsea_srcdir)/expand.h paths.h $(kpathsea_srcdir)/pathsearch.h \ - $(kpathsea_srcdir)/str-llist.h $(kpathsea_srcdir)/tex-file.h -tex-glyph.o: tex-glyph.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/absolute.h $(kpathsea_srcdir)/expand.h $(kpathsea_srcdir)/fontmap.h \ - $(kpathsea_srcdir)/hash.h $(kpathsea_srcdir)/pathsearch.h $(kpathsea_srcdir)/str-llist.h \ - $(kpathsea_srcdir)/tex-glyph.h $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/tex-make.h \ - $(kpathsea_srcdir)/variable.h -tex-make.o: tex-make.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-fopen.h $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/concatn.h \ - $(kpathsea_srcdir)/c-vararg.h $(kpathsea_srcdir)/db.h $(kpathsea_srcdir)/str-list.h \ - $(kpathsea_srcdir)/fn.h $(kpathsea_srcdir)/magstep.h $(kpathsea_srcdir)/readable.h \ - $(kpathsea_srcdir)/tex-make.h $(kpathsea_srcdir)/tex-file.h $(kpathsea_srcdir)/variable.h -tilde.o: tilde.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/tilde.h -truncate.o: truncate.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-namemx.h $(kpathsea_srcdir)/c-pathch.h $(kpathsea_srcdir)/c-pathmx.h \ - $(kpathsea_srcdir)/truncate.h -uppercasify.o: uppercasify.c $(kpathsea_srcdir)/config.h ./c-auto.h \ - $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-ctype.h -variable.o: variable.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/c-ctype.h $(kpathsea_srcdir)/cnf.h \ - $(kpathsea_srcdir)/fn.h $(kpathsea_srcdir)/variable.h -version.o: version.c -xcalloc.o: xcalloc.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -xfopen.o: xfopen.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -xmalloc.o: xmalloc.c -xopendir.o: xopendir.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/xopendir.h $(kpathsea_srcdir)/c-dir.h -xputenv.o: xputenv.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h -xrealloc.o: xrealloc.c -xstat.o: xstat.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h \ - $(kpathsea_srcdir)/xstat.h $(kpathsea_srcdir)/c-stat.h -xstrdup.o: xstrdup.c $(kpathsea_srcdir)/config.h ./c-auto.h $(kpathsea_srcdir)/c-std.h \ - $(kpathsea_srcdir)/c-unistd.h $(kpathsea_srcdir)/systypes.h \ - $(kpathsea_srcdir)/c-memstr.h \ - $(kpathsea_srcdir)/c-errno.h $(kpathsea_srcdir)/c-minmax.h \ - $(kpathsea_srcdir)/c-limits.h \ - $(kpathsea_srcdir)/c-proto.h \ - $(kpathsea_srcdir)/lib.h $(kpathsea_srcdir)/types.h $(kpathsea_srcdir)/debug.h diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/NEWS --- a/kpathsea/NEWS Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -This file records noteworthy changes. - -2.6 (9 January 1995) -* MakeTeXPK installed from kpathsea, instead of each driver. -* MakeTeXPK.site looked for in texmf/web2c, instead of texmf/dvips. -* texmf.cnf installed and looked for in texmf/web2c, instead of texmf. -* If a mode is not explicitly specified, search all subdirectories (this - was actually in a previous release). -* install-sh only looked for in the top-level directory. -* kpsewhich replaces and generalizes kpsexpand. - -2.5 (15 December 1994) -* Go back to calling db_insert after a successful MakeTeXPK, and check - for lack of an ls-R. -* Handle case of magstep -.5 for MakeTeXPK properly. - -2.4 (28 October 1994) -* Avoid calling db_insert, which caused a segmentation fault. - -2.3 (26 October 1994) -* Extra :'s in an envvar value, referring to the texmf.cnf value, work. -* Names like dpi600/cmr10.pk can be found in ls-R. -* KPATHSEA_DEBUG environment variable checked. -* Directories like pk/ljfour directly under $TEXMF/fonts are found. -* New standalone program, kpsexpand, optionally compiled and installed, - to do variable expansion (not path searching). -* Debugging output written to stderr instead of stdout. -* pxlNNN support removed; I never intended to support `pxl1500', and - pxl300 is never used. - -2.2 (14 October 1994) -* MakeTeXPK invoked for the any_glyph type; this is for xdvik. -* MakeTeXPK sources $(psheaderdir)/MakeTeXPK.site if it exists. -* pxlNNN/cmr10.pk searched for (as well as dpiNNN/cmr10.pk and cmr10.NNNpk) - -2.1 (12 September 1994) -* Manual goes through TeX, and .cps/.aux files are in the distribution. -* INSTALL* variables set at the top level. -* Dependency on GNU tr making paths.h and texmf.sed (->texmf.cnf) removed. -* texmf.cnf installed if it didn't previously exist. - -2.0 (8 September 1994) -* Runtime configuration file support; see the manual. -* Both dpi600/cmr10.pk and cmr10.600pk are searched for. -* ls-R matches $TEXMF//latex2e vs. $TEXMF//latex209. -* $TEXMFLOG, if set, specifies a filename for logging successful searches. -* All directory entries beginning with `.' are ignored, not just `.' and `..'. -* Default path for PK and GF fonts includes the mode name. -* ls-R is in $TEXMFROOT instead of hardwired at compile time. -* More debugging flags, and they can be set with client program options. -* If MakeTeX{PK,TFM} fail, or aren't invoked, a file missfont.log is - written with the requisite commands, as in dvips. -* More 328/329/330 fixes, maybe for the last time. -* The override font paths (XDVIFONTS etc.) apply only to glyph (PK/GF) - searches, not TFM or VF. -* -g is not the default when linking, to avoid unnecessarily large binaries - (due to static libraries) under Linux. -* configure checks for a smart putenv. -* Stat results are cached to speed up disk searches. - -1.8 (2 April 1994) -* New target install-info, so the documentation can be installed without - the headers. -* Existing but unreadable files are complained about, instead of just ignored. -* A leading %% in a path element forbids searching the disk for that - element; only a db will be searched (if it exists). -* The db is only used if it might be relevant to a given path element, - not searched first regardless. - -1.7 (1 March 1994) -* Searches can use an externally-built ls-R ``database'', for speed. -* `VPATH = .' lines removed from generated Makefile, for broken Sun make. -* A path foo//tfm finds foo/tfm as well as foo/*/tfm. - -1.6 (3 February 1994) -* Memory fault in copying long paths fixed. -* More variables passed down from the top-level Makefile. -* Mention SMART_PUTENV in the INSTALL file, and fix bug in xputenv.c - when one envvar is a proper prefix of another. -* More attempts at eliminating magstephalf annoyances. -* Directory name substitutions are done globally when creating paths.h. -* Various changes for DOS. - -1.5 (24 January 1994) -* Default paths changed. -* Defining GCC_WCHAR lets GCC define wchar_t. -* EXIT_FAILURE and EXIT_SUCCESS defined in all cases (if they're not already). -* str[r]chr never redefined (I hope). - -1.4 (3 November 1993) -* Check closest fallback font size. -* All default paths (including dvips') in paths.h.in, not the Makefile. -* Rearrange directory lists so that dirs in which a file is found - migrate to the top. -* Update for Autoconf 1.7. - -1.3 (6 October 1993) -* Fix free of non-malloced memory bug. -* Fix uninitialized gf path bug. -* mkdirchain invoked as an absolute filename. - -1.2 (27 September 1993) -* Running MakeTeXPK is tried before the fallback resolutions. -* The final bitmap name uses a variable spec, so DOS & OS/2 can get - dpi300/cmr10.pk. -* Document TeX-specific features. -* Dpi passed to MakeTeXPK via the envvar KPATHSEA_DPI instead of MAKETEX_DPI. - -1.1 (26 August 1993) -* Installation fixes. - -1.0 (5 August 1993) -* Routines to look up TeX font files, default path specifications, etc. -* Sort-of pattern matching: /foo//bar matches subdirectories - /foo/a/bar, /foo/b/bar, /foo/a1/a2/bar, etc. -* $var and ${var} expansion. -* Support for MakeTeX... scripts. -* Support for fallback resolutions and font. -* Lazy evaluation of path elements. -* Some runtime debugging support. - -0.2 (12 May 1993) - -First general release as a standalone library. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/README --- a/kpathsea/README Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -This directory contains the Kpathsea[rch] library, which implements -generic path searching, configuration, and TeX-specific file searching. - -See `Makefile.in' for the version number. -See `NEWS' for changes by release. -See `INSTALL' for installation instructions. -See `CONFIGURE' for details on running Autoconf-generated configure scripts. -See `PROJECTS' for future improvements. - -Please report bugs to tex-k@cs.umb.edu. -(Email tex-k-request@cs.umb.edu with a line containing - subscribe you@preferred.email.address -in the body of the message to join this mailing list.) - -Suggestions for improvements in either the library or the documentation, -no matter how small, are welcome. - -Installing this package will create the library and header files in -subdirectories of /usr/local (by default). Typically this library is not -installed, however; only the programs that use it are. - -This is free software. See the files COPYING* for copying permissions. -The top-level headers are `pathsearch.h' for the generic path searching -support, and `tex-{file,glyph}.h' for the TeX-specific support. - -kb@cs.umb.edu -Member of the League for Programming Freedom -- write lpf@uunet.uu.net. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/README.CONFIGURE --- a/kpathsea/README.CONFIGURE Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ -Contents: - - Basic Installation - Compilers and Options - Using a Different Build Directory - Installation Names - Optional Features - Specifying the System Type - Sharing Defaults - Operation Controls - - -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 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'. - -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 - -Using a Different Build Directory -================================= - - You can compile the package in a different directory from the one -containing the source code. Doing so allows you to compile it on more -than one kind of computer at the same time. 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 `..'. - -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. - - 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' - 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. - diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/absolute.c --- a/kpathsea/absolute.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* absolute.c: Test if a filename is absolute or explicitly relative. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include - -#ifdef DOS -#include /* For ISALPHA */ -#endif /* DOS */ - - -/* Sorry this is such a system-dependent mess, but I can't see any way - to usefully generalize. */ - -boolean -kpse_absolute_p P2C(const_string, filename, boolean, relative_ok) -{ -#ifdef VMS -#include - return strcspn (filename, "]>:") != strlen (filename); -#else /* not VMS */ - boolean absolute = IS_DIR_SEP (*filename) -#ifdef DOS - || ISALPHA (*filename) && filename[1] == ':' -#endif /* DOS */ - ; - boolean explicit_relative - = relative_ok && (*filename == '.' - && (IS_DIR_SEP (filename[1]) - || (filename[1] == '.' && IS_DIR_SEP (filename[2])))); - - return absolute || explicit_relative; -#endif /* not VMS */ -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/absolute.h --- a/kpathsea/absolute.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* absolute.h: Declare absolute filename predicate. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_ABSOLUTE_H -#define KPATHSEA_ABSOLUTE_H - -#include -#include - - -/* True if FILENAME is absolute (/foo) or, if RELATIVE_OK is true, - explicitly relative (./foo, ../foo), else false (foo). */ - -extern boolean kpse_absolute_p P2H(const_string filename, boolean relative_ok); - -#endif /* not KPATHSEA_ABSOLUTE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/acconfig.h --- a/kpathsea/acconfig.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -/* acconfig.h -- used by autoheader when generating c-auto.h.in. */ - -/* Define if your putenv doesn't waste space when the same environment - variable is assigned more than once, with different (malloced) - values. This is true only on NetBSD/FreeBSD, as far as I know. See - xputenv.c. */ -#undef SMART_PUTENV - -/* Define if you are using GNU libc or otherwise have global variables - `program_invocation_name' and `program_invocation_short_name'. */ -#undef HAVE_PROGRAM_INVOCATION_NAME - -/* Define if you get clashes concerning wchar_t, between X's include - files and system includes. */ -#undef FOIL_X_WCHAR_T - -/* Define if you have SIGIO, F_SETOWN, and FASYNC. */ -#undef HAVE_SIGIO diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/aclocal.m4 --- a/kpathsea/aclocal.m4 Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,349 +0,0 @@ -dnl Modifications for the latest version of Autoconf for kpathsea. -dnl These changes have all been sent back to the Autoconf maintainer. - -dnl This is a subroutine of AC_OUTPUT. It is called inside an unquoted -dnl here document whose contents are going into config.status. -dnl AC_OUTPUT_FILES(FILE...) -dnl I've added ac_include support --karl@cs.umb.edu. -undefine([AC_OUTPUT_FILES]) -define(AC_OUTPUT_FILES, -[# Protect against being on the right side of a sed subst in config.status. -changequote(, )dnl -sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF -changequote([, ])dnl -dnl These here document variables are unquoted when configure runs -dnl but quoted when config.status runs, so variables are expanded once. -$ac_vpsub -dnl Shell code in configure.in might set extrasub. -$extrasub -dnl Insert the sed substitutions of variables. -undivert(AC_DIVERSION_SED) -CEOF -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then -dnl Specifying an input file breaks the trap to clean up on interrupt, -dnl but that's not a huge problem. - # Support "outfile[: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 relative srcdir, etc. for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. -changequote(, )dnl - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` -changequote([, ])dnl - 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="/$ac_dir" - # A "../" for each directory in $ac_dir_suffix. -changequote(, )dnl - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` -changequote([, ])dnl - 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 - -ifdef([AC_PROVIDE_AC_PROG_INSTALL], -[ case "$ac_given_INSTALL" in -changequote(, )dnl - [/$]*) INSTALL="$ac_given_INSTALL" ;; -changequote([, ])dnl - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac -])dnl - 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 - # Replace lines of the form ac_include foo with the contents of foo: - # first, from the ac_include lines construct a list of sed - # commands to remove them, and include the files; then run sed. - # Have to use sed because old (Ultrix, SunOS) awk does not support - # getline or system. (Anyway, configure scripts aren't supposed to use awk.) - # Use \@...@ form of sed address because the filename may contain /. - # Can't use only one -e and commands {dr foo} because foo has to be last. - # Use @e initially instead of -e because GNU echo has a -e option. - # USe `X' to mean a bunch of backslashes; this is for FreeBSD. - file_substs=`sed -n \ -changequote(,)dnl -"/^ac_include/s%ac_include[ ]*\(.*\)%@e 'X@^&@r \1' -e 'X@^&@d'%p" \ -changequote([,])dnl - $ac_given_srcdir/${ac_file}.in` - if test -n "$file_substs"; then - # Change @e back to -e and X@^ to \@^. - file_subst_cmd="sed `echo $file_substs \ - | sed -e 's/@e/-e/g' -e 's/X@^/\\\\\@^/g'`" - else - # If no substitutions and hence no sed commands, don't choke. - file_subst_cmd=cat - fi - # cd into the srcdir because the files being included more or less - # must be part of the distribution. I can't find any way to do - # variable substitution in the sed commands (so the user could have, - # e.g., $top_srcdir in their ac_include line). - (cd $ac_given_srcdir && eval $file_subst_cmd ${ac_file}.in) \ - | sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -ifdef([AC_PROVIDE_AC_PROG_INSTALL], [s%@INSTALL@%$INSTALL%g -])dnl -" -f conftest.subs > $ac_file -fi; done -rm -f conftest.subs -]) - - -dnl -dnl Only change from Autoconf 2.1 is to check IceConnectionNumber, not -dnl ...Numbers. -dnl -dnl Find additional X libraries, magic flags, etc. -undefine([AC_PATH_XTRA]) -AC_DEFUN(AC_PATH_XTRA, -[AC_REQUIRE([AC_ISC_POSIX])dnl -AC_REQUIRE([AC_PATH_X])dnl -if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. - X_CFLAGS="$X_CFLAGS -DX_DISPLAY_MISSING" -else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - - # It would be nice to have a more robust check for the -R ld option than - # just checking for Solaris. - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - if test "`(uname) 2>/dev/null`" = SunOS && - uname -r | grep '^5' >/dev/null; then - X_LIBS="$X_LIBS -R$x_libraries" - fi - fi - - # Check for libraries that X11R6 Xt/Xaw programs need. - - ac_save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. - AC_CHECK_LIB(ICE, IceConnectionNumber, - [X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"]) - LDFLAGS="$ac_save_LDFLAGS" - - # Check for system-dependent libraries X programs must link with. - - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And karl@cs.umb.edu says - # the Alpha needs dnet_stub (dnet does not exist). - AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"]) - if test $ac_cv_lib_dnet = no; then - AC_CHECK_LIB(dnet_stub, dnet_ntoa, - [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) - fi - - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # Not sure which flavor of 386 UNIX this is, but it seems harmless to - # check for it. - AC_CHECK_LIB(nsl, t_accept, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"]) - - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT 2.0. - # But -lsocket is broken on IRIX, according to simon@lia.di.epfl.ch. - if test "`(uname) 2>/dev/null`" != IRIX; then - AC_CHECK_LIB(socket, socket, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lsocket"]) - fi - fi -fi -AC_SUBST(X_CFLAGS)dnl -AC_SUBST(X_PRE_LIBS)dnl -AC_SUBST(X_LIBS)dnl -AC_SUBST(X_EXTRA_LIBS)dnl -]) - - -dnl -dnl Definition was buggy in Autoconf 2.1; parameters were incorrectly -dnl passed to AC_MSG_ERROR and AC_TRY_LINK. -dnl -dnl Check if lex declares yytext as a char * by default, not a char[]. -undefine([AC_DECL_YYTEXT]) -AC_DEFUN(AC_DECL_YYTEXT, -[AC_REQUIRE_CPP()dnl -AC_REQUIRE([AC_PROG_LEX])dnl -AC_CACHE_VAL(ac_cv_prog_lex_output_root, -[# The minimal lex program is just a single line: %%. But some broken lexes -# (Solaris, I think it was) want two %% lines, so accommodate them. -echo '%% -%%' | $LEX -if test -f lex.yy.c; then - ac_cv_prog_lex_output_root=lex.yy -elif test -f lexyy.c; then - ac_cv_prog_lex_output_root=lexyy -else - AC_MSG_ERROR([cannot find output from $LEX, giving up]) -fi])dnl -LEX_OUTPUT_ROOT=$ac_cv_prog_lex_output_root -AC_SUBST(LEX_OUTPUT_ROOT)dnl -AC_MSG_CHECKING(for yytext declaration) -AC_CACHE_VAL(ac_cv_prog_lex_yytext_pointer, -[# POSIX says lex can declare yytext either as a pointer or an array; the -# default is implementation-dependent. Figure out which it is, since -# not all implementations provide the %pointer and %array declarations. -ac_cv_prog_lex_yytext_pointer=no -echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c -ac_save_LIBS="$LIBS" -LIBS="$LIBS $LEXLIB" -AC_TRY_LINK(`cat $LEX_OUTPUT_ROOT.c`,, ac_cv_prog_lex_yytext_pointer=yes) -LIBS="$ac_save_LIBS" -rm -f "${LEX_OUTPUT_ROOT}.c"])dnl -AC_MSG_RESULT($ac_cv_prog_lex_yytext_pointer) -if test $ac_cv_prog_lex_yytext_pointer = yes; then - AC_DEFINE(YYTEXT_POINTER) -fi -]) - -dnl -dnl install-sh needs .. magic. -dnl -dnl AC_OUTPUT_SUBDIRS(DIRECTORY...) -undefine([AC_OUTPUT_SUBDIRS]) -define(AC_OUTPUT_SUBDIRS, -[ -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 $1; 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 - AC_MSG_ERROR(can not create `pwd`/$ac_config_dir) - fi - ;; - esac - - ac_popdir=`pwd` - cd $ac_config_dir - - 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=../$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 - AC_MSG_WARN(no configuration information is in $ac_config_dir) - 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. -changequote(, )dnl - # A "../" for each directory in /$ac_config_dir. - ac_dots=`echo /$ac_config_dir|sed 's%/[^/]*%../%g'` -changequote([, ])dnl - case "$cache_file" in - /*) ac_sub_cache_file=$cache_file ;; - *) # Relative path. - ac_sub_cache_file="$ac_dots$cache_file" ;; - esac - -ifdef([AC_PROVIDE_AC_PROG_INSTALL], - [ case "$ac_given_INSTALL" in -changequote(, )dnl - [/$]*) INSTALL="$ac_given_INSTALL" ;; -changequote([, ])dnl - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac -])dnl - - 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 - AC_MSG_ERROR($ac_sub_configure failed for $ac_config_dir) - fi - fi - - cd $ac_popdir - done -fi -]) diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/basename.c --- a/kpathsea/basename.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* basename.c: return the last element in a path. - -Copyright (C) 1992, 94, 95 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Have to include this first to get c-auto.h. */ -#include - -#ifndef HAVE_BASENAME /* rest of file */ - -#include - -/* Return NAME with any leading path stripped off. This returns a - pointer into NAME. For example, `basename ("/foo/bar.baz")' - returns "bar.baz". */ - -const_string -basename P1C(const_string, name) -{ - const_string base = NULL; - unsigned len = strlen (name); - - for (len = strlen (name); len > 0; len--) - { - if (IS_DIR_SEP (name[len - 1])) - { - base = name + len; - break; - } - } - - if (!base) - base = name; - - return base; -} - -#endif /* not HAVE_BASENAME */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-auto.h.in --- a/kpathsea/c-auto.h.in Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* c-auto.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define if the closedir function returns void instead of int. */ -#undef CLOSEDIR_VOID - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define if you need to in order for stat and other things to work. */ -#undef _POSIX_SOURCE - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if your putenv doesn't waste space when the same environment - variable is assigned more than once, with different (malloced) - values. This is true only on NetBSD/FreeBSD, as far as I know. See - xputenv.c. */ -#undef SMART_PUTENV - -/* Define if you are using GNU libc or otherwise have global variables - `program_invocation_name' and `program_invocation_short_name'. */ -#undef HAVE_PROGRAM_INVOCATION_NAME - -/* Define if you have the basename function. */ -#undef HAVE_BASENAME - -/* Define if you have the bcopy function. */ -#undef HAVE_BCOPY - -/* Define if you have the memmove function. */ -#undef HAVE_MEMMOVE - -/* Define if you have the putenv function. */ -#undef HAVE_PUTENV - -/* Define if you have the header file. */ -#undef HAVE_ASSERT_H - -/* Define if you have the header file. */ -#undef HAVE_DIRENT_H - -/* Define if you have the header file. */ -#undef HAVE_FLOAT_H - -/* Define if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define if you have the header file. */ -#undef HAVE_NDIR_H - -/* Define if you have the header file. */ -#undef HAVE_PWD_H - -/* Define if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define if you have the header file. */ -#undef HAVE_STRING_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_DIR_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_NDIR_H - -/* Define if you have the header file. */ -#undef HAVE_UNISTD_H diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-ctype.h --- a/kpathsea/c-ctype.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* c-ctype.h: ASCII-safe versions of the macros. - -Copyright (C) 1992 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_CTYPE_H -#define KPATHSEA_C_CTYPE_H - -#include - -/* Be sure we have `isascii'. */ -#ifndef isascii -#define isascii(c) 1 -#endif - -#define ISALNUM(c) (isascii (c) && isalnum(c)) -#define ISALPHA(c) (isascii (c) && isalpha(c)) -#define ISASCII isascii -#define ISCNTRL(c) (isascii (c) && iscntrl(c)) -#define ISDIGIT(c) (isascii (c) && isdigit (c)) -#define ISGRAPH(c) (isascii (c) && isgraph(c)) -#define ISLOWER(c) (isascii (c) && islower(c)) -#define ISPRINT(c) (isascii (c) && isprint(c)) -#define ISPUNCT(c) (isascii (c) && ispunct(c)) -#define ISSPACE(c) (isascii (c) && isspace(c)) -#define ISUPPER(c) (isascii (c) && isupper(c)) -#define ISXDIGIT(c) (isascii (c) && isxdigit(c)) -#define TOASCII toascii -#define TOLOWER(c) (ISUPPER (c) ? tolower (c) : (c)) -#define TOUPPER(c) (ISLOWER (c) ? toupper (c) : (c)) - -/* This isn't part of the usual , but it's useful sometimes. */ -#ifndef isblank -#define isblank(c) ((c) == ' ' || (c) == '\t') -#endif - - -/* Here's why this mess is necessary: - -From: meyering@cs.utexas.edu (Jim Meyering) -Date: Wed, 25 Nov 1992 09:52:33 -0600 -Subject: ss-921123: using isascii with macros - - Yesterday some cursory regression testing found that GNU od - (in an upcoming release of textutils) generated incorrect output - when run on an SGI indigo because isprint ('\377') returned true. - Of course, '\377' is not a printing character; the problem lay - in using isprint without first making sure its integer argument - corresponded to an ascii code. - - MORAL: always guard uses of ctype macros with isascii if it's available. - An obvious alternative is to avoid and define and use your - own versions of the ctype macros. - - A pretty clean approach to using and isascii was - suggested by David MacKenzie: - - #ifndef isascii - #define isascii(c) 1 - #endif - - #define ISDIGIT(c) (isascii (c) && isdigit (c)) - #define ISPRINT(c) (isascii (c) && isprint (c)) - ... - - then, use ISDIGIT, etc. instead of isdigit, etc. */ - -#endif /* not KPATHSEA_C_CTYPE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-dir.h --- a/kpathsea/c-dir.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* c-dir.h: directory headers. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_DIR_H -#define KPATHSEA_C_DIR_H - -/* Use struct dirent instead of struct direct. */ -#ifdef HAVE_DIRENT_H -#include -#define NAMLEN(dirent) strlen ((dirent)->d_name) -#else /* not DIRENT */ -#define dirent direct -#define NAMLEN(dirent) ((dirent)->d_namlen) - -#ifdef HAVE_SYS_NDIR_H -#include -#endif - -#ifdef HAVE_SYS_DIR_H -#include -#endif - -#ifdef HAVE_NDIR_H -#include -#endif - -#endif /* not DIRENT */ - -#endif /* not KPATHSEA_C_DIR_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-errno.h --- a/kpathsea/c-errno.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* c-errno.h: and the errno variable. - -Copyright (C) 1992 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_ERRNO_H -#define KPATHSEA_C_ERRNO_H - -#include -#ifndef errno -extern int errno; -#endif - -#endif /* not KPATHSEA_C_ERRNO_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-fopen.h --- a/kpathsea/c-fopen.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* c-fopen.h: how to open files with fopen. - -Copyright (C) 1992, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef C_FOPEN_H -#define C_FOPEN_H - -/* How to open a text file: */ -#ifndef FOPEN_A_MODE -#define FOPEN_A_MODE "a" -#endif - -#ifndef FOPEN_R_MODE -#define FOPEN_R_MODE "r" -#endif - -#ifndef FOPEN_W_MODE -#define FOPEN_W_MODE "w" -#endif - -/* How to open a binary file for reading: */ -#ifndef FOPEN_RBIN_MODE -#if defined (VMS) || defined (DOS) || defined (VMCMS) -#define FOPEN_RBIN_MODE "rb" -#else -#define FOPEN_RBIN_MODE "r" -#endif /* not (VM/CMS or DOS or VMS) */ -#endif /* not FOPEN_RBIN_MODE */ - -/* How to open a binary file for writing: */ -#ifndef FOPEN_WBIN_MODE -#ifdef DOS -#define FOPEN_WBIN_MODE "wb" -#else -#ifdef VMCMS -#define FOPEN_WBIN_MODE "wb, lrecl=1024, recfm=f" -#else -#define FOPEN_WBIN_MODE "w" -#endif /* not VM/CMS */ -#endif /* not DOS */ -#endif /* not FOPEN_WBIN_MODE */ - -#endif /* not C_FOPEN_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-limits.h --- a/kpathsea/c-limits.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* c-limits.h: include the system parameter file. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef C_LIMITS_H -#define C_LIMITS_H - -#ifdef HAVE_LIMITS_H -#include -#else -#include -#include -#endif - -/* Some systems may have the floating-point limits in the above. */ -#if defined (HAVE_FLOAT_H) && !defined (FLT_MAX) -#include -#endif - -#endif /* not C_LIMITS_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-memstr.h --- a/kpathsea/c-memstr.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* c-memstr.h: memcpy, strchr, etc. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_MEMSTR_H -#define KPATHSEA_C_MEMSTR_H - -/* tries to declare bcopy etc., which can only conflict. */ -#define _XFUNCS_H_ - -/* Just to be complete, we make both the system V/ANSI and the BSD - versions of the string functions available. */ -#if defined (STDC_HEADERS) || defined (HAVE_STRING_H) -#define SYSV /* so knows not to include */ -#include - -/* An ANSI string.h and pre-ANSI memory.h might conflict. */ -#if !defined (STDC_HEADERS) && defined (HAVE_MEMORY_H) -#include -#endif /* not STDC_HEADERS and HAVE_MEMORY_H */ - -/* Do not define these if we are not STDC_HEADERS, because in that - case X11/Xos.h defines `strchr' to be `index'. */ -#ifdef STDC_HEADERS -/* Let's hope that if index/rindex are defined, they're defined to the - right thing. */ -#ifndef index -#define index strchr -#endif -#ifndef rindex -#define rindex strrchr -#endif -#endif /* STDC_HEADERS */ - -#ifndef HAVE_BCOPY -#ifndef bcmp -#define bcmp(s1, s2, len) memcmp ((s1), (s2), (len)) -#endif -#ifndef bcopy -#define bcopy(from, to, len) memcpy ((to), (from), (len)) -#endif -#ifndef bzero -#define bzero(s, len) memset ((s), 0, (len)) -#endif -#endif /* not HAVE_BCOPY */ - -#else /* not (STDC_HEADERS or HAVE_STRING_H) */ - -#include - -#ifndef strchr -#define strchr index -#endif -#ifndef strrchr -#define strrchr rindex -#endif - -#define memcmp(s1, s2, n) bcmp ((s1), (s2), (n)) -#define memcpy(to, from, len) bcopy ((from), (to), (len)) - -extern char *strtok (); -extern char *strstr (); - -#endif /* not (STDC_HEADERS or HAVE_STRING_H) */ - -#endif /* not KPATHSEA_C_MEMSTR_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-minmax.h --- a/kpathsea/c-minmax.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* c-minmax.h: define INT_MIN, etc. Assume a 32-bit machine if the - values aren't defined. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_MINMAX_H -#define KPATHSEA_C_MINMAX_H - -#include - -/* Declared in on ANSI C systems. If the system doesn't - define it, we use the minimum ANSI values -- except for `int'; we - assume 32-bit integers. */ - -#ifndef SCHAR_MIN -#define SCHAR_MIN (-127) -#endif -#ifndef SCHAR_MAX -#define SCHAR_MAX 128 -#endif -#ifndef UCHAR_MAX -#define UCHAR_MAX 255 -#endif - -#ifndef SHRT_MIN -#define SHRT_MIN (-32767) -#endif -#ifndef SHRT_MAX -#define SHRT_MAX 32767 -#endif -#ifndef USHRT_MAX -#define USHRT_MAX 65535 -#endif - -#ifndef INT_MIN -#define INT_MIN (-2147483647) -#endif -#ifndef INT_MAX -#define INT_MAX 2147483647 -#endif -#ifndef UINT_MAX -#define UINT_MAX 4294967295 -#endif - -#ifndef LONG_MIN -#define LONG_MIN INT_MIN -#endif -#ifndef LONG_MAX -#define LONG_MAX INT_MAX -#endif -#ifndef ULONG_MAX -#define ULONG_MAX UINT_MAX -#endif - -/* Declared in on ANSI C systems. */ -#ifndef DBL_MIN -#define DBL_MIN 1e-37 -#endif -#ifndef DBL_MAX -#define DBL_MAX 1e+37 -#endif - -#ifndef FLT_MIN -#define FLT_MIN 1e-37 -#endif -#ifndef FLT_MAX -#define FLT_MAX 1e+37 -#endif - -#endif /* not KPATHSEA_C_MINMAX_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-namemx.h --- a/kpathsea/c-namemx.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* c-namemx.h: define NAME_MAX, the maximum length of a single - component in a filename. No such limit may exist, or may vary - depending on the filesystem. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_NAME_MX_H -#define KPATHSEA_C_NAME_MX_H - -#include - -/* Most likely the system will truncate filenames if it is not POSIX, - and so we can use the BSD value here. */ -#ifndef _POSIX_NAME_MAX -#define _POSIX_NAME_MAX 255 -#endif - -#ifndef NAME_MAX -#define NAME_MAX _POSIX_NAME_MAX -#endif - -#endif /* not KPATHSEA_C_NAME_MX_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-pathch.h --- a/kpathsea/c-pathch.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* c-pathch.h: define the characters which separate components of - filenames and environment variable paths. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef C_PATHCH_H -#define C_PATHCH_H - -/* What separates filename components? */ -#ifndef DIR_SEP -#ifdef VMS -#define DIR_SEP ':' -#define DIR_SEP_STRING ":" -#else -#ifdef DOS -#define DIR_SEP '\\' -#define DIR_SEP_STRING "\\" -/* On DOS, it's good to allow both \ and / between directories. */ -#define IS_DIR_SEP(ch) ((ch) == DIR_SEP || (ch) == '/') -#else -#ifdef VMCMS -#define DIR_SEP ' ' -#define DIR_SEP_STRING " " -#else -#define DIR_SEP '/' -#define DIR_SEP_STRING "/" -#endif /* not VM/CMS */ -#endif /* not DOS */ -#endif /* not VMS */ -#endif /* not PATH_SEP */ - -#ifndef IS_DIR_SEP -#define IS_DIR_SEP(ch) ((ch) == DIR_SEP) -#endif - - -/* What separates elements in environment variable path lists? */ -#ifndef ENV_SEP -#ifdef VMS -#define ENV_SEP ',' -#define ENV_SEP_STRING "," -#else -#ifdef DOS -#define ENV_SEP ';' -#define ENV_SEP_STRING ";" -#else -#ifdef VMCMS -#define ENV_SEP ' ' -#define ENV_SEP_STRING " " -#else -#define ENV_SEP ':' -#define ENV_SEP_STRING ":" -#endif /* not VM/CMS */ -#endif /* not DOS */ -#endif /* not VMS */ -#endif /* not ENV_SEP */ - -#ifndef IS_ENV_SEP -#define IS_ENV_SEP(ch) ((ch) == ENV_SEP) -#endif - -#endif /* not C_PATHCH_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-pathmx.h --- a/kpathsea/c-pathmx.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* c-pathmx.h: define PATH_MAX, the maximum length of a filename. - Since no such limit may exist, it's preferable to dynamically grow - filenames as needed. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_PATH_MX_H -#define KPATHSEA_C_PATH_MX_H - -#include - -/* Cheat and define this as a manifest constant no matter what, instead - of using pathconf. I forget why we want to do this. */ - -#ifndef _POSIX_PATH_MAX -#define _POSIX_PATH_MAX 255 -#endif - -#ifndef PATH_MAX -#ifdef MAXPATHLEN -#define PATH_MAX MAXPATHLEN -#else -#define PATH_MAX _POSIX_PATH_MAX -#endif -#endif /* not PATH_MAX */ - - -#endif /* not KPATHSEA_C_PATH_MAX_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-proto.h --- a/kpathsea/c-proto.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* c-proto.h: macros to include or discard prototypes. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_PROTO_H -#define KPATHSEA_C_PROTO_H - -/* These macros munge function declarations to make them work in both - cases. The P?H macros are used for declarations, the P?C for - definitions. Cf. from the GNU C library. P1H(void) - also works for definitions of routines which take no args. */ - -#if __STDC__ - -#define P1H(p1) (p1) -#define P2H(p1,p2) (p1, p2) -#define P3H(p1,p2,p3) (p1, p2, p3) -#define P4H(p1,p2,p3,p4) (p1, p2, p3, p4) -#define P5H(p1,p2,p3,p4,p5) (p1, p2, p3, p4, p5) -#define P6H(p1,p2,p3,p4,p5,p6) (p1, p2, p3, p4, p5, p6) - -#define P1C(t1,n1)(t1 n1) -#define P2C(t1,n1, t2,n2)(t1 n1, t2 n2) -#define P3C(t1,n1, t2,n2, t3,n3)(t1 n1, t2 n2, t3 n3) -#define P4C(t1,n1, t2,n2, t3,n3, t4,n4)(t1 n1, t2 n2, t3 n3, t4 n4) -#define P5C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5) \ - (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5) -#define P6C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6) \ - (t1 n1, t2 n2, t3 n3, t4 n4, t5 n5, t6 n6) - -#else /* not __STDC__ */ - -#define P1H(p1) () -#define P2H(p1, p2) () -#define P3H(p1, p2, p3) () -#define P4H(p1, p2, p3, p4) () -#define P5H(p1, p2, p3, p4, p5) () -#define P6H(p1, p2, p3, p4, p5, p6) () - -#define P1C(t1,n1) (n1) t1 n1; -#define P2C(t1,n1, t2,n2) (n1,n2) t1 n1; t2 n2; -#define P3C(t1,n1, t2,n2, t3,n3) (n1,n2,n3) t1 n1; t2 n2; t3 n3; -#define P4C(t1,n1, t2,n2, t3,n3, t4,n4) (n1,n2,n3,n4) \ - t1 n1; t2 n2; t3 n3; t4 n4; -#define P5C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5) (n1,n2,n3,n4,n5) \ - t1 n1; t2 n2; t3 n3; t4 n4; t5 n5; -#define P6C(t1,n1, t2,n2, t3,n3, t4,n4, t5,n5, t6,n6) (n1,n2,n3,n4,n5,n6) \ - t1 n1; t2 n2; t3 n3; t4 n4; t5 n5; t6 n6; - -#endif /* not __STDC__ */ - -#endif /* not KPATHSEA_C_PROTO_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-stat.h --- a/kpathsea/c-stat.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* c-stat.h: declarations for using stat(2). - -Copyright (C) 1993 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_STAT_H -#define KPATHSEA_STAT_H - -#include -#include - -/* POSIX predicates for testing file attributes. */ - -#if !defined (S_ISBLK) && defined (S_IFBLK) -#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) -#endif -#if !defined (S_ISCHR) && defined (S_IFCHR) -#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) -#endif -#if !defined (S_ISDIR) && defined (S_IFDIR) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -#endif -#if !defined (S_ISREG) && defined (S_IFREG) -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -#endif -#if !defined (S_ISFIFO) && defined (S_IFIFO) -#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) -#endif -#if !defined (S_ISLNK) && defined (S_IFLNK) -#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -#endif -#if !defined (S_ISSOCK) && defined (S_IFSOCK) -#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) -#endif -#if !defined (S_ISMPB) && defined (S_IFMPB) /* V7 */ -#define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) -#define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) -#endif -#if !defined (S_ISNWK) && defined (S_IFNWK) /* HP/UX */ -#define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) -#endif - -#endif /* not KPATHSEA_STAT_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-std.h --- a/kpathsea/c-std.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* c-std.h: the first header files. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_STD_H -#define KPATHSEA_C_STD_H - -/* Header files that essentially all of our sources need, and - that all implementations have. We include these first, to help with - NULL being defined multiple times. */ -#include -#include - -/* Be sure we have constants from . */ -#include - -#ifdef HAVE_STDLIB_H -#include -/* Include before , to help avoid NULL - redefinitions on some systems. (We don't include - ourselves any more, but FYI.) */ -#else -/* It's impossible to say for sure what the system will deign to put in - , but let's hope it's at least these. */ -extern char *getenv (); - -#ifndef ALLOC_RETURN_TYPE -#ifdef DOS -#define ALLOC_RETURN_TYPE void -#else -#define ALLOC_RETURN_TYPE char -#endif /* not DOS */ -#endif /* not ALLOC_RETURN_TYPE */ - -#ifndef _MALLOC_INTERNAL -/* Don't bother to declare these if we are compiling gmalloc.c itself. */ -extern ALLOC_RETURN_TYPE *calloc (), *malloc (), *realloc (); -#endif - -#endif /* not STDC_HEADERS */ - -/* SunOS 4.1.1 gets STDC_HEADERS defined, but it doesn't provide - EXIT_FAILURE. So far no system has defined one of EXIT_FAILURE and - EXIT_SUCCESS without the other. */ -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 -#define EXIT_FAILURE 0 -#else -#define EXIT_SUCCESS 0 -#define EXIT_FAILURE 1 -#endif -#endif /* not EXIT_SUCCESS */ - -/* strchr vs. index, memcpy vs. bcopy, etc. */ -#include - -/* Error numbers and errno declaration. */ -#include - -/* Numeric minima and maxima. */ -#include - -/* Assertions are too useful to not make generally available. */ -#ifdef HAVE_ASSERT_H -#include -#else -#define assert(expr) /* as nothing */ -#endif - -#ifdef VMS -#include -#include -#else -/* `popen' and `pclose' are part of POSIX.2, not POSIX.1. So - STDC_HEADERS isn't enough. */ -extern FILE *popen (); -extern int pclose (); -#endif - -#ifndef hypot -/* hypot appears not to have made it into POSIX.2, even. */ -extern double hypot (); -#endif - -#endif /* not KPATHSEA_C_STD_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-unistd.h --- a/kpathsea/c-unistd.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* c-unistd.h: ensure we have constants from . Included from - c-std.h. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_C_UNISTD_H -#define KPATHSEA_C_UNISTD_H - -/* is allowed to depend on . */ -#include - -#ifdef HAVE_UNISTD_H -#include -#endif - -#include - -/* For fseek. */ -#ifndef SEEK_SET -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif /* not SEEK_SET */ - -/* For access. */ -#ifndef F_OK -#define F_OK 0 -#define X_OK 1 -#define W_OK 2 -#define R_OK 4 -#endif /* not F_OK */ - -#ifndef STDIN_FILENO -#define STDIN_FILENO 0 -#define STDOUT_FILENO 1 -#define STDERR_FILENO 2 -#endif /* not STDIN_FILENO */ - -#endif /* not KPATHSEA_C_UNISTD_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/c-vararg.h --- a/kpathsea/c-vararg.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* c-vararg.h: Top layer for stdarg and varargs. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef C_VARARG_H -#define C_VARARG_H - -/* See `kpathsea/init-path.c' for an example of use. The idea is to say - PVAR1(type1, parameter1, ap) in the function header, and then end - the function with two }}'s. We do this to avoid having to specify - the argument list (with types) twice -- once in the function header, - and once in a (hypothetical) VA_START1. */ - -#if __STDC__ -#include - -#define PVAR1H(p1) (p1, ...) -#define PVAR2H(p1, p2) (p1, p2, ...) -#define PVAR3H(p1, p2, p3) (p1, p2, p3, ...) - -#define PVAR1C(t1, n1, ap) \ - (t1 n1, ...) { va_list ap; va_start (ap, n1); -#define PVAR2C(t1, n1, t2, n2, ap) \ - (t1 n1, t2 n2, ...) { va_list ap; va_start (ap, n2); -#define PVAR3C(t1, n1, t2, n2, t3, n3, ap) \ - (t1 n1, t2 n2, t3 n3, ...) { va_list ap; va_start (ap, n3); - -#else /* not __STDC__ */ -#include - -#define PVAR1H(p1) () -#define PVAR2H(p1, p2) () -#define PVAR3H(p1, p2, p3) () - -#define PVAR1C(t1, n1, ap) \ - (va_alist) va_dcl { t1 n1; va_list ap; va_start (ap); \ - n1 = va_arg (ap, t1); -#define PVAR2C(t1, n1, t2, n2, ap) \ - (va_alist) va_dcl { t1 n1; t2 n2; va_list ap; va_start (ap); \ - n1 = va_arg (ap, t1); n2 = va_arg (ap, t2); -#define PVAR3C(t1, n1, t2, n2, t3, n3, ap) \ - (va_alist) va_dcl { t1 n1; t2 n2; t3 n3; va_list ap; va_start (ap); \ - n1 = va_arg (ap, t1); n2 = va_arg (ap, t2); \ - n3 = va_arg (ap, t3); -#endif /* not __STDC__ */ - -#endif /* not C_VARARG_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/cnf.c --- a/kpathsea/cnf.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,190 +0,0 @@ -/* cnf.c: read config files. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* By using our own hash table, instead of the environment, we - complicate variable expansion (because now we have to look in two - places), but we don't bang so heavily on the system. DOS and System - V have very limited environment space. Also, this way - `kpse_init_format' can distinguish between values originating from - the cnf file and ones from environment variables, which can be useful - for users trying to figure out what's going on. */ -#ifndef CNF_HASH_SIZE -#define CNF_HASH_SIZE 751 -#endif -static hash_table_type cnf_hash; - -/* Do a single line in a cnf file: if it's blank or a comment, skip it. - Otherwise, parse [.] [=] . Do - this even if the is already set in the environment, since - the envvalue might contain a trailing :, in which case we'll be - looking for the cnf value. */ - -static void -do_line P1C(string, line) -{ - unsigned len; - string start; - string value, var; - - /* Skip leading whitespace. */ - while (ISSPACE (*line)) - line++; - - /* More to do only if we have non-comment material left. */ - if (*line == 0 || *line == '%' || *line == '#') - return; - - /* The variable name is everything up to the next space or = or `.'. */ - start = line; - while (!ISSPACE (*line) && *line != '=' && *line != '.') - line++; - - /* `line' is now one character past the end of the variable name. */ - len = line - start; - var = xmalloc (len + 1); - strncpy (var, start, len); - var[len] = 0; - - /* If the variable is qualified with a program name, we might be - ignoring it. */ - while (ISSPACE (*line)) - line++; - if (*line == '.') - { /* Skip spaces, then everything up to the next space or =. */ - string prog; - extern string program_invocation_short_name; /* must be set by main */ - - line++; - while (ISSPACE (*line)) - line++; - start = line; - while (!ISSPACE (*line) && *line != '=') - line++; - - /* It's annoying to repeat all this, but making a tokenizing - subroutine would be just as long and annoying. */ - len = line - start; - prog = xmalloc (len + 1); - strncpy (prog, start, len); - prog[len] = 0; - - /* If we are running `prog', fine; otherwise, we're done. */ - assert (program_invocation_short_name); - if (!STREQ (prog, program_invocation_short_name)) - { - free (var); - free (prog); - return; - } - } - - /* Skip whitespace, an optional =, more whitespace. */ - while (ISSPACE (*line)) - line++; - if (*line == '=') - { - line++; - while (ISSPACE (*line)) - line++; - } - - /* Everything up to the next whitespace or eol is the value. */ - start = line; - while (*line && !ISSPACE (*line)) - line++; - len = line - start; - - value = xmalloc (len + 1); - strncpy (value, start, len); - value[len] = 0; - - /* For cnf files, multiple values for a single variable make no sense, - but instead of removing them, we'll just take the most recent in - `kpse_cnf_get'. Thus, we are assuming here that `hash_insert' puts - the most recent entries in first. */ - hash_insert (&cnf_hash, var, value); - - /* We could check that anything remaining is preceded by a comment - character, but let's not bother. */ -} - -/* Read all the configuration files in the path. */ - -static void -read_files P1H(void) -{ - string *cnf_files; - const_string cnf_path = kpse_init_format (kpse_cnf_format); - - cnf_hash = hash_create (CNF_HASH_SIZE); - - for (cnf_files = kpse_all_path_search (cnf_path, - kpse_format_info[kpse_cnf_format].program); - cnf_files && *cnf_files; cnf_files++) - { - string line; - string cnf_filename = *cnf_files; - FILE *cnf_file = xfopen (cnf_filename, FOPEN_R_MODE); - - while ((line = read_line (cnf_file)) != NULL) - { - do_line (line); - free (line); - } - - xfclose (cnf_file, cnf_filename); - } - - /* After (*after*) reading the cnf files, expand the db directory, for - use by `elt_in_db' in pathsearch.c. The default value of $TEXMF - has to be able to get TEXMF from a cnf file, therefore in the - `kpse_all_path_search' call above, we do not have DB_DIR. */ - kpse_db_dir = kpse_var_expand (KPSE_DB_DIR); - if (! *kpse_db_dir) - kpse_db_dir = kpse_var_expand (DEFAULT_TEXMF); -} - -/* Read the cnf files on the first call. Return the first value in the - returned list -- this will be from the last-read cnf file. */ - -string -kpse_cnf_get P1C(const_string, name) -{ - string *ret_list; - - if (cnf_hash.size == 0) - read_files (); - - ret_list = hash_lookup (cnf_hash, name); - - return ret_list ? *ret_list : NULL; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/cnf.h --- a/kpathsea/cnf.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* cnf.h: runtime config files. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_CNF_H -#define KPATHSEA_CNF_H - -#include -#include - -/* Return the value in the last-read cnf file for VAR, or NULL if none. - On the first call, also read all the cnf files in the path (and - initialize the path) named the `program' member of the - `kpse_cnf_format' element of `kpse_format_info'. */ -extern string kpse_cnf_get P1H(const_string var); - -#endif /* not KPATHSEA_CNF_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/common.ac --- a/kpathsea/common.ac Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -dnl Common Autoconf sinclude file for kpathsea-using programs. (Have to -dnl use the m4 `sinclude' builtin instead of `include', since Autoconf -dnl disables `include'.) - -dnl Write output here, instead of putting a zillion -D's on the command line. -AC_CONFIG_HEADER(c-auto.h) - -AC_PROG_MAKE_SET - -AC_PROG_CC -AC_PROG_INSTALL -AC_PROG_RANLIB - -AC_ISC_POSIX - -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_FUNC_CLOSEDIR_VOID -AC_CHECK_HEADERS(assert.h float.h limits.h memory.h pwd.h stdlib.h \ - string.h unistd.h) - -AC_CHECK_FUNCS(basename bcopy memmove putenv) - -AC_C_CONST - - -# This is a GNU libc invention. -AC_MSG_CHECKING(whether program_invocation_name is predefined) -AC_CACHE_VAL(kb_cv_var_program_inv_name, -[AC_TRY_LINK(, [main() { program_invocation_name = "love"; }], - kb_cv_var_program_inv_name=yes, kb_cv_var_program_inv_name=no)])dnl -AC_MSG_RESULT($kb_cv_var_program_inv_name) -if test $kb_cv_var_program_inv_name = yes; then - AC_DEFINE(HAVE_PROGRAM_INVOCATION_NAME) -fi - - -# Some BSD putenv's, e.g., FreeBSD, do malloc/free's on the environment. -# This test program is due to Mike Hibler . -# We don't actually need to run this if we don't have putenv, but it -# doesn't hurt. -AC_MSG_CHECKING(whether putenv uses malloc) -AC_CACHE_VAL(kb_cv_func_putenv_malloc, -[AC_TRY_RUN([ -#define VAR "YOW_VAR" -#define STRING1 "GabbaGabbaHey" -#define STRING2 "Yow!!" /* should be shorter than STRING1 */ -extern char *getenv (); /* in case char* and int don't mix gracefully */ -main () -{ - char *str1, *rstr1, *str2, *rstr2; - str1 = getenv (VAR); - if (str1) - exit (1); - str1 = malloc (strlen (VAR) + 1 + strlen (STRING1) + 1); - if (str1 == 0) - exit (2); - strcpy (str1, VAR); - strcat (str1, "="); - strcat (str1, STRING1); - if (putenv (str1) < 0) - exit (3); - rstr1 = getenv (VAR); - if (rstr1 == 0) - exit (4); - rstr1 -= strlen (VAR) + 1; - if (strncmp (rstr1, VAR, strlen (VAR))) - exit (5); - str2 = malloc (strlen (VAR) + 1 + strlen (STRING2) + 1); - if (str2 == 0 || str1 == str2) - exit (6); - strcpy (str2, VAR); - strcat (str2, "="); - strcat (str2, STRING2); - if (putenv (str2) < 0) - exit (7); - rstr2 = getenv (VAR); - if (rstr2 == 0) - exit (8); - rstr2 -= strlen (VAR) + 1; -#if 0 - printf ("rstr1=0x%x, rstr2=0x%x\n", rstr1, rstr2); - /* - * If string from first call was reused for the second call, - * you had better not do a free on the first string! - */ - if (rstr1 == rstr2) - printf ("#define SMART_PUTENV\n"); - else - printf ("#undef SMART_PUTENV\n"); -#endif - exit (rstr1 == rstr2 ? 0 : 1); -}], kb_cv_func_putenv_malloc=yes, kb_cv_func_putenv_malloc=no, - kb_cv_func_putenv_malloc=no)])dnl -AC_MSG_RESULT($kb_cv_func_putenv_malloc) -if test $kb_cv_func_putenv_malloc = yes; then - AC_DEFINE(SMART_PUTENV) -fi diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/concat.c --- a/kpathsea/concat.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* concat.c: dynamic string concatenation. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -/* Return the concatenation of S1 and S2. See `concatn.c' for a - `concatn', which takes a variable number of arguments. */ - -string -concat P2C(const_string, s1, const_string, s2) -{ - string answer = (string) xmalloc (strlen (s1) + strlen (s2) + 1); - strcpy (answer, s1); - strcat (answer, s2); - - return answer; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/concat3.c --- a/kpathsea/concat3.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* concat3.c: concatenate three strings. - -Copyright (C) 1992 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -string -concat3 P3C(const_string, s1, const_string, s2, const_string, s3) -{ - string answer - = (string) xmalloc (strlen (s1) + strlen (s2) + strlen (s3) + 1); - strcpy (answer, s1); - strcat (answer, s2); - strcat (answer, s3); - - return answer; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/concatn.c --- a/kpathsea/concatn.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* concatn.c: Concatenate an arbitrary number of strings. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -/* OK, it would be epsilon more efficient to compute the total length - and then do the copying ourselves, but I doubt it matters in reality. */ - -string -concatn PVAR1C(const_string, str1, ap) -{ - string arg; - string ret; - - if (!str1) - return NULL; - - ret = xstrdup (str1); - - while ((arg = va_arg (ap, string)) != NULL) - { - ret = concat (ret, arg); - } - va_end (ap); - - return ret; -}} - -#ifdef TEST -int -main () -{ - printf ("null = \"%s\"\n", concatn (NULL)); - printf ("\"a\" = \"%s\"\n", concatn ("a", NULL)); - printf ("\"ab\" = \"%s\"\n", concatn ("a", "b", NULL)); - printf ("\"abc\" = \"%s\"\n", concatn ("a", "b", "c", NULL)); - printf ("\"abcd\" = \"%s\"\n", concatn ("ab", "cd", NULL)); - printf ("\"abcde\" = \"%s\"\n", concatn ("ab", "c", "de", NULL)); - printf ("\"abcdef\" = \"%s\"\n", concatn ("", "a", "", "bcd", "ef", NULL)); - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -standalone-compile-command: "gcc -posix -g -I. -I.. -DTEST concatn.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/concatn.h --- a/kpathsea/concatn.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* concatn.h: concatenate a variable number of strings. - This is a separate include file only because I don't see the point of - having every source file include . The declarations for - the other concat routines are in lib.h. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_CONCATN_H -#define KPATHSEA_CONCATN_H - -#include -#include -#include - -/* Concatenate a null-terminated list of strings and return the result - in malloc-allocated memory. */ -extern string concatn PVAR1H(const_string str1); - -#endif /* not KPATHSEA_CONCATN_H */ - - diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/config.guess --- a/kpathsea/config.guess Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,686 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Written by Per Bothner . -# The master version of this file is at the FSF in /home/gd/gnu/lib. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - alpha:OSF1:*:*) - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'` - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-cbm-sysv4 - exit 0;; - amiga:NetBSD:*:*) - echo m68k-cbm-netbsd${UNAME_RELEASE} - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-cbm-openbsd${UNAME_RELEASE} - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - atari*:NetBSD:*:*) - echo m68k-atari-netbsd${UNAME_RELEASE} - exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-atari-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3*:NetBSD:*:*) - echo m68k-sun-netbsd${UNAME_RELEASE} - exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-sun-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:NetBSD:*:*) - echo m68k-apple-netbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-apple-openbsd${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - sed 's/^ //' << EOF >dummy.c - int main (argc, argv) int argc; char **argv; { - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - ${CC-cc} dummy.c -o dummy \ - && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ - -o ${TARGET_BINARY_INTERFACE}x = x ] ; then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i?86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; - *:AIX:*:4) - if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=4.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[3478]??:HP-UX:*:*) - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; - 9000/8?? ) HP_ARCH=hppa1.0 ;; - esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i?86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F300:UNIX_System_V:*:*) - FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - F301:UNIX_System_V:*:*) - echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` - exit 0 ;; - hp3[0-9][05]:NetBSD:*:*) - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; - hp3[0-9][05]:OpenBSD:*:*) - echo m68k-hp-openbsd${UNAME_RELEASE} - exit 0 ;; - i?86:BSD/386:*:* | *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:NetBSD:*:*) - echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - i*:CYGWIN*:*) - echo i386-pc-cygwin32 - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin32 - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. - ld_help_string=`ld --help 2>&1` - if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then - echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then - echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then - echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then - echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then - echo "powerpc-unknown-linux-gnu" ; exit 0 - elif test "${UNAME_MACHINE}" = "alpha" ; then - echo alpha-unknown-linux-gnu ; exit 0 - elif test "${UNAME_MACHINE}" = "sparc" ; then - echo sparc-unknown-linux-gnu ; exit 0 - else - # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us - # useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout. - test ! -d /usr/lib/ldscripts/. \ - && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 - # Determine whether the default compiler is a.out or elf - cat >dummy.c </dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - fi ;; -# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions -# are messed up and put the nodename in both sysname and nodename. - i?86:DYNIX/ptx:4*:*) - echo i386-sequent-sysv4 - exit 0 ;; - i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} - fi - exit 0 ;; - i?86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - m68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - i?86:LynxOS:2.*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -cat >dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#else - printf ("vax-dec-ultrix\n"); exit (0); -#endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 -rm -f dummy.c dummy - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -#echo '(Unable to guess system type)' 1>&2 - -exit 1 diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/config.h --- a/kpathsea/config.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* config.h: master configuration file, included first by all compilable - source files (not headers). - -Copyright (C) 1993 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_CONFIG_H -#define KPATHSEA_CONFIG_H - -/* System dependencies that are figured out by `configure'. If we are - compiling standalone, we get our c-auto.h. Otherwise, the package - containing us must provide this (unless it can somehow generate ours - from c-auto.h.in). We use <...> instead of "..." so that the current - cpp directory (i.e., kpathsea/) won't be searched. */ -#include - -/* ``Standard'' system headers. */ -#include - -/* Macros to discard or keep prototypes. */ -#include - -/* Our own definitions of supposedly always-useful stuff. */ -#include -#include - -/* Support extra runtime tracing. */ -#include - -/* If you want to find subdirectories in a directory with non-Unix - semantics (specifically, if a directory with no subdirectories does - not have exactly two links), define this. */ -#if !defined (DOS) && !defined (VMS) && !defined (VMCMS) -#define UNIX_ST_NLINK -#endif /* not DOS and not VMS and not VMCMS */ - -#endif /* not KPATHSEA_CONFIG_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/config.sub --- a/kpathsea/config.sub Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,927 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script, version 1.1. -# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -if [ x$1 = x ] -then - echo Configuration name missing. 1>&2 - echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 - echo "or $0 ALIAS" 1>&2 - echo where ALIAS is a recognized configuration type. 1>&2 - exit 1 -fi - -# First pass through any local machine types. -case $1 in - *local*) - echo $1 - exit 0 - ;; - *) - ;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - linux-gnu*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple) - os= - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \ - | arme[lb] | pyramid \ - | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ - | alpha | we32k | ns16k | clipper | i370 | sh \ - | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \ - | pdp11 | mips64el | mips64orion | mips64orionel \ - | sparc | sparclet | sparclite | sparc64) - basic_machine=$basic_machine-unknown - ;; - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i[3456]86) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \ - | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \ - | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ - | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ - | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* | f301-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-cbm - ;; - amigados) - basic_machine=m68k-cbm - os=-amigados - ;; - amigaunix | amix) - basic_machine=m68k-cbm - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - [ctj]90-cray) - basic_machine=c90-cray - os=-unicos - ;; - crds | unos) - basic_machine=m68k-crds - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - os=-mvs - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[3456]86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i[3456]86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i[3456]86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i[3456]86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - miniframe) - basic_machine=m68000-convergent - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - np1) - basic_machine=np1-gould - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5) - basic_machine=i586-intel - ;; - pentiumpro | p6) - basic_machine=i686-intel - ;; - pentium-* | p5-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - k5) - # We don't have specific support for AMD's K5 yet, so just call it a Pentium - basic_machine=i586-amd - ;; - nexen) - # We don't have specific support for Nexgen yet, so just call it a Pentium - basic_machine=i586-nexgen - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=rs6000-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - xmp) - basic_machine=xmp-cray - os=-unicos - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - mips) - basic_machine=mips-mips - ;; - romp) - basic_machine=romp-ibm - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sparc) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -unixware* | svr4*) - os=-sysv4 - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -linux-gnu* | -uxpv*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -ctix* | -uts*) - os=-sysv - ;; - -ns2 ) - os=-nextstep2 - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -xenix) - os=-xenix - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-semi) - os=-aout - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-ibm) - os=-aix - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigados - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f301-fujitsu) - os=-uxpv - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -hpux*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -vxsim* | -vxworks*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/configure.in --- a/kpathsea/configure.in Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(pathsearch.c) - -AC_CANONICAL_HOST -if test -z "$host"; then - host=unknown -fi -target_host_type=$host -canonical_host_type=$host - -### Enable creation of shared libraries. Currently only works with -### gcc on some systems. - -AC_ARG_ENABLE(shared, - [ --shared create shared libraries (not all systems)], - [if test $enableval = no; then SHARED_LIBS=false; else SHARED_LIBS=true; fi], - SHARED_LIBS=false) -AC_SUBST(SHARED_LIBS) - -CPICFLAG=-fPIC -SHLEXT=so -SH_LD="$CC" -SH_LDFLAGS=-shared -case "$canonical_host_type" in - *-*-386bsd* | *-*-openbsd* | *-*-netbsd* | *-*-freebsd*) - SH_LD=ld - SH_LDFLAGS=-Bshareable - ;; - alpha-dec-osf*) - CPICFLAG= - SH_LDFLAGS="-shared -Xlinker -expect_unresolved -Xlinker '*'" - ;; - rs6000-ibm-aix* | powerpc-ibm-aix*) - CPICFLAG= - ;; - hppa*-hp-hpux*) - SHLEXT=sl - SH_LDFLAGS="-shared -fPIC" - ;; - *-sgi-*) - CPICFLAG= - ;; -esac -AC_MSG_RESULT([defining CPICFLAG to be $CPICFLAG]) -AC_MSG_RESULT([defining SHLEXT to be $SHLEXT]) -AC_MSG_RESULT([defining SH_LD to be $SH_LD]) -AC_MSG_RESULT([defining SH_LDFLAGS to be $SH_LDFLAGS]) -AC_SUBST(CPICFLAG) -AC_SUBST(SHLEXT) -AC_SUBST(SH_LD) -AC_SUBST(SH_LDFLAGS) - -sinclude(common.ac) - -AC_OUTPUT(Makefile) diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/copying.texi --- a/kpathsea/copying.texi Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,390 +0,0 @@ -@node Copying -@appendix GNU GENERAL PUBLIC LICENSE -@center Version 2, June 1991 - -@display -Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@unnumberedsec Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software---to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - -@iftex -@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end iftex -@ifinfo -@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end ifinfo - -@enumerate -@item -This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The ``Program'', below, -refers to any such program or work, and a ``work based on the Program'' -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term ``modification''.) Each licensee is addressed as ``you''. - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -@item -You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -@item -You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -@enumerate a -@item -You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -@item -You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -@item -If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) -@end enumerate - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -@item -You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - -@enumerate a -@item -Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -@item -Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -@item -Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) -@end enumerate - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -@item -You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -@item -You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -@item -Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -@item -If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -@item -If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -@item -The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and ``any -later version'', you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -@item -If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -@iftex -@heading NO WARRANTY -@end iftex -@ifinfo -@center NO WARRANTY -@end ifinfo - -@item -BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -@item -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. -@end enumerate - -@iftex -@heading END OF TERMS AND CONDITIONS -@end iftex -@ifinfo -@center END OF TERMS AND CONDITIONS -@end ifinfo - -@page -@unnumberedsec Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the ``copyright'' line and a pointer to where the full notice is found. - -@smallexample -@var{one line to give the program's name and a brief idea of what it does.} -Copyright (C) 19@var{yy} @var{name of author} - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -@end smallexample - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -@smallexample -Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -This is free software, and you are welcome to redistribute it -under certain conditions; type `show c' for details. -@end smallexample - -The hypothetical commands @samp{show w} and @samp{show c} should show -the appropriate parts of the General Public License. Of course, the -commands you use may be called something other than @samp{show w} and -@samp{show c}; they could even be mouse-clicks or menu items---whatever -suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a ``copyright disclaimer'' for the program, if -necessary. Here is a sample; alter the names: - -@example -Yoyodyne, Inc., hereby disclaims all copyright interest in the program -`Gnomovision' (which makes passes at compilers) written by James Hacker. - -@var{signature of Ty Coon}, 1 April 1989 -Ty Coon, President of Vice -@end example - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/db.c --- a/kpathsea/db.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -/* db.c: an external database to avoid filesystem lookups. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -/* See comments in `read_files' in cnf.c. */ -string kpse_db_dir = NULL; - -/* The hash table for ls-R. */ -static hash_table_type db; - - -/* If no DB_FILE, return false (maybe they aren't using this feature). - Otherwise, build the db and return true. */ - -static boolean -db_build P1C(hash_table_type *, table) -{ - string line; - unsigned dir_count = 0, file_count = 0; /* for debugging */ - string cur_dir = NULL; /* First thing in ls-R might be a filename. */ - string db_filename = concat3 (kpse_db_dir, DIR_SEP_STRING, KPSE_DB_NAME); - FILE *db_file = fopen (db_filename, FOPEN_R_MODE); - - if (db_file) - { - while ((line = read_line (db_file)) != NULL) - { - unsigned len = strlen (line); - /* A line like `/foo:' = new dir foo */ - if (IS_DIR_SEP (line[0]) && line[len - 1] == ':') - { - cur_dir = xstrdup (line); - cur_dir[len - 1] = DIR_SEP; - dir_count++; - } - else if (line[0] != 0 && cur_dir) /* other nonblank line */ - { /* New hash table entry with a key of `line' and a data of - `cur_dir'. Already-existing identical keys are ok, since - a file named `foo' can be in more than one directory. - Since it doesn't hurt, share the directory name string - among all the files in the directory. */ - hash_insert (table, xstrdup (line), cur_dir); - file_count++; - } - /* else ignore blank lines */ - - free (line); - } - xfclose (db_file, db_filename); - - if (file_count == 0) - { - fprintf (stderr, "kpathsea: no usable entries in %s; see the\n", - db_filename); - fprintf (stderr, "kpathsea: manual for how to generate ls-R.\n"); - } - -#ifdef DEBUG - if (KPSE_DEBUG_P (KPSE_DEBUG_HASH)) - { - /* Don't make this a debugging bit, since the output is so - voluminous, and being able to specify -1 is too useful. - Instead, let people who want it run the program under - a debugger and change the variable that way. */ - boolean print_hash_table = false; - - DEBUGF3 ("%u entries (in %d directories) read from %s.\n", - file_count, dir_count, db_filename); - if (print_hash_table) - { - DEBUGF ("Hash table built from ls-R:"); - hash_print (*table); - } - fflush (stderr); - } -#endif - } - - free (db_filename); - return db_file != NULL; -} - - -/* Insert FNAME into the hash table. This is for files that get built - during a run. We wouldn't want to reread all of ls-R, even if it got - rebuilt. */ - -void -db_insert P1C(const_string, passed_fname) -{ - /* We should always have called `kpse_db_search' before this. */ - assert (db.size > 0); - - /* But we might not have found ls-R; in that case, we'll have cleared - the buckets (but left the size). */ - if (db.buckets) - { - const_string dir_part; - string fname = xstrdup (passed_fname); - string baseptr = (string) basename (fname); - const_string file_part = xstrdup (baseptr); - - *baseptr = '\0'; /* Chop off the filename. */ - dir_part = fname; /* That leaves the dir, with the trailing /. */ - - hash_insert (&db, file_part, dir_part); - } -} - -/* Return true if FILENAME could be in PATH_ELT, i.e., if the directory - part of FILENAME matches PATH_ELT. Have to consider // wildcards, but - $ and ~ expansion have already been done. */ - -static boolean -match P2C(const_string, filename, const_string, path_elt) -{ - const_string original_filename = filename; - boolean matched = false; - boolean done = false; - - for (; !done && *filename && *path_elt; filename++, path_elt++) - { - if (*filename == *path_elt) /* normal character match */ - ; - - else if (IS_DIR_SEP (*path_elt) /* at // */ - && original_filename < filename && IS_DIR_SEP (path_elt[-1])) - { - path_elt++; /* get past second / */ - if (*path_elt == 0) - { /* Have a trailing //, which matches anything. We - could make this part of the other case, but it seems - pointless to do the extra work. */ - matched = true; - done = true; - } - else - { /* intermediate //, have to match rest of PATH_ELT */ - for (; !matched && *filename; filename++) - { /* Try matching at each possible character. */ - if (*filename == *path_elt) - matched = match (filename, path_elt); - } - } - } - - else /* normal character nonmatch, quit */ - done = true; - } - - /* If we've reached the end of PATH_ELT, and we're at the last - component of FILENAME, we've matched. */ - if (!matched && *path_elt == 0 && IS_DIR_SEP (*filename)) - { - filename++; - while (*filename && !IS_DIR_SEP (*filename)) - filename++; - matched = *filename == 0; - } - - return matched; -} - -/* Don't bother implementing a search path for the database itself. We - get multiple databases, sort of, with the $TEXMF value for DB_DIR. */ - -str_list_type * -kpse_db_search P3C(const_string, name, const_string, orig_path_elt, - boolean, all) -{ - string *db_dirs, *orig_dirs; - const_string last_slash; - string path_elt; - boolean done; - str_list_type *ret; - - /* Hash up the database if this is the first call. */ - if (db.size == 0) - { - db = hash_create (7603); /* What the heck, sparse is ok. */ - if (!db_build (&db)) - { /* If db can't be built, leave `size' nonzero (so we don't - rebuild it), but clear `buckets' (so we don't look in it). */ - free (db.buckets); - db.buckets = NULL; - } - } - - /* If we failed to build the database, quit. */ - if (db.buckets == NULL) - return NULL; - - /* When tex-glyph.c calls us looking for, e.g., dpi600/cmr10.pk, we - won't find it unless we change NAME to just `cmr10.pk' and append - `/dpi600' to PATH_ELT. We are justified in using a literal `/' - here, since that's what tex-glyph.c unconditionally uses in - DPI_BITMAP_SPEC. But don't do anything if the / begins NAME; that - should never happen. */ - last_slash = strrchr (name, '/'); - if (last_slash && last_slash != name) - { - unsigned len = last_slash - name + 1; - string dir_part = xmalloc (len); - strncpy (dir_part, name, len - 1); - dir_part[len - 1] = 0; - path_elt = concat3 (orig_path_elt, "/", dir_part); - name = last_slash + 1; - } - else - path_elt = (string) orig_path_elt; - - /* We have a db. Look up NAME. */ - orig_dirs = db_dirs = hash_lookup (db, name); - - done = false; - ret = XTALLOC1 (str_list_type); - *ret = str_list_init (); - - /* For each filename found, see if it matches the path element. For - example, if we have ../cx/cmr10.300pk and .../ricoh/cmr10.300pk, - and the path looks like .../cx, we don't want the ricoh file. */ - while (!done && db_dirs && *db_dirs) - { - string db_file = concat (*db_dirs, name); - - if (match (db_file, path_elt) && kpse_readable_file (db_file)) - { - str_list_add (ret, db_file); - if (!all) done = true; - } - else - free (db_file); - - /* On to the next directory, if any. */ - db_dirs++; - } - - /* This is just the space for the pointers, not the strings. */ - if (orig_dirs && *orig_dirs) free (orig_dirs); - - /* If we had to break up NAME, free the temporary PATH_ELT. */ - if (path_elt != orig_path_elt) free (path_elt); - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/db.h --- a/kpathsea/db.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* db.h: lookups in an externally built db file. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_DB_H -#define KPATHSEA_DB_H - -#include -#include -#include - -/* It's not an error if this doesn't exist; we just go ahead and search - the actual directories. See the `Filename database' node in the - kpathsea documentation for details. The variable reference here is - expanded by kpathsea. This lets you have different databases for - different TeX hierarchies (only one at a time, though!) without - having to change anything. */ -#ifndef KPSE_DB_DIR -#define KPSE_DB_DIR "$TEXMF" -#endif -#ifndef KPSE_DB_NAME -#define KPSE_DB_NAME "ls-R" -#endif - -/* The expansion of DB_DIR; set by `read_files' in cnf.c, used by - `elt_in_db' in pathsearch.c. */ -extern string kpse_db_dir; - -/* Return list of matches for NAME in the ls-R file matching PATH. If - ALL is set, return (null-terminated list) of all matches, else just - the first. If no matches, return a pointer to an empty list. If the - database can't be read, returns NULL. */ -extern str_list_type *kpse_db_search P3H(const_string name, - const_string path, boolean all); - -/* Insert the filename FNAME into the database. */ -extern void db_insert P1H(const_string fname); - -#endif /* not KPATHSEA_DB_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/debug.c --- a/kpathsea/debug.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* debug.c: Help the user discover what's going on. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#ifdef DEBUG - -unsigned kpathsea_debug = 0; - -/* If the real definitions of fopen or fclose are macros, we lose -- the - #undef won't restore them. */ - -FILE * -fopen P2C(const_string, filename, const_string, mode) -{ -#undef fopen - FILE *ret = fopen (filename, mode); - - if (KPSE_DEBUG_P (KPSE_DEBUG_FOPEN)) - DEBUGF3 ("fopen(%s, %s) => 0x%lx\n", filename, mode, (unsigned long) ret); - - return ret; -} - -int -fclose P1C(FILE *, f) -{ -#undef fclose - int ret = fclose (f); - - if (KPSE_DEBUG_P (KPSE_DEBUG_FOPEN)) - DEBUGF2 ("fclose(0x%lx) => %d\n", (unsigned long) f, ret); - - return ret; -} - -#endif /* DEBUG */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/debug.h --- a/kpathsea/debug.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* debug.h: Runtime tracing. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_DEBUG_H -#define KPATHSEA_DEBUG_H - -/* If NO_DEBUG is defined, skip all this. */ -#ifndef NO_DEBUG - -#include -#include -#include - -/* OK, we'll have tracing support. */ -#define DEBUG - -/* Bit vector defining what we should trace. */ -extern unsigned kpathsea_debug; - -/* Set a bit. */ -#define KPSE_DEBUG_SET(bit) kpathsea_debug |= 1 << (bit) - -/* Test if a bit is on. */ -#define KPSE_DEBUG_P(bit) (kpathsea_debug & (1 << (bit))) - -#define KPSE_DEBUG_STAT 0 /* stat calls */ -#define KPSE_DEBUG_HASH 1 /* hash lookups */ -#define KPSE_DEBUG_FOPEN 2 /* fopen/fclose calls */ -#define KPSE_DEBUG_PATHS 3 /* search path initializations */ -#define KPSE_DEBUG_EXPAND 4 /* path element expansion */ -#define KPSE_DEBUG_SEARCH 5 /* searches */ - -/* A printf for the debugging. */ -#define DEBUGF_START() do { fputs ("kdebug:", stderr) -#define DEBUGF_END() fflush (stderr); } while (0) - -#define DEBUGF(str) \ - DEBUGF_START (); fputs (str, stderr); DEBUGF_END () -#define DEBUGF1(str, e1) \ - DEBUGF_START (); fprintf (stderr, str, e1); DEBUGF_END () -#define DEBUGF2(str, e1, e2) \ - DEBUGF_START (); fprintf (stderr, str, e1, e2); DEBUGF_END () -#define DEBUGF3(str, e1, e2, e3) \ - DEBUGF_START (); fprintf (stderr, str, e1, e2, e3); DEBUGF_END () -#define DEBUGF4(str, e1, e2, e3, e4) \ - DEBUGF_START (); fprintf (stderr, str, e1, e2, e3, e4); DEBUGF_END () - -#undef fopen -#define fopen kpse_fopen_trace -extern FILE *fopen P2H(const_string filename, const_string mode); -#undef fclose -#define fclose kpse_fclose_trace -extern int fclose P1H(FILE *); - -#endif /* not NO_DEBUG */ - -#endif /* not KPATHSEA_DEBUG_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/default.h --- a/kpathsea/default.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* default.h: Declare default path expander. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_DEFAULT_H -#define KPATHSEA_DEFAULT_H - -#include -#include - - -/* Replace a leading or trailing or doubled : in PATH with DFLT. If - no extra colons, return PATH. Only one extra colon is replaced. - DFLT may not be NULL. */ - -extern string kpse_expand_default P2H(const_string path, const_string dflt); - -#endif /* not KPATHSEA_DEFAULT_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/dir.c --- a/kpathsea/dir.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* dir.c: directory operations. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include - - -/* Return true if FN is a directory or a symlink to a directory, - false if not. */ - -boolean -dir_p P1C(const_string, fn) -{ - struct stat stats; - return stat (fn, &stats) == 0 && S_ISDIR (stats.st_mode); -} - - -/* Return -1 if FN isn't a directory, else its number of links. - Duplicate the call to stat; no need to incur overhead of a function - call for that little bit of cleanliness. */ - -int -dir_links P1C(const_string, fn) -{ - static hash_table_type link_table; - string *hash_ret; - long ret; - - if (link_table.size == 0) - link_table = hash_create (457); - -#ifdef DEBUG - /* This is annoying, but since we're storing integers as pointers, we - can't print them as strings. */ - if (KPSE_DEBUG_P (KPSE_DEBUG_HASH)) - kpse_debug_hash_lookup_int = true; -#endif - - hash_ret = hash_lookup (link_table, fn); - -#ifdef DEBUG - if (KPSE_DEBUG_P (KPSE_DEBUG_HASH)) - kpse_debug_hash_lookup_int = false; -#endif - - /* Have to cast the int we need to/from the const_string that the hash - table stores for values. Let's hope an int fits in a pointer. */ - if (hash_ret) - ret = (long) *hash_ret; - else - { - struct stat stats; - ret = stat (fn, &stats) == 0 && S_ISDIR (stats.st_mode) - ? stats.st_nlink : -1; - - /* It's up to us to copy the value. */ - hash_insert (&link_table, xstrdup (fn), (const_string) ret); - -#ifdef DEBUG - if (KPSE_DEBUG_P (KPSE_DEBUG_STAT)) - DEBUGF2 ("dir_links(%s) => %ld\n", fn, ret); -#endif - } - - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/elt-dirs.c --- a/kpathsea/elt-dirs.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,376 +0,0 @@ -/* elt-dirs.c: Translate a path element to its corresponding director{y,ies}. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include - -/* To avoid giving prototypes for all the routines and then their real - definitions, we give all the subroutines first. The entry point is - the last routine in the file. */ - -/* Make a copy of DIR (unless it's null) and save it in L. Ensure that - DIR ends with a DIR_SEP for the benefit of later searches. */ - -static void -dir_list_add P2C(str_llist_type *, l, const_string, dir) -{ - string saved_dir - = IS_DIR_SEP (dir[strlen (dir) - 1]) - ? xstrdup (dir) - : concat (dir, DIR_SEP_STRING); - - str_llist_add (l, saved_dir); -} - - -/* If DIR is a directory, add it to the list L. */ - -static void -checked_dir_list_add P2C(str_llist_type *, l, const_string, dir) -{ - if (dir_p (dir)) - dir_list_add (l, dir); -} - -/* The cache. Typically, several paths have the same element; for - example, /usr/local/lib/texmf/fonts//. We don't want to compute the - expansion of such a thing more than once. Even though we also cache - the dir_links call, that's not enough -- without this path element - caching as well, the execution time doubles. */ - -typedef struct -{ - const_string key; - str_llist_type *value; -} cache_entry; - -static cache_entry *the_cache = NULL; -static unsigned cache_length = 0; - - -/* Associate KEY with VALUE. We implement the cache as a simple linear - list, since it's unlikely to ever be more than a dozen or so elements - long. We don't bother to check here if PATH has already been saved; - we always add it to our list. We copy KEY but not VALUE; not sure - that's right, but it seems to be all that's needed. */ - -static void -cache P2C(const_string, key, str_llist_type *, value) -{ - cache_length++; - XRETALLOC (the_cache, cache_length, cache_entry); - the_cache[cache_length - 1].key = xstrdup (key); - the_cache[cache_length - 1].value = value; -} - - -/* To retrieve, just check the list in order. */ - -static str_llist_type * -cached P1C(const_string, key) -{ - unsigned p; - - for (p = 0; p < cache_length; p++) - { - if (STREQ (the_cache[p].key, key)) - return the_cache[p].value; - } - - return NULL; -} - -/* Handle the magic path constructs. */ - -/* Declare recursively called routine. */ -static void expand_elt P3H(str_llist_type *, const_string, unsigned); - - -/* POST is a pointer into the original element (which may no longer be - ELT) to just after the doubled DIR_SEP, perhaps to the null. Append - subdirectories of ELT (up to ELT_LENGTH, which must be a /) to - STR_LIST_PTR. */ - -static void -do_subdir P4C(str_llist_type *, str_list_ptr, const_string, elt, - unsigned, elt_length, const_string, post) -{ - DIR *dir; - struct dirent *e; - fn_type name; - - /* Some old compilers don't allow aggregate initialization. */ - name = fn_copy0 (elt, elt_length); - - assert (IS_DIR_SEP (elt[elt_length - 1])); - - /* If we can't open it, quit. */ - dir = opendir (FN_STRING (name)); - if (dir == NULL) - { - fn_free (&name); - return; - } - - /* Include top level before subdirectories, if nothing to match. */ - if (*post == 0) - dir_list_add (str_list_ptr, FN_STRING (name)); - else - { /* If we do have something to match, see if it exists. For - example, POST might be `pk/ljfour', and they might have a - directory `$TEXMF/fonts/pk/ljfour' that we should find. */ - fn_str_grow (&name, post); - if (dir_p (FN_STRING (name))) - dir_list_add (str_list_ptr, FN_STRING (name)); - fn_shrink_to (&name, elt_length); - } - - while ((e = readdir (dir)) != NULL) - { /* If it begins with a `.', never mind. (This allows ``hidden'' - directories that the algorithm won't find.) */ - if (e->d_name[0] != '.') - { - int links; - - /* Construct the potential subdirectory name. */ - fn_str_grow (&name, e->d_name); - - /* If we can't stat it, or if it isn't a directory, continue. */ - links = dir_links (FN_STRING (name)); - - if (links >= 0) - { - unsigned potential_len = FN_LENGTH (name); - - /* It's a directory, so append the separator. */ - fn_str_grow (&name, DIR_SEP_STRING); - - if (*post != 0) - { - fn_str_grow (&name, post); - /* Unfortunately we can't check if the new element is - a leaf directory, because we don't have a directory - name here, we just have a path spec. This means we - may descend into a leaf directory cm/pk, if the - spec is ...fonts//pk//. */ - expand_elt (str_list_ptr, FN_STRING (name), potential_len); - fn_shrink_to (&name, potential_len); - } - - /* Should we recurse? To see if the subdirectory is a - leaf, check if it has two links (one for . and one for - ..). This means that symbolic links to directories do - not affect the leaf-ness. This is arguably wrong, but - the only alternative I know of is to stat every entry - in the directory, and that is unacceptably slow. - - The #ifdef here makes all this configurable at - compile-time, so that if we're using VMS directories or - some such, we can still find subdirectories, even if it - is much slower. */ -#ifdef UNIX_ST_NLINK - if (links > 2) -#endif - /* All criteria are met; find subdirectories. */ - do_subdir (str_list_ptr, FN_STRING (name), - potential_len, post); -#ifdef UNIX_ST_NLINK - else if (*post == 0) - /* Nothing to match, no recursive subdirectories to - look for: we're done with this branch. Add it. */ - dir_list_add (str_list_ptr, FN_STRING (name)); -#endif - } - - /* Remove the directory entry we just checked from `name'. */ - fn_shrink_to (&name, elt_length); - } - } - - fn_free (&name); - xclosedir (dir); -} - - -/* Assume ELT is non-empty and non-NULL. Return list of corresponding - directories (with no terminating NULL entry) in STR_LIST_PTR. Start - looking for magic constructs at START. */ - -static void -expand_elt P3C(str_llist_type *, str_list_ptr, const_string, elt, - unsigned, start) -{ - boolean found_special = false; - const_string dir = elt + start; - - while (*dir != 0) - { - if (IS_DIR_SEP (*dir)) - { - /* If two consecutive directory separators, find subdirectories. */ - if (IS_DIR_SEP (dir[1])) - { - do_subdir (str_list_ptr, elt, dir - elt + 1, dir + 2); - found_special = true; - } -#if 0 -/* Maybe eventually I'll implement this, but probably not. */ - /* If /?, make following component optional. */ - else if (dir[1] == '?') - do_optional (str_list_ptr, elt, dir - elt + 1, dir + 2); -#endif - /* No special stuff at this slash. Keep going. */ - } - - dir++; - } - - if (!found_special) - /* When we reach the end of ELT, it will be a normal filename. */ - checked_dir_list_add (str_list_ptr, elt); -} - -/* Here is the entry point. Returns directory list for ELT. */ - -str_llist_type * -kpse_element_dirs P1C(const_string, elt) -{ - str_llist_type *ret; - - /* If given nothing, return nothing. */ - if (!elt) - return NULL; - - /* If we've already cached the answer for ELT, return it. */ - ret = cached (elt); - if (ret) - return ret; - - /* We're going to have a real directory list to return. */ - ret = XTALLOC1 (str_llist_type); - *ret = NULL; - - /* If ELT is the empty string, just return cwd. */ - if (*elt == 0) - { /* Some old compilers do not support aggregate initialization. */ - char cwd[3]; - cwd[0] = '.'; - cwd[1] = DIR_SEP; - cwd[2] = 0; - - checked_dir_list_add (ret, cwd); - } - - /* OK, so much for the trivial cases. We handle the hard case in - a subroutine. */ - else - { - /* If the path starts with ~ or ~user, expand it. Do this - before calling `expand_subdir' or `add_directory', so that - we don't expand the same ~ over and over. */ - string dir = kpse_expand (elt); - - expand_elt (ret, dir, 0); - - free (dir); - } - - /* Remember the directory list we just found, in case future calls are - made with the same ELT. */ - cache (elt, ret); - -#ifdef DEBUG - if (KPSE_DEBUG_P (KPSE_DEBUG_EXPAND)) - { - DEBUGF1 ("path element %s =>", elt); - if (ret) - { - str_llist_elt_type *e; - for (e = *ret; e; e = STR_LLIST_NEXT (*e)) - fprintf (stderr, " %s", STR_LLIST (*e)); - } - putc ('\n', stderr); - fflush (stderr); - } -#endif - - return ret; -} - -#ifdef TEST - -void -print_element_dirs (const_string elt) -{ - str_llist_type *dirs; - - printf ("Directories of %s:\t", elt ? elt : "(null)"); - fflush (stdout); - - dirs = kpse_element_dirs (elt); - - if (!dirs) - printf ("(null)"); - else - { - str_llist_elt_type *dir; - for (dir = *dirs; dir; dir = STR_LLIST_NEXT (*dir)) - { - string d = STR_LLIST (*dir); - printf ("%s ", *d ? d : "`'"); - } - } - - putchar ('\n'); -} - -int -main () -{ - /* DEBUG_SET (DEBUG_STAT); */ - - /* All lists end with NULL. */ - print_element_dirs (NULL); /* */ - print_element_dirs (""); /* ./ */ - print_element_dirs ("/k"); /* */ - print_element_dirs (".//"); /* ./ ./archive/ */ - print_element_dirs (".//archive"); /* ./ ./archive/ */ - print_element_dirs ("/tmp/fonts//"); /* no need to stat anything */ - print_element_dirs ("/usr/local/lib/tex/fonts//"); /* lots */ - print_element_dirs ("/usr/local/lib/tex/fonts//times"); /* just one */ - print_element_dirs ("/usr/local/lib/tex/fonts//"); /* lots again [cache] */ - print_element_dirs ("~karl"); /* tilde expansion */ - print_element_dirs ("$karl"); /* variable expansion */ - print_element_dirs ("~${LOGNAME}"); /* both */ - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -test-compile-command: "gcc -g -I. -I.. -DTEST elt-dirs.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/expand.c --- a/kpathsea/expand.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -/* expand.c: general expansion. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include - - -/* Do variable expansion so ~${USER} will work. (Besides, it's what the - shells do.) */ - -string -kpse_expand P1C(const_string, s) -{ - string var_expansion = kpse_var_expand (s); - string tilde_expansion = kpse_tilde_expand (var_expansion); - - /* `kpse_var_expand' always gives us new memory; `kpse_tilde_expand' - doesn't, necessarily. So be careful that we don't free what we are - about to return. */ - if (tilde_expansion != var_expansion) - free (var_expansion); - - return tilde_expansion; -} - - -/* Be careful to not waste all the memory we allocate for each element. */ - -string -kpse_path_expand P1C(const_string, path) -{ - string elt; - string ret = xmalloc (1); /* so we can free it */ - *ret = 0; - - for (elt = kpse_path_element (path); elt; elt = kpse_path_element (NULL)) - { - string save_ret = ret; - string elt_exp = kpse_expand (elt); - ret = concat3 (ret, elt_exp, ENV_SEP_STRING); - free (elt_exp); - free (save_ret); - } - - /* Waste the last byte. */ - ret[strlen (ret) - 1] = 0; - - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/expand.h --- a/kpathsea/expand.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* expand.h: general expansion. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_EXPAND_H -#define KPATHSEA_EXPAND_H - -#include -#include - -/* Call kpse_var_expand and kpse_tilde_expand (in that order). Result - is always in fresh memory, even if no expansions were done. */ -extern string kpse_expand P1H(const_string s); - -/* Call `kpse_expand' on each element of the result; return the final - expansion (always in fresh memory, even if no expansions were - done). We don't call `kpse_expand_default' because there is a whole - sequence of defaults to run through; see `kpse_init_format'. */ -extern string kpse_path_expand P1H(const_string path); - -#endif /* not KPATHSEA_EXPAND_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/extend-fname.c --- a/kpathsea/extend-fname.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* extend-fname.c: give a filename a suffix, if necessary. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -/* We may or may not return NAME. It's up to the caller not to assume - the return value is modifiable. */ - -string -extend_filename P2C(const_string, name, const_string, default_suffix) -{ - string new_s; - const_string suffix = find_suffix (name); - - new_s = suffix == NULL ? concat3 (name, ".", default_suffix) - : (string) name; - return new_s; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/file-p.c --- a/kpathsea/file-p.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* file-p.c: file predicates. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -/* Test whether FILENAME1 and FILENAME2 are actually the same file. If - stat fails on either of the names, we return false, without error. */ - -boolean -same_file_p P2C(const_string, filename1, const_string, filename2) -{ - struct stat sb1, sb2; - /* These are put in variables only so the results can be inspected - under gdb. */ - int r1 = stat (filename1, &sb1); - int r2 = stat (filename2, &sb2); - - return r1 == 0 && r2 == 0 ? SAME_FILE_P (sb1, sb2) : false; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/find-suffix.c --- a/kpathsea/find-suffix.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* find-suffix.c: return the stuff after a dot. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -/* Return pointer to first character after `.' in last directory element - of NAME. If the name is `foo' or `/foo.bar/baz', we have no extension. */ - -string -find_suffix P1C(const_string, name) -{ - const_string slash_pos; - string dot_pos = strrchr (name, '.'); - - if (dot_pos == NULL) - return NULL; - - for (slash_pos = name + strlen (name) + 1; - slash_pos > dot_pos && !IS_DIR_SEP (*slash_pos); - slash_pos--) - ; - - return slash_pos > dot_pos ? NULL : dot_pos + 1; -} - diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/fn.c --- a/kpathsea/fn.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* fn.c: arbitrarily long filenames (or just strings). - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -/* /usr/local/lib/texmf/fonts/public/cm/pk/ljfour/cmr10.300pk is 58 - chars, so ASCII `K' seems a good choice. */ -#define CHUNK_SIZE 75 - - -fn_type -fn_init P1H(void) -{ - fn_type ret; - - FN_ALLOCATED (ret) = FN_LENGTH (ret) = 0; - FN_STRING (ret) = NULL; - - return ret; -} - - -fn_type -fn_copy0 P2C(const_string, s, unsigned, len) -{ - fn_type ret; - - FN_ALLOCATED (ret) = CHUNK_SIZE > len ? CHUNK_SIZE : len + 1; - FN_STRING (ret) = xmalloc (FN_ALLOCATED (ret)); - - strncpy (FN_STRING (ret), s, len); - FN_STRING (ret)[len] = 0; - FN_LENGTH (ret) = len + 1; - - return ret; -} - -/* Don't think we ever try to free something that might usefully be - empty, so give fatal error if nothing allocated. */ - -void -fn_free P1C(fn_type *, f) -{ - assert (FN_STRING (*f) != NULL); - free (FN_STRING (*f)); - FN_STRING (*f) = NULL; - FN_ALLOCATED (*f) = 0; - FN_LENGTH (*f) = 0; -} - -/* An arithmetic increase seems more reasonable than geometric. We - don't increase the length member since it may be more convenient for - the caller to add than subtract when appending the stuff that will - presumably follow. */ - -static void -grow P2C(fn_type *, f, unsigned, len) -{ - while (FN_LENGTH (*f) + len > FN_ALLOCATED (*f)) - { - FN_ALLOCATED (*f) += CHUNK_SIZE; - XRETALLOC (FN_STRING (*f), FN_ALLOCATED (*f), char); - } -} - - -void -fn_1grow P2C(fn_type *, f, char, c) -{ - grow (f, 1); - FN_STRING (*f)[FN_LENGTH (*f)] = c; - FN_LENGTH (*f)++; -} - - -void -fn_grow P3C(fn_type *, f, address, source, unsigned, len) -{ - grow (f, len); - strncpy (FN_STRING (*f) + FN_LENGTH (*f), source, len); - FN_LENGTH (*f) += len; -} - - -void -fn_str_grow P2C(fn_type *, f, const_string, s) -{ - unsigned more_len = strlen (s); - grow (f, more_len); - strcat (FN_STRING (*f), s); - FN_LENGTH (*f) += more_len; -} - - -void -fn_shrink_to P2C(fn_type *, f, unsigned, loc) -{ - assert (FN_LENGTH (*f) > loc); - FN_STRING (*f)[loc] = 0; - FN_LENGTH (*f) = loc + 1; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/fn.h --- a/kpathsea/fn.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* fn.h: arbitrarily long filenames (or just strings). - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_FN_H -#define KPATHSEA_FN_H - -#include -#include - -/* Arbitrarily long filenames; it's inconvenient to use obstacks here, - because we want to maintain a null terminator. Also used for - dynamically growing strings even when the null byte isn't necessary, - e.g., in `variable.c', since I don't want to pass obstacks around - everywhere, and one can't free parts of an obstack arbitrarily. */ - -typedef struct -{ - string str; - unsigned allocated; - unsigned length; /* includes the terminating null byte, if any */ -} fn_type; - -#define FN_STRING(fn) ((fn).str) -#define FN_ALLOCATED(fn) ((fn).allocated) -#define FN_LENGTH(fn) ((fn).length) - - -/* Create a new empty fn. */ -extern fn_type fn_init P1H(void); - -/* Create a new fn from the first LEN characters from S and a null. */ -extern fn_type fn_copy0 P2H(const_string s, unsigned len); - -/* Free what's been allocated. Can also just free the string if it's - been extracted out. Fatal error if nothing allocated in F. */ -extern void fn_free P1H(fn_type *f); - -/* Append the character C to the fn F. Don't append trailing null. */ -extern void fn_1grow P2H(fn_type *f, char c); - -/* Append LENGTH bytes from SOURCE to F. */ -extern void fn_grow P3H(fn_type *f, address source, unsigned length); - -/* Concatenate the component S to the fn F. Assumes string currently in - F is null terminated. */ -extern void fn_str_grow P2H(fn_type *f, const_string s); - -/* Add a null to F's string at position LOC, and update its length. - Fatal error if LOC is past the end of the string. */ -extern void fn_shrink_to P2H(fn_type *f, unsigned loc); - -#endif /* not KPATHSEA_FN_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/fontmap.c --- a/kpathsea/fontmap.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* fontmap.c: read a file for additional font names. - -Copyright (C) 1993, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include -#include - - -/* Look up KEY in MAP; if it's not found, remove any suffix from KEY and - try again. */ - -string * -map_lookup P2C(hash_table_type, map, const_string, key) -{ - string suffix = find_suffix (key); - string *ret = hash_lookup (map, key); - - if (!ret) - { - /* OK, the original KEY didn't work. Let's check for the KEY without - an extension -- perhaps they gave foobar.tfm, but the mapping only - defines `foobar'. */ - if (suffix) - { - string base_key = remove_suffix (key); - - ret = hash_lookup (map, base_key); - - free (base_key); - } - } - - /* Append the original suffix, if we had one. */ - if (ret && suffix) - while (*ret) - { - *ret = extend_filename (*ret, suffix); - ret++; - } - - return ret; -} - -/* Open and read the mapping file MAP_FILENAME, putting its entries into - MAP. Comments begin with % and continue to the end of the line. Each - line of the file defines an entry: the first word is the real - filename (e.g., `ptmr'), the second word is the alias (e.g., - `Times-Roman'), and any subsequent words are ignored. .tfm is added - if either the filename or the alias have no extension. This is the - same order as in Dvips' psfonts.map; unfortunately, we can't have TeX - read that same file, since most of the real filenames start with an - `r', because of the virtual fonts Dvips uses. */ - -static void -map_file_parse P2C(hash_table_type *, map, const_string, map_filename) -{ - extern FILE *xfopen (); /* In xfopen.c. */ - char *l; - unsigned map_lineno = 0; - FILE *f = xfopen (map_filename, FOPEN_R_MODE); - - while ((l = read_line (f)) != NULL) - { - string filename; - string comment_loc = strchr (l, '%'); - - map_lineno++; - - /* Ignore anything after a %. */ - if (comment_loc) - *comment_loc = 0; - - /* If we don't have any filename, that's ok, the line is blank. */ - filename = strtok (l, " \t"); - if (filename) - { - string alias = strtok (NULL, " \t"); - - /* But if we have a filename and no alias, something's wrong. */ - if (alias == NULL || *alias == 0) - fprintf (stderr, "%s:%u: Alias missing for filename `%s'.\n", - map_filename, map_lineno, filename); - else - { /* We've got everything. Insert the new entry. */ - hash_insert (map, xstrdup (alias), xstrdup (filename)); - } - } - - free (l); - } - - xfclose (f, map_filename); -} - -/* Search for all the MAP_NAME's in PATH. */ - -#define MAP_NAME "texfonts.map" - -hash_table_type -map_create P1C(const_string, path) -{ - string *filenames = kpse_all_path_search (path, MAP_NAME); - hash_table_type map; /* some old compilers ... */ - map = hash_create (751); - - while (*filenames) - { - map_file_parse (&map, *filenames); - filenames++; - } - - return map; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/fontmap.h --- a/kpathsea/fontmap.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* fontmap.h: declarations for reading a file to define additional font names. - -Copyright (C) 1993, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef FONTMAP_H -#define FONTMAP_H - -#include -#include -#include - - -/* Parse the file `texfonts.map' in each of the directories in PATH and - return the resulting structure. Entries in earlier files override - later files. */ -extern hash_table_type map_create P1H(const_string path); - - -/* Look up KEY in MAP, and return a null-terminated list of all matching - entries. If none, return NULL. */ -extern string *map_lookup P2H(hash_table_type map, const_string key); - -#endif /* not FONTMAP_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/freedom.texi --- a/kpathsea/freedom.texi Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,268 +0,0 @@ -@c Copyright (C) 1992 Karl Berry. -@c For copying conditions, see the file copying.texi. - -@node Freedom -@appendix Regain your programming freedom - -@cindex freedom, programming -Until a few years ago, programmers in the United States could write any -program they wished. This freedom has now been taken away by two -developments: software patents, which grant the patent holder an -absolute monopoly on some programming technique, and user interface -copyright, which forbid compatible implementations of an existing user -interface. - -In Europe, especially through the GATT treaty, things are rapidly -approaching the same pass. - -@menu -* Software patents:: Algorithm monopolies. -* User interface copyright:: Forbidding upward-compatibility. -* What to do?:: What to do? -@end menu - - -@node Software patents, User interface copyright, , Freedom -@section Software patents - -@cindex patents, software -@cindex software patents - -The U.S. Patent and Trademark Office has granted numerous software -patents on software techniques. Patents are an absolute -monopoly---independent reinvention is precluded. This monopoly lasts -for seventeen years, i.e., forever (with respect to computer science). - -One patent relevant to @TeX{} is patent 4,956,809, issued to the Mark -Williams company on September 11, 1990, applied for in 1982, which -covers (among other things) -@quotation -representing in a standardized order -consisting of a standard binary structure file stored on auxiliary -memory or transported on a communications means, said standardized -order being different from a different order used on at least one -of the different computers; - -Converting in each of the different computers binary data read from an -auxiliary data storage or communications means from the standardized -order to the natural order of the respective host computer after said -binary data are read from said auxiliary data storage or -communications means and before said binary data are used by the -respective host computer; and - -Converting in each of the different computers binary data written into -auxiliary data storage or communications means from the natural order -of the respective host computer to the standardized order prior to -said writing. -@end quotation - -@noindent @dots{} in other words, storing data on disk in -a machine-independent order, as the DVI, TFM, GF, and PK file formats -specify. Even though @TeX{} is ``prior art'' in this respect, the -patent was granted (the patent examiners not being computer scientists, -even less computer typographers). Since there is a strong presumption -in the courts of a patent's validity once it has been granted, there is -a good chance that users or implementors of @TeX{} could be successfully -sued on the issue. - -As another example, the X window system, which was intended to be able -to be used freely by everyone, is now being threatened by two patents: -4,197,590 on the use of exclusive-or to redraw cursors, held by Cadtrak, -a litigation company (this has been upheld twice in court); and -4,555,775, held by AT&T, on the use of backing store to redraw windows -quickly. - -Here is one excerpt from a recent mailing by the League for Programming -Freedom (@pxref{What to do?}) which I feel sums up the situation rather -well. It comes from an article in @cite{Think} magazine, issue #5, -1990. The comments after the quote were written by Richard Stallman. - -@quotation - ``You get value from patents in two ways,'' says Roger Smith, IBM - Assistant General Counsel, intellectual property law. ``Through fees, - and through licensing negotiations that give IBM access to other - patents. - - ``The IBM patent portfolio gains us the freedom to do what we need to - do through cross-licensing---it gives us access to the inventions of - others that are the key to rapid innovation. Access is far more - valuable to IBM than the fees it receives from its 9,000 active - patents. There's no direct calculation of this value, but it's many - times larger than the fee income, perhaps an order of magnitude - larger.'' -@end quotation - -This information should dispel the belief that the patent system will -``protect'' a small software developer from competition from IBM. IBM -can always find patents in its collection which the small developer is -infringing, and thus obtain a cross-license. - -However, the patent system does cause trouble for the smaller -companies which, like IBM, need access to patented techniques in order -to do useful work in software. Unlike IBM, the smaller companies do -not have 9,000 patents and cannot usually get a cross-license. No -matter how hard they try, they cannot have enough patents to do this. - -Only the elimination of patents from the software field can enable -most software developers to continue with their work. - -The value IBM gets from cross-licensing is a measure of the amount of -harm that the patent system would do to IBM if IBM could not avoid it. -IBM's estimate is that the trouble could easily be ten times the good -one can expect from one's own patents---even for a company with 9,000 -of them. - - -@node User interface copyright, What to do?, Software patents, Freedom -@section User interface copyright - -@cindex rms -@cindex user interface copyright -@cindex interface copyright -(This section is copied from the GCC manual, by Richard Stallman.) - -@quotation -@i{This section is a political message from the League for Programming -Freedom to the users of the GNU font utilities. It is included here as -an expression of support for the League on my part.} -@end quotation - -Apple, Lotus and Xerox are trying to create a new form of -legal monopoly: a copyright on a class of user interfaces. These -monopolies would cause serious problems for users and developers of -computer software and systems. - -Until a few years ago, the law seemed clear: no one could restrict -others from using a user interface; programmers were free to implement -any interface they chose. Imitating interfaces, sometimes with changes, -was standard practice in the computer field. The interfaces we know -evolved gradually in this way; for example, the Macintosh user interface -drew ideas from the Xerox interface, which in turn drew on work done at -Stanford and SRI. 1-2-3 imitated VisiCalc, and dBase imitated a -database program from JPL. - -Most computer companies, and nearly all computer users, were happy with -this state of affairs. The companies that are suing say it does not -offer ``enough incentive'' to develop their products, but they must have -considered it ``enough'' when they made their decision to do so. It -seems they are not satisfied with the opportunity to continue to compete -in the marketplace---not even with a head start. - -If Xerox, Lotus, and Apple are permitted to make law through -the courts, the precedent will hobble the software industry: - -@itemize @bullet -@item -Gratuitous incompatibilities will burden users. Imagine if each -car manufacturer had to arrange the pedals in a different order. - -@item -Software will become and remain more expensive. Users will be -``locked in'' to proprietary interfaces, for which there is no real -competition. - -@item -Large companies have an unfair advantage wherever lawsuits become -commonplace. Since they can easily afford to sue, they can intimidate -small companies with threats even when they don't really have a case. - -@item -User interface improvements will come slower, since incremental -evolution through creative imitation will no longer be permitted. - -@item -Even Apple, etc., will find it harder to make improvements if -they can no longer adapt the good ideas that others introduce, for -fear of weakening their own legal positions. Some users suggest that -this stagnation may already have started. - -@item -If you use GNU software, you might find it of some concern that user -interface copyright will make it hard for the Free Software Foundation -to develop programs compatible with the interfaces that you already -know. -@end itemize - - -@node What to do?, , User interface copyright, Freedom -@section What to do? - -(This section is copied from the GCC manual, by Richard Stallman.) - -To protect our freedom from lawsuits like these, a group of programmers -and users have formed a new grass-roots political organization, the -League for Programming Freedom. - -The purpose of the League is to oppose new monopolistic practices such -as user-interface copyright and software patents; it calls for a return -to the legal policies of the recent past, in which these practices were -not allowed. The League is not concerned with free software as an -issue, and not affiliated with the Free Software Foundation. - -The League's membership rolls include John McCarthy, inventor of Lisp, -Marvin Minsky, founder of the Artificial Intelligence lab, Guy L. -Steele, Jr., author of well-known books on Lisp and C, as well as -Richard Stallman, the developer of GNU CC. Please join and add your -name to the list. Membership dues in the League are $42 per year for -programmers, managers and professionals; $10.50 for students; $21 for -others. - -The League needs both activist members and members who only pay their -dues. - -To join, or for more information, phone (617) 492-0023 or write to: - -@display -League for Programming Freedom -1 Kendall Square #143 -P.O. Box 9171 -Boston, MA 02111-1307 -@end display - -You can also send electronic mail to @code{league@@prep.ai.mit.edu}. - -Here are some suggestions from the League for things you can do to -protect your freedom to write programs: - -@itemize @bullet -@item -Don't buy from Xerox, Lotus or Apple. Buy from their competitors or -from the defendants they are suing. - -@item -Don't develop software to work with the systems made by these companies. - -@item -Port your existing software to competing systems, so that you encourage -users to switch. - -@item -Write letters to company presidents to let them know their conduct -is unacceptable. - -@item -Tell your friends and colleagues about this issue and how it threatens -to ruin the computer industry. - -@item -Above all, don't work for the look-and-feel plaintiffs, and don't -accept contracts from them. - -@item -Write to Congress to explain the importance of this issue. - -@display -House Subcommittee on Intellectual Property -2137 Rayburn Bldg -Washington, DC 20515 - -Senate Subcommittee on Patents, Trademarks and Copyrights -United States Senate -Washington, DC 20510 -@end display - -(These committees have received lots of mail already; let's give them -even more.) -@end itemize - -Express your opinion! You can make a difference. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/getopt.c --- a/kpathsea/getopt.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,748 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu - before changing it! - - Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* This tells Alpha OSF/1 not to define a getopt prototype in . - Ditto for AIX 3.2 and . */ -#ifndef _NO_PROTO -#define _NO_PROTO -#endif - -#ifdef HAVE_CONFIG_H -#include -#endif - -#if !defined (__STDC__) || !__STDC__ -/* This is a separate conditional since some stdc systems - reject `defined (const)'. */ -#ifndef const -#define const -#endif -#endif - -#include - -/* 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. */ - -#if defined (_LIBC) || !defined (__GNU_LIBRARY__) - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -/* Don't include stdlib.h for non-GNU C libraries because some of them - contain conflicting prototypes for getopt. */ -#include -#endif /* GNU C library. */ - -/* This version of `getopt' appears to the caller like standard Unix `getopt' - but it behaves differently for the user, since it allows the user - to intersperse the options with the other arguments. - - As `getopt' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Setting the environment variable POSIXLY_CORRECT disables permutation. - Then the behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt.h" - -/* 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. */ - -char *optarg = NULL; - -/* 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 EOF, 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. */ - -/* XXX 1003.2 says this must be 1 before any call. */ -int optind = 0; - -/* The next char to be scanned in the option-element - in which the last option character we returned was found. - This allows us to pick up the scan where we left off. - - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - -static char *nextchar; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -int optopt = '?'; - -/* Describe how to deal with options that follow non-option ARGV-elements. - - If the caller did not specify anything, - the default is REQUIRE_ORDER if the environment variable - POSIXLY_CORRECT is defined, PERMUTE otherwise. - - REQUIRE_ORDER means don't recognize them as options; - stop option processing when the first non-option is seen. - This is what Unix does. - This mode of operation is selected by either setting the environment - variable POSIXLY_CORRECT, or using `+' as the first character - of the list of option characters. - - PERMUTE is the default. We permute the contents of ARGV as we scan, - so that eventually all the non-options are at the end. This allows options - to be given in any order, even with programs that were not written to - expect this. - - RETURN_IN_ORDER is an option available to programs that were written - to expect options and other ARGV-elements in any order and that care about - the ordering of the two. We describe each non-option ARGV-element - as if it were the argument of an option with character code 1. - Using `-' as the first character of the list of option characters - selects this mode of operation. - - The special argument `--' forces an end of option-scanning regardless - of the value of `ordering'. In the case of RETURN_IN_ORDER, only - `--' can cause `getopt' to return EOF with `optind' != ARGC. */ - -static enum -{ - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER -} ordering; - -/* Value of POSIXLY_CORRECT environment variable. */ -static char *posixly_correct; - -#ifdef __GNU_LIBRARY__ -/* We want to avoid inclusion of string.h with non-GNU libraries - because there are many ways it can cause trouble. - On some systems, it contains special magic macros that don't work - in GCC. */ -#include -#define my_index strchr -#else - -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -char *getenv (); - -static char * -my_index (str, chr) - const char *str; - int chr; -{ - while (*str) - { - if (*str == chr) - return (char *) str; - str++; - } - return 0; -} - -/* If using GCC, we can safely declare strlen this way. - If not using GCC, it is ok not to declare it. */ -#ifdef __GNUC__ -/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. - That was relevant to code that was here before. */ -#if !defined (__STDC__) || !__STDC__ -/* gcc with -traditional declares the built-in strlen to return int, - and has done so at least since version 2.4.5. -- rms. */ -extern int strlen (const char *); -#endif /* not __STDC__ */ -#endif /* __GNUC__ */ - -#endif /* not __GNU_LIBRARY__ */ - -/* Handle permutation of arguments. */ - -/* Describe the part of ARGV that contains non-options that have - been skipped. `first_nonopt' is the index in ARGV of the first of them; - `last_nonopt' is the index after the last of them. */ - -static int first_nonopt; -static int last_nonopt; - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. */ - -static void -exchange (argv) - char **argv; -{ - int bottom = first_nonopt; - int middle = last_nonopt; - int top = optind; - char *tem; - - /* Exchange the shorter segment with the far end of the longer segment. - That puts the shorter segment into the right place. - It leaves the longer segment in the right place overall, - but it consists of two parts that need to be swapped next. */ - - while (top > middle && middle > bottom) - { - if (top - middle > middle - bottom) - { - /* Bottom segment is the short one. */ - int len = middle - bottom; - register int i; - - /* Swap it with the top part of the top segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[top - (middle - bottom) + i]; - argv[top - (middle - bottom) + i] = tem; - } - /* Exclude the moved bottom segment from further swapping. */ - top -= len; - } - else - { - /* Top segment is the short one. */ - int len = top - middle; - register int i; - - /* Swap it with the bottom part of the bottom segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[middle + i]; - argv[middle + i] = tem; - } - /* Exclude the moved top segment from further swapping. */ - bottom += len; - } - } - - /* Update records for the slots the non-options now occupy. */ - - first_nonopt += (optind - last_nonopt); - last_nonopt = optind; -} - -/* Initialize the internal data when the first call is made. */ - -static const char * -_getopt_initialize (optstring) - const char *optstring; -{ - /* Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - first_nonopt = last_nonopt = optind = 1; - - nextchar = NULL; - - posixly_correct = getenv ("POSIXLY_CORRECT"); - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - ordering = REQUIRE_ORDER; - ++optstring; - } - else if (posixly_correct != NULL) - ordering = REQUIRE_ORDER; - else - ordering = PERMUTE; - - return optstring; -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns `EOF'. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return '?' after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return '?'. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - The elements of ARGV aren't really const, because we permute them. - But we pretend they're const in the prototype to be compatible - with other systems. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. */ - -int -_getopt_internal (argc, argv, optstring, longopts, longind, long_only) - int argc; - char *const *argv; - const char *optstring; - const struct option *longopts; - int *longind; - int long_only; -{ - optarg = NULL; - - if (optind == 0) - optstring = _getopt_initialize (optstring); - - if (nextchar == NULL || *nextchar == '\0') - { - /* Advance to the next ARGV-element. */ - - if (ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (last_nonopt != optind) - first_nonopt = optind; - - /* Skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (optind < argc - && (argv[optind][0] != '-' || argv[optind][1] == '\0')) - optind++; - last_nonopt = optind; - } - - /* The special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (optind != argc && !strcmp (argv[optind], "--")) - { - optind++; - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (first_nonopt == last_nonopt) - first_nonopt = optind; - last_nonopt = argc; - - optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (first_nonopt != last_nonopt) - optind = first_nonopt; - return EOF; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if ((argv[optind][0] != '-' || argv[optind][1] == '\0')) - { - if (ordering == REQUIRE_ORDER) - return EOF; - optarg = argv[optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Skip the initial punctuation. */ - - nextchar = (argv[optind] + 1 - + (longopts != NULL && argv[optind][1] == '-')); - } - - /* Decode the current option-ARGV-element. */ - - /* Check whether the ARGV-element is a long option. - - If long_only and the ARGV-element has the form "-f", where f is - a valid short option, don't consider it an abbreviated form of - a long option that starts with f. Otherwise there would be no - way to give the -f short option. - - On the other hand, if there's a long option "fubar" and - the ARGV-element is "-fu", do consider that an abbreviation of - the long option, just like "--fu", and not "-f" with arg "u". - - This distinction seems to be the most useful approach. */ - - if (longopts != NULL - && (argv[optind][1] == '-' - || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound; - int option_index; - - for (nameend = nextchar; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, nextchar, nameend - nextchar)) - { - if (nameend - nextchar == strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, "%s: option `%s' is ambiguous\n", - argv[0], argv[optind]); - nextchar += strlen (nextchar); - optind++; - return '?'; - } - - if (pfound != NULL) - { - option_index = indfound; - optind++; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = nameend + 1; - else - { - if (opterr) - { - if (argv[optind - 1][1] == '-') - /* --option */ - fprintf (stderr, - "%s: option `--%s' doesn't allow an argument\n", - argv[0], pfound->name); - else - /* +option or -option */ - fprintf (stderr, - "%s: option `%c%s' doesn't allow an argument\n", - argv[0], argv[optind - 1][0], pfound->name); - } - nextchar += strlen (nextchar); - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, "%s: option `%s' requires an argument\n", - argv[0], argv[optind - 1]); - nextchar += strlen (nextchar); - return optstring[0] == ':' ? ':' : '?'; - } - } - nextchar += strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[optind][1] == '-' - || my_index (optstring, *nextchar) == NULL) - { - if (opterr) - { - if (argv[optind][1] == '-') - /* --option */ - fprintf (stderr, "%s: unrecognized option `--%s'\n", - argv[0], nextchar); - else - /* +option or -option */ - fprintf (stderr, "%s: unrecognized option `%c%s'\n", - argv[0], argv[optind][0], nextchar); - } - nextchar = (char *) ""; - optind++; - return '?'; - } - } - - /* Look at and handle the next short option-character. */ - - { - char c = *nextchar++; - char *temp = my_index (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*nextchar == '\0') - ++optind; - - if (temp == NULL || c == ':') - { - if (opterr) - { - if (posixly_correct) - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); - else - fprintf (stderr, "%s: invalid option -- %c\n", argv[0], c); - } - optopt = c; - return '?'; - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*nextchar != '\0') - { - optarg = nextchar; - optind++; - } - else - optarg = NULL; - nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, "%s: option requires an argument -- %c\n", - argv[0], c); - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - nextchar = NULL; - } - } - return c; - } -} - -int -getopt (argc, argv, optstring) - int argc; - char *const *argv; - const char *optstring; -{ - return _getopt_internal (argc, argv, optstring, - (const struct option *) 0, - (int *) 0, - 0); -} - -#endif /* _LIBC or not __GNU_LIBRARY__. */ - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (argc, argv) - int argc; - char **argv; -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == EOF) - break; - - switch (c) - { - 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 '?': - 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 */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/getopt.h --- a/kpathsea/getopt.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 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 EOF, 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__ -#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__ */ -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 */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/getopt1.c --- a/kpathsea/getopt1.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ -/* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994 - Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifdef HAVE_CONFIG_H -#include -#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 - -/* 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. */ - -#if defined (_LIBC) || !defined (__GNU_LIBRARY__) - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -#include -#else -char *getenv (); -#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 /* _LIBC or not __GNU_LIBRARY__. */ - -#ifdef TEST - -#include - -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 == EOF) - 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 */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/getpagesize.h --- a/kpathsea/getpagesize.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* Emulate getpagesize on systems that lack it. */ - -#ifndef HAVE_GETPAGESIZE - -#ifdef VMS -#define getpagesize() 512 -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef _SC_PAGESIZE -#define getpagesize() sysconf(_SC_PAGESIZE) -#else - -#include - -#ifdef EXEC_PAGESIZE -#define getpagesize() EXEC_PAGESIZE -#else -#ifdef NBPG -#define getpagesize() NBPG * CLSIZE -#ifndef CLSIZE -#define CLSIZE 1 -#endif /* no CLSIZE */ -#else /* no NBPG */ -#ifdef NBPC -#define getpagesize() NBPC -#endif /* NBPC */ -#endif /* no NBPG */ -#endif /* no EXEC_PAGESIZE */ -#endif /* no _SC_PAGESIZE */ - -#endif /* not HAVE_GETPAGESIZE */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/hash.c --- a/kpathsea/hash.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* hash.c: hash table operations. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include - - -/* The hash function. We go for simplicity here. */ - -static unsigned -hash P2C(hash_table_type, table, const_string, key) -{ - unsigned n = 0; - - /* Our keys aren't often anagrams of each other, so no point in - weighting the characters. */ - while (*key != 0) - n = (n + n + *key++) % table.size; - - return n; -} - -hash_table_type -hash_create P1C(unsigned, size) -{ - unsigned b; - hash_table_type ret; - ret.buckets = XTALLOC (size, hash_element_type *); - ret.size = size; - - /* calloc's zeroes aren't necessarily NULL, according to ANSI, so be - safe. (Not that I know of any exceptions in reality.) */ - for (b = 0; b key = key; - new_elt->value = value; - new_elt->next = NULL; - - /* Insert the new element at the end of the list. */ - if (!table->buckets[n]) - /* first element in bucket is a special case. */ - table->buckets[n] = new_elt; - else - { - hash_element_type *loc = table->buckets[n]; - while (loc->next) /* Find the last element. */ - loc = loc->next; - loc->next = new_elt; /* Insert the new one after. */ - } -} - -/* Look up STR in MAP. Return a (dynamically-allocated) list of the - corresponding strings or NULL if no match. */ - -#ifdef DEBUG -/* Print the hash values as integers if this is nonzero. */ -boolean kpse_debug_hash_lookup_int = false; -#endif - -string * -hash_lookup P2C(hash_table_type, table, const_string, key) -{ - hash_element_type *p; - str_list_type ret; - unsigned n = hash (table, key); - ret = str_list_init (); - - /* Look at everything in this bucket. */ - for (p = table.buckets[n]; p != NULL; p = p->next) - if (STREQ (key, p->key)) - /* Cast because the general str_list_type shouldn't force const data. */ - str_list_add (&ret, (string) p->value); - - /* If we found anything, mark end of list with null. */ - if (STR_LIST (ret)) - str_list_add (&ret, NULL); - -#ifdef DEBUG - if (KPSE_DEBUG_P (KPSE_DEBUG_HASH)) - { - DEBUGF1 ("hash_lookup(%s) =>", key); - if (!STR_LIST (ret)) - fputs (" (null)\n", stderr); - else - { - string *r; - for (r = STR_LIST (ret); *r; r++) - { - putc (' ', stderr); - if (kpse_debug_hash_lookup_int) - fprintf (stderr, "%ld", (long) *r); - else - fputs (*r, stderr); - } - putc ('\n', stderr); - } - fflush (stderr); - } -#endif - - return STR_LIST (ret); -} - -/* We only print nonempty buckets, to decrease output volume. */ - -void -hash_print P1C(hash_table_type, table) -{ - unsigned b; - unsigned total_elements = 0, total_buckets = 0; - - for (b = 0; b < table.size; b++) - { - hash_element_type *bucket = table.buckets[b]; - - if (bucket) - { - unsigned len = 1; - hash_element_type *tb; - - total_buckets++; - printf ("%4d ", b); - - for (tb = bucket->next; tb != NULL; tb = tb->next) - len++; - printf (":%-5d", len); - total_elements += len; - - for (tb = bucket; tb != NULL; tb = tb->next) - printf (" %s=>%s", tb->key, tb->value); - - putchar ('\n'); - } - } - - printf ("%u buckets, %u nonempty (%u%%); %u entries, average chain %.1f.\n", - table.size, total_buckets, 100 * total_buckets / table.size, - total_elements, - total_buckets ? total_elements / (double) total_buckets : 0.0); -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/hash.h --- a/kpathsea/hash.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* hash.h: declarations for a hash table. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef HASH_H -#define HASH_H - -#include -#include - - -/* A single (key,value) pair. */ -typedef struct hash_element_struct -{ - const_string key; - const_string value; - struct hash_element_struct *next; -} hash_element_type; - -/* The usual arrangement of buckets initialized to null. */ -typedef struct -{ - hash_element_type **buckets; - unsigned size; -} hash_table_type; - -#ifdef DEBUG -/* How to print the hash results when debugging. */ -extern boolean kpse_debug_hash_lookup_int; -#endif - -/* Create a hash table of size SIZE. */ -extern hash_table_type hash_create P1H(unsigned size); - -/* Insert the (KEY,VALUE) association into TABLE. KEY may have more - than one VALUE. Neither KEY nor VALUE is copied. */ -extern void hash_insert P3H(hash_table_type *table, const_string key, - const_string value); - -/* Look up KEY in MAP, and return NULL-terminated list of all matching - values (not copies), in insertion order. If none, return NULL. */ -extern string *hash_lookup P2H(hash_table_type table, const_string key); - -/* Print TABLE to stdout. */ -extern void hash_print P1H(hash_table_type table); - -#endif /* not HASH_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/install.texi --- a/kpathsea/install.texi Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -@c install.texi -- this file is the installation items common to -@c kpathsea-using programs. It's included by kpathsea.texi and dvips.texi. - -@item -@vindex CFLAGS -@flindex paths.make@r{, editing} -Edit the file @file{make/paths.make} if you want to make changes to the -installation directories or paths that will have effect across different -runs of @code{configure}. Alternatively, override the Make variables on -the command line when you run Make. - -@cindex installation directories, changing -Exception: to reliably change the top-level @samp{prefix}, you must give -@samp{configure} the option @samp{-prefix=@var{prefix}}, instead of -changing the value in @file{paths.make}. - -@item -@cindex paths, changing default -Edit @file{kpathsea/texmf.cnf.in} to change the local paths to match your -local setup. @xref{Default paths, , , kpathsea, Kpathsea}, for more -details on changing the paths. A copy is in @file{kpathsea/INSTALL}. -See @file{kpathsea/HIER} for an explanation of the default setup. - -If the paths do not match where the files actually are, the programs -will probably start up Very, Very, Slowly, and/or not be able to find -the fonts or other input files. - -@item -@flindex configure@r{, running} -@flindex CONFIG -@flindex kpathsea/CONFIG -@flindex c-auto.h.in -@flindex Makefile.in -@findex ac_include -@cindex @@@var{var}@@ substitutions -@cindex system dependencies -@code{sh configure} (in the top-level directory). This makes -system-dependent @samp{#define's} in @file{*/c-auto.h} (from the -corresponding @file{c-auto.h.in}) and creates a @file{Makefile} (from -the corresponding @file{Makefile.in}, by doing @samp{@@@var{var}@@} and -@samp{ac_include} substitutions). - -Perhaps the most common desire is to compile with optimization instead -of or as well as debugging. You can change the options passed to the -compiler by changing @samp{CFLAGS}, either for @code{configure} or -@code{make}. For example: - -@example -prompt$ env CFLAGS="-g -O" configure -prompt$ make -@exdent @r{or} -prompt$ configure -prompt$ make CFLAGS="-g -O" -@end example - -@noindent @xref{Invoking configure, , Running @code{configure} scripts, -autoconf, Autoconf}, for detailed @code{configure} options. (A copy is -in @file{kpathsea/CONFIGURE}.) - -@item -@code{make} (still in the top-level directory). Barring configuration -and compiler bugs, this will compile all the programs. @xref{Common -problems, , Common problems, kpathsea, Kpathsea}, for system-dependent -problems (this section is also in @file{kpathsea/INSTALL}). - -This also creates the @file{texmf.cnf} and @file{paths.h} files that -define the default search paths. diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/itoa.c --- a/kpathsea/itoa.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* itoa.c: convert an int to a string. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -string -itoa P1C(int, i) -{ - char a[MAX_INT_LENGTH]; - - sprintf (a, "%d", i); - return xstrdup (a); -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/kdefault.c --- a/kpathsea/kdefault.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* kdefault.c: Expand extra colons. - (This is not named default.c because then the OSF/1 make tries to - make a program `default' from it, since we have a target `default'; - and OSF/1 make doesn't understand .PHONY.) - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include - - -/* Check for leading colon first, then trailing, then doubled, since - that is fastest. Usually it will be leading or trailing. */ - -string -kpse_expand_default P2C(const_string, path, const_string, fallback) -{ - unsigned path_length; - string expansion; - - /* The default path better not be null. */ - assert (fallback); - - if (path == NULL) - expansion = (string) fallback; - - /* Solitary or leading :? */ - else if (IS_ENV_SEP (*path)) - { - expansion = path[1] == 0 ? (string) fallback : concat (fallback, path); - } - - /* Sorry about the assignment in the middle of the expression, but - conventions were made to be flouted and all that. I don't see the - point of calling strlen twice or complicating the logic just to - avoid the assignment (especially now that I've pointed it out at - such great length). */ - else if (path[(path_length = strlen (path)) - 1] == ENV_SEP) - expansion = concat (path, fallback); - - /* OK, not leading or trailing. Check for doubled. */ - else - { - const_string loc; - - /* What we'll return if we find none. */ - expansion = (string) path; - - for (loc = path; *loc && expansion == path; loc++) - { - if (IS_ENV_SEP (loc[0]) && IS_ENV_SEP (loc[1])) - { /* We have a doubled colon. */ - expansion = xmalloc (path_length + strlen (fallback) + 1); - - /* Copy stuff up to and including the first colon. */ - strncpy (expansion, path, loc - path + 1); - expansion[loc - path + 1] = 0; - - /* Copy in FALLBACK, and then the rest of PATH. */ - strcat (expansion, fallback); - strcat (expansion, loc + 1); - } - } - } - - return expansion; -} - -#ifdef TEST - -void -test_expand_default (const_string path, const_string def) -{ - string answer; - - printf ("Expansion of `%s':\t", path ? path : "(null)"); - answer = kpse_expand_default (path, def); - puts (answer); -} - -int -main () -{ - string default_path = "default"; - - test_expand_default (NULL, default_path); - test_expand_default ("", default_path); - test_expand_default ("none", default_path); - test_expand_default (":", default_path); - test_expand_default (":first", default_path); - test_expand_default ("last:", default_path); - test_expand_default ("middle::elddim", default_path); - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -standalone-compile-command: "gcc -g -I. -I.. -DTEST default.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/kpathsea.texi --- a/kpathsea/kpathsea.texi Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2088 +0,0 @@ -\input texinfo -@setfilename kpathsea.info -@settitle Kpathsea: A library for path searching - -@set version 2.6 -@set month-year January 1995 - -@c Define new indices for commands, filenames, and options. -@defcodeindex cm -@defcodeindex fl -@defcodeindex op - -@c Put everything in one index (arbitrarily chosen to be the concept index). -@syncodeindex cm cp -@syncodeindex fl cp -@syncodeindex fn cp -@syncodeindex ky cp -@syncodeindex op cp -@syncodeindex pg cp -@syncodeindex tp cp -@syncodeindex vr cp - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Kpathsea: (kpathsea). File lookup along search paths. -END-INFO-DIR-ENTRY -@end format - -This file documents the Kpathsea library for path searching. - -Copyright (C) 1993, 94, 95 Karl Berry. - -Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -sections entitled ``Freedom'' and ``GNU General Public License'' are -included exactly as in the original, and provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the sections entitled ``Freedom'' and ``GNU General Public -License'' may be included in a translation approved by the Free Software -Foundation instead of in the original English. -@end ifinfo - - -@titlepage - -@title Kpathsea library -@subtitle for version @value{version} -@subtitle @value{month-year} -@author Karl Berry - -@page - -@vskip 0pt plus 1filll -Copyright @copyright{} 1993, 94 Karl Berry. - -Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -sections entitled ``Regain your programming freedom'' and ``GNU General -Public License'' are included exactly as in the original, and provided -that the entire resulting derived work is distributed under the terms of -a permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the sections entitled ``Regain your programming freedom'' -and ``GNU General Public License'' may be included in a translation -approved by the Free Software Foundation instead of in the original English. - -@end titlepage - - -@ifinfo -@node Top -@top Kpathsea library - -This manual documents how to install and use the Kpathsea library for -filename lookup. It corresponds to version @value{version} -(released in @value{month-year}). - -@menu -* Introduction:: Overview. -* Installation:: Compilation, installation, and bug reporting. -* Debugging:: Analyzing runtime problems. - -* Path searching:: How filename lookups work. -* TeX searching:: Special support for TeX lookups. - -* TeX directory structure:: Ways to manage the many input files. - -* Programming:: How to use the library in your program. - -* Copying:: Conditions for copying, modifying and sharing. -* Freedom:: Regain your programming freedom. -* Index:: General index. -@end menu -@end ifinfo - - -@node Introduction -@chapter Introduction - -@cindex introduction -@cindex fundamental purpose - -This manual corresponds to version @value{version} of the Kpathsea -library, released in @value{month-year}. - -The library's fundamental purpose is to look up a file in a list of -directories specified by the user, similar to what shells do when -looking up program names to execute. - -@cindex programs using the library -The following software, all of which I maintain, uses this library: - -@itemize @bullet -@item Dviljk -@item Dvipsk (@pxref{Top, , Introduction, dvipsk, Dvips: A DVI driver}) -@item GNU font utilities (@pxref{Top, , Introduction, fontu, GNU font -utilities}) -@item Web2c (@pxref{Top, , Introduction, web2c, Web2c: A @TeX{} -implementation}) -@item Xdvik -@end itemize - -@cindex interface, not frozen -The library is still under development (and probably always will be, -despite my hopes). I do not promise to keep the interface unchanged. If -you have comments or suggestions, please send them to me -(@pxref{Reporting bugs}). - -@cindex conditions for use -@cindex license for using the library -@cindex GNU General Public License -Currently, I distribute the library under the GNU General Public License -(@pxref{Copying}). In short, this means if you write a program using -the library, you must (offer to) distribute the source, and allow anyone -to modify the source and distribute their modifications. - -@cindex GNU Library General Public License -If you have a problem with this, contact me. I would consider putting -the library under the GNU Library General Public License, which would -permit you to distribute the source only to the library, not to your -program using it. But I will only do this if someone actually says they -will not use the library under the GPL conditions, and would use it -under the LGPL. - -@cindex @TeX{} Users Group -If you know enough about @TeX{} to be reading this manual, then you (or -perhaps your institution) should consider joining the @TeX{} Users Group -(if you're already a member, great!). TUG produces a periodical called -@cite{TUGboat}, sponsors an annual meeting (the proceedings of which are -published in @cite{TUGboat}), and arranges courses on @TeX{} for all levels -of users. Given sufficient funding (which your joining will help) TUG -could sponsor more projects that will benefit the @TeX{} community, such as -a successor to @TeX{} -@iftex -$\pi$ -@end iftex -@ifinfo -pi -@end ifinfo -. Anyway, here is the address: - -@flindex tug@@tug.org -@display -@TeX{} Users Group -P.O. Box 869 -Santa Barbara, CA 93102 USA -phone: (805) 899-4673 -email: @samp{tug@@tug.org} -@end display - -@menu -* History:: -@end menu - -@node History -@section History - -@cindex history of Kpathsea - -@cindex Knuth, Donald E. -(This section is for those people who are curious about how this came about.) -(If you like to read historical accounts of software, I urge you to seek -out the GNU Autoconf manual and, even more fun, the ``Errors of -@TeX{}'' paper that Don Knuth published in @cite{Software---Practice and -Experience}.) - -@cindex Morgan, Tim -@cindex Rokicki, Tom -My first ChangeLog entry for Web2c seems to be February 1990, but I may -have done some stuff before then. In any case, Tim Morgan and I were -sort of jointly maintaining it for a time. (I should say that Tim had -made Web2c into a real distribution long before I had ever used it or -even heard of it, and Tom Rokicki did the original implementation.) - -It must have been later in 1990 and 1991 that I started working on -@cite{TeX for the Impatient} and Dvips, Xdvi, Web2c, and the GNU -fontutils (which I was also writing at the time) using different -environment variables, and, even more importantly, having different bugs -in their path searching became extremely painful. I also desperately -wanted to implement subdirectory searching, since I couldn't stand -putting everything in one big directory, and also couldn't stand having -to explicitly specify @file{pandora}, @file{cm} in a path. - -@cindex Vojta, Paul -In the first incarnation, I just hacked separately on each program--- -that was the original subdirectory searching code in both Xdvi and -Dvips, though I think Paul Vojta has completely rewritten Xdvi's support -by now. That is, I tried to go with the flow in each program, rather -than changing the program's calling sequences to conform to common -routines. - -Then, as bugs inevitably appeared, I found I was fixing the same thing -in each of three (Web2c and fontutils were always sharing code, since I -maintained those---there was no Dvipsk or Xdvik or Dviljk at this -point). After a while, I finally started sharing source files. They -weren't a library, though. I just kept things up to date with shell -scripts. (I was developing on a 386 running ISC 2.2 at the time, and so -didn't have symbolic links. An awful experience.) - -Things kept on like this for quite a while. The @file{ChangeLog}s for -Xdvik and Dvipsk record initial releases of those distributions in May -and June 1992. I think it was because I was tired of the different -configuration strategies of each program, not so much because of the -path searching. (Autoconf was being developed by David MacKenzie and -others, and I was adapting it to @TeX{} and friends.) - -@cindex zuhn, david -I starting to make it a separate library that other programs could link -with on my birthday in April 1993, according to the ChangeLog. I don't -remember exactly why I finally took the time to make it a separate -library; I think it was a conversation with david zuhn that led to doing -it. Just seemed like it was time. - -@cindex Walsh, Norman -@cindex Neumann, Gustaf -Dviljk got started in March 1994 after I bought a Laserjet 4. (Kpathsea -work got suspended while Norm Walsh and I, with Gustaf Neumann's help, -implemented a way for @TeX{} to get at all those neat builtin LJ4 fonts -... such a treat to have something to typeset in besides Palatino!) - -At this point (October 1994), I've implemented just about all the -path-searching features in Kpathsea that I ever intended to (and some I -didn't intend @dots{}). After the next stable release of Web2c, I figure -I'll be able to stop development, and turn most of my attention back to -making fonts for GNU. (Always assuming Microsoft hasn't completely -obliterated Unix by then, or that software patents haven't stopped -software development by anybody smaller than a company with a -million-dollar-a-year legal budget. Which is actually what I think is -likely to happen, but that's another story@dots{}) - - -@node Installation -@chapter Installation - -@cindex installation -@cindex configuration -@cindex compilation - -Here are the basic steps for configuration and installation: - -@enumerate - -@include install.texi - -@item -@code{make install}. This installs the library, header files, and -documentation. Or @code{make install-data} to just install the -architecture-independent files. Or @code{make install-exec} to just -install the (binary) archive library file. - -Since I only distribute Kpathsea as part of another package, you will -probably be doing the above in a top-level directory that contains a -@samp{Makefile}, @samp{kpathsea}, and the other package. But you can do -the installation in @samp{kpathsea} itself, if you only want to install -the library, not the other package. - -@item -The first time you install any manual in Info, you have to add a line -(you choose where) to the @file{dir} file in your @samp{$(infodir)} -directory. A sample line to add is given near the top of the Texinfo -source files (@file{kpathsea/kpathsea.texi} and -@file{dvipsk/dvips.texi}). - -@item -@code{make distclean}. This removes all files created by the build. - -@end enumerate - -@xref{Filename database}, for a description of an externally-generated -database that can help speed searches. - -@xref{Debugging}, for runtime debugging support that may help track down -problems. - -Do not attempt to use any version of Kpathsea with any program except -the version that the program came with, unless you are a glutton for -punishment. - -@menu -* Default paths:: Changing default installation directories and paths. -* Common problems:: When things go wrong. -* Shared library:: Making Kpathsea a shared library. -* Reporting bugs:: Where and how to report bugs. -@end menu - - -@node Default paths -@section Default paths - -@cindex default paths, changing -@cindex paths, changing default -@cindex installation directories, changing default -@cindex directories, changing default installation - -@cindex default paths, how they're made -To summarize the chain of events that go into defining the default paths: - -@enumerate - -@item -@samp{configure} creates a @file{Makefile} from each @file{Makefile.in}. - -@item -@flindex texmf.sed -When Make runs in the @file{kpathsea} directory, it creates -a file @file{texmf.sed} that substitutes the Make value of @code{$(var)} -for a string @code{@@var@@}. The variables in question are the one that -define the installation directories. - -@item -@flindex texmf.cnf.in -@flindex texmf.cnf@r{, generated} -@file{texmf.sed} (and a little extra magic---see -@file{kpathsea/Makefile}) is applied to @file{texmf.cnf.in} to generate -@file{texmf.cnf}. This is the file that will eventually be installed and -used by the programs to look up programs. - -@item -@flindex paths.h -The definitions in @file{texmf.cnf} are changed into the form of C -@samp{#define}'s, producing @file{paths.h}. These values will be the -compile-time defaults; they are not used unless no @file{texmf.cnf} file -can be found at runtime. - -(That's a partial lie: the compile-time defaults are what extra -@samp{:}'s in @file{texmf.cnf} expand into; but the paths as distributed -have no extra @samp{:}'s, and there's no particular reason for them to.) - -@end enumerate - -The purpose of this elaborate sequence is to avoid having the same -information in more than one place. If you change the installation -directories or top-level prefix before running @samp{configure}, those -changes will propagate through the whole sequence. If you change the -default paths in @file{texmf.cnf.in}, those changes are propagated to -the compile-time defaults. - -Alternatively, you can ignore the whole mess and edit @file{texmf.cnf} -after it is installed. Maybe even copying it into place beforehand so -you can complete the installation, if @TeX{} or Metafont is having -trouble finding their input files. - -@vindex prefix@r{, changing} -@vindex exec_prefix@r{, changing} -Unfortunately, editing @file{Makefile.in} @emph{does not work} in one -common case---changing the @code{prefix} or @code{exec_prefix} -variables. For these, you must use the @samp{-prefix} or -@samp{-exec-prefix} options to @code{configure}. @xref{Running -configure Scripts, , Running @code{configure} scripts, autoconf, -Autoconf}. (That's another partial lie: editing does work, as long as a -program named @code{tex} is not in your @code{PATH}.) - -@flindex HIER -@flindex kpathsea/HIER -@xref{TeX directory structure, @TeX{} directory structure}, for a -description of some ways to arrange the @TeX{} library files, and some -features of the distributed paths that may not be obvious. The file -@file{kpathsea/HIER} is a copy of that section. - -The Make definitions are all repeated in several @file{Makefile}'s; but -changing the top-level @file{Makefile} should suffice, as it passes down -all the variable definitions, thus overriding the submakes. (The -definitions are repeated so you can potentially run Make in the -subdirectories.) - - -@node Common problems -@section Common problems - -Some common problems with compilation, linking, or execution are -described below. - -@menu -* Unable to find files:: If your program can't find fonts or anything else. -* Slow path searching:: If it takes forever to find anything. - -* XtInherit:: For XtInherit link problems on OSF/1 1.x. -* wchar_t:: For wchar_t difficulties. -* ShellWidgetClass:: For dynamic linking with Sun's openwin libraries. -* Pointer combination warnings:: For old compilers that don't grok char *. -@end menu - - -@node Unable to find files -@subsection Unable to find files - -@cindex unable to find files -@cindex files, unable to find - -If a program complains it cannot find fonts (or other input files), -any of several things might be wrong: - -@itemize @bullet - -@item -You don't have the fonts (or whatever) installed. Nothing will -automatically generate TFM files or @TeX{} and Metafont sources for you -(by default). @xref{Obtaining Web2c, , , web2c, Web2c}. - -You can, however, configure @TeX{} and Metafont to run a script to -generate these input files, if you have (or write) such -scripts. @xref{MakeTeX... invocation, , @samp{MakeTeX}@dots{} -invocation, web2c, Web2c}. - -@item -You have (perhaps unknowingly) told Kpathsea to use search paths that -don't reflect where the files actually are. One common cause is having -environment variables set, thus overriding what you carefully set in -@file{texmf.cnf}. @xref{TeX environment variables, @TeX{} environment -variables}. - -@item -@cindex symbolic links not found -@cindex leaf directories wrongly guessed -Your files reside in a directory that is only pointed to via a symbolic -link, in a leaf directory. - -Unfortunately, Kpathsea's subdirectory searching has a (congenital) -deficiency: If a directory @var{d} being searched for subdirectories -contains plain files and symbolic links to other directories, but no -true subdirectories, @var{d} will be considered a leaf directory, i.e., -the symbolic links will not be followed. @xref{Subdirectory expansion}, -for an explanation of why this happens. - -You can work around this problem by creating an empty dummy subdirectory -in @var{d}. Then @var{d} will no longer be a leaf, and the symlinks will -be followed. - -The directory immediately followed by the @samp{//} in the path -specification, however, is always searched for subdirectories, even if -it is a leaf. This is since presumably you would not have asked for the -directory to be searched for subdirectories if you didn't want it to be. - -@item -There is a bug in the library. @xref{Reporting bugs}. - -@end itemize - -In any case, you may find the debugging options helpful in determining -precisely where the fonts (or whatever) are being looked for. See the -program's documentation for its debugging options, and also -@pxref{Debugging}. - - -@node Slow path searching -@subsection Slow path searching - -@cindex excessive startup time -@cindex slow startup time -@cindex startup time, excessive - -If your program takes an excessively long time to find fonts or other -input files, but does eventually succeed, here are some possible culprits: - -@itemize @bullet - -@item -Most likely, you just have a lot of directories to search, and that -takes a noticeable time. The solution is to create and maintain a -separate @file{ls-R} file that lists all the files in your main @TeX{} -hierarchy. @xref{Filename database}. (Kpathsea always uses @file{ls-R} -if it's present; there's no need to recompile or reinstall any of the -programs.) - -@item -Your recursively-searched directories (e.g., -@file{/usr/local/lib/tex/fonts//}), contain a mixture of files and -directories. This prevents Kpathsea from using a useful optimization -(@pxref{Subdirectory expansion}). - -It is best to have only directories (and perhaps a @file{README}) in the -upper levels of the directory structure, and it's very important to have -@emph{only} files, and no subdirectories, in the directories where the -dozens of TFM, PK, or whatever files reside. - -@item -@cindex recursion from @file{/} -@cindex @samp{~} searching caveat -@cindex @samp{$HOME} searching caveat -@cindex @samp{root} searching peculiarities -Finally, one simple-to-fix (but unlikely) cause: If you recursively -search @samp{$HOME} or @samp{~}, and you are running as @samp{root}, you -will search every directory on the system. This typically takes quite -some time! - -@end itemize - -In any case, you may find the debugging options helpful in determining -precisely when the disk or network is being pounded. @xref{Debugging}, -and also see the program's documentation. - - -@node XtInherit -@subsection @code{XtInherit} - -@findex XtInherit @r{bug on OSF/1} -@cindex OSF/1 loader bug and @code{XtInherit} -@cindex Alpha OSF/1 loader bug and @code{XtInherit} - -On DEC OSF/1 1.x systems, the loader has a bug that manifests itself in -the following error (all on one line, but for the sake of the paper -width it's broken here): - -@example -xdvik/xdvi: /sbin/loader: Fatal Error: search_for_undefineds: - symbol _XtInherit should not have any relocation entry -@end example - -@noindent According to Michael Rickabaugh @samp{}: - -@display -This is a bug fixed in DEC OSF/1 2.0. - -If you know how, installing @file{/sbin/loader} from a 2.0 system onto a -1.3 system will work. Make sure that @file{/usr} is @emph{not} mounted -when you do this. (If you forget about umounting @code{/usr}, it is -possible most of your filesystems will become corrupted.) - -Otherwise, I suggest getting a hold of a 2.0 CD and running -@file{/usr/sbin/installupdate}. -@end display - -Alternatively, you may be able to use the freely available X11 libraries -that come with the MIT distribution (on @file{ftp.x.org}, for example). - -Linking statically, perhaps only with some of the X libraries, may also -work. (if you find the definitive workaround, please let me know.) - - -@node wchar_t -@subsection @code{wchar_t} - -@vindex FOIL_X_WCHAR_T -@tindex wchar_t - -The upshot of all the following is that if you get error messages -regarding @code{wchar_t}, try defining @code{NO_FOIL_X_WCHAR_T} (for -Web2c) or @code{FOIL_X_WCHAR_T} (for everything else). - -@code{wchar_t} has caused infinite trouble. None of my code ever uses -@code{wchar_t}; all I want to do is include X header files and various -system header files, possibly compiling with GCC. This seems an -impossible task! - -@flindex Xlib.h -The X11 header @file{} and GCC's @file{} have -conflicting definitions for wchar_t. - -The particulars: @file{} from MIT X11R5 defines -@code{wchar_t} if @code{X_WCHAR} is defined, which is defined if -@code{X_NOT_STDC_ENV} is defined, and we define @emph{that} if -@code{STDC_HEADERS} is not defined (@samp{configure} decides if -STDC_HEADERS gets defined). But when compiling with gcc on SunOS 4.1.x, -@code{STDC_HEADERS} is not defined (@file{string.h} doesn't declare the -@samp{mem}* functions), so we do get X's @code{wchar_t}---and we also -get gcc's @code{wchar_t} from its @file{}. Conflict. - -On the other hand, SunOS 4.1.1 with some other X configurations actually -needs GCC to define @code{wchar_t}, and fails otherwise. - -My current theory is to define @code{wchar_t} to a nonsense symbol -before the X include files are read; that way its definition (if any) -will be ignored by other system include files. Going along with that, -define @code{X_WCHAR} to tell X not to use @file{}, that we've -already included, but instead to make its own definition. - -But this is not the end of the story. The X11 include files distributed -with DG/UX 5.4.2 for the Aviion have been modified to include -@file{<_int_wchar_t.h>} if @code{X_WCHAR}, so our @code{#define} will -not have any typedef to change---but the uses of @code{wchar_t} in the X -include files will be changed to reference this undefined symbol. So -there's nothing to foil in this case. I don't know how to detect this -automatically, so it's up to you to define @code{NO_FOIL_X_WCHAR_T} -yourself. - - -@node ShellWidgetClass -@subsection @code{ShellWidgetClass} - -@cindex dynamic linking problems with openwin libraries -@cindex openwin libraries, dynamic linking problems -@findex get_wmShellWidgetClass -@findex get_applicationShellWidgetClass - -@flindex comp.sys.sun.admin @r{FAQ} -@cindex FAQ, @samp{comp.sys.sun.admin} -This section is adapted from question 47 from the -@samp{comp.sys.sun.admin} FAQ. - -If you are linking with Sun's OpenWindows libraries in SunOS 4.1.x, you -may get undefined symbols @code{_get_wmShellWidgetClass} and -@code{_get_applicationShellWidgetClass}. This problem does not arise -with the standard MIT libraries under SunOS. - -@findex Xmu @r{library problems} -The cause is bugs in the @code{Xmu} shared library as shipped from Sun. -There are several fixes: - -@itemize @bullet - -@item Get the Openwindows patches that apply to this problem. - -@item Statically link the @code{Xmu} library into the executable. - -@item Avoid using @code{Xmu} at all. For this last, if you are compiling -Metafont, @pxref{Online Metafont graphics, , , Web2c, web2c}. If you are -compiling Xdvi, see the @code{-DNOTOOL} option in @file{xdvik/INSTALL}. - -@item Ignore the errors. The binary runs fine regardless. - -@end itemize - -@cindex Sun openwin patches -Here is the information for getting the two patches: - -@display -Patch ID: 100512-02 -Bug ID's: 1086793, 1086912, 1074766 -Description: 4.1.x OpenWindows 3.0 @code{libXt} jumbo patch - -Patch ID: 100573-03 -Bug ID: 1087332 -Description: 4.1.x OpenWindows 3.0 undefined symbols when using shared -@code{libXmu}. -@end display - -@cindex static linking -The way to statically link with @code{libXmu} depends on whether you are -using a Sun compiler (e.g., @code{cc}) or @code{gcc}. If the format, -alter the @code{x_libs} make variable to include - -@example --Bstatic -lXmu -Bdynamic -@end example - -@opindex -static -If you are using @code{gcc}, include @samp{-static} in @samp{LDFLAGS}; -this will link all libraries statically. If you want to link only -@code{Xmu} statically and everything else dynamically, you have to do it -by hand: run @code{gcc -v}, grab the @code{ld} line, and add the -@samp{-B}'s given above around @code{-lXmu}. - -The reason is that gcc moves all linker options to the front of the -@code{ld} command line. So you can't specify different options for -different libraries. When I reported this to the GCC maintainers, the -reply was that they would happily merge in the changes, but they didn't -want to take the time to do it themselves. - - -@node Pointer combination warnings -@subsection Pointer combination warnings - -@cindex warnings, pointer combinations -@cindex pointer combination warnings -@cindex illegal pointer combination warnings -@pindex cc @r{warnings} -When compiling with old C compilers, you may get some warnings about -``illegal pointer combinations''. These are spurious; just ignore them. -I decline to clutter up the source with casts to get rid of them. - -In general, if you have trouble with a system C compiler, I advise -trying the GNU C compiler. (And vice versa, unfortunately; but in that -case I also recommend reporting a bug to the GCC bug list.) - - -@node Shared library -@section Shared library - -@cindex shared library, making -You can compile Kpathsea as a shared library. The advantage in doing -this is that the different executables can then share the code, -decreasing memory usage. (The other advantage in general of shared -libraries is that it's possible to update the library and programs -independently. But since the Kpathsea interface is not and can not be -frozen, that doesn't apply here.) - -Under Solaris, use @samp{-K pic -xstrconst} if you compile with a Sun -compiler, @samp{-fpic} if you use GCC. Also add @samp{-L@var{$(libdir)} --R@var{$(libdir)}} to @samp{LDFLAGS} when you link the binaries, so that -the library can be found, and users do not have set @samp{LD_LIBRARY_PATH}. - -(If you know how to make Kpathsea shared on other systems, please send a -message to the bug address in the next section.) - - -@node Reporting bugs -@section Reporting bugs - -@cindex reporting bugs -@cindex bugs, reporting - -@flindex tex-k@@cs.umb.edu @r{(bug address)} -@cindex bug address -If you encounter problems, please report them to @samp{tex-k@@cs.umb.edu}. -Include the version number of the library, the system you are using, and -enough information to reproduce the bug in your report. To get on this -mailing list yourself, email @samp{tex-k-request@@cs.umb.edu} with a -message whose body contains a line -@example -subscribe @var{you}@@@var{your.preferred.address} -@end example - -To avoid wasted effort and time (both mine and yours), I strongly advise -applying the principles given in the GNU C manual (@pxref{Bugs, , -Reporting Bugs, gcc, The GNU CC manual}) to your bug reports. - -Please also report bugs in this documentation---not only factual errors, -but unclear explanations, typos, wrong fonts, @dots{} - - -@node Debugging -@chapter Debugging - -@cindex debugging -@cindex runtime debugging -@cindex options for debugging - -@vindex kpathsea_debug -@flindex debug.h -Kpathsea provides a number of runtime debugging options, detailed below -by their names (and corresponding numeric values). You can set these -with some runtime argument (e.g., @samp{-d}) to the program; in that -case, you should use the numeric values described in the program's -documentation (which, except for Dviljk, are different from those -below). - -@vindex KPATHSEA_DEBUG -You can also set the environment variable @code{KPATHSEA_DEBUG}. In -this case, you should use the numbers below. Also use the numbers below -if you run the program under a debugger and set the the variable -@samp{kpathsea_debug} yourself. - -In any case, you can @emph{not} use the @emph{names} below; you must -always use somebody's numbers. (Sorry.) And to set more than option, -just sum the corresponding numbers. - -@vtable @code - -@item KPSE_DEBUG_STAT -(1). Reports @samp{stat}(2) calls. This is useful for verifying that -your directory structure is not forcing Kpathsea to do many additional -file tests (@pxref{Slow path searching} and @pxref{Subdirectory -expansion}). If you are using an up-to-date @file{ls-R} database -(@pxref{Filename database}), this should produce no output unless a -nonexistent file is searched for. - -@item KPSE_DEBUG_HASH -(2). Reports lookups in all hash tables, including @file{ls-R} -(@pxref{Filename database}), font aliases (@pxref{Fontmap}), and config -file values (@pxref{Config files}). Useful when expected values are not -being found, e.g.., file searches are looking at the disk instead of -using @file{ls-R}. - -@item KPSE_DEBUG_FOPEN -(4). Reports file openings and closings. Especially useful when your -system's file table is full, for seeing if some files have been opened -but never closed. In case you want to set breakpoints: this works by -redefining @samp{fopen} (@samp{fclose}) to be @samp{kpse_fopen_trace} -(@samp{kpse_fclose_trace}). - -@item KPSE_DEBUG_PATHS -(8). Reports general path information for each file type Kpathsea is -asked to search. This is useful when you are trying to track down how a -particular path got defined---from @file{texmf.cnf}, @file{config.ps}, -the compile-time default, an environment variable, etc. This is the -contents of a structure defined in @file{tex-file.h}. - -@item KPSE_DEBUG_EXPAND -(16). Reports the directory list corresponding to each path element -Kpathsea searches in. This is only relevant when Kpathsea is searching -the disk, since @file{ls-R} searches don't look through directory lists -in this way (they go straight to the file using the hash table). - -@item KPSE_DEBUG_SEARCH -(32). Reports on each file search Kpathsea attempts: the name of the -file searched for, the path searched in, whether or not the file must -exist (when drivers search for @file{cmr10.vf}, it need not exist), and -whether or not we are collecting all occurrences of the file in the -path (as with, e.g., @file{texmf.cnf} and @file{texfonts.map}), or just -the first (as with most lookups). This can help you correlate what -Kpathsea is doing with what is in your input file. - -@end vtable - -@cindex @samp{kdebug:} -Debugging output from Kpathsea is always written to standard error, and -begins with @samp{kdebug:}. (Except for hash table buckets, which just -start with the number.) - -@menu -* Logging:: Recording successful searches. -@end menu - - -@node Logging -@section Logging - -@cindex log file - -@cindex recording successful searches -Kpathsea can record the time and filename found for each successful -search. This may be useful in finding good candidates for deletion when -your disk is full. - -@vindex TEXMFLOG -To do this, define the environment or config file variable -@code{TEXMFLOG}. The value is the name of the file to append the -information to. The file is created if it doesn't exist. - -@cindex epoch -@findex time -Each successful search turns into one line in the log file, with two -words separated by a space. The first word is the time of the search, as -the integer number of seconds since ``the epoch'', i.e., UTC midnight 1 -January 1970 (more precisely, the result of the @code{time} system -call). The second word is the filename. - -For example, after @code{setenv TEXMFLOG /tmp/log}, running Dvips on -@file{story.dvi} appends the following lines: - -@example -774455887 /usr/local/lib/texmf/dvips/config.ps -774455887 /usr/local/lib/texmf/dvips/psfonts.map -774455888 /usr/local/lib/texmf/dvips/texc.pro -774455888 /usr/local/lib/texmf/fonts/public/cm/pk/ljfour/cmbx10.600pk -774455889 /usr/local/lib/texmf/fonts/public/cm/pk/ljfour/cmsl10.600pk -774455889 /usr/local/lib/texmf/fonts/public/cm/pk/ljfour/cmr10.600pk -774455889 /usr/local/lib/texmf/dvips/texc.pro -@end example - -@noindent Only filenames that are absolute are recorded, to preserve -some semblance of privacy. - - -@node Path searching -@chapter Path searching - -@cindex path searching - -This chapter describes the generic path searching mechanism Kpathsea -provides. For information about searching for particular file types -(e.g., @TeX{} fonts), see the next chapter. - -@menu -* Searching overview:: Basic scheme for searching. -* Path sources:: Constructing the search path. - -* Default expansion:: a: or :a or a::b expands to a default. -* Variable expansion:: $foo and $@{foo@} expand to environment values. -* Tilde expansion:: ~ and ~user expand to home directories. -* Subdirectory expansion:: a// and a//b recursively expand to subdirs. - -* Filename database:: Using an externally-built list to search. -@end menu - - -@node Searching overview -@section Searching overview - -@cindex path searching, overview -@cindex searching overview -@cindex overview of path searching - -@cindex search path, defined -A @dfn{search path} is a colon-separated list of path elements, which -are directory names with some extra frills. A search path can come from -(a combination of) many sources; see below. To look up a file -@samp{foo} along a path @samp{.:/dir}, Kpathsea checks each element of -the path in turn: first @file{./foo}, then @file{/dir/foo}, (typically) -returning the first one that exists. - -@cindex magic characters -@kindex : @r{may not be :} -@kindex / @r{may not be /} -The ``colon'' and ``slash'' mentioned here aren't necessarily @samp{:} -and @samp{/} on non-Unix systems. Kpathsea tries to adapt to other -operating systems' conventions. - -@cindex database search -@cindex searching the database -To check a path element @var{e}, Kpathsea first sees if a prebuilt -database (see below) applies to @var{e}, i.e., if the database is in a -directory that is a prefix of @var{e}. If so, the path specification is -matched against the contents of the database. - -@cindex floating directories -@cindex filesystem search -@cindex disk search -@cindex searching the disk -If the database does not exist, or does not apply to this path element, -contains no matches, the filesystem is searched. Kpathsea constructs the -list of directories that correspond to this path element, and then -checks in them for the file being searched for. (To help speed future -lookups of files in the same directory, the directory in which a file is -found is floated to the top of the directory list.) - -Each path element is checked in turn: first the database, then the -disk. Once a match is found, the searching stops and the result is -returned. This avoids possibly-expensive processing of path -specifications that are never needed on a particular run. - -@cindex expansion of path elements -Although the simplest and most common path element is a directory name, -Kpathsea supports additional features in search paths: layers of default -values, environment variable names, config file values, users' home -directories, and recursive subdirectory searching. Thus, we say that -Kpathsea @dfn{expands} a path element, meaning getting rid of all the -magic specifications and getting down to the basic directory name or -names. This process is described in the sections below. It happens in -the same order as the sections. - -@cindex absolute filenames -@cindex relative filenames -@cindex explicitly relative filenames -@cindex filenames, absolute or explicitly relative -Exception to the above: If the filename being searched for is absolute -or explicitly relative, i.e., starts with @samp{/} or @samp{./} or -@samp{../}, Kpathsea simply checks if that file exists; it is not looked -for along any paths. - - -@node Path sources -@section Path sources - -@cindex path sources -@cindex sources for search paths - -A search path can come from many sources. In priority order (meaning -Kpathsea will use whichever it finds first): - -@enumerate - -@item -@cindex environment variable, source for path -A user-set environment variable, e.g., @samp{TEXINPUTS}. - -@item -A program-specific configuration file, e.g., an @samp{S /a:/b} line in -Dvips' @file{config.ps}. - -@item -@cindex configuration file, source for path -@cindex Kpathsea config file, source for path -@flindex texmf.cnf@r{, source for path} -A line in a Kpathsea configuration file @file{texmf.cnf}, e.g., -@samp{TEXINPUTS=/c:/d}. See section below. - -@item -@cindex compilation value, source for path -The compile-time default (specified in @file{kpathsea/paths.h}). - -@end enumerate - -@noindent In any case, once the path specification to use is determined, its -evaluation is independent of its source. These sources may also be -combined via default expansion. See the next section. - -You can see each of these values for a given search path by using the -debugging options of Kpathsea or your program. @xref{Debugging}. - -@menu -* Config files:: Kpathsea's runtime config files (texmf.cnf). -@end menu - - -@node Config files -@subsection Config files - -@cindex config files -@flindex texmf.cnf @r{definition} - -@cindex runtime configuration files -As mentioned above, Kpathsea reads @dfn{runtime configuration files} -named @file{texmf.cnf} for search path definitions. The path used to -search for them is constructed in the usual way, as described above -(except that configuration files cannot be used to define the path, -naturally; also, an @file{ls-R} database is not used to search for them, -for technical reasons). - -@vindex TEXMFCNF -The environment variable used is @samp{TEXMFCNF}. - -Kpathsea reads @emph{all} @file{texmf.cnf} files in the search path, not -just the first one found; it uses the first definition of each variable -encountered. Thus, with the (default) search path of @samp{.:$TEXMF}, -values from @file{./texmf.cnf} override those from -@file{$TEXMF/texmf.cnf}. - -Here is the format for @file{texmf.cnf} files: - -@itemize @bullet - -@cindex comments, in @file{texmf.cnf} -@item Anything after a @samp{%} or @samp{#} is ignored; this is for comments. - -@item Blank lines are ignored. - -@item Each remaining nonblank line must look like - -@example -@var{variable} @r{[}. @var{progname}@r{]} @r{[}=@r{]} @var{value} -@end example - -@noindent where the @samp{=} and surrounding whitespace is optional. - -@item The @var{variable} name may contain any characters except -whitespace, @samp{=}, or @samp{.} characters, but sticking to -@samp{A-Za-z_} is safest. - -@item If the @samp{.@var{progname}} is present, the definition only -applies if the program that is running is named (i.e., the last -component of @code{argv[0]}) @var{progname}. This allows (for example) -different flavors of @TeX{} to have different search paths. - -@item The @var{value} may contain any characters except whitespace, -@samp{%}, and @samp{@@}. (These restrictions are necessary because of -the various @code{sed} and other processing done on @file{texmf.cnf} at -build time.) - -@item All definitions are read before anything is expanded, so you can -use variables before they are defined (like @code{make}, unlike most -everything else). - -@end itemize - -@noindent Here is the fragment from the distributed file illustrating -most of these points: - -@example -% TeX input files -- i.e., anything to be found by \input or \openin [...] -latex209_inputs = .:$TEXMF/tex/latex209//:$TEXMF/tex// -latex2e_inputs = .:$TEXMF/tex/latex2e//:$TEXMF/tex// -TEXINPUTS = .:$TEXMF/tex// -TEXINPUTS.latex209 = $latex209_inputs -TEXINPUTS.latex2e = $latex2e_inputs -TEXINPUTS.latex = $latex2e_inputs -@end example - -@cindex shell scripts as configuration files -@cindex configuration files as shell scripts. -Although this format has obvious similarities to Bourne shell -scripts---change the comment character to @code{#}, disallow spaces -around the @code{=}, and get rid of the @code{.@var{program}} -convention, and it could be run through the shell. But there seemed -little advantage to doing this, since all the information would have to -passed back (with @code{echo}'s, presumably) to Kpathsea and parsed -there anyway, since the @code{sh} process couldn't affect its parent's -environment. - -@flindex cnf.c -The implementation of all this is in @file{kpathsea/cnf.c}. - - -@node Default expansion -@section Default expansion - -@kindex :: -@cindex doubled colons -@cindex leading colons -@cindex trailing colons -@cindex extra colons -@cindex default expansion -@cindex expansion, default - -If the highest-priority search path (in the list in the previous -section) contains an @dfn{extra colon} (i.e., leading, trailing, or -doubled), Kpathsea inserts the next-highest-priority search path that is -set at that point. If that search path has an extra colon, the same -happens with the next-highest. (An extra colon in the compile-time -default value has unpredictable results, and may cause the program to -crash, so installers beware.) - -For example, given - -@example -setenv TEXINPUTS /home/karl: -@end example - -@noindent and a @samp{TEXINPUTS} value from @file{texmf.cnf} of - -@example -.:$TEXMF//tex -@end example - -@noindent then the final value used for searching will be: - -@example -/home/karl:.:$TEXMF//tex -@end example - -@noindent You can trace this by debugging ``paths'' (@pxref{Debugging}). - -Minor technical point: Since it would be useless to insert the default -value in more than one place, Kpathsea changes only one extra @samp{:} -and leaves any others in place (where they will eventually be -effectively equivalent to @samp{.}, i.e., the current directory). It -checks first for a leading @samp{:}, then a trailing @samp{:}, then a -doubled @samp{:}. - - -@node Variable expansion -@section Variable expansion - -@kindex $ -@cindex environment variables in paths -@cindex variable expansion -@cindex expansion, variable -@flindex texmf.cnf@r{, and variable expansion} - -@samp{$foo} or @samp{$@{foo@}} in a path element is replaced by (1) the -value of an environment variable @samp{foo} (if it is set); (2) the -value of @samp{foo} from @file{texmf.cnf} (if any such exists); (3) the -empty string. - -If the character after the @samp{$} is alphanumeric or @samp{_}, the -variable name consists of all consecutive such characters. If the -character after the @samp{$} is a @samp{@{}, the variable name consists -of everything up to the next @samp{@}} (braces are not balanced!). -Otherwise, Kpathsea gives a warning and ignores the @samp{$} and its -following character. - -@cindex quoting variable values -Remember to quote the @samp{$}'s and braces as necessary for your shell. - -@cindex shell variables -@emph{Shell} variable values cannot be seen by Kpathsea. - -For example, given - -@example -setenv TEXMF /home/tex -setenv TEXINPUTS .:$TEXMF:$@{TEXMF@}new -@end example - -@noindent the final @samp{TEXINPUTS} path is the three directories: - -@example -.:/home/tex:/home/texnew -@end example - -@noindent You can trace this by debugging ``paths'' (@pxref{Debugging}). - - -@node Tilde expansion -@section Tilde expansion - -@kindex ~ -@cindex home directories in paths -@cindex tilde expansion -@cindex expansion, tilde - -A leading @samp{~} or @samp{~@var{user}} in a path element is replaced -by the current or @var{user}'s home directory, respectively. - -If @var{user} is invalid, or the home directory cannot be determined, -Kpathsea uses @file{.} instead. - -For example, - -@example -setenv TEXINPUTS ~/mymacros: -@end example - -@noindent will prepend a directory @file{mymacros} in your home -directory to the default path. - - -@node Subdirectory expansion -@section Subdirectory expansion - -@kindex // -@cindex subdirectory searching -@cindex expansion, subdirectory - -A @samp{//} in a path element following a directory @var{d} is replaced -by all subdirectories of @var{d}: first those subdirectories directly -under @var{d}, then the subsubdirectories under those, and so on. At -each level, the order in which the directories are searched is -unspecified. (It's ``directory order'', and definitely not -alphabetical.) - -If you specify any filename components after the @samp{//}, only -subdirectories which contain those components are included. For example, -@samp{/a//b} would expand into directories @file{/a/1/b}, @file{/a/2/b}, -@file{/a/1/1/b}, and so on, but not @file{/a/b/c} or @file{/a/1}. - -@cindex trick for detecting leaf directories -@cindex leaf directory trick -I should mention one related implementation trick, which I stole from -GNU find. Matthew Farwell @samp{} suggested it, -and David MacKenzie @samp{} implemented it (as far -as I know). - -@vindex st_nlink -The trick is that in every real Unix implementation (as opposed to the -POSIX specification), a directory which contains no subdirectories will -have exactly two links (namely, one for @file{.} and one for @file{..}). -That is to say, the @code{st_nlink} field in the @samp{stat} structure -will be two. Thus, we don't have to stat everything in the bottom-level -(leaf) directories---we can just check @code{st_nlink}, notice it's two, -and do no more work. - -But if you have a directory that contains @emph{one} subdirectory and -five hundred files, @code{st_nlink} will be 3, and Kpathsea has to stat -every one of those 501 entries. Therein lies slowness. - -@vindex UNIX_ST_LINK -You can disable the trick by undefining @code{UNIX_ST_LINK} in -@file{kpathsea/config.h}. (It is undefined by default except under Unix.) - -@flindex elt-dirs.c -Unfortunately, in some cases files in leaf directories are -@code{stat}'d: if the path specification is, say, -@samp{$TEXMF/fonts//pk//}, then files in a subdirectory -@samp{@dots{}/pk}, even if it is a leaf, are checked. The reason cannot -be explained without reference to the implementation, so read -@file{kpathsea/elt-dirs.c} (search for @samp{may descend}) if you are -curious. (And if you can find a way to @emph{solve} the problem, please -let me know.) - - -@node Filename database -@section Filename database (@code{ls-R}) - -@cindex filename database -@cindex database for filename searches -@cindex externally-built filename database - -Kpathsea goes to some lengths to minimize disk accesses for searches -(@pxref{Subdirectory expansion}). Nevertheless, at installations with -enough directories, doing a linear search of each possible directory for -a given file can take an excessively long time (``excessive'' depending -on the speed of the disk, whether it's NFS-mounted, how patient you are, -etc.). In practice, the union of font directories from the Dvips(k) and -Dviljk distributions is large enough for searching to be noticeably slow -on typical machines these days. - -@flindex ls-R @r{database file} -Therefore, Kpathsea can use an externally-built ``database'' that maps -files to directories, thus avoiding the need to exhaustively search the -disk. By fiat, you must name the file @file{ls-R}, and put it at the -root of the @TeX{} installation hierarchy (@samp{$TEXMF} by -default). Kpathsea does variable expansion on the @samp{$TEXMF}, -naturally, so you can use different @file{ls-R}'s for different trees, -if you are testing new ones. However, one and only one @file{ls-R} is -read; it is not searched for along any paths. - -@pindex cron @r{and @file{ls-R}} -You can build @file{ls-R} with the command -@example -ls -R @var{/your/root/dir} >ls-R -@end example -@noindent if your @code{ls} produces the right output -format (see the section below). GNU @code{ls}, for example, outputs in -this format. It is probably best to do this via @code{cron}, so changes -in the installed files will be automatically reflected (albeit with some -delay) in the database. - -@cindex symbolic links, and @file{ls-R} -@opindex -L @r{option to @code{ls}} -If your system uses symbolic links, the command @code{ls -LR} will be -more reliable than plain @code{ls -R}. The former follows the symbolic -links to the real files, which is what Kpathsea needs. - -@cindex warning about unusable @file{ls-R} -Kpathsea warns you if it finds an @file{ls-R} file, but the file does -not contain any usable entries. The usual culprit is using just @code{ls --R} to generate the @file{ls-R} file instead of @code{ls -R -@var{/your/dir}}. Kpathsea looks for lines starting with @samp{/}, to -improve reliability with unusual filenames (specifically, those ending -with a @samp{:}). - -@kindex !! @r{in path specifications} -Because the database may be out-of-date for a particular run (e.g., if a -font was just built with @code{MakeTeXPK}), if a file is not found in -the database, by default Kpathsea goes ahead and searches the disk. If a -particular path element begins with @samp{!!}, however, @emph{only} the -database will be searched for that element, never the disk. If the -database does not exist, nothing will be searched. Because this can -greatly surprise users (``I see the font @file{foo.tfm} when I do an -@code{ls}; why can't Dvips find it?''), I do not recommend using this -feature. - -@menu -* Database format:: Syntax details of the database file. -@end menu - - -@node Database format -@subsection Database format - -@cindex format of external database -@cindex database, format of - -The ``database'' read by Kpathsea is a line-oriented file of plain -text. The format is that generated by GNU (and perhaps other) @code{ls} -programs given the @samp{-R} option, as follows. - -@itemize @bullet - -@item -Blank lines are ignored. - -@item -If a line begins with @samp{/} and ends with a colon, it's the name of a -directory. - -@item -All other lines name entries in the most recently seen directory. -@samp{/}'s in such lines will produce possibly-strange results. - -@item -Files with no preceding directory line are ignored. - -@end itemize - - -For example, here's the first few lines of @file{ls-R} on my system: - -@example -bibtex -dvips -fonts -ini -ls-R -mf -tex - -/usr/local/lib/texmf/bibtex: -bib -bst -doc - -/usr/local/lib/texmf/bibtex/bib: -asi.bib -bibshare -btxdoc.bib -@end example - -@noindent On my system, @file{ls-R} is about 30K bytes. - - -@node TeX searching -@chapter @TeX{} searching - -@cindex @TeX{} searching - -Although the basic features in Kpathsea can be used for any type of path -searching, it came about (like all libraries) with a specific -application in mind: I wrote Kpathsea specifically for @TeX{} system -programs. I had been struggling with the programs I was using (Dvips, -Xdvi, and @TeX{} itself) having slightly different notions of how to -specify paths; and debugging was painful, since no code was shared. - -Therefore, Kpathsea provides some @TeX{}-specific features. Indeed, -many of the supposedly generic path searching features were provided -because they seemed useful in that con@TeX{}t (font lookup, particularly). - -@menu -* Envvars: TeX environment variables. Overriding compiled-in paths. -* Glyph lookup:: Searching for bitmap fonts. -@end menu - - -@node TeX environment variables -@section @TeX{} environment variables - -@cindex environment variables for @TeX{} -@cindex @TeX{} environment variables - -Kpathsea defines a sequence of environment variables to search for each -file type it supports. This makes it easy for different programs to -check the same environment variables, in the same order. - -The following table lists the environment variables searched for each -file type in the order they are searched (and a brief description of the -file type). That is, only if the first variable is unset is the second -variable checked, and so on. If none are set, various other things are -checked; @pxref{Path sources}. - -@table @samp - -@item .base -@flindex .base -@vindex MFBASES -(Metafont memory dump) -@samp{MFBASES} - -@item .bib -@flindex .bib -@vindex BIBINPUTS -(Bib@TeX{} bibliography source) -@samp{BIBINPUTS} - -@item .bst -@flindex .bst -@vindex BSTINPUTS -@vindex TEXINPUTS -(Bib@TeX{} style file) -@samp{BSTINPUTS}, @samp{TEXINPUTS} - -@item .cnf -@flindex .cnf -@vindex TEXMFCNF -(Kpathsea runtime configuration files) -@samp{TEXMFCNF} - -@item .eps -@flindex .eps -@vindex TEXPICTS -@vindex TEXINPUTS -(Encapsulated PostScript figures) -@samp{TEXPICTS}, @samp{TEXINPUTS} - -@item .fmt -@flindex .fmt -@vindex TEXFORMATS -(@TeX{} memory dump) -@samp{TEXFORMATS} - -@item gf -@flindex .gf -@vindex GFFONTS -@vindex GLYPHFONTS -@vindex TEXFONTS -(generic font bitmap) -@samp{@var{program}FONTS}, @samp{GFFONTS}, @samp{GLYPHFONTS}, @samp{TEXFONTS} - -@item .mf -@flindex .mf -@vindex MFINPUTS -(Metafont source) -@samp{MFINPUTS} - -@item mf.pool -@flindex .pool -@vindex MFPOOL -(Metafont program strings) -@samp{MFPOOL} - -@item .pict -@flindex .pict -(Other kinds of figures) -Same as @file{.eps}. - -@item pk -@flindex .pk -@vindex PKFONTS -@vindex TEXPKS -@vindex GLYPHFONTS -@vindex TEXFONTS -(packed bitmap font) -@samp{@var{program}FONTS}, @samp{PKFONTS}, @samp{TEXPKS}, -@samp{GLYPHFONTS}, @samp{TEXFONTS} - -@item .tex -@flindex .tex -@vindex TEXINPUTS -(@TeX{} source) -@samp{TEXINPUTS} - -@item tex.pool -@flindex .pool -@vindex TEXPOOL -(@TeX{} program strings) -@samp{TEXPOOL} - -@item .tfm -@flindex .tfm -@vindex TFMFONTS -@vindex TEXFONTS -(@TeX{} font metrics) -@samp{TFMFONTS}, @samp{TEXFONTS} - -@item .vf -@flindex .vf -@vindex VFFONTS -@vindex TEXFONTS -(virtual font) -@samp{VFFONTS}, @samp{TEXFONTS} - -@end table - -For the font variables, the intent is that: - -@enumerate - -@item -@samp{TEXFONTS} is the default for everything. - -@item -@samp{GLYPHFONTS} is the default for bitmap (or, more precisely, -non-metric) files. - -@item -Each format has its own variable. - -@item -@vindex XDVIFONTS -@vindex DVIPSFONTS -Each program can and should have its own font override path as well; -e.g., @samp{DVIPSFONTS} for Dvipsk. Again, this is for bitmaps, not metrics. - -@end enumerate - -If these environment variables are set, the corresponding -@file{texmf.cnf} definition won't be looked at (unless, as usual, the -environment variable has an extra @samp{:}). @xref{Default expansion}. - - -@node Glyph lookup -@section Glyph lookup - -@cindex glyph lookup -@cindex searching for glyphs -@cindex @TeX{} glyph lookup - -@flindex tex-glyph.c -@findex kpse_find_glyph_format -Kpathsea provides a routine (@code{kpse_find_glyph_format} in -@file{kpathsea/tex-glyph.c}) which searches for a bitmap font in GF or -PK format (or either) given a font name (e.g., @samp{cmr10}) and a -resolution (e.g., 300). - -The search is based solely on filenames, not file contents---if a PK -file is named @file{cmr10.300gf}, it will be found as a GF file. - -Here is an outline of the search strategy (details in the sections -below) for a file @var{name} at resolution @var{dpi}. The search stops -at the first successful lookup. - -@enumerate - -@item Look for an existing file @var{name}.@var{dpi} in the specified -format(s). - -@item If @var{name} is an alias for a file @var{f} in the fontmap -file @file{texfonts.map}, look for @var{f}.@var{dpi}. - -@item Run an external script (typically named @code{MakeTeXPK}) to -generate the font. - -@item Look for @var{fallback}.@var{dpi}, where @var{fallback} is some -last-resort font (typically @samp{cmr10}). - -@end enumerate - -@menu -* Basic glyph lookup:: Features common to all glyph lookups. -* Fontmap:: Aliases for fonts. -* MakeTeX... scripts:: Creating files on the fly. -* Fallback font:: Resolutions and fonts of last resort. -@end menu - - -@node Basic glyph lookup -@subsection Basic glyph lookup - -@cindex basic glyph lookup -@cindex common features in glyph lookup - -When Kpathsea looks for a bitmap font @var{name} at resolution @var{dpi} -in a format @var{format}, it first checks each directory in the search -path for a file @samp{@var{name}.@var{dpi}@var{format}}; for example, -@samp{cmr10.300pk}. Kpathsea looks for a PK file first, then a GF file. - -If that fails, Kpathsea looks for -@samp{dpi@var{dpi}/@var{name}.@var{format}}; for example, -@samp{dpi300/cmr10.pk}. This is how fonts are typically stored on -filesystems (like DOS's) that permit only three-character extensions. - -@cindex tolerance for glyph lookup -@cindex glyph lookup bitmap tolerance -@findex KPSE_BITMAP_TOLERANCE -If that fails, Kpathsea looks for a font with a close-enough @var{dpi}. -``Close enough'' is defined (by the macro @code{KPSE_BITMAP_TOLERANCE} -in @file{kpathsea/tex-glyph.h}) to be @code{@var{dpi} / 500 + 1}, which -is slightly more than the 0.2% allowed by the DVI standard. - - -@node Fontmap -@subsection Fontmap - -@cindex fontmap files -@cindex font alias files -@cindex aliases for fonts -@flindex texfonts.map - -If a bitmap font is not found with the original name (see the previous -section), Kpathsea looks through any @dfn{fontmap} files for an -@dfn{alias} for the original font name. These files are named -@file{texfonts.map} and are searched for along the usual glyph path. - -This feature is intended to help in two respects: - -@enumerate - -@item -@cindex fontnames, unlimited length -An alias name is limited in length only by available memory, not by your -filesystem. Therefore, if you want to ask for -@file{Adobe-Lucida-Bold-Sans=Typewriter} instead of @file{plcbst}, you -can. - -@item -@cindex circle fonts -@flindex lcircle10 -A few fonts have historically had multiple names: specifically, -La@TeX{}'s ``circle font'' has variously been known as @file{circle10}, -@file{lcircle10}, and @file{lcirc10}. Aliases can make all the names -equivalent, so that it no longer matters what the name of the installed -file is; @TeX{} documents will find their favorite name. - -@end enumerate - -The format of fontmap files is straightforward: the first word on each -line is the true filename; the second word is the alias; subsequent -words are ignored. A @dfn{word} is a sequence of non-whitespace -characters. Blank lines are ignored; -comments start with @samp{%} and continue to end-of-line. - -If an alias has an extension, it matches only those files with -that extension; otherwise, it matches anything with the same root, -regardless of extension. For example, an alias @samp{foo.tfm} matches only -when exactly @file{foo.tfm} is being searched for; but an alias -@samp{foo} matches @file{foo.vf}, @file{foo.300pk}, etc. - -As an example, here are the fontmap entries that make the circle fonts -equivalent. These are in the distributed @file{texfonts.map} in the -Web2C distribution. - -@example -circle10 lcircle10 -circle10 lcirc10 -lcircle10 circle10 -lcircle10 lcirc10 -lcirc10 circle10 -lcirc10 lcircle10 -@end example - - -@node MakeTeX... scripts -@subsection @file{MakeTeX}@dots{} scripts - -@cindex @file{MakeTeX}@dots{} scripts -@cindex scripts for file creation - -If Kpathsea cannot find a bitmap font, by either its original name or a -fontmap alias, it can be configured to invoke an external program to -create it. The same mechanism can be used for other nonexistent files. - -The script is passed the name of the file to create and possibly other -arguments, as explained below. It must echo the full pathname of the -file it created (and nothing else) to standard output; it can write -diagnostics to standard error. - -@menu -* MakeTeX... script names:: -* MakeTeX... script arguments:: -@end menu - - -@node MakeTeX... script names -@subsubsection @file{MakeTeX}@dots{} script names - -@cindex @file{MakeTeX}@dots{} script names -@cindex names for @file{MakeTeX}@dots{} scripts - -@flindex tex-make.c -@vindex kpse_make_specs -The following table shows the default name of the script for each -possible file types. (The source is the variable @code{kpse_make_specs} -in @file{kpathsea/tex-make.c}.) - -@table @file - -@item MakeTeXPK -@pindex MakeTeXPK -Glyph fonts. - -@item MakeTeXTeX -@pindex MakeTeXTeX -@TeX{} input files. - -@item MakeTeXMF -@pindex MakeTeXMF -Metafont input files. - -@item MakeTeXTFM -@pindex MakeTeXTFM -TFM files. - -@end table - -@vindex DVIPSMAKEPK -@vindex XDVIMAKEPK -@vindex DVILJMAKEPK -@noindent These names are overridden by an environment variable specific -to the program---for example, @samp{DVIPSMAKEPK} for Dvipsk. - -@flindex missfont.log -@cindex failed @code{MakeTeX@dots{}} -@vindex TEXMFOUTPUT -If a @code{MakeTeX@dots{}} script fails, the invocation is appended to a -file @file{missfont.log} in the current directory. If the current -directory is not writable and the environment variable -@samp{TEXMFOUTPUT} is set, its value is used. Otherwise, nothing is -written. - - -@node MakeTeX... script arguments -@subsubsection @file{MakeTeX}@dots{} script arguments - -@cindex arguments to @file{MakeTeX}@dots{} - -The first argument to a @file{MakeTeX}@dots{} script is always the name -of the file to be created. - -For @file{MakeTeXPK}, three or four additional arguments are also -passed, via corresponding environment variables: - -@enumerate - -@item -@vindex KPATHSEA_DPI -The dpi to make the font at (@samp{KPATHSEA_DPI}). - -@item -@vindex MAKETEX_BASE_DPI -@cindex base dpi -The ``base dpi'' the program is operating at (@samp{MAKETEX_BASE_DPI}), -i.e., the assumed resolution of the output device. - -@item -@vindex MAKETEX_MAG -@vindex mag @r{Metafont variable} -@cindex magstep for @code{MakeTeXPK} -A ``magstep'' string suitable for the Metafont @code{mag} variable -(@samp{MAKETEX_MAG}). - -@item -@vindex MAKETEX_MODE -@vindex mode @r{Metafont variable} -@cindex Metafont mode name for @code{MakeTeXPK} -Optionally, a Metafont mode name to assign to the Metafont @code{mode} -variable (@samp{MAKETEX_MODE}). Otherwise, (the default) -@code{MakeTeXPK} guesses the mode from the resolution. @xref{TeX -directory structure, @TeX{} directory structure}. - -@item -@vindex mtp_destdir -@cindex destination directory for @code{MakeTeXPK} -Optionally, a directory name. If the directory is absolute, it is used -as-is. Otherwise, it is appended to the root destination directory set -in the script (from environment variables @code{DESTDIR} or -@code{MTP_DESTDIR} or a compile-time default). If this argument is not -supplied, the mode name is appended to the root destination directory. - -@end enumerate - -@noindent Kpathsea sets @samp{KPATHSEA_DPI} appropriately for each -attempt at building a font. It's up to the program using Kpathsea to -set the others. (@xref{Calling sequence}.) - -@vindex MAKETEXPK @r{environment variable} -@cindex specification for @code{MakeTeXPK} -You can change the specification for the arguments passed to the -external script by setting the environment variable named as the script -name, but all capitals---@samp{MAKETEXPK}, for example. If you've -changed the script name by setting (say) @samp{DVIPSMAKEPK} to -@samp{foo}, then the spec is taken from the environment variable @samp{FOO}. - -The spec can contain any variable references, to the above variables or -any others you might have set. As an example, the default spec for -@code{MakeTeXPK} is: - -@example -$KPATHSEA_DPI $MAKETEX_BASE_DPI $MAKETEX_MAG $MAKETEX_MODE -@end example - -@noindent The convention of passing the name of the file to be created -as the first argument cannot be changed. - - -@node Fallback font -@subsection Fallback font - -@cindex fallback font -@cindex fallback resolutions -@cindex font of last resort -@cindex resolutions, last-resort -@cindex last-resort font - -@vindex DVIPSSIZES -@vindex XDVISIZES -@vindex DVILJSIZES -@vindex TEXSIZES -@vindex default_texsizes -If a bitmap font cannot be found or created at the requested size, -Kpathsea looks for the font at a set of @dfn{fallback resolutions}. You -specify these resolutions as a colon-separated list (like search paths). -Kpathsea looks first for a program-specific environment variable (e.g., -@code{DVIPSSIZES} for Dvipsk), then the environment variable -@samp{TEXSIZES}, then a default specified at compilation time (the Make -variable @code{default_texsizes}). You can set this list to be empty if -you prefer to find fonts at their stated size or not at all. - -@flindex cmr10 -@vindex kpse_fallback_font -Finally, if the font cannot be found even at the fallback resolutions, -Kpathsea looks for a fallback font, typically @file{cmr10}. Programs -must enable this feature by assigning to the global variable -@code{kpse_fallback_font} or calling @code{kpse_init_prog} -(@pxref{Calling sequence}); the default is no such fallback font. - - -@node TeX directory structure -@chapter @TeX{} directory structure - -(This section obviously not really written yet; sorry. See -@file{kpathsea/HIER}.) - -@vindex TEXMF - -@vindex MAKETEX_MODE -@cindex paths, device name included in -By default, the bitmap font paths end with @code{$MAKETEX_MODE}, thus -including the device name (i.e., the Metafont mode) in the path. This -is to make it possible to distinguish two different devices with the -same resolution---write/white and write/black 300dpi printers, for -example. - -@findex kpse_init_prog -@flindex proginit.c -@flindex kpathsea/proginit.c -However, since most sites don't have this complication, Kpathsea -(specifically, @code{kpse_init_prog} in @file{kpathsea/proginit.c}) has -a special case: if the mode has not been explicitly set by the user (or -in a configuration file), it sets @samp{MAKETEX_MODE} to @code{/}. This -makes the default PK path, for example, expand into @code{@dots{}/pk//}, -so fonts will be found even if there is no subdirectory for the mode. -(If your site has only one printer, for example.) - -To make the paths independent of the mode, simply edit -@file{texmf.cnf.in} before installation, or the installed -@file{texmf.cnf}. @xref{Default paths}. - -@xref{MakeTeX... script arguments, @file{MakeTeX}@dots{} script -arguments}, for how this interacts with @code{MakeTeXPK}. - - -@node Programming -@chapter Programming - -This chapter is for programmers who wish to use -Kpathsea. @xref{Introduction}, for the conditions under which you may do -so. (If you do this, I'd appreciate a note, just to satisfy my -curiousity.) - -@menu -* Overview: Programming overview: Introduction. -* Calling sequence:: Specifics of what to call. -* Config: Programming with config files: Getting info from texmf.cnf. -@end menu - - -@node Programming overview -@section Programming overview - -@cindex programming overview -@cindex overview of programming with Kpathsea - -Aside from this manual, your best source of information is the source to -the programs I've modified to use Kpathsea (also listed in the -introduction). Of those, Dviljk is probably the simplest, and hence a -good place to start. Xdvik adds VF support and the complication of X -resources. Dvipsk adds the complication of its own config files. - -@flindex pathsearch.h -@flindex tex-file.h -@flindex tex-glyph.h -Beyond these of examples of use, the @file{.h} files in the Kpathsea -source describe the interfaces and functionality (and of course the -@file{.c} files define the actual routines, which are the ultimate -documentation). @file{pathsearch.h} declares the basic searching -routine. @file{tex-file.h} and @file{tex-glyph.h} define the interfaces -for looking up particular kinds of files. - -The library provides no way for an external program to register new file -types: @file{tex-file.[ch]} must be modified to do this. For example, -Kpathsea has support for looking up Dvips config files, even though -obviously no program other than Dvips will ever want to do so. I felt -this was acceptable, since along with new file types should also come -new defaults in @file{texmf.cnf} (and its descendant @file{paths.h}), -since it's best for users if they can modify one configuration file for -all kinds of paths. - -Kpathsea does not open any files or parse any formats itself. Its -purpose is only to return filenames. The GNU font utilities source does -contain libraries to read TFM, GF, and PK files. - - -@node Calling sequence -@section Calling sequence - -@cindex programming with Kpathsea -@cindex calling sequence - -The typical way to use Kpathsea in your program goes something like this: - -@enumerate - -@item -@findex kpse_set_progname -@vindex argv[0] -Call @code{kpse_set_progname} with @code{argv[0]}; This is the only -initialization that is mandatory to take full advantage of -Kpathsea---specifically, for the @code{.@var{program}} feature of config -files (@pxref{Config files}). - -@vindex program_invocation_name -@vindex program_invocation_short_name -@vindex KPATHSEA_DEBUG -@code{kpse_set_progname} sets the global variables -@code{program_invocation_name} and @code{program_invocation_short_name}. -It also initializes debugging flags based on the environment variable -@code{KPATHSEA_DEBUG}, if that is set. set. - -@cindex GNU C library -The GNU C library provides these two global variables itself; in this -case, the call to @code{kpse_set_program} does nothing. But you (as a -software author) most likely do not want to force people installing your -program to have glibc. - -@item -@vindex kpathsea_debug -@cindex debugging flags, in kpathsea-using program -Set debugging options. @xref{Debugging}. If your program doesn't have a -debugging flag already, you can define one and set @samp{kpathsea_debug} -to the number that the user supplies (see Dviljk), or you can just omit -this altogether (people can always set @samp{KPATHSEA_DEBUG}). If you -do have runtime debugging already, you need to merge Kpathsea's options -with yours (see Dvipsk and Xdvik). - -@item -@vindex client_path @r{in @code{kpse_format_info}} -@vindex kpse_format_info -@flindex resident.c -@cindex config files, for kpathsea-using program -If your program has its own configuration files that can define search -paths, you should assign those paths to the @code{client_path} member in -the appropriate element of the @file{kpse_format_info} array. (This array -is indexed by file type; see @file{tex-file.h}.) See @file{resident.c} -in Dvipsk for an example. - -@item -@findex kpse_init_prog -@flindex proginit.h -Call @code{kpse_init_prog} (see @file{proginit.c}). It's useful for the -DVI drivers, at least, but for other programs it may be simpler to -extract the parts of it that actually apply. This does not initialize -any paths, it just looks for (and sets) certain environment variables -and other random information. (A search path is always initialized at -the first call to find a file of that type; this eliminates much useless -work, e.g., initializing the Bib@TeX{} search paths in a DVI driver.) - -@item -@findex kpse_find_* -The routine to actually find a file of type @var{format} is -@code{kpse_find_@var{format}}, defined in @file{tex-file.h}. These are -macros that expand to a call to @file{kpse_find_file}. You can call, -say, @code{kpse_find_tfm} after doing only the first of the -initialization steps above---Kpathsea will read the generic config file -@file{texmf.cmf}, look for environment variables, and do the expansions -at the first lookup. - -@item -To find PK and/or GF bitmap fonts, the routines are @file{kpse_find_pk}, -@file{kpse_find_gf} and @file{kpse_find_glyph}, defined in -@file{tex-glyph.h}. These return a structure in addition to the -resultant filename, because fonts can be found in so many ways. See the -documentation in the source. - -@end enumerate - -@cindex hash table routines -@cindex memory allocation routines -@cindex string routines -@cindex reading unlimited-length lines -@cindex input lines, reading -@cindex lines, reading unlimited-length -Kpathsea also provides many utility routines. Some are generic: hash -tables, memory allocation, string concatenation and copying, string -lists, reading input lines of unlimited length, etc. Others are -filename-related: default path, tilde, and variable expansion, -@code{stat} calls, etc. (Perhaps someday I'll move the former to a -separate library.) - -@flindex c-*.h -The @file{c-*.h} header files can also help your program adapt to many -different systems. You will almost certainly want to use Autoconf for -configuring your software if you use Kpathsea; I strongly recommend -using Autoconf regardless. You can get it by ftp from -@samp{prep.ai.mit.edu} in @file{pub/gnu/autoconf-*.tar.gz}, or from any -of its mirrors. - - -@node Programming with config files -@section Programming with config files - -@cindex programming with config files -@cindex config files, programming with - -You can use the same @code{texmf.cnf} configuration file as Kpathsea for -your program. This will help installers do all configuration in one place. - -@findex kpse_var_expand -@flindex variable.h -To retrieve a value @var{var}, the best way is to call -@code{kpse_var_expand} on the string @code{$@var{var}}. This will look -first for an environment variable @var{var}, then a config file -value. The result will be the value found, or the empty string. This -function is declared in @file{kpathsea/variable.h}. - -@findex kpse_cnf_get -@flindex cnf.h -If for some reason you want to retrieve a value @emph{only} from a -config file, not automatically looking for a corresponding environment -variable, call @code{kpse_cnf_get} (declared in @file{kpathsea/cnf.h}) -with the string @var{var}. - -No initialization calls are needed. - - -@include copying.texi -@include freedom.texi - - -@node Index -@unnumbered Index - -@printindex cp - -@contents - -@bye diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/kpsewhich.c --- a/kpathsea/kpsewhich.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,258 +0,0 @@ -/* kpsewhich -- standalone path lookup and variable expansion for Kpathsea. - Ideas from Tom Esser and Pierre MacKay. - -Copyright (C) 1995 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Base resolution. (-D, -dpi) */ -unsigned dpi = 300; - -/* A construct to do variable expansion on. (-expand) */ -string expand = NULL; - -/* The file type for lookups. (-format) */ -kpse_file_format_type format = kpse_last_format; - -/* Ask interactively? (-interactive) */ -boolean interactive = false; - -/* The device name, for $MAKETEX_MODE. (-mode) */ -string mode = NULL; - -/* The program name, for `.program' in texmf.cnf. (-program) */ -string progname = NULL; - -/* Return the substring in `.', if S has - that form. If it doesn't, return 0. */ - -static unsigned -find_dpi P1C(string, s) -{ - unsigned dpi_number = 0; - string extension = find_suffix (s); - - if (extension != NULL) - sscanf (extension, "%u", &dpi_number); - - return dpi_number; -} - -/* Use the -format if specified, else guess dynamically from NAME. */ - -/* We could partially initialize this array from `kpse_format_info', - but it doesn't seem worth the trouble. */ -static const_string suffix[] - = { "gf", "pk", "", ".base", ".bib", ".bst", ".cnf", ".fmt", ".mf", - ".pool", ".eps", ".tex", ".pool", ".tfm", ".vf", ".ps", ".pfa" }; - -static kpse_file_format_type -find_format P1C(string, name) -{ - kpse_file_format_type ret; - - if (format != kpse_last_format) - ret = format; - else - { - unsigned name_len = strlen (name); - for (ret = 0; ret < kpse_last_format; ret++) - { - const_string suffix_try = suffix[ret]; - unsigned try_len = strlen (suffix_try); - if (try_len && try_len < name_len - && STREQ (suffix_try, name + name_len - try_len)) - break; - } - if (ret == kpse_last_format) - { - fprintf (stderr, - "kpsewhich: Can't guess format for %s, using tex.\n", name); - ret = kpse_tex_format; - } - } - - return ret; -} - -/* Look up a single filename NAME. Return 0 if success, 1 if failure. */ - -static unsigned -lookup P1C(string, name) -{ - string ret; - unsigned local_dpi; - kpse_glyph_file_type glyph_ret; - kpse_file_format_type fmt = find_format (name); - - switch (fmt) - { - case kpse_pk_format: - case kpse_gf_format: - case kpse_any_glyph_format: - /* Try to extract the resolution from the name. */ - local_dpi = find_dpi (name); - if (!local_dpi) - local_dpi = dpi; - ret = kpse_find_glyph (remove_suffix (name), local_dpi, fmt, &glyph_ret); - break; - default: - ret = kpse_find_file (name, fmt, false); - } - - if (ret) - puts (ret); - - return ret == NULL; -} - -/* Reading the options. */ - -#define USAGE "Options:\n\ - You can use `--' or `-' to start an option.\n\ - You can use any unambiguous abbreviation for an option name.\n\ - You can separate option names and values with `=' or ` '.\n\ -debug : set debugging flags.\n\ -D, dpi : use a base resolution of ; default 300.\n\ -expand : do variable expansion on .\n\ -help: print this message and exit.\n\ -interactive: ask for additional filenames to look up.\n\ -mode : set device name for $MAKETEX_MODE to ; no default.\n\ -version: print version number and exit.\n\ -" - -/* Test whether getopt found an option ``A''. - Assumes the option index is in the variable `option_index', and the - option table in a variable `long_options'. */ -#define ARGUMENT_IS(a) STREQ (long_options[option_index].name, a) - -/* SunOS cc can't initialize automatic structs. */ -static struct option long_options[] - = { { "debug", 1, 0, 0 }, - { "dpi", 1, 0, 0 }, - { "D", 1, 0, 0 }, - { "expand", 1, 0, 0 }, - { "format", 1, 0, 0 }, - { "help", 0, 0, 0 }, - { "interactive", 0, (int *) &interactive, 1 }, - { "mode", 1, 0, 0 }, - { "program", 1, 0, 0 }, - { "version", 0, 0, 0 }, - { 0, 0, 0, 0 } }; - - -/* We return the name of the font to process. */ - -static void -read_command_line P2C(int, argc, string *, argv) -{ - int g; /* `getopt' return code. */ - int option_index; - - while (true) - { - g = getopt_long_only (argc, argv, "", long_options, &option_index); - - if (g == EOF) - break; - - if (g == '?') - exit (1); /* Unknown option. */ - - assert (g == 0); /* We have no short option names. */ - - if (ARGUMENT_IS ("debug")) - kpathsea_debug |= atoi (optarg); - - else if (ARGUMENT_IS ("dpi") || ARGUMENT_IS ("D")) - dpi = atoi (optarg); - - else if (ARGUMENT_IS ("expand")) - expand = optarg; - - else if (ARGUMENT_IS ("format")) - format = atoi (optarg); - - else if (ARGUMENT_IS ("help")) - { - printf ("Usage: %s [options] [filenames].\n", argv[0]); - fputs (USAGE, stdout); - exit (0); - } - - else if (ARGUMENT_IS ("mode")) - mode = optarg; - - else if (ARGUMENT_IS ("program")) - progname = optarg; - - else if (ARGUMENT_IS ("version")) - { - extern char *kpathsea_version_string; /* from version.c */ - printf ("%s.\n", kpathsea_version_string); - exit (0); - } - - /* Else it was just a flag; getopt has already done the assignment. */ - } -} - -int -main P2C(int, argc, string *, argv) -{ - unsigned unfound = 0; - - read_command_line (argc, argv); - - if (!progname) - progname = (string) ""; - - kpse_set_progname (progname); - - /* false for no MakeTeXPK, NULL for no fallback font. */ - kpse_init_prog (uppercasify (progname), dpi, mode, false, NULL); - - /* No extra frills on expansion output, to make it easy to use. */ - if (expand) - puts (kpse_var_expand (expand)); - - for (; optind < argc; optind++) - { - unfound += lookup (argv[optind]); - } - - if (interactive) - { - for (;;) - { - string name = read_line (stdin); - if (!name || STREQ (name, "q") || STREQ (name, "quit")) break; - unfound += lookup (name); - free (name); - } - } - - exit (unfound); -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/kpsexpand.c --- a/kpathsea/kpsexpand.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* kpsexpand -- do Kpathsea variable expansion, pretending to be a given - program. For example, - prompt$ kpsexpand latex2e '$TEXINPUTS' - expands $TEXINPUTS for latex2e. - - Based on code from te@informatik.uni-hannover.de. */ - -/* Not worth chance of collisions to #include anything but this. */ -#include /* for stderr */ - -#include "tex-file.h" -extern char *kpse_var_expand (); -extern void kpse_set_progname (); -extern char *kpathsea_version_string; - -int -main (argc, argv) - int argc; - char *argv[]; -{ - if (argc < 3) - { - fprintf (stderr, "Usage: %s progname string [filename]\n", argv[0]); - fprintf (stderr, "%s\n", kpathsea_version_string); - fputs ("Sets the program name to `progname',\n", stderr); - fputs ("then prints the variable expansion of `string'.\n", stderr); - fputs ("If `filename' is present, does lookups of several types.\n", - stderr); - fputs ("Example: kpsexpand latex2e '$TEXFINPUTS'.\n", stderr); - exit (1); - } - - kpse_set_progname (argv[1]); - printf ("%s\n", kpse_var_expand (argv[2])); - - if (argc == 4) - { - printf ("PICT: %s\n", kpse_find_pict (argv[3])); - printf ("TEX: %s\n", kpse_find_tex (argv[3])); - printf ("TFM: %s\n", kpse_find_tfm (argv[3])); - printf ("VF: %s\n", kpse_find_vf (argv[3])); - } - return 0; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/lib.h --- a/kpathsea/lib.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* lib.h: declarations for common, low-level routines in kpathsea. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_LIB_H -#define KPATHSEA_LIB_H - -#include - -/* Define common sorts of messages. */ - -/* This should be called only after a system call fails. Don't exit - with status `errno', because that might be 256, which would mean - success (exit statuses are truncated to eight bits). */ -#define FATAL_PERROR(s) do { perror (s); exit (EXIT_FAILURE); } while (0) - - -#define START_FATAL() do { fputs ("fatal: ", stderr) -#define END_FATAL() fputs (".\n", stderr); exit (1); } while (0) - -#define FATAL(str) \ - START_FATAL (); fputs (str, stderr); END_FATAL () -#define FATAL1(str, e1) \ - START_FATAL (); fprintf (stderr, str, e1); END_FATAL () -#define FATAL2(str, e1, e2) \ - START_FATAL (); fprintf (stderr, str, e1, e2); END_FATAL () -#define FATAL3(str, e1, e2, e3) \ - START_FATAL (); fprintf (stderr, str, e1, e2, e3); END_FATAL () -#define FATAL4(str, e1, e2, e3, e4) \ - START_FATAL (); fprintf (stderr, str, e1, e2, e3, e4); END_FATAL () -#define FATAL6(str, e1, e2, e3, e4, e5, e6) \ - START_FATAL (); fprintf (stderr, str, e1, e2, e3, e4, e5, e6); END_FATAL () - - -#define START_WARNING() do { fputs ("warning: ", stderr) -#define END_WARNING() fputs (".\n", stderr); fflush (stderr); } while (0) - -#define WARNING(str) \ - START_WARNING (); fputs (str, stderr); END_WARNING () -#define WARNING1(str, e1) \ - START_WARNING (); fprintf (stderr, str, e1); END_WARNING () -#define WARNING2(str, e1, e2) \ - START_WARNING (); fprintf (stderr, str, e1, e2); END_WARNING () -#define WARNING3(str, e1, e2, e3) \ - START_WARNING (); fprintf (stderr, str, e1, e2, e3); END_WARNING () -#define WARNING4(str, e1, e2, e3, e4) \ - START_WARNING (); fprintf (stderr, str, e1, e2, e3, e4); END_WARNING () - - -/* I find this easier to read. */ -#define STREQ(s1, s2) (strcmp (s1, s2) == 0) - -/* This is the maximum number of numerals that result when a 64-bit - integer is converted to a string, plus one for a trailing null byte, - plus one for a sign. */ -#define MAX_INT_LENGTH 21 - -/* If the environment variable TEST is set, return it; otherwise, - DEFAULT. This is useful for paths that use more than one envvar. */ -#define ENVVAR(test, default) (getenv (test) ? (test) : (default)) - -/* Return a fresh copy of S1 followed by S2, et al. */ -extern string concat P2H(const_string s1, const_string s2); -extern string concat3 P3H(const_string, const_string, const_string); -/* `concatn' is declared in its own include file, to avoid pulling in - all the varargs stuff. */ - -/* A fresh copy of just S. */ -extern string xstrdup P1H(const_string s); - -/* Convert all lowercase characters in S to uppercase. */ -extern string uppercasify P1H(const_string s); - -/* Convert the integer I to a string. */ -extern string itoa P1H(int i); - -/* True if FILENAME1 and FILENAME2 are the same file. If stat fails on - either name, return false, no error message. - Cf. `SAME_FILE_P' in xstat.h. */ -extern boolean same_file_p P2H(const_string filename1, const_string filename2); - -#ifndef HAVE_BASENAME -/* Return NAME with any leading path stripped off. This returns a - pointer into NAME. */ -extern const_string basename P1H(const_string name); -#endif /* not HAVE_BASENAME */ - -/* If NAME has a suffix, return a pointer to its first character (i.e., - the one after the `.'); otherwise, return NULL. */ -extern string find_suffix P1H(const_string name); - -/* Return NAME with any suffix removed. */ -extern string remove_suffix P1H(const_string name); - -/* Return S with the suffix SUFFIX, removing any suffix already present. - For example, `make_suffix ("/foo/bar.baz", "karl")' returns - `/foo/bar.karl'. Returns a string allocated with malloc. */ -extern string make_suffix P2H(const_string s, const_string suffix); - -/* Return NAME with STEM_PREFIX prepended to the stem. For example, - `make_prefix ("/foo/bar.baz", "x")' returns `/foo/xbar.baz'. - Returns a string allocated with malloc. */ -extern string make_prefix P2H(string stem_prefix, string name); - -/* If NAME has a suffix, simply return it; otherwise, return - `NAME.SUFFIX'. */ -extern string extend_filename P2H(const_string name, const_string suffix); - -/* Call putenv with the string `VAR=VALUE' and abort on error. */ -extern void xputenv P2H(const_string var, const_string value); -extern void xputenv_int P2H(const_string var, int value); - -/* Returns true if FN is a directory or a symlink to a directory. */ -extern boolean dir_p P1H(const_string fn); - -/* If FN is a readable directory, return the number of links it has. - Otherwise, return -1. */ -extern int dir_links P1H(const_string fn); - -/* Like their stdio counterparts, but abort on error, after calling - perror(3) with FILENAME as its argument. */ -extern FILE *xfopen P2H(const_string filename, const_string mode); -extern void xfclose P2H(FILE *, const_string filename); -extern void xfseek P4H(FILE *, long, int, string filename); -extern unsigned long xftell P2H(FILE *, string filename); - - -/* These call the corresponding function in the standard library, and - abort if those routines fail. Also, `xrealloc' calls `xmalloc' if - OLD_ADDRESS is null. */ -extern address xmalloc P1H(unsigned size); -extern address xrealloc P2H(address old_address, unsigned new_size); -extern address xcalloc P2H(unsigned nelem, unsigned elsize); - -/* (Re)Allocate N items of type T using xmalloc/xrealloc. */ -#define XTALLOC(n, t) ((t *) xmalloc ((n) * sizeof (t))) -#define XTALLOC1(t) XTALLOC (1, t) -#define XRETALLOC(addr, n, t) ((addr) = (t *) xrealloc (addr, (n) * sizeof(t))) - -#endif /* not KPATHSEA_LIB_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/line.c --- a/kpathsea/line.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* line.c: return the next line from a file, or NULL. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Don't include config.h or all our other usual includes, since - it's useful to just throw this file into other programs. */ - -#include -extern void free (); - -/* From xmalloc.c and xrealloc.c. This saves having to include config.h. */ -extern void *xmalloc (), *xrealloc (); - - -/* Allocate in increments of this size. */ -#define BLOCK_SIZE 40 - -char * -read_line (f) - FILE *f; -{ - int c; - unsigned limit = BLOCK_SIZE; - unsigned loc = 0; - char *line = xmalloc (limit); - - while ((c = getc (f)) != EOF && c != '\n') - { - line[loc] = c; - loc++; - - /* By testing after the assignment, we guarantee that we'll always - have space for the null we append below. We know we always - have room for the first char, since we start with BLOCK_SIZE. */ - if (loc == limit) - { - limit += BLOCK_SIZE; - line = xrealloc (line, limit); - } - } - - /* If we read anything, return it. This can't represent a last - ``line'' which doesn't end in a newline, but so what. */ - if (c != EOF) - { - /* Terminate the string. We can't represent nulls in the file, - either. Again, it doesn't matter. */ - line[loc] = 0; - } - else /* At end of file. */ - { - free (line); - line = NULL; - } - - return line; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/line.h --- a/kpathsea/line.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* line.h: read an arbitrary-length input line. - -Copyright (C) 1992 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef LINE_H -#define LINE_H - -#include -#include - - -/* Return NULL if we are at EOF, else the next line of F. The newline - character at the end of string is removed. The string is allocated - with malloc. */ -extern string read_line P1H(FILE *f); - -#endif /* not LINE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/magstep.c --- a/kpathsea/magstep.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* magstep.c: fix up fixed-point vs. floating-point. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -/* Return true magstep N, where the lsb of N means ``half'' (see - magstep.h) for resolution BDPI. From Tom Rokicki's dvips. */ - -static int -magstep P2C(int, n, int, bdpi) -{ - double t; - int step; - int neg = 0; - - if (n < 0) - { - neg = 1; - n = -n; - } - - if (n & 1) - { - n &= ~1; - t = 1.095445115; - } - else - t = 1.0; - - while (n > 8) - { - n -= 8; - t = t * 2.0736; - } - - while (n > 0) - { - n -= 2; - t = t * 1.2; - } - - step = 0.5 + (neg ? bdpi / t : bdpi * t); - return step; -} - -/* This is adapted from code written by Tom Rokicki for dvips. It's - part of Kpathsea now so all the drivers can use it. The idea is to - return the true dpi corresponding to DPI with a base resolution of - BDPI. If M_RET is non-null, we also set that to the mag value. */ - -/* Don't bother trying to use fabs or some other ``standard'' routine - which can only cause trouble; just roll our own simple-minded - absolute-value function that is all we need. */ -#undef ABS /* be safe */ -#define ABS(expr) ((expr) < 0 ? -(expr) : (expr)) - -#define MAGSTEP_MAX 40 - -unsigned -kpse_magstep_fix P3C(unsigned, dpi, unsigned, bdpi, int *, m_ret) -{ - int m; - int mdpi = -1; - unsigned real_dpi = 0; - int sign = dpi < bdpi ? -1 : 1; /* negative or positive magsteps? */ - - for (m = 0; !real_dpi && m < MAGSTEP_MAX; m++) /* don't go forever */ - { - mdpi = magstep (m * sign, bdpi); - if (ABS (mdpi - (int) dpi) <= 1) /* if this magstep matches, quit */ - real_dpi = mdpi; - else if ((mdpi - (int) dpi) * sign > 0) /* if gone too far, quit */ - real_dpi = dpi; - } - - /* If requested, return the encoded magstep (the loop went one too far). */ - if (m_ret) - *m_ret = real_dpi == mdpi ? (m - 1) * sign : 0; - - /* Always return the true dpi found. */ - return real_dpi ? real_dpi : dpi; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/magstep.h --- a/kpathsea/magstep.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* magstep.h: declaration for magstep fixing. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_MAGSTEP_H -#define KPATHSEA_MAGSTEP_H - -#include -#include - -/* If DPI is close enough to some magstep of BDPI, return the true dpi - value, and the magstep found (or zero) in M_RET (if - non-null). ``Close enough'' means within one pixel. - - M_RET is slightly encoded: the least significant bit is on for a - half-magstep, off otherwise. Thus, a returned M_RET of 1 means - \magstephalf, i.e., sqrt(1.2), i.e., 1.09544. Put another way, - return twice the number of magsteps. - - In practice, this matters for magstephalf. Floating-point computation - with the fixed-point DVI representation leads to 328 (for BDPI == - 300); specifying `at 11pt' yields 330; the true \magstephalf is 329 - (that's what you get if you run Metafont with mag:=magstep(.5)). - - The time to call this is after you read the font spec from the DVI - file, but before you look up any files -- do the usual floating-point - computations, and then fix up the result. */ - -extern unsigned kpse_magstep_fix P3H(unsigned dpi, unsigned bdpi, int *m_ret); - -#endif /* not KPATHSEA_MAGSTEP_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/maintain.texi --- a/kpathsea/maintain.texi Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,500 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename maintain.info -@settitle Information For Maintainers of GNU Software -@c For double-sided printing, uncomment: -@c @setchapternewpage odd -@c UPDATE THIS DATE WHENEVER YOU MAKE CHANGES! -@set lastupdate 08 November 1994 -@c %**end of header - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Maintaining: (maintain). Maintaining GNU software. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@setchapternewpage off - -@ifinfo -Information for maintainers of GNU software. -Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. -@end ifinfo - -@titlepage -@title Information For Maintainers of GNU Software -@author Richard Stallman -@author last updated @value{lastupdate} -@page - -@vskip 0pt plus 1filll -Copyright @copyright{} 1992, 1993, 1994 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. -@end titlepage - -@ifinfo -@node Top, Preface, (dir), (dir) -@top Version - -Last updated @value{lastupdate}. -@end ifinfo - -@menu -* Preface:: -* Legal Matters:: -* Clean Ups:: -* Mail:: -* Old Versions:: -* Archives:: -* Distributions:: -@end menu - -@node Preface -@chapter About This Document - -This file contains guidelines and advice for someone who is the -maintainer of a GNU program on behalf of the GNU project. Anyone -can change GNU software, but there's no need to pay attention to -these guidelines unless you are maintaining a version for -widespread distribution. - -Corrections or suggestions regarding this document should be sent to -@code{gnu@@prep.ai.mit.edu}. If you make a suggestion, please include a -suggested new wording for it; our time is limited. We prefer a context -diff to the @file{maintain.texi} file, but if you don't have that file, -please mail your suggestion anyway. - -This release of the GNU Maintenance Instructions was last updated -@value{lastupdate}. - -@node Legal Matters -@chapter Legal Matters - -When incorporating changes from other people, make sure to follow the -correct procedures. Doing this ensures that the FSF has the legal right -to distribute and defend GNU software. - -@menu -* Copyrights:: -* Recording Changes:: -@end menu - -@node Copyrights -@section Copyrights - -For the sake of registering the copyright on later versions of the -software, you need to keep track of each person who makes significant -changes. A change of ten lines or so, or a few such changes, in a -large program is not significant. - -@strong{Before} incorporating significant changes, make sure that the -person has signed copyright papers and that the Foundation has -received and signed them. - -You can tell the person what papers to sign by email. For large -changes, ask for an assignment. Send the person a copy of -@file{/gd/gnuorg/assign.changes}, but first, go to the second page -and insert the person's name and the name of the program involved in -place of @samp{NAME OF PERSON} and @samp{NAME OF PROGRAM}. Do this -before sending, because otherwise the person might sign without -noticing them. Then the papers would be useless. - -For medium to small changes, ask for a disclaimer. Use the file -@file{/gd/gnuorg/disclaim.changes}. - -To check whether papers have been received, look in -@file{/gd/gnuorg/copyright.list}. If you can't look there directly, -@code{fsf-records@@prep.ai.mit.edu} can check for you, and can also -check for papers that are waiting to be entered and inform you -when expected papers arrive. - -You can also send the person @file{/gd/gnuorg/conditions.text}, which -explains his options (assign vs. disclaim) and their consequences. - -@node Recording Changes -@section Recording Changes - -@strong{Keep records of which portions were written by whom.} - -These records don't need to be as detailed as a change log. They don't -need to distinguish work done at different times, only different people. - -They should say which files or functions were written by each person, -and which files or functions were revised by each person. They don't -need to say what the purpose of the change was. The Register of -Copyrights doesn't care what the program does. - -For example, this would describe an early version of GAS: - -@display -Dean Elsner first version of all files except gdb-lines.c and m68k.c. -Jay Fenlason entire files gdb-lines.c and m68k.c, most of app.c, - extensive changes in messages.c, input-file.c, write.c, - revisions elsewhere. -@end display - -Please keep these records in a file named @file{AUTHORS} in the source -directory for the program itself. - -@node Clean Ups -@chapter Cleaning Up Changes - -If someone sends you changes which are ugly and will make the program -harder to understand and maintain in the future, such as a port to -another operating system containing ad hoc conditionals, don't -hesitate to ask the person to clean up his changes before you merge -them. - -Since the amount of work we do is constant in any case, the more work -we get other people to do, the faster GNU will advance. - -If the person will not or can not make the changes clean enough, then -say that you can't afford to merge them. Invite him to distribute -his changes himself, or to find other people who can make them clean -enough for us to maintain. - -The only reason to do these cleanups yourself is if (1) it is easy -enough that it is less work than telling the author what to clean up, -or (2) users will greatly appreciate the improvement, and you would -almost write it yourself if you had time. - -The GNU Coding Standards are a good thing to send people who have to -clean up C programs (@pxref{Top, , Contents, standards, GNU Coding -Standards}). The Emacs Lisp manual contains an appendix that gives -coding standards for Emacs Lisp programs; it is good to urge authors to -read it (@pxref{Tips, , Tips and Standards, elisp, The GNU Emacs Lisp -Reference Manual}). - -@node Mail -@chapter Dealing With Mail - -Once a program is in use, you will start getting bug reports. Some -GNU programs have their own special lists for sending bug reports. -For miscellaneous programs that don't have their own lists, we use a -catch-all list, @code{bug-gnu-utils@@prep.ai.mit.edu}. Talk with -@code{gnu@@prep.ai.mit.edu} to arrange to be added to the proper list -for your program. - -When you receive bug reports, keep in mind that the main purpose of -the bug reports is to enable you to improve the next version of the -program. Helping individuals is only secondary. So you don't -need to give a substantial response unless you have a reason to -(for example, to ask for more information, or to ask the user to -test a fix). But it is good to respond to the rest of the bug -reports with just ``Thanks.'' That is quick and tells the user that -the bug report was useful. - -As a practical matter, any time you spend helping individuals beyond -what is necessary for you, takes time away from maintaining the program. -While this may seem ``friendly'' and ``helpful,'' actually it is -counterproductive. If you help one person when you could instead have -helped thousands, the world is worse off. - -@node Old Versions -@chapter Recording Old Versions - -It is very important to keep backup files of all source files of GNU. -You can do this using RCS if you like. The easiest way to use RCS is -via the Version Control library in Emacs; @ref{Concepts of VC, , -Concepts of Version Control, emacs, The GNU Emacs Manual}. - -Alternatively, you can keep backup files. - -@menu -* Backup Files:: -* Deleting Backup Files:: -@end menu - -@node Backup Files -@section Backup Files - -Emacs makes a backup file by renaming the old source file to a new -name. This means that if the file is also pointed to by a -distribution directory, the distribution directory continues to point -to the same version it always did---the right thing. - -We want to keep more than one backup for all GNU sources. So, if you -are going to edit GNU sources, @emph{make certain} to put -@example -(setq version-control t) -@end example -@noindent -into your @file{.emacs} file, so that Emacs always creates numbered -backup files. - -Using Emacs backup files works as long as people always make changes -with Emacs. If you change the file in some other way, and use -@code{cp}, @code{ftp}, or @code{tar} to install it, you will -@emph{overwrite} the old version and fail to make a backup. Don't do -that! - -If you want to make a change to a source file with something other -than Emacs, you can write the changed file to another name, and use -@kbd{C-x C-w} in Emacs to write it under the real name. This makes the -backup file properly. - -You can use GNU @code{cp} or @code{mv} to install changed files if you -give them the @samp{--backup} (or, equivalently, @samp{-b}) option; then -they make backup copies the same way that Emacs does. You should also -use the @samp{--version-control=t} option, or, alternately, first -@example -export VERSION_CONTROL=t -@end example -@noindent -(or the @code{csh} equivalent); this makes GNU @code{cp} and @code{mv} -create numbered backup files instead of a single backup file with a -@samp{~} appended to the filename. For installing many changed files, -you can use shell wildcards and also give GNU @code{cp} or @code{mv} the -@samp{--update} (@samp{-u}) option, which only copies (or moves) files -that have been modified more recently than the existing destination -files, and the @samp{--verbose} (@samp{-v}) option, which prints the -names of the files that are actually copied (or moved). - -Before you use @code{mv} or @code{cp} in this way, @emph{make sure it is -the GNU version}. Do @samp{which mv} (in @code{csh}) or @samp{type mv} -(in @code{bash}) to verify you are not getting @file{/bin/mv} (or -likewise for @code{cp}). Or just type @samp{cp} or @samp{mv} and look -at the usage message. - -@node Deleting Backup Files -@section Deleting Backup Files - -Always answer no when Emacs offers to delete backup files automatically. -The way to delete them is by hand, using @kbd{M-x dired}. - -When you decide which backup files to delete, it is good to keep one -every couple of weeks or so, going back about 2 months. - -If there is a long gap between versions, because that file did not change -during a long period of time, then keep the version before the gap -even if it is 2 months old. Pretend it is just 2 weeks older than the -next kept version, so delete it when the next version is >= 6 weeks old. - -If the changes in a program have been simple, then you don't need to -keep as many backup files. Just one a month for 2 months is enough. - -If you have made big changes, keep the versions before and after the -big change, until they are old enough. - -If you made several changes the same day, usually the last version written -that day is best to keep. - -It is almost always right to keep the most recent backup version. - -@node Archives -@chapter Archives - -For each program, you should keep a special magtape or cartridge as an -archive. Each time you release a new version, @code{dd} the tar file onto -the end of the tape. Keep a list of versions on the tape's paper -label, and add to it each time you add to the tape. - -For cartridges, you can type -@example -mt -f /dev/nrst8 eom -@end example -@noindent -to go straight to the end of the data on the tape. - -For reel-to-reel tapes, there is no automated way to go to the end of -the data on the tape. You have to count the number of files (based -on the written label), and space forward over them with @samp{mt fsf}. - -To be safe, it is important to check your count. If the count is @var{n}, -then do: -@example -mt -f /dev/nrmt8 fsf @var{n}-1 -@end example -@noindent -This puts you at the beginning of the last existing tar file. - -Then do -@example -tar tf /dev/nrmt8 -@end example -@noindent -to list that tar file. If the version number appears in a directory -name, which is a good idea, you can use this to verify that you have -reached the tar file you wanted to reach. - -@kbd{C-c} the @code{tar} before it finishes; then do -@example -mt -f /dev/nrmt8 fsf -@end example -@noindent -to skip past it and its end-of-file marker. - -To copy the new distribution file onto cartridge tape, do: -@example -dd if=@var{tar-file-name} of=/dev/nrst8 bs=102400 -@end example -@noindent -(This specifies a blocking factor of 200.) - -For reel-to-reel tape, do: -@example -dd if=@var{tar-file-name} of=/dev/nrmt8 bs=10240 -@end example -@noindent -(This specifies a blocking factor of 20.) - -When the tape gets full, put it aside permanently and start writing -another. - -@node Distributions -@chapter Distributions - -It is important to follow the GNU conventions when making GNU software -distributions. - -@menu -* Distribution tar Files:: -* Distribution Patches:: -* Distribution on prep:: -* Test Releases:: -@end menu - -@node Distribution tar Files -@section Distribution tar Files - -The tar file for version @var{m}.@var{n} of program @code{foo} should be -named @file{foo-@var{m}.@var{n}.tar}. It should unpack into a -subdirectory named @file{foo-@var{m}.@var{n}}. Tar files should not -unpack into files in the current directory, because this is inconvenient -if the user happens to unpack into a directory with other files in it. - -Here is how the @file{Makefile} for Bison creates the tar file. -This method is good for other programs. - -@example -dist: bison.info - echo bison-`sed -e '/version_string/!d' \ - -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname - -rm -rf `cat .fname` - mkdir `cat .fname` - dst=`cat .fname`; for f in $(DISTFILES); do \ - ln $(srcdir)/$$f $$dst/$$f || @{ echo copying $$f; \ - cp -p $(srcdir)/$$f $$dst/$$f ; @} \ - done - tar --gzip -chf `cat .fname`.tar.gz `cat .fname` - -rm -rf `cat .fname` .fname -@end example - -Source files that are symbolic links to other file systems cannot be -installed in the temporary directory using @code{ln}, so use @code{cp} -if @code{ln} fails. - -@node Distribution Patches -@section Distribution Patches - -If the program is large, it is useful to make a set of diffs for each -release, against the previous important release. - -At the front of the set of diffs, put a short explanation of which -version this is for and which previous version it is relative to. -Also explain what else people need to do to update the sources -properly (for example, delete or rename certain files before -installing the diffs). - -The purpose of having diffs is that they are small. To keep them -small, exclude files that the user can easily update. For example, -exclude info files, DVI files, tags tables, output files of Bison or -Flex. In Emacs diffs, we exclude compiled Lisp files, leaving it up -to the installer to recompile the patched sources. - -When you make the diffs, each version should be in a directory suitably -named---for example, @file{gcc-2.3.2} and @file{gcc-2.3.3}. This way, -it will be very clear from the diffs themselves which version is which. - -If you use GNU @code{diff} to make the patch, use the options -@samp{-rc2P}. That will put any new files into the output as ``entirely -different.'' - -If the distribution has subdirectories in it, then the diffs probably -include some files in the subdirectories. To help users install such -patches reliably, give them precise directions for how to run patch. -For example, say this: - -@display -To apply these patches, cd to the main directory of the program -and then use `patch -p1'. `-p1' avoids guesswork in choosing -which subdirectory to find each file in. -@end display - -It's wise to test your patch by applying it to a copy of the old -version, and checking that the result exactly matches the new version. - -@node Distribution on prep -@section Distribution on @code{prep} - -Only the latest version of any program needs to be on @code{prep}. Being an -archive of old versions is not the function of @code{prep}. - -Diffs are another matter. Since they are much smaller than -distribution files, it is good to keep the diffs around for quite a -while. - -@node Test Releases -@section Test Releases - -When you release a greatly changed new major version of a program, -you might want to do so as a beta test release. - -Once a program gets to be widely used and people expect it to work -solidly, it is a good idea to do pretest releases before each ``real'' -release. This means that you make a tar file, but send it only to a -group of volunteers that you have recruited. (Use a suitable GNU -mailing list/newsgroup to recruit them.) - -One thing that you should never do is to release a distribution which -is considered a pretest or beta test but which contains the version -number for the planned real release. Many people will look only at -the version number (in the tar file name, in the directory name that -it unpacks into, or wherever they can find it) to determine whether a -tar file is the latest version. People might look at the test release -in this way and mistake it for the real release. Therefore, always -change the number when you make a new tar file. - -If you are about to release version 4.6 but you want to do a pretest -or beta test first, call it 4.5.90. If you need a second pretest, -call it 4.5.91, and so on. - -@contents - -@bye diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/make-stds.texi --- a/kpathsea/make-stds.texi Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,628 +0,0 @@ -@comment This file is included by both standards.texi and make.texinfo. -@comment It was broken out of standards.texi on 1/6/93 by roland. - -@node Makefile Conventions -@chapter Makefile Conventions -@comment standards.texi does not print an index, but make.texinfo does. -@cindex makefile, conventions for -@cindex conventions for makefiles -@cindex standards for makefiles - -This chapter describes conventions for writing the Makefiles for GNU programs. - -@menu -* Makefile Basics:: -* Utilities in Makefiles:: -* Standard Targets:: -* Command Variables:: -* Directory Variables:: -@end menu - -@node Makefile Basics -@section General Conventions for Makefiles - -Every Makefile should contain this line: - -@example -SHELL = /bin/sh -@end example - -@noindent -to avoid trouble on systems where the @code{SHELL} variable might be -inherited from the environment. (This is never a problem with GNU -@code{make}.) - -Different @code{make} programs have incompatible suffix lists and -implicit rules, and this sometimes creates confusion or misbehavior. So -it is a good idea to set the suffix list explicitly using only the -suffixes you need in the particular Makefile, like this: - -@example -.SUFFIXES: -.SUFFIXES: .c .o -@end example - -@noindent -The first line clears out the suffix list, the second introduces all -suffixes which may be subject to implicit rules in this Makefile. - -Don't assume that @file{.} is in the path for command execution. When -you need to run programs that are a part of your package during the -make, please make sure that it uses @file{./} if the program is built as -part of the make or @file{$(srcdir)/} if the file is an unchanging part -of the source code. Without one of these prefixes, the current search -path is used. - -The distinction between @file{./} and @file{$(srcdir)/} is important -when using the @samp{--srcdir} option to @file{configure}. A rule of -the form: - -@smallexample -foo.1 : foo.man sedscript - sed -e sedscript foo.man > foo.1 -@end smallexample - -@noindent -will fail when the current directory is not the source directory, -because @file{foo.man} and @file{sedscript} are not in the current -directory. - -When using GNU @code{make}, relying on @samp{VPATH} to find the source -file will work in the case where there is a single dependency file, -since the @file{make} automatic variable @samp{$<} will represent the -source file wherever it is. (Many versions of @code{make} set @samp{$<} -only in implicit rules.) A makefile target like - -@smallexample -foo.o : bar.c - $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o -@end smallexample - -@noindent -should instead be written as - -@smallexample -foo.o : bar.c - $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@ -@end smallexample - -@noindent -in order to allow @samp{VPATH} to work correctly. When the target has -multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest -way to make the rule work well. For example, the target above for -@file{foo.1} is best written as: - -@smallexample -foo.1 : foo.man sedscript - sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@@ -@end smallexample - -@node Utilities in Makefiles -@section Utilities in Makefiles - -Write the Makefile commands (and any shell scripts, such as -@code{configure}) to run in @code{sh}, not in @code{csh}. Don't use any -special features of @code{ksh} or @code{bash}. - -The @code{configure} script and the Makefile rules for building and -installation should not use any utilities directly except these: - -@example -cat cmp cp echo egrep expr grep -ln mkdir mv pwd rm rmdir sed test touch -@end example - -Stick to the generally supported options for these programs. For -example, don't use @samp{mkdir -p}, convenient as it may be, because -most systems don't support it. - -The Makefile rules for building and installation can also use compilers -and related programs, but should do so via @code{make} variables so that the -user can substitute alternatives. Here are some of the programs we -mean: - -@example -ar bison cc flex install ld lex -make makeinfo ranlib texi2dvi yacc -@end example - -Use the following @code{make} variables: - -@example -$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LEX) -$(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) -@end example - -When you use @code{ranlib}, you should make sure nothing bad happens if -the system does not have @code{ranlib}. Arrange to ignore an error -from that command, and print a message before the command to tell the -user that failure of the @code{ranlib} command does not mean a problem. - -If you use symbolic links, you should implement a fallback for systems -that don't have symbolic links. - -It is ok to use other utilities in Makefile portions (or scripts) -intended only for particular systems where you know those utilities to -exist. - -@node Standard Targets -@section Standard Targets for Users - -All GNU programs should have the following targets in their Makefiles: - -@table @samp -@item all -Compile the entire program. This should be the default target. This -target need not rebuild any documentation files; Info files should -normally be included in the distribution, and DVI files should be made -only when explicitly asked for. - -@item install -Compile the program and copy the executables, libraries, and so on to -the file names where they should reside for actual use. If there is a -simple test to verify that a program is properly installed, this target -should run that test. - -The commands should create all the directories in which files are to be -installed, if they don't already exist. This includes the directories -specified as the values of the variables @code{prefix} and -@code{exec_prefix}, as well as all subdirectories that are needed. -One way to do this is by means of an @code{installdirs} target -as described below. - -Use @samp{-} before any command for installing a man page, so that -@code{make} will ignore any errors. This is in case there are systems -that don't have the Unix man page documentation system installed. - -The way to install Info files is to copy them into @file{$(infodir)} -with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run -the @code{install-info} program if it is present. @code{install-info} -is a script that edits the Info @file{dir} file to add or update the -menu entry for the given Info file; it will be part of the Texinfo package. -Here is a sample rule to install an Info file: - -@comment This example has been carefully formatted for the Make manual. -@comment Please do not reformat it without talking to roland@gnu.ai.mit.edu. -@smallexample -$(infodir)/foo.info: foo.info -# There may be a newer info file in . than in srcdir. - -if test -f foo.info; then d=.; \ - else d=$(srcdir); fi; \ - $(INSTALL_DATA) $$d/foo.info $@@; \ -# Run install-info only if it exists. -# Use `if' instead of just prepending `-' to the -# line so we notice real errors from install-info. -# We use `$(SHELL) -c' because some shells do not -# fail gracefully when there is an unknown command. - if $(SHELL) -c 'install-info --version' \ - >/dev/null 2>&1; then \ - install-info --infodir=$(infodir) $$d/foo.info; \ - else true; fi -@end smallexample - -@item uninstall -Delete all the installed files that the @samp{install} target would -create (but not the noninstalled files such as @samp{make all} would -create). - -@comment The gratuitous blank line here is to make the table look better -@comment in the printed Make manual. Please leave it in. -@item clean - -Delete all files from the current directory that are normally created by -building the program. Don't delete the files that record the -configuration. Also preserve files that could be made by building, but -normally aren't because the distribution comes with them. - -Delete @file{.dvi} files here if they are not part of the distribution. - -@item distclean -Delete all files from the current directory that are created by -configuring or building the program. If you have unpacked the source -and built the program without creating any other files, @samp{make -distclean} should leave only the files that were in the distribution. - -@item mostlyclean -Like @samp{clean}, but may refrain from deleting a few files that people -normally don't want to recompile. For example, the @samp{mostlyclean} -target for GCC does not delete @file{libgcc.a}, because recompiling it -is rarely necessary and takes a lot of time. - -@item realclean -Delete everything from the current directory that can be reconstructed -with this Makefile. This typically includes everything deleted by -@code{distclean}, plus more: C source files produced by Bison, tags tables, -Info files, and so on. - -One exception, however: @samp{make realclean} should not delete -@file{configure} even if @file{configure} can be remade using a rule in -the Makefile. More generally, @samp{make realclean} should not delete -anything that needs to exist in order to run @file{configure} -and then begin to build the program. - -@item TAGS -Update a tags table for this program. - -@item info -Generate any Info files needed. The best way to write the rules is as -follows: - -@smallexample -info: foo.info - -foo.info: foo.texi chap1.texi chap2.texi - $(MAKEINFO) $(srcdir)/foo.texi -@end smallexample - -@noindent -You must define the variable @code{MAKEINFO} in the Makefile. It should -run the @code{makeinfo} program, which is part of the Texinfo -distribution. - -@item dvi -Generate DVI files for all TeXinfo documentation. -For example: - -@smallexample -dvi: foo.dvi - -foo.dvi: foo.texi chap1.texi chap2.texi - $(TEXI2DVI) $(srcdir)/foo.texi -@end smallexample - -@noindent -You must define the variable @code{TEXI2DVI} in the Makefile. It should -run the program @code{texi2dvi}, which is part of the Texinfo -distribution. Alternatively, write just the dependencies, and allow GNU -Make to provide the command. - -@item dist -Create a distribution tar file for this program. The tar file should be -set up so that the file names in the tar file start with a subdirectory -name which is the name of the package it is a distribution for. This -name can include the version number. - -For example, the distribution tar file of GCC version 1.40 unpacks into -a subdirectory named @file{gcc-1.40}. - -The easiest way to do this is to create a subdirectory appropriately -named, use @code{ln} or @code{cp} to install the proper files in it, and -then @code{tar} that subdirectory. - -The @code{dist} target should explicitly depend on all non-source files -that are in the distribution, to make sure they are up to date in the -distribution. -@xref{Releases, , Making Releases, standards, GNU Coding Standards}. - -@item check -Perform self-tests (if any). The user must build the program before -running the tests, but need not install the program; you should write -the self-tests so that they work when the program is built but not -installed. -@end table - -The following targets are suggested as conventional names, for programs -in which they are useful. - -@table @code -@item installcheck -Perform installation tests (if any). The user must build and install -the program before running the tests. You should not assume that -@file{$(bindir)} is in the search path. - -@item installdirs -It's useful to add a target named @samp{installdirs} to create the -directories where files are installed, and their parent directories. -There is a script called @file{mkinstalldirs} which is convenient for -this; find it in the Texinfo package.@c It's in /gd/gnu/lib/mkinstalldirs. -You can use a rule like this: - -@comment This has been carefully formatted to look decent in the Make manual. -@comment Please be sure not to make it extend any further to the right.--roland -@smallexample -# Make sure all installation directories (e.g. $(bindir)) -# actually exist by making them if necessary. -installdirs: mkinstalldirs - $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ - $(libdir) $(infodir) \ - $(mandir) -@end smallexample -@end table - -@node Command Variables -@section Variables for Specifying Commands - -Makefiles should provide variables for overriding certain commands, options, -and so on. - -In particular, you should run most utility programs via variables. -Thus, if you use Bison, have a variable named @code{BISON} whose default -value is set with @samp{BISON = bison}, and refer to it with -@code{$(BISON)} whenever you need to use Bison. - -File management utilities such as @code{ln}, @code{rm}, @code{mv}, and -so on, need not be referred to through variables in this way, since users -don't need to replace them with other programs. - -Each program-name variable should come with an options variable that is -used to supply options to the program. Append @samp{FLAGS} to the -program-name variable name to get the options variable name---for -example, @code{BISONFLAGS}. (The name @code{CFLAGS} is an exception to -this rule, but we keep it because it is standard.) Use @code{CPPFLAGS} -in any compilation command that runs the preprocessor, and use -@code{LDFLAGS} in any compilation command that does linking as well as -in any direct use of @code{ld}. - -If there are C compiler options that @emph{must} be used for proper -compilation of certain files, do not include them in @code{CFLAGS}. -Users expect to be able to specify @code{CFLAGS} freely themselves. -Instead, arrange to pass the necessary options to the C compiler -independently of @code{CFLAGS}, by writing them explicitly in the -compilation commands or by defining an implicit rule, like this: - -@smallexample -CFLAGS = -g -ALL_CFLAGS = -I. $(CFLAGS) -.c.o: - $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< -@end smallexample - -Do include the @samp{-g} option in @code{CFLAGS}, because that is not -@emph{required} for proper compilation. You can consider it a default -that is only recommended. If the package is set up so that it is -compiled with GCC by default, then you might as well include @samp{-O} -in the default value of @code{CFLAGS} as well. - -Put @code{CFLAGS} last in the compilation command, after other variables -containing compiler options, so the user can use @code{CFLAGS} to -override the others. - -Every Makefile should define the variable @code{INSTALL}, which is the -basic command for installing a file into the system. - -Every Makefile should also define the variables @code{INSTALL_PROGRAM} -and @code{INSTALL_DATA}. (The default for each of these should be -@code{$(INSTALL)}.) Then it should use those variables as the commands -for actual installation, for executables and nonexecutables -respectively. Use these variables as follows: - -@example -$(INSTALL_PROGRAM) foo $(bindir)/foo -$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a -@end example - -@noindent -Always use a file name, not a directory name, as the second argument of -the installation commands. Use a separate command for each file to be -installed. - -@node Directory Variables -@section Variables for Installation Directories - -Installation directories should always be named by variables, so it is -easy to install in a nonstandard place. The standard names for these -variables are described below. They are based on a standard filesystem -layout; variants of it are used in SVR4, 4.4BSD, Linux, Ultrix v4, and -other modern operating systems. - -These two variables set the root for the installation. All the other -installation directories should be subdirectories of one of these two, -and nothing should be directly installed into these two directories. - -@table @samp -@item prefix -A prefix used in constructing the default values of the variables listed -below. The default value of @code{prefix} should be @file{/usr/local} -When building the complete GNU system, the prefix will be empty and -@file{/usr} will be a symbolic link to @file{/}. - -@item exec_prefix -A prefix used in constructing the default values of some of the -variables listed below. The default value of @code{exec_prefix} should -be @code{$(prefix)}. - -Generally, @code{$(exec_prefix)} is used for directories that contain -machine-specific files (such as executables and subroutine libraries), -while @code{$(prefix)} is used directly for other directories. -@end table - -Executable programs are installed in one of the following directories. - -@table @samp -@item bindir -The directory for installing executable programs that users can run. -This should normally be @file{/usr/local/bin}, but write it as -@file{$(exec_prefix)/bin}. - -@item sbindir -The directory for installing executable programs that can be run from -the shell, but are only generally useful to system administrators. This -should normally be @file{/usr/local/sbin}, but write it as -@file{$(exec_prefix)/sbin}. - -@item libexecdir -@comment This paragraph adjusted to avoid overfull hbox --roland 5jul94 -The directory for installing executable programs to be run by other -programs rather than by users. This directory should normally be -@file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}. -@end table - -Data files used by the program during its execution are divided into -categories in two ways. - -@itemize @bullet -@item -Some files are normally modified by programs; others are never normally -modified (though users may edit some of these). - -@item -Some files are architecture-independent and can be shared by all -machines at a site; some are architecture-dependent and can be shared -only by machines of the same kind and operating system; others may never -be shared between two machines. -@end itemize - -This makes for six different possibilities. However, we want to -discourage the use of architecture-dependent files, aside from of object -files and libraries. It is much cleaner to make other data files -architecture-independent, and it is generally not hard. - -Therefore, here are the variables makefiles should use to specify -directories: - -@table @samp -@item datadir -The directory for installing read-only architecture independent data -files. This should normally be @file{/usr/local/share}, but write it as -@file{$(prefix)/share}. As a special exception, see @file{$(infodir)} -and @file{$(includedir)} below. - -@item sysconfdir -The directory for installing read-only data files that pertain to a -single machine--that is to say, files for configuring a host. Mailer -and network configuration files, @file{/etc/passwd}, and so forth belong -here. All the files in this directory should be ordinary ASCII text -files. This directory should normally be @file{/usr/local/etc}, but -write it as @file{$(prefix)/etc}. - -@c rewritten to avoid overfull hbox --tower -Do not install executables -@c here -in this directory (they probably -belong in @file{$(libexecdir)} or @file{$(sbindir))}. Also do not -install files that are modified in the normal course of their use -(programs whose purpose is to change the configuration of the system -excluded). Those probably belong in @file{$(localstatedir)}. - -@item sharedstatedir -The directory for installing architecture-independent data files which -the programs modify while they run. This should normally be -@file{/usr/local/com}, but write it as @file{$(prefix)/com}. - -@item localstatedir -The directory for installing data files which the programs modify while -they run, and that pertain to one specific machine. Users should never -need to modify files in this directory to configure the package's -operation; put such configuration information in separate files that go -in @file{datadir} or @file{$(sysconfdir)}. @file{$(localstatedir)} -should normally be @file{/usr/local/var}, but write it as -@file{$(prefix)/var}. - -@item libdir -The directory for object files and libraries of object code. Do not -install executables here, they probably belong in @file{$(libexecdir)} -instead. The value of @code{libdir} should normally be -@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. - -@item infodir -The directory for installing the Info files for this package. By -default, it should be @file{/usr/local/info}, but it should be written -as @file{$(prefix)/info}. - -@item includedir -@c rewritten to avoid overfull hbox --roland -The directory for installing header files to be included by user -programs with the C @samp{#include} preprocessor directive. This -should normally be @file{/usr/local/include}, but write it as -@file{$(prefix)/include}. - -Most compilers other than GCC do not look for header files in -@file{/usr/local/include}. So installing the header files this way is -only useful with GCC. Sometimes this is not a problem because some -libraries are only really intended to work with GCC. But some libraries -are intended to work with other compilers. They should install their -header files in two places, one specified by @code{includedir} and one -specified by @code{oldincludedir}. - -@item oldincludedir -The directory for installing @samp{#include} header files for use with -compilers other than GCC. This should normally be @file{/usr/include}. - -The Makefile commands should check whether the value of -@code{oldincludedir} is empty. If it is, they should not try to use -it; they should cancel the second installation of the header files. - -A package should not replace an existing header in this directory unless -the header came from the same package. Thus, if your Foo package -provides a header file @file{foo.h}, then it should install the header -file in the @code{oldincludedir} directory if either (1) there is no -@file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo -package. - -To tell whether @file{foo.h} came from the Foo package, put a magic -string in the file---part of a comment---and grep for that string. -@end table - -Unix-style man pages are installed in one of the following: - -@table @samp -@item mandir -The directory for installing the man pages (if any) for this package. -It should include the suffix for the proper section of the -manual---usually @samp{1} for a utility. It will normally be -@file{/usr/local/man/man1}, but you should write it as -@file{$(prefix)/man/man1}. - -@item man1dir -The directory for installing section 1 man pages. -@item man2dir -The directory for installing section 2 man pages. -@item @dots{} -Use these names instead of @samp{mandir} if the package needs to install man -pages in more than one section of the manual. - -@strong{Don't make the primary documentation for any GNU software be a -man page. Write a manual in Texinfo instead. Man pages are just for -the sake of people running GNU software on Unix, which is a secondary -application only.} - -@item manext -The file name extension for the installed man page. This should contain -a period followed by the appropriate digit; it should normally be @samp{.1}. - -@item man1ext -The file name extension for installed section 1 man pages. -@item man2ext -The file name extension for installed section 2 man pages. -@item @dots{} -Use these names instead of @samp{manext} if the package needs to install man -pages in more than one section of the manual. -@end table - -And finally, you should set the following variable: - -@table @samp -@item srcdir -The directory for the sources being compiled. The value of this -variable is normally inserted by the @code{configure} shell script. -@end table - -For example: - -@smallexample -@c I have changed some of the comments here slightly to fix an overfull -@c hbox, so the make manual can format correctly. --roland -# Common prefix for installation directories. -# NOTE: This directory must exist when you start the install. -prefix = /usr/local -exec_prefix = $(prefix) -# Where to put the executable for the command `gcc'. -bindir = $(exec_prefix)/bin -# Where to put the directories used by the compiler. -libexecdir = $(exec_prefix)/libexec -# Where to put the Info files. -infodir = $(prefix)/info -@end smallexample - -If your program installs a large number of files into one of the -standard user-specified directories, it might be useful to group them -into a subdirectory particular to that program. If you do this, you -should write the @code{install} rule to create these subdirectories. - -Do not expect the user to include the subdirectory name in the value of -any of the variables listed above. The idea of having a uniform set of -variable names for installation directories is to enable the user to -specify the exact same values for several different GNU packages. In -order for this to be useful, all the packages must be designed so that -they will work sensibly when the user does so. - diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/make-suffix.c --- a/kpathsea/make-suffix.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* make_suffix.c: unconditionally add a filename suffix. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -/* Return a new string: S suffixed with SUFFIX, regardless of what it - was before. This returns a newly allocated string. */ - -string -make_suffix P2C(const_string, s, const_string, suffix) -{ - string new_s; - const_string dot_pos = strrchr (s, '.'); - const_string slash_pos = strrchr (s, '/'); - - if (dot_pos == NULL || dot_pos < slash_pos) - new_s = concat3 (s, ".", suffix); - else - { - unsigned past_dot_index = dot_pos + 1 - s; - - new_s = (string) xmalloc (past_dot_index + strlen (suffix) + 1); - strncpy (new_s, s, dot_pos + 1 - s); - strcpy (new_s + past_dot_index, suffix); - } - - return new_s; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/path-elt.c --- a/kpathsea/path-elt.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* path-elt.c: Return the stuff between colons. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include - - -/* The static (but dynamically allocated) area we return the answer in, - and how much we've currently allocated for it. */ -static string elt = NULL; -static unsigned elt_alloc = 0; - -/* The path we're currently working on. */ -static const_string path = NULL; - - -/* Upon entry, the static `path' is at the first (and perhaps last) - character of the return value, or else NULL if we're at the end (or - haven't been called). I make no provision for caching the results; - thus, we parse the same path over and over, on every lookup. If that - turns out to be a significant lose, it can be fixed, but I'm guessing - disk accesses overwhelm everything else. */ - -string -kpse_path_element P1C(const_string, passed_path) -{ - const_string p; - string ret; - - if (passed_path) - path = passed_path; - - /* Check if called with NULL, and no previous path (perhaps we reached - the end). */ - else if (!path) - return NULL; - - /* OK, we have a non-null `path' if we get here. */ - assert (path); - p = path; - - /* Find the next colon (or the end of the path). */ - while (*p != 0 && !IS_ENV_SEP (*p)) - p++; - - /* If there were no separators, return the whole thing this time, and - return NULL next time. */ - if (*p == 0) - { - ret = (string) path; - path = NULL; - } - - /* Otherwise, return the substring starting at `path'. */ - else - { - unsigned len = p - path; - - /* Make sure we have enough space (including the null byte). */ - if (len + 1 > elt_alloc) - { - elt_alloc = len + 1; - elt = xrealloc (elt, elt_alloc); - } - - strncpy (elt, path, len); - elt[len] = 0; - ret = elt; - - path += len + 1; - } - - return ret; -} - -#ifdef TEST - -void -print_path_elements (const_string path) -{ - string elt; - printf ("Elements of `%s':", path ? path : "(null)"); - - for (elt = kpse_path_element (path); elt != NULL; - elt = kpse_path_element (NULL)) - { - printf (" %s", *elt ? elt : "`'"); - } - - puts ("."); -} - -int -main () -{ - /* All lists end with NULL. */ - print_path_elements (NULL); /* */ - print_path_elements (""); /* "" */ - print_path_elements ("a"); /* a */ - print_path_elements (":"); /* "", "" */ - print_path_elements ("::"); /* "", "", "" */ - print_path_elements ("a:"); /* a, "" */ - print_path_elements (":b"); /* "", b */ - print_path_elements ("a:b"); /* a, b */ - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -standalone-compile-command: "gcc -g -I. -I.. -DTEST path-elt.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/pathsearch.c --- a/kpathsea/pathsearch.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,417 +0,0 @@ -/* pathsearch.c: look up a filename in a path. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include /* for `time' */ - -/* This function is called after every search to record the filename(s) - found in $TEXMFLOG or if debugging. */ - -static void -log_search P1C(str_list_type, filenames) -{ - static FILE *log_file = NULL; - static boolean first_time = true; - - if (first_time) - { - string log_name = kpse_var_expand ("$TEXMFLOG"); - first_time = false; - /* Get name from either envvar or config file. */ - if (log_name && *log_name) - { - log_file = fopen (log_name, FOPEN_A_MODE); - if (!log_file) - perror (log_name); - free (log_name); - } - } - - if (KPSE_DEBUG_P (KPSE_DEBUG_SEARCH) || log_file) - { - unsigned e; - - /* FILENAMES should never be null, but safety doesn't hurt. */ - for (e = 0; - e < STR_LIST_LENGTH (filenames) && STR_LIST_ELT (filenames, e); - e++) - { - string filename = STR_LIST_ELT (filenames, e); - - /* Only record absolute filenames, for privacy. */ - if (log_file && kpse_absolute_p (filename, false)) - fprintf (log_file, "%u %s\n", time (NULL), filename); - - /* And show them online, if debugging. We've already started - the debugging line in `search', where this is called, so - just print the filename here, don't use DEBUGF. */ - if (KPSE_DEBUG_P (KPSE_DEBUG_SEARCH)) - fputs (filename, stderr); - } - } -} - -/* Concatenate each element in DIRS with NAME (assume each ends with a - /, to save time). If SEARCH_ALL is false, return the first readable - regular file. Else continue to search for more. In any case, if - none, return a list containing just NULL. - - We keep a single buffer for the potential filenames and reallocate - only when necessary. I'm not sure it's noticeably faster, but it - does seem cleaner. (We do waste a bit of space in the return - value, though, since we don't shrink it to the final size returned.) */ - -#define INIT_ALLOC 75 /* Doesn't much matter what this number is. */ - -static str_list_type -dir_list_search P3C(str_llist_type *, dirs, const_string, name, - boolean, search_all) -{ - str_llist_elt_type *elt; - str_list_type ret; - unsigned name_len = strlen (name); - unsigned allocated = INIT_ALLOC; - string potential = xmalloc (allocated); - - ret = str_list_init (); - - for (elt = *dirs; elt; elt = STR_LLIST_NEXT (*elt)) - { - const_string dir = STR_LLIST (*elt); - unsigned dir_len = strlen (dir); - - while (dir_len + name_len + 1 > allocated) - { - allocated += allocated; - XRETALLOC (potential, allocated, char); - } - - strcpy (potential, dir); - strcat (potential, name); - - if (kpse_readable_file (potential)) - { - str_list_add (&ret, potential); - - /* Move this element towards the top of the list. */ - str_llist_float (dirs, elt); - - /* If caller only wanted one file returned, no need to - terminate the list with NULL; the caller knows to only look - at the first element. */ - if (!search_all) - return ret; - - /* Start new filename. */ - allocated = INIT_ALLOC; - potential = xmalloc (allocated); - } - } - - /* If we get here, either we didn't find any files, or we were finding - all the files. But we're done with the last filename, anyway. */ - free (potential); - - return ret; -} - -/* This is called when NAME is absolute or explicitly relative; if it's - readable, return (a list containing) it; otherwise, return NULL. */ - -static str_list_type -absolute_search P1C(string, name) -{ - str_list_type ret_list; - string found = kpse_readable_file (name); - - /* Some old compilers can't initialize structs. */ - ret_list = str_list_init (); - - /* If NAME wasn't found, free the expansion. */ - if (name != found) - free (name); - - /* Add `found' to the return list even if it's null; that tells - the caller we didn't find anything. */ - str_list_add (&ret_list, found); - - return ret_list; -} - -/* If DB_DIR is a prefix of PATH_ELT, return true; otherwise false. - That is, the question is whether to try the db for a file looked up - in PATH_ELT. If PATH_ELT == ".", for example, the answer is no. If - PATH_ELT == "/usr/local/lib/texmf/fonts//tfm", the answer is yes. - - In practice, ls-R is only needed for lengthy subdirectory - comparisons, but there's no gain to checking PATH_ELT to see if it is - a subdir match, since the only way to do that is to do a string - search in it, which is all we do anyway. - - In fact, we do a simple string compare, ignoring // complications, - since in practice I believe //'s will always be after `kpse_db_dir', - i.e., we would never want to find ls-R in /usr//texmf. */ - -static boolean -elt_in_db P1C(const_string, path_elt) -{ - boolean found = false; - - /* If `kpse_db_dir' is not set, we're being called from `read_files' - for the very first time -- for cnf file initialization. We can't - use ls-R for that. */ - if (kpse_db_dir) - { - string db_temp = kpse_db_dir; - - while (!found && *db_temp++ == *path_elt++) - { /* If we've matched the entire db directory, it's good. */ - if (*db_temp == 0) - found = true; - /* If we've reached the end of PATH_ELT, but not the end of the db - directory, it's no good. */ - else if (*path_elt == 0) - break; - } - } - - return found; -} - - -/* This is the hard case -- look for NAME in PATH. If - ALL is false, just return the first file found. Otherwise, - search all elements of PATH. */ - -static str_list_type -path_search P4C(const_string, path, string, name, - boolean, must_exist, boolean, all) -{ - string elt; - str_list_type ret_list; - boolean done = false; - ret_list = str_list_init (); /* some compilers lack struct initialization */ - - for (elt = kpse_path_element (path); !done && elt; - elt = kpse_path_element (NULL)) - { - boolean try_db; - boolean allow_disk_search = true; - str_list_type *found = NULL; - - if (*elt == '!' && *(elt + 1) == '!') - { /* Magic leading chars in a path element means don't search the - disk regardless. And move past the magic to get to the name. */ - allow_disk_search = false; - elt += 2; - } - - /* Try the prebuilt db only if it's relevant to this path element. */ - try_db = elt_in_db (elt); - found = try_db ? kpse_db_search (name, elt, all) : NULL; - - /* Search the filesystem if (1) the path spec allows it, and either - (2a) the db was irrelevant to ELT (try_db == false); or - (2b) no db exists (kpse_db_search returns NULL); or - (3) NAME was not in the db (kpse_db_search returns an empty list) - and MUST_EXIST. - In (2a) and (2b), `found' will be NULL. */ - if (allow_disk_search && (!found || (!STR_LIST (*found) && must_exist))) - { - str_llist_type *dirs = kpse_element_dirs (elt); - if (dirs && *dirs) - { - if (!found) - found = XTALLOC1 (str_list_type); - *found = dir_list_search (dirs, name, all); - } - } - - /* Did we find anything anywhere? */ - if (found && STR_LIST (*found)) - if (all) - str_list_concat (&ret_list, *found); - else - { - str_list_add (&ret_list, STR_LIST_ELT (*found, 0)); - done = true; - } - - /* Free the list space, if any (but not the elements). */ - if (found) - { - str_list_free (found); - free (found); - } - } - - /* Free the expanded name we were passed. It can't be in the return - list, since the path directories got unconditionally prepended. */ - free (name); - - return ret_list; -} - -/* Search PATH for ORIGINAL_NAME. If ALL is false, or ORIGINAL_NAME is - absolute_p, check ORIGINAL_NAME itself. Otherwise, look at each - element of PATH for the first readable ORIGINAL_NAME. - - Always return a list; if no files are found, the list will - contain just NULL. If ALL is true, the list will be - terminated with NULL. */ - -static string * -search P4C(const_string, path, const_string, original_name, - boolean, must_exist, boolean, all) -{ - str_list_type ret_list; - - /* Make a leading ~ count as an absolute filename, and expand $FOO's. */ - string name = kpse_expand (original_name); - - /* If the first name is absolute or explicitly relative, no need to - consider PATH at all. */ - boolean absolute_p = kpse_absolute_p (name, true); - - if (KPSE_DEBUG_P (KPSE_DEBUG_SEARCH)) - DEBUGF4 ("search(file=%s, must_exist=%d, find_all=%d, path=%s).\n", - name, must_exist, all, path); - - /* Find the file(s). */ - ret_list = absolute_p ? absolute_search (name) - : path_search (path, name, must_exist, all); - - /* Append NULL terminator if we didn't find anything at all, or we're - supposed to find ALL and the list doesn't end in NULL now. */ - if (STR_LIST_LENGTH (ret_list) == 0 - || (all && STR_LIST_LAST_ELT (ret_list) != NULL)) - str_list_add (&ret_list, NULL); - - /* Record the filenames we found, if desired. And wrap them in a - debugging line if we're doing that. */ - if (KPSE_DEBUG_P (KPSE_DEBUG_SEARCH)) - DEBUGF1 ("search(%s) =>", original_name); - log_search (ret_list); - if (KPSE_DEBUG_P (KPSE_DEBUG_SEARCH)) - putc ('\n', stderr); - - return STR_LIST (ret_list); -} - -/* Search PATH for the first NAME. */ - -string -kpse_path_search P3C(const_string, path, const_string, name, - boolean, must_exist) -{ - static string *ret_list = 0; - - if (ret_list) - { - free (ret_list); - ret_list = 0; /* Don't let an interrupt in search() cause trouble */ - } - - ret_list = search (path, name, must_exist, false); - - return *ret_list; /* Freeing this is caller's responsibility */ -} - - -/* Search all elements of PATH for files named NAME. Not sure if it's - right to assert `must_exist' here, but it suffices now. */ - -string * -kpse_all_path_search P2C(const_string, path, const_string, name) -{ - string *ret = search (path, name, true, true); - return ret; -} - -#ifdef TEST - -void -test_path_search (const_string path, const_string file) -{ - string answer; - string *answer_list; - - printf ("\nSearch %s for %s:\t", path, file); - answer = kpse_path_search (path, file); - puts (answer ? answer : "(null)"); - - printf ("Search %s for all %s:\t", path, file); - answer_list = kpse_all_path_search (path, file); - putchar ('\n'); - while (*answer_list) - { - putchar ('\t'); - puts (*answer_list); - answer_list++; - } -} - -#define TEXFONTS "/usr/local/lib/tex/fonts" - -int -main () -{ - /* All lists end with NULL. */ - test_path_search (".", "nonexistent"); - test_path_search (".", "/nonexistent"); - test_path_search ("/k:.", "kpathsea.texi"); - test_path_search ("/k:.", "/etc/fstab"); - test_path_search (".:" TEXFONTS "//", "cmr10.tfm"); - test_path_search (".:" TEXFONTS "//", "logo10.tfm"); - test_path_search (TEXFONTS "//times:.::", "ptmr.vf"); - test_path_search (TEXFONTS "/adobe//:" - "/usr/local/src/TeX+MF/typefaces//", "plcr.pfa"); - - test_path_search ("~karl", ".bashrc"); - test_path_search ("/k", "~karl/.bashrc"); - - xputenv ("NONEXIST", "nonexistent"); - test_path_search (".", "$NONEXISTENT"); - xputenv ("KPATHSEA", "kpathsea"); - test_path_search ("/k:.", "$KPATHSEA.texi"); - test_path_search ("/k:.", "${KPATHSEA}.texi"); - test_path_search ("$KPATHSEA:.", "README"); - test_path_search (".:$KPATHSEA", "README"); - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -test-compile-command: "gcc -posix -g -I. -I.. -DTEST pathsearch.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/pathsearch.h --- a/kpathsea/pathsearch.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* pathsearch.h: generic path searching. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_PATHSEARCH_H -#define KPATHSEA_PATHSEARCH_H - -#include -#include -#include - -/* If PATH is non-null, return its first element (as defined by - IS_ENV_SEP). If it's NULL, return the next element in the previous - path, a la strtok. Leading, trailing, or doubled colons result in - the empty string. When at the end of PATH, return NULL. In any - case, return a pointer to an area that may be overwritten on - subsequent calls. */ -extern string kpse_path_element P1H(const_string path); - - -/* Given a path element ELT, return a pointer to a NULL-terminated list - of the corresponding (existing) directory or directories, with - trailing slashes, or NULL. If ELT is the empty string, check the - current working directory. - - It's up to the caller to expand ELT. This is because this routine is - most likely only useful to be called from `kpse_path_search', which - has already assumed expansion has been done. */ -extern str_llist_type *kpse_element_dirs P1H(const_string elt); - - -/* Call `kpse_expand' on NAME. If the result is an absolute or - explicitly relative filename, check whether it is a readable - (regular) file. - - Otherwise, look in each of the directories specified in PATH (also do - tilde and variable expansion on elements in PATH), using a prebuilt - db (see db.h) if it's relevant for a given path element. - - If the prebuilt db doesn't exist, or if MUST_EXIST is true and NAME - isn't found in the prebuilt db, look on the filesystem. (I.e., if - MUST_EXIST is false, and NAME isn't found in the db, do *not* look on - the filesystem.) - - The caller must expand PATH. This is because it makes more sense to - do this once, in advance, instead of for every search using it. - - In any case, return the complete filename if found, otherwise NULL. */ -extern string kpse_path_search P3H(const_string path, const_string name, - boolean must_exist); - - -/* Like `kpse_path_search' with MUST_EXIST true, but return a list of - all the filenames (or NULL if none), instead of taking the first. */ -extern string *kpse_all_path_search P2H(const_string path, const_string name); - -#endif /* not KPATHSEA_PATHSEARCH_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/proginit.c --- a/kpathsea/proginit.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* proginit.c: useful initializations for DVI drivers. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include -#include -#include -#include -#include - - -/* These initializations were common to all the drivers modified for - kpathsea, so a single routine seemed in order. Kind of a bollixed-up - mess, but still better than repeating the code. */ - -void -kpse_init_prog P5C(const_string, prefix, unsigned, dpi, const_string, mode, - boolean, make_tex_pk, const_string, fallback) -{ - string makepk_var = concat (prefix, "MAKEPK"); - string font_var = concat (prefix, "FONTS"); - string size_var = concat (prefix, "SIZES"); - - /* Do both `pk_format' and `any_glyph_format' for the sake of xdvi; in - general, MakeTeXPK might apply to either, and the program will ask - for the one it wants. */ - - /* Might have a program-specific name for MakeTeXPK itself. */ - kpse_format_info[kpse_pk_format].program - = kpse_format_info[kpse_any_glyph_format].program - = getenv (makepk_var); - - /* If we did, we want to enable the program, I think. */ - kpse_format_info[kpse_pk_format].program_enabled_p - = kpse_format_info[kpse_any_glyph_format].program_enabled_p - = getenv (makepk_var) || make_tex_pk; - - kpse_font_override_path = getenv (font_var); - kpse_init_fallback_resolutions (size_var); - xputenv_int ("MAKETEX_BASE_DPI", dpi); - kpse_fallback_font = fallback; - - /* See comments in kpse_make_tex in kpathsea/tex-make.c. */ - xputenv ("MAKETEX_MODE", mode ? mode : DIR_SEP_STRING); - - free (makepk_var); - free (font_var); - free (size_var); -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/proginit.h --- a/kpathsea/proginit.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* proginit.h: declarations for DVI driver initializations. - -Copyright (C) 1994, 95 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_PROGINIT_H -#define KPATHSEA_PROGINIT_H - -#include -#include - - -/* Common initializations for DVI drivers -- check for `PREFIX'SIZES and - `PREFIX'FONTS environment variables, setenv MAKETEX_MODE to MODE, - etc., etc. See the source. */ - -extern void -kpse_init_prog P5H(const_string prefix, unsigned dpi, const_string mode, - boolean make_tex_pk, const_string fallback); - -#endif /* not KPATHSEA_PROGINIT_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/progname.c --- a/kpathsea/progname.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* progname.c: the executable name we were invoked as; general initialization. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -#ifndef HAVE_PROGRAM_INVOCATION_NAME -/* Don't redefine the variables if glibc already has. */ -string program_invocation_name; -string program_invocation_short_name; -#endif - - -void -kpse_set_progname P1C(const_string, progname) -{ -#ifndef HAVE_PROGRAM_INVOCATION_NAME - program_invocation_name = xstrdup (progname); - program_invocation_short_name = (string) basename (program_invocation_name); -#endif - { - string s = getenv ("KPATHSEA_DEBUG"); - if (s) - kpathsea_debug |= atoi (s); - } -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/progname.h --- a/kpathsea/progname.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* progname.h: Declarations for argv[0] equivalents. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_PROGNAME_H -#define KPATHSEA_PROGNAME_H - -#include -#include - -extern string program_invocation_name; -extern string program_invocation_short_name; - - -/* Set the two variables above (if they're not predefined) to a copy of - ARGV0 and everything in ARGV0 after the last directory separator, - respectively. */ - -extern void kpse_set_progname P1H(const_string argv0); - -#endif /* not KPATHSEA_PROGNAME_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/putenv.c --- a/kpathsea/putenv.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/****************************************************************/ -/* */ -/* putenv(3) */ -/* */ -/* Change or add an environment entry */ -/* */ -/****************************************************************/ -/* origination 1987-Oct-7 T. Holm */ -/* (slightly modified by karl@cs.umb.edu for kpathsea.) */ -/****************************************************************/ - -/* for HAVE_PUTENV and const -- need nothing else. */ -#include - -#ifndef HAVE_PUTENV /* whole file */ - -/* -Path: hoptoad!pacbell!ames!ll-xn!mit-eddie!uw-beaver!ssc-vax!uvicctr!tholm -From: tholm@uvicctr.UUCP (Terrence W. Holm) -Newsgroups: comp.os.minix -Subject: putenv(3) -Message-ID: <395@uvicctr.UUCP> -Date: 5 May 88 06:40:52 GMT -Organization: University of Victoria, Victoria B.C. Canada - -EFTH Minix report #2 - May 1988 - putenv(3) - -This is an implementation of putenv(3) that we -wrote for Minix. Please consider this a public -domain program. -*/ - -#define NULL 0 -#define PSIZE sizeof(char *) - -extern char **environ; - -char *strchr(); -char *malloc(); - -/****************************************************************/ -/* */ -/* int */ -/* putenv( entry ) */ -/* */ -/* The "entry" should follow the form */ -/* "NAME=VALUE". This routine will search the */ -/* user environment for "NAME" and replace its */ -/* value with "VALUE". */ -/* */ -/* Note that "entry" is not copied, it is used */ -/* as the environment entry. This means that it */ -/* must not be unallocated or otherwise modifed */ -/* by the caller, unless it is replaced by a */ -/* subsequent putenv(). */ -/* */ -/* If the name is not found in the environment, */ -/* then a new vector of pointers is allocated, */ -/* "entry" is put at the end and the global */ -/* variable "environ" is updated. */ -/* */ -/* This function normally returns 0, but -1 */ -/* is returned if it can not allocate enough */ -/* space using malloc(3), or "entry" does not */ -/* contain a '='. */ -/* */ -/****************************************************************/ - - -int -putenv( entry ) - char *entry; -{ - unsigned length; - unsigned size; - char *temp; - char **p; - char **new_environ; - - /* Find the length of the "NAME=" */ - - temp = strchr(entry,'='); - if ( temp == 0 ) - return( -1 ); - - length = (unsigned) (temp - entry + 1); - - - /* Scan through the environment looking for "NAME=" */ - - for ( p=environ; *p != 0 ; p++ ) - if ( strncmp( entry, *p, length ) == 0 ) - { - *p = entry; - return( 0 ); - } - - - /* The name was not found, build a bigger environment */ - - size = p - environ; - - new_environ = (char **) malloc( (size+2)*PSIZE ); - - if ( new_environ == (char **) NULL ) - return( -1 ); - - memcpy ((char *) new_environ, (const char *) environ, size*PSIZE ); - - new_environ[size] = entry; - new_environ[size+1] = NULL; - - environ = new_environ; - - return(0); -} - -#endif /* not HAVE_PUTENV */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/readable.c --- a/kpathsea/readable.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* readable.c: check if a filename is a readable regular file. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include - - -/* If access can read FN, run stat (assigning to stat buffer ST) and - check that fn is a regular file. */ - -#define READABLE(fn, st) \ - (access (fn, R_OK) == 0 && stat (fn, &(st)) == 0 && S_ISREG (st.st_mode)) - - -/* POSIX invented the brain-damage of not necessarily truncating - filename components; the system's behavior is defined by the value of - the symbol _POSIX_NO_TRUNC, but you can't change it dynamically! - - Generic const return warning. See extend-fname.c. */ - -string -kpse_readable_file P1C(const_string, name) -{ - struct stat st; - string ret; - - if (READABLE (name, st)) - ret = (string) name; - -#ifdef ENAMETOOLONG - else if (errno == ENAMETOOLONG) - { - ret = kpse_truncate_filename (name); - - /* Perhaps some other error will occur with the truncated name, so - let's call access again. */ - if (!READABLE (ret, st)) - { /* Failed. */ - if (ret != name) free (ret); - ret = NULL; - } - } -#endif - - else /* Some other error. */ - { - if (errno == EACCES) /* Warn them if permissions are bad. */ - perror (name); - ret = NULL; - } - - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/readable.h --- a/kpathsea/readable.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* readable.h: Is a file readable? - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_READABLE_H -#define KPATHSEA_READABLE_H - -#include -#include - -/* If NAME is readable and is a regular file, return it. If the error is - ENAMETOOLONG, truncate any too-long path components, and if the - result is a readable file, return that. Otherwise return NULL. */ - -extern string kpse_readable_file P1H(const_string name); - -#endif /* not KPATHSEA_READABLE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/rm-suffix.c --- a/kpathsea/rm-suffix.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* rm-suffix.c: remove any suffix. - -Copyright (C) 1992, 93, 95 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -/* Generic const warning -- see extend-fname.c. */ - -string -remove_suffix P1C(const_string, s) -{ - string ret; - const_string suffix = find_suffix (s); - - if (suffix) - { - /* Back up to before the dot. */ - suffix--; - ret = (string) xmalloc (suffix - s + 1); - strncpy (ret, s, suffix - s); - ret[suffix - s] = 0; - } - else - ret = (string) s; - - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/stamp-auto.in diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/standards.texi --- a/kpathsea/standards.texi Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2451 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename standards.info -@settitle GNU Coding Standards -@c UPDATE THIS DATE WHENEVER YOU MAKE CHANGES! -@set lastupdate 17 November 1994 -@c %**end of header - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Standards: (standards). GNU coding standards. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@setchapternewpage off - -@ifinfo -GNU Coding Standards -Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. -@end ifinfo - -@titlepage -@title GNU Coding Standards -@author Richard Stallman -@author last updated @value{lastupdate} -@page - -@vskip 0pt plus 1filll -Copyright @copyright{} 1992, 1993 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. -@end titlepage - -@ifinfo -@node Top, Preface, (dir), (dir) -@top Version - -Last updated @value{lastupdate}. -@end ifinfo - -@menu -* Preface:: About the GNU Coding Standards -* Reading Non-Free Code:: Referring to Proprietary Programs -* Contributions:: Accepting Contributions -* Change Logs:: Recording Changes -* Compatibility:: Compatibility with Other Implementations -* Makefile Conventions:: Makefile Conventions -* Configuration:: How Configuration Should Work -* Source Language:: Using Languages Other Than C -* Formatting:: Formatting Your Source Code -* Comments:: Commenting Your Work -* Syntactic Conventions:: Clean Use of C Constructs -* Names:: Naming Variables and Functions -* Using Extensions:: Using Non-standard Features -* System Functions:: Portability and ``standard'' library functions -* Semantics:: Program Behavior for All Programs -* Errors:: Formatting Error Messages -* Libraries:: Library Behavior -* Portability:: Portability As It Applies to GNU -* User Interfaces:: Standards for Command Line Interfaces -* Documentation:: Documenting Programs -* Releases:: Making Releases -@end menu - -@node Preface -@chapter About the GNU Coding Standards - -The GNU Coding Standards were written by Richard Stallman and other GNU -Project volunteers. Their purpose is to make the GNU system clean, -consistent, and easy to install. This document can also be read as a -guide to write portable, robust and reliable programs. It focuses on -programs written in C, but many of the rules and principles are useful -even if you write in another programming language. The rules often -state reasons for writing in a certain way. - -Corrections or suggestions regarding this document should be sent to -@code{gnu@@prep.ai.mit.edu}. If you make a suggestion, please include a -suggested new wording for it; our time is limited. We prefer a context -diff to the @file{standards.texi} or @file{make-stds.texi} files, but if -you don't have those files, please mail your suggestion anyway. - -This release of the GNU Coding Standards was last updated -@value{lastupdate}. - -@node Reading Non-Free Code -@chapter Referring to Proprietary Programs - -Don't in any circumstances refer to Unix source code for or during -your work on GNU! (Or to any other proprietary programs.) - -If you have a vague recollection of the internals of a Unix program, -this does not absolutely mean you can't write an imitation of it, but -do try to organize the imitation internally along different lines, -because this is likely to make the details of the Unix version -irrelevant and dissimilar to your results. - -For example, Unix utilities were generally optimized to minimize -memory use; if you go for speed instead, your program will be very -different. You could keep the entire input file in core and scan it -there instead of using stdio. Use a smarter algorithm discovered more -recently than the Unix program. Eliminate use of temporary files. Do -it in one pass instead of two (we did this in the assembler). - -Or, on the contrary, emphasize simplicity instead of speed. For some -applications, the speed of today's computers makes simpler algorithms -adequate. - -Or go for generality. For example, Unix programs often have static -tables or fixed-size strings, which make for arbitrary limits; use -dynamic allocation instead. Make sure your program handles NULs and -other funny characters in the input files. Add a programming language -for extensibility and write part of the program in that language. - -Or turn some parts of the program into independently usable libraries. -Or use a simple garbage collector instead of tracking precisely when -to free memory, or use a new GNU facility such as obstacks. - - -@node Contributions -@chapter Accepting Contributions - -If someone else sends you a piece of code to add to the program you are -working on, we need legal papers to use it---the same sort of legal -papers we will need to get from you. @emph{Each} significant -contributor to a program must sign some sort of legal papers in order -for us to have clear title to the program. The main author alone is not -enough. - -So, before adding in any contributions from other people, tell us -so we can arrange to get the papers. Then wait until we tell you -that we have received the signed papers, before you actually use the -contribution. - -This applies both before you release the program and afterward. If -you receive diffs to fix a bug, and they make significant change, we -need legal papers for it. - -You don't need papers for changes of a few lines here or there, since -they are not significant for copyright purposes. Also, you don't need -papers if all you get from the suggestion is some ideas, not actual code -which you use. For example, if you write a different solution to the -problem, you don't need to get papers. - -I know this is frustrating; it's frustrating for us as well. But if -you don't wait, you are going out on a limb---for example, what if the -contributor's employer won't sign a disclaimer? You might have to take -that code out again! - -The very worst thing is if you forget to tell us about the other -contributor. We could be very embarrassed in court some day as a -result. - -@node Change Logs -@chapter Change Logs - -Keep a change log for each directory, describing the changes made to -source files in that directory. The purpose of this is so that people -investigating bugs in the future will know about the changes that -might have introduced the bug. Often a new bug can be found by -looking at what was recently changed. More importantly, change logs -can help eliminate conceptual inconsistencies between different parts -of a program; they can give you a history of how the conflicting -concepts arose. - -Use the Emacs command @kbd{M-x add-change-log-entry} to start a new -entry in the -change log. An entry should have an asterisk, the name of the changed -file, and then in parentheses the name of the changed functions, -variables or whatever, followed by a colon. Then describe the changes -you made to that function or variable. - -Separate unrelated entries with blank lines. When two entries -represent parts of the same change, so that they work together, then -don't put blank lines between them. Then you can omit the file name -and the asterisk when successive entries are in the same file. - -Here are some examples: - -@example -* register.el (insert-register): Return nil. -(jump-to-register): Likewise. - -* sort.el (sort-subr): Return nil. - -* tex-mode.el (tex-bibtex-file, tex-file, tex-region): -Restart the tex shell if process is gone or stopped. -(tex-shell-running): New function. - -* expr.c (store_one_arg): Round size up for move_block_to_reg. -(expand_call): Round up when emitting USE insns. -* stmt.c (assign_parms): Round size up for move_block_from_reg. -@end example - -It's important to name the changed function or variable in full. Don't -abbreviate them; don't combine them. Subsequent maintainers will often -search for a function name to find all the change log entries that -pertain to it; if you abbreviate the name, they won't find it when they -search. For example, some people are tempted to abbreviate groups of -function names by writing @samp{* register.el -(@{insert,jump-to@}-register)}; this is not a good idea, since searching -for @code{jump-to-register} or @code{insert-register} would not find the -entry. - -There's no need to describe the full purpose of the changes or how they -work together. It is better to put such explanations in comments in the -code. That's why just ``New function'' is enough; there is a comment -with the function in the source to explain what it does. - -However, sometimes it is useful to write one line to describe the -overall purpose of a large batch of changes. - -You can think of the change log as a conceptual ``undo list'' which -explains how earlier versions were different from the current version. -People can see the current version; they don't need the change log -to tell them what is in it. What they want from a change log is a -clear explanation of how the earlier version differed. - -When you change the calling sequence of a function in a simple -fashion, and you change all the callers of the function, there is no -need to make individual entries for all the callers. Just write in -the entry for the function being called, ``All callers changed.'' - -When you change just comments or doc strings, it is enough to write an -entry for the file, without mentioning the functions. Write just, -``Doc fix.'' There's no need to keep a change log for documentation -files. This is because documentation is not susceptible to bugs that -are hard to fix. Documentation does not consist of parts that must -interact in a precisely engineered fashion; to correct an error, you -need not know the history of the erroneous passage. - - -@node Compatibility -@chapter Compatibility with Other Implementations - -With certain exceptions, utility programs and libraries for GNU should -be upward compatible with those in Berkeley Unix, and upward compatible -with @sc{ANSI} C if @sc{ANSI} C specifies their behavior, and upward -compatible with @sc{POSIX} if @sc{POSIX} specifies their behavior. - -When these standards conflict, it is useful to offer compatibility -modes for each of them. - -@sc{ANSI} C and @sc{POSIX} prohibit many kinds of extensions. Feel -free to make the extensions anyway, and include a @samp{--ansi} or -@samp{--compatible} option to turn them off. However, if the extension -has a significant chance of breaking any real programs or scripts, -then it is not really upward compatible. Try to redesign its -interface. - -Many GNU programs suppress extensions that conflict with POSIX if the -environment variable @code{POSIXLY_CORRECT} is defined (even if it is -defined with a null value). Please make your program recognize this -variable if appropriate. - -When a feature is used only by users (not by programs or command -files), and it is done poorly in Unix, feel free to replace it -completely with something totally different and better. (For example, -vi is replaced with Emacs.) But it is nice to offer a compatible -feature as well. (There is a free vi clone, so we offer it.) - -Additional useful features not in Berkeley Unix are welcome. -Additional programs with no counterpart in Unix may be useful, -but our first priority is usually to duplicate what Unix already -has. - -@comment The makefile standards are in a separate file that is also -@comment included by make.texinfo. Done by roland@gnu.ai.mit.edu on 1/6/93. -@include make-stds.texi - -@node Configuration -@chapter How Configuration Should Work - -Each GNU distribution should come with a shell script named -@code{configure}. This script is given arguments which describe the -kind of machine and system you want to compile the program for. - -The @code{configure} script must record the configuration options so -that they affect compilation. - -One way to do this is to make a link from a standard name such as -@file{config.h} to the proper configuration file for the chosen system. -If you use this technique, the distribution should @emph{not} contain a -file named @file{config.h}. This is so that people won't be able to -build the program without configuring it first. - -Another thing that @code{configure} can do is to edit the Makefile. If -you do this, the distribution should @emph{not} contain a file named -@file{Makefile}. Instead, include a file @file{Makefile.in} which -contains the input used for editing. Once again, this is so that people -won't be able to build the program without configuring it first. - -If @code{configure} does write the @file{Makefile}, then @file{Makefile} -should have a target named @file{Makefile} which causes @code{configure} -to be rerun, setting up the same configuration that was set up last -time. The files that @code{configure} reads should be listed as -dependencies of @file{Makefile}. - -All the files which are output from the @code{configure} script should -have comments at the beginning explaining that they were generated -automatically using @code{configure}. This is so that users won't think -of trying to edit them by hand. - -The @code{configure} script should write a file named @file{config.status} -which describes which configuration options were specified when the -program was last configured. This file should be a shell script which, -if run, will recreate the same configuration. - -The @code{configure} script should accept an option of the form -@samp{--srcdir=@var{dirname}} to specify the directory where sources are found -(if it is not the current directory). This makes it possible to build -the program in a separate directory, so that the actual source directory -is not modified. - -If the user does not specify @samp{--srcdir}, then @code{configure} should -check both @file{.} and @file{..} to see if it can find the sources. If -it finds the sources in one of these places, it should use them from -there. Otherwise, it should report that it cannot find the sources, and -should exit with nonzero status. - -Usually the easy way to support @samp{--srcdir} is by editing a -definition of @code{VPATH} into the Makefile. Some rules may need to -refer explicitly to the specified source directory. To make this -possible, @code{configure} can add to the Makefile a variable named -@code{srcdir} whose value is precisely the specified directory. - -The @code{configure} script should also take an argument which specifies the -type of system to build the program for. This argument should look like -this: - -@example -@var{cpu}-@var{company}-@var{system} -@end example - -For example, a Sun 3 might be @samp{m68k-sun-sunos4.1}. - -The @code{configure} script needs to be able to decode all plausible -alternatives for how to describe a machine. Thus, @samp{sun3-sunos4.1} -would be a valid alias. For many programs, @samp{vax-dec-ultrix} would -be an alias for @samp{vax-dec-bsd}, simply because the differences -between Ultrix and @sc{BSD} are rarely noticeable, but a few programs -might need to distinguish them. -@c Real 4.4BSD now runs on some Suns. - -There is a shell script called @file{config.sub} that you can use -as a subroutine to validate system types and canonicalize aliases. - -Other options are permitted to specify in more detail the software -or hardware present on the machine, and include or exclude optional -parts of the package: - -@table @samp -@item --enable-@var{feature}@r{[}=@var{parameter}@r{]} -Configure the package to build and install an optional user-level -facility called @var{feature}. This allows users to choose which -optional features to include. Giving an optional @var{parameter} of -@samp{no} should omit @var{feature}, if it is built by default. - -No @samp{--enable} option should @strong{ever} cause one feature to -replace another. No @samp{--enable} option should ever substitute one -useful behavior for another useful behavior. The only proper use for -@samp{--enable} is for questions of whether to build part of the program -or exclude it. - -@item --with-@var{package} -@c @r{[}=@var{parameter}@r{]} -The package @var{package} will be installed, so configure this package -to work with @var{package}. - -@c Giving an optional @var{parameter} of -@c @samp{no} should omit @var{package}, if it is used by default. - -Possible values of @var{package} include @samp{x}, @samp{x-toolkit}, -@samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc}, and -@samp{gdb}. - -Do not use a @samp{--with} option to specify the file name to use to -find certain files. That is outside the scope of what @samp{--with} -options are for. - -@item --nfp -The target machine has no floating point processor. - -@item --gas -The target machine assembler is GAS, the GNU assembler. -This is obsolete; users should use @samp{--with-gnu-as} instead. - -@item --x -The target machine has the X Window System installed. -This is obsolete; users should use @samp{--with-x} instead. -@end table - -All @code{configure} scripts should accept all of these ``detail'' -options, whether or not they make any difference to the particular -package at hand. In particular, they should accept any option that -starts with @samp{--with-} or @samp{--enable-}. This is so users will -be able to configure an entire GNU source tree at once with a single set -of options. - -You will note that the categories @samp{--with-} and @samp{--enable-} -are narrow: they @strong{do not} provide a place for any sort of option -you might think of. That is deliberate. We want to limit the possible -configuration options in GNU software. We do not want GNU programs to -have idiosyncratic configuration options. - -Packages that perform part of compilation may support cross-compilation. -In such a case, the host and target machines for the program may be -different. The @code{configure} script should normally treat the -specified type of system as both the host and the target, thus producing -a program which works for the same type of machine that it runs on. - -The way to build a cross-compiler, cross-assembler, or what have you, is -to specify the option @samp{--host=@var{hosttype}} when running -@code{configure}. This specifies the host system without changing the -type of target system. The syntax for @var{hosttype} is the same as -described above. - -Bootstrapping a cross-compiler requires compiling it on a machine other -than the host it will run on. Compilation packages accept a -configuration option @samp{--build=@var{hosttype}} for specifying the -configuration on which you will compile them, in case that is different -from the host. - -Programs for which cross-operation is not meaningful need not accept the -@samp{--host} option, because configuring an entire operating system for -cross-operation is not a meaningful thing. - -Some programs have ways of configuring themselves automatically. If -your program is set up to do this, your @code{configure} script can simply -ignore most of its arguments. - -@node Source Language -@chapter Using Languages Other Than C - -Using a language other than C is like using a non-standard feature: it -will cause trouble for users. Even if GCC supports the other language, -users may find it inconvenient to have to install the compiler for that -other language in order to build your program. So please write in C. - -There are three exceptions for this rule: - -@itemize @bullet -@item -It is okay to use a special language if the same program contains an -interpreter for that language. - -Thus, it is not a problem that GNU Emacs contains code written in Emacs -Lisp, because it comes with a Lisp interpreter. - -@item -It is okay to use another language in a tool specifically intended for -use with that language. - -This is okay because the only people who want to build the tool will be -those who have installed the other language anyway. - -@item -If an application is not of extremely widespread interest, then perhaps -it's not important if the application is inconvenient to install. -@end itemize - -@node Formatting -@chapter Formatting Your Source Code - -It is important to put the open-brace that starts the body of a C -function in column zero, and avoid putting any other open-brace or -open-parenthesis or open-bracket in column zero. Several tools look -for open-braces in column zero to find the beginnings of C functions. -These tools will not work on code not formatted that way. - -It is also important for function definitions to start the name of the -function in column zero. This helps people to search for function -definitions, and may also help certain tools recognize them. Thus, -the proper format is this: - -@example -static char * -concat (s1, s2) /* Name starts in column zero here */ - char *s1, *s2; -@{ /* Open brace in column zero here */ - @dots{} -@} -@end example - -@noindent -or, if you want to use @sc{ANSI} C, format the definition like this: - -@example -static char * -concat (char *s1, char *s2) -@{ - @dots{} -@} -@end example - -In @sc{ANSI} C, if the arguments don't fit nicely on one line, -split it like this: - -@example -int -lots_of_args (int an_integer, long a_long, short a_short, - double a_double, float a_float) -@dots{} -@end example - -For the body of the function, we prefer code formatted like this: - -@example -if (x < foo (y, z)) - haha = bar[4] + 5; -else - @{ - while (z) - @{ - haha += foo (z, z); - z--; - @} - return ++x + bar (); - @} -@end example - -We find it easier to read a program when it has spaces before the -open-parentheses and after the commas. Especially after the commas. - -When you split an expression into multiple lines, split it -before an operator, not after one. Here is the right way: - -@example -if (foo_this_is_long && bar > win (x, y, z) - && remaining_condition) -@end example - -Try to avoid having two operators of different precedence at the same -level of indentation. For example, don't write this: - -@example -mode = (inmode[j] == VOIDmode - || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) - ? outmode[j] : inmode[j]); -@end example - -Instead, use extra parentheses so that the indentation shows the nesting: - -@example -mode = ((inmode[j] == VOIDmode - || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) - ? outmode[j] : inmode[j]); -@end example - -Insert extra parentheses so that Emacs will indent the code properly. -For example, the following indentation looks nice if you do it by hand, -but Emacs would mess it up: - -@example -v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 - + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000; -@end example - -But adding a set of parentheses solves the problem: - -@example -v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 - + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000); -@end example - -Format do-while statements like this: - -@example -do - @{ - a = foo (a); - @} -while (a > 0); -@end example - -Please use formfeed characters (control-L) to divide the program into -pages at logical places (but not within a function). It does not matter -just how long the pages are, since they do not have to fit on a printed -page. The formfeeds should appear alone on lines by themselves. - - -@node Comments -@chapter Commenting Your Work - -Every program should start with a comment saying briefly what it is for. -Example: @samp{fmt - filter for simple filling of text}. - -Please put a comment on each function saying what the function does, -what sorts of arguments it gets, and what the possible values of -arguments mean and are used for. It is not necessary to duplicate in -words the meaning of the C argument declarations, if a C type is being -used in its customary fashion. If there is anything nonstandard about -its use (such as an argument of type @code{char *} which is really the -address of the second character of a string, not the first), or any -possible values that would not work the way one would expect (such as, -that strings containing newlines are not guaranteed to work), be sure -to say so. - -Also explain the significance of the return value, if there is one. - -Please put two spaces after the end of a sentence in your comments, so -that the Emacs sentence commands will work. Also, please write -complete sentences and capitalize the first word. If a lower-case -identifer comes at the beginning of a sentence, don't capitalize it! -Changing the spelling makes it a different identifier. If you don't -like starting a sentence with a lower case letter, write the sentence -differently (e.g., ``The identifier lower-case is @dots{}''). - -The comment on a function is much clearer if you use the argument -names to speak about the argument values. The variable name itself -should be lower case, but write it in upper case when you are speaking -about the value rather than the variable itself. Thus, ``the inode -number NODE_NUM'' rather than ``an inode''. - -There is usually no purpose in restating the name of the function in -the comment before it, because the reader can see that for himself. -There might be an exception when the comment is so long that the function -itself would be off the bottom of the screen. - -There should be a comment on each static variable as well, like this: - -@example -/* Nonzero means truncate lines in the display; - zero means continue them. */ -int truncate_lines; -@end example - -Every @samp{#endif} should have a comment, except in the case of short -conditionals (just a few lines) that are not nested. The comment should -state the condition of the conditional that is ending, @emph{including -its sense}. @samp{#else} should have a comment describing the condition -@emph{and sense} of the code that follows. For example: - -@example -#ifdef foo - @dots{} -#else /* not foo */ - @dots{} -#endif /* not foo */ -@end example - -@noindent -but, by contrast, write the comments this way for a @samp{#ifndef}: - -@example -#ifndef foo - @dots{} -#else /* foo */ - @dots{} -#endif /* foo */ -@end example - - -@node Syntactic Conventions -@chapter Clean Use of C Constructs - -Please explicitly declare all arguments to functions. -Don't omit them just because they are @code{int}s. - -Declarations of external functions and functions to appear later in the -source file should all go in one place near the beginning of the file -(somewhere before the first function definition in the file), or else -should go in a header file. Don't put @code{extern} declarations inside -functions. - -It used to be common practice to use the same local variables (with -names like @code{tem}) over and over for different values within one -function. Instead of doing this, it is better declare a separate local -variable for each distinct purpose, and give it a name which is -meaningful. This not only makes programs easier to understand, it also -facilitates optimization by good compilers. You can also move the -declaration of each local variable into the smallest scope that includes -all its uses. This makes the program even cleaner. - -Don't use local variables or parameters that shadow global identifiers. - -Don't declare multiple variables in one declaration that spans lines. -Start a new declaration on each line, instead. For example, instead -of this: - -@example -int foo, - bar; -@end example - -@noindent -write either this: - -@example -int foo, bar; -@end example - -@noindent -or this: - -@example -int foo; -int bar; -@end example - -@noindent -(If they are global variables, each should have a comment preceding it -anyway.) - -When you have an @code{if}-@code{else} statement nested in another -@code{if} statement, always put braces around the @code{if}-@code{else}. -Thus, never write like this: - -@example -if (foo) - if (bar) - win (); - else - lose (); -@end example - -@noindent -always like this: - -@example -if (foo) - @{ - if (bar) - win (); - else - lose (); - @} -@end example - -If you have an @code{if} statement nested inside of an @code{else} -statement, either write @code{else if} on one line, like this, - -@example -if (foo) - @dots{} -else if (bar) - @dots{} -@end example - -@noindent -with its @code{then}-part indented like the preceding @code{then}-part, -or write the nested @code{if} within braces like this: - -@example -if (foo) - @dots{} -else - @{ - if (bar) - @dots{} - @} -@end example - -Don't declare both a structure tag and variables or typedefs in the -same declaration. Instead, declare the structure tag separately -and then use it to declare the variables or typedefs. - -Try to avoid assignments inside @code{if}-conditions. For example, -don't write this: - -@example -if ((foo = (char *) malloc (sizeof *foo)) == 0) - fatal ("virtual memory exhausted"); -@end example - -@noindent -instead, write this: - -@example -foo = (char *) malloc (sizeof *foo); -if (foo == 0) - fatal ("virtual memory exhausted"); -@end example - -Don't make the program ugly to placate @code{lint}. Please don't insert any -casts to @code{void}. Zero without a cast is perfectly fine as a null -pointer constant. - -@node Names -@chapter Naming Variables and Functions - -Please use underscores to separate words in a name, so that the Emacs -word commands can be useful within them. Stick to lower case; reserve -upper case for macros and @code{enum} constants, and for name-prefixes -that follow a uniform convention. - -For example, you should use names like @code{ignore_space_change_flag}; -don't use names like @code{iCantReadThis}. - -Variables that indicate whether command-line options have been -specified should be named after the meaning of the option, not after -the option-letter. A comment should state both the exact meaning of -the option and its letter. For example, - -@example -/* Ignore changes in horizontal whitespace (-b). */ -int ignore_space_change_flag; -@end example - -When you want to define names with constant integer values, use -@code{enum} rather than @samp{#define}. GDB knows about enumeration -constants. - -Use file names of 14 characters or less, to avoid creating gratuitous -problems on System V. You can use the program @code{doschk} to test for -this. @code{doschk} also tests for potential name conflicts if the -files were loaded onto an MS-DOS file system---something you may or may -not care about. - - -@node Using Extensions -@chapter Using Non-standard Features - -Many GNU facilities that already exist support a number of convenient -extensions over the comparable Unix facilities. Whether to use these -extensions in implementing your program is a difficult question. - -On the one hand, using the extensions can make a cleaner program. -On the other hand, people will not be able to build the program -unless the other GNU tools are available. This might cause the -program to work on fewer kinds of machines. - -With some extensions, it might be easy to provide both alternatives. -For example, you can define functions with a ``keyword'' @code{INLINE} -and define that as a macro to expand into either @code{inline} or -nothing, depending on the compiler. - -In general, perhaps it is best not to use the extensions if you can -straightforwardly do without them, but to use the extensions if they -are a big improvement. - -An exception to this rule are the large, established programs (such as -Emacs) which run on a great variety of systems. Such programs would -be broken by use of GNU extensions. - -Another exception is for programs that are used as part of -compilation: anything that must be compiled with other compilers in -order to bootstrap the GNU compilation facilities. If these require -the GNU compiler, then no one can compile them without having them -installed already. That would be no good. - -Since most computer systems do not yet implement @sc{ANSI} C, using the -@sc{ANSI} C features is effectively using a GNU extension, so the -same considerations apply. (Except for @sc{ANSI} features that we -discourage, such as trigraphs---don't ever use them.) - - -@node System Functions -@chapter Calling System Functions - -C implementations differ substantially. ANSI C reduces but does not -eliminate the incompatibilities; meanwhile, many users wish to compile -GNU software with pre-ANSI compilers. This chapter gives -recommendations for how to use the more or less standard C library -functions to avoid unnecessary loss of portability. - -@itemize @bullet -@item -Don't use the value of @code{sprintf}. It returns the number of -characters written on some systems, but not on all systems. - -@item -Don't declare system functions explicitly. - -Almost any declaration for a system function is wrong on some system. -To minimize conflicts, leave it to the system header files to declare -system functions. If the headers don't declare a function, let it -remain undeclared. - -While it may seem unclean to use a function without declaring it, in -practice this works fine for most system library functions on the -systems where this really happens. The problem is only theoretical. By -contrast, actual declarations have frequently caused actual conflicts. - -@item -If you must declare a system function, don't specify the argument types. -Use an old-style declaration, not an ANSI prototype. The more you -specify about the function, the more likely a conflict. - -@item -In particular, don't unconditionally declare @code{malloc} or -@code{realloc}. - -Most GNU programs use those functions just once, in functions -conventionally named @code{xmalloc} and @code{xrealloc}. These -functions call @code{malloc} and @code{realloc}, respectively, and -check the results. - -Because @code{xmalloc} and @code{xrealloc} are defined in your program, -you can declare them in other files without any risk of type conflict. - -On most systems, @code{int} is the same length as a pointer; thus, the -calls to @code{malloc} and @code{realloc} work fine. For the few -exceptional systems (mostly 64-bit machines), you can use -@strong{conditionalized} declarations of @code{malloc} and -@code{realloc}---or put these declarations in configuration files -specific to those systems. - -@item -The string functions require special treatment. Some Unix systems have -a header file @file{string.h}; other have @file{strings.h}. Neither -file name is portable. There are two things you can do: use Autoconf to -figure out which file to include, or don't include either file. - -@item -If you don't include either strings file, you can't get declarations for -the string functions from the header file in the usual way. - -That causes less of a problem than you might think. The newer ANSI -string functions are off-limits anyway because many systems still don't -support them. The string functions you can use are these: - -@example -strcpy strncpy strcat strncat -strlen strcmp strncmp -strchr strrchr -@end example - -The copy and concatenate functions work fine without a declaration as -long as you don't use their values. Using their values without a -declaration fails on systems where the width of a pointer differs from -the width of @code{int}, and perhaps in other cases. It is trivial to -avoid using their values, so do that. - -The compare functions and @code{strlen} work fine without a declaration -on most systems, possibly all the ones that GNU software runs on. -You may find it necessary to declare them @strong{conditionally} on a -few systems. - -The search functions must be declared to return @code{char *}. Luckily, -there is no variation in the data type they return. But there is -variation in their names. Some systems give these functions the names -@code{index} and @code{rindex}; other systems use the names -@code{strchr} and @code{strrchr}. Some systems support both pairs of -names, but neither pair works on all systems. - -You should pick a single pair of names and use it throughout your -program. (Nowadays, it is better to choose @code{strchr} and -@code{strrchr}.) Declare both of those names as functions returning -@code{char *}. On systems which don't support those names, define them -as macros in terms of the other pair. For example, here is what to put -at the beginning of your file (or in a header) if you want to use the -names @code{strchr} and @code{strrchr} throughout: - -@example -#ifndef HAVE_STRCHR -#define strchr index -#endif -#ifndef HAVE_STRRCHR -#define strrchr rindex -#endif - -char *strchr (); -char *strrchr (); -@end example -@end itemize - -Here we assume that @code{HAVE_STRCHR} and @code{HAVE_STRRCHR} are -macros defined in systems where the corresponding functions exist. -One way to get them properly defined is to use Autoconf. - -@node Semantics -@chapter Program Behavior for All Programs - -Avoid arbitrary limits on the length or number of @emph{any} data -structure, including filenames, lines, files, and symbols, by allocating -all data structures dynamically. In most Unix utilities, ``long lines -are silently truncated''. This is not acceptable in a GNU utility. - -Utilities reading files should not drop NUL characters, or any other -nonprinting characters @emph{including those with codes above 0177}. The -only sensible exceptions would be utilities specifically intended for -interface to certain types of printers that can't handle those characters. - -Check every system call for an error return, unless you know you wish to -ignore errors. Include the system error text (from @code{perror} or -equivalent) in @emph{every} error message resulting from a failing -system call, as well as the name of the file if any and the name of the -utility. Just ``cannot open foo.c'' or ``stat failed'' is not -sufficient. - -Check every call to @code{malloc} or @code{realloc} to see if it -returned zero. Check @code{realloc} even if you are making the block -smaller; in a system that rounds block sizes to a power of 2, -@code{realloc} may get a different block if you ask for less space. - -In Unix, @code{realloc} can destroy the storage block if it returns -zero. GNU @code{realloc} does not have this bug: if it fails, the -original block is unchanged. Feel free to assume the bug is fixed. If -you wish to run your program on Unix, and wish to avoid lossage in this -case, you can use the GNU @code{malloc}. - -You must expect @code{free} to alter the contents of the block that was -freed. Anything you want to fetch from the block, you must fetch before -calling @code{free}. - -If @code{malloc} fails in a noninteractive program, make that a fatal -error. In an interactive program (one that reads commands from the -user), it is better to abort the command and return to the command -reader loop. This allows the user to kill other processes to free up -virtual memory, and then try the command again. - -Use @code{getopt_long} to decode arguments, unless the argument syntax -makes this unreasonable. - -When static storage is to be written in during program execution, use -explicit C code to initialize it. Reserve C initialized declarations -for data that will not be changed. - -Try to avoid low-level interfaces to obscure Unix data structures (such -as file directories, utmp, or the layout of kernel memory), since these -are less likely to work compatibly. If you need to find all the files -in a directory, use @code{readdir} or some other high-level interface. -These will be supported compatibly by GNU. - -By default, the GNU system will provide the signal handling functions of -@sc{BSD} and of @sc{POSIX}. So GNU software should be written to use -these. - -In error checks that detect ``impossible'' conditions, just abort. -There is usually no point in printing any message. These checks -indicate the existence of bugs. Whoever wants to fix the bugs will have -to read the source code and run a debugger. So explain the problem with -comments in the source. The relevant data will be in variables, which -are easy to examine with the debugger, so there is no point moving them -elsewhere. - - -@node Errors -@chapter Formatting Error Messages - -Error messages from compilers should look like this: - -@example -@var{source-file-name}:@var{lineno}: @var{message} -@end example - -Error messages from other noninteractive programs should look like this: - -@example -@var{program}:@var{source-file-name}:@var{lineno}: @var{message} -@end example - -@noindent -when there is an appropriate source file, or like this: - -@example -@var{program}: @var{message} -@end example - -@noindent -when there is no relevant source file. - -In an interactive program (one that is reading commands from a -terminal), it is better not to include the program name in an error -message. The place to indicate which program is running is in the -prompt or with the screen layout. (When the same program runs with -input from a source other than a terminal, it is not interactive and -would do best to print error messages using the noninteractive style.) - -The string @var{message} should not begin with a capital letter when -it follows a program name and/or filename. Also, it should not end -with a period. - -Error messages from interactive programs, and other messages such as -usage messages, should start with a capital letter. But they should not -end with a period. - - -@node Libraries -@chapter Library Behavior - -Try to make library functions reentrant. If they need to do dynamic -storage allocation, at least try to avoid any nonreentrancy aside from -that of @code{malloc} itself. - -Here are certain name conventions for libraries, to avoid name -conflicts. - -Choose a name prefix for the library, more than two characters long. -All external function and variable names should start with this -prefix. In addition, there should only be one of these in any given -library member. This usually means putting each one in a separate -source file. - -An exception can be made when two external symbols are always used -together, so that no reasonable program could use one without the -other; then they can both go in the same file. - -External symbols that are not documented entry points for the user -should have names beginning with @samp{_}. They should also contain -the chosen name prefix for the library, to prevent collisions with -other libraries. These can go in the same files with user entry -points if you like. - -Static functions and variables can be used as you like and need not -fit any naming convention. - - -@node Portability -@chapter Portability As It Applies to GNU - -Much of what is called ``portability'' in the Unix world refers to -porting to different Unix versions. This is a secondary consideration -for GNU software, because its primary purpose is to run on top of one -and only one kernel, the GNU kernel, compiled with one and only one C -compiler, the GNU C compiler. The amount and kinds of variation among -GNU systems on different cpu's will be like the variation among Berkeley -4.3 systems on different cpu's. - -All users today run GNU software on non-GNU systems. So supporting a -variety of non-GNU systems is desirable; simply not paramount. -The easiest way to achieve portability to a reasonable range of systems -is to use Autoconf. It's unlikely that your program needs to know more -information about the host machine than Autoconf can provide, simply -because most of the programs that need such knowledge have already been -written. - -It is difficult to be sure exactly what facilities the GNU kernel -will provide, since it isn't finished yet. Therefore, assume you can -use anything in 4.3; just avoid using the format of semi-internal data -bases (e.g., directories) when there is a higher-level alternative -(@code{readdir}). - -You can freely assume any reasonably standard facilities in the C -language, libraries or kernel, because we will find it necessary to -support these facilities in the full GNU system, whether or not we -have already done so. The fact that there may exist kernels or C -compilers that lack these facilities is irrelevant as long as the GNU -kernel and C compiler support them. - -It remains necessary to worry about differences among cpu types, such -as the difference in byte ordering and alignment restrictions. It's -unlikely that 16-bit machines will ever be supported by GNU, so there -is no point in spending any time to consider the possibility that an -int will be less than 32 bits. - -You can assume that all pointers have the same format, regardless -of the type they point to, and that this is really an integer. -There are some weird machines where this isn't true, but they aren't -important; don't waste time catering to them. Besides, eventually -we will put function prototypes into all GNU programs, and that will -probably make your program work even on weird machines. - -Since some important machines (including the 68000) are big-endian, -it is important not to assume that the address of an @code{int} object -is also the address of its least-significant byte. Thus, don't -make the following mistake: - -@example -int c; -@dots{} -while ((c = getchar()) != EOF) - write(file_descriptor, &c, 1); -@end example - -You can assume that it is reasonable to use a meg of memory. Don't -strain to reduce memory usage unless it can get to that level. If -your program creates complicated data structures, just make them in -core and give a fatal error if malloc returns zero. - -If a program works by lines and could be applied to arbitrary -user-supplied input files, it should keep only a line in memory, because -this is not very hard and users will want to be able to operate on input -files that are bigger than will fit in core all at once. - - -@node User Interfaces -@chapter Standards for Command Line Interfaces - -Please don't make the behavior of a utility depend on the name used -to invoke it. It is useful sometimes to make a link to a utility -with a different name, and that should not change what it does. - -Instead, use a run time option or a compilation switch or both -to select among the alternate behaviors. - -Likewise, please don't make the behavior of the program depend on the -type of output device it is used with. Device independence is an -important principle of the system's design; do not compromise it -merely to save someone from typing an option now and then. - -If you think one behavior is most useful when the output is to a -terminal, and another is most useful when the output is a file or a -pipe, then it is usually best to make the default behavior the one that -is useful with output to a terminal, and have an option for the other -behavior. - -Compatibility requires certain programs to depend on the type of output -device. It would be disastrous if @code{ls} or @code{sh} did not do so -in the way all users expect. In some of these cases, we supplement the -program with a preferred alternate version that does not depend on the -output device type. For example, we provide a @code{dir} program much -like @code{ls} except that its default output format is always -multi-column format. - -It is a good idea to follow the @sc{POSIX} guidelines for the -command-line options of a program. The easiest way to do this is to use -@code{getopt} to parse them. Note that the GNU version of @code{getopt} -will normally permit options anywhere among the arguments unless the -special argument @samp{--} is used. This is not what @sc{POSIX} -specifies; it is a GNU extension. - -Please define long-named options that are equivalent to the -single-letter Unix-style options. We hope to make GNU more user -friendly this way. This is easy to do with the GNU function -@code{getopt_long}. - -One of the advantages of long-named options is that they can be -consistent from program to program. For example, users should be able -to expect the ``verbose'' option of any GNU program which has one, to be -spelled precisely @samp{--verbose}. To achieve this uniformity, look at -the table of common long-option names when you choose the option names -for your program. The table appears below. - -If you use names not already in the table, please send -@samp{gnu@@prep.ai.mit.edu} a list of them, with their meanings, so we -can update the table. - -It is usually a good idea for file names given as ordinary arguments -to be input files only; any output files would be specified using -options (preferably @samp{-o}). Even if you allow an output file name -as an ordinary argument for compatibility, try to provide a suitable -option as well. This will lead to more consistency among GNU -utilities, so that there are fewer idiosyncracies for users to -remember. - -Programs should support an option @samp{--version} which prints the -program's version number on standard output and exits successfully, and -an option @samp{--help} which prints option usage information on -standard output and exits successfully. These options should inhibit -the normal function of the command; they should do nothing except print -the requested information. - -@c Please leave newlines between items in this table; it's much easier -@c to update when it isn't completely squashed together and unreadable. -@c When there is more than one short option for a long option name, put -@c a semicolon between the lists of the programs that use them, not a -@c period. --friedman - -@table @samp - -@item after-date -@samp{-N} in @code{tar}. - -@item all -@samp{-a} in @code{du}, @code{ls}, @code{nm}, @code{stty}, @code{uname}, -and @code{unexpand}. - -@item all-text -@samp{-a} in @code{diff}. - -@item almost-all -@samp{-A} in @code{ls}. - -@item append -@samp{-a} in @code{etags}, @code{tee}, @code{time}; -@samp{-r} in @code{tar}. - -@item archive -@samp{-a} in @code{cp}. - -@item archive-name -@samp{-n} in @code{shar}. - -@item arglength -@samp{-l} in @code{m4}. - -@item ascii -@samp{-a} in @code{diff}. - -@item assume-new -@samp{-W} in Make. - -@item assume-old -@samp{-o} in Make. - -@item auto-check -@samp{-a} in @code{recode}. - -@item auto-pager -@samp{-a} in @code{wdiff}. - -@item auto-reference -@samp{-A} in @code{ptx}. - -@item avoid-wraps -@samp{-n} in @code{wdiff}. - -@item backward-search -@samp{-B} in @code{ctags}. - -@item basename -@samp{-f} in @code{shar}. - -@item batch -Used in GDB. - -@item baud -Used in GDB. - -@item before -@samp{-b} in @code{tac}. - -@item binary -@samp{-b} in @code{cpio} and @code{diff}. - -@item bits-per-code -@samp{-b} in @code{shar}. - -@item block-size -Used in @code{cpio} and @code{tar}. - -@item blocks -@samp{-b} in @code{head} and @code{tail}. - -@item break-file -@samp{-b} in @code{ptx}. - -@item brief -Used in various programs to make output shorter. - -@item bytes -@samp{-c} in @code{head}, @code{split}, and @code{tail}. - -@item c@t{++} -@samp{-C} in @code{etags}. - -@item catenate -@samp{-A} in @code{tar}. - -@item cd -Used in various programs to specify the directory to use. - -@item changes -@samp{-c} in @code{chgrp} and @code{chown}. - -@item classify -@samp{-F} in @code{ls}. - -@item colons -@samp{-c} in @code{recode}. - -@item command -@samp{-c} in @code{su}; -@samp{-x} in GDB. - -@item compare -@samp{-d} in @code{tar}. - -@item compress -@samp{-Z} in @code{tar} and @code{shar}. - -@item concatenate -@samp{-A} in @code{tar}. - -@item confirmation -@samp{-w} in @code{tar}. - -@item context -Used in @code{diff}. - -@item copyright -@samp{-C} in @code{ptx}, @code{recode}, and @code{wdiff}. - -@item core -Used in GDB. - -@item count -@samp{-q} in @code{who}. - -@item count-links -@samp{-l} in @code{du}. - -@item create -Used in @code{tar} and @code{cpio}. - -@item cut-mark -@samp{-c} in @code{shar}. - -@item cxref -@samp{-x} in @code{ctags}. - -@item date -@samp{-d} in @code{touch}. - -@item debug -@samp{-d} in Make and @code{m4}; -@samp{-t} in Bison. - -@item define -@samp{-D} in @code{m4}. - -@item defines -@samp{-d} in Bison and @code{ctags}. - -@item delete -@samp{-D} in @code{tar}. - -@item dereference -@samp{-L} in @code{chgrp}, @code{chown}, @code{cpio}, @code{du}, -@code{ls}, and @code{tar}. - -@item dereference-args -@samp{-D} in @code{du}. - -@item diacritics -@samp{-d} in @code{recode}. - -@item dictionary-order -@samp{-d} in @code{look}. - -@item diff -@samp{-d} in @code{tar}. - -@item digits -@samp{-n} in @code{csplit}. - -@item directory -Specify the directory to use, in various programs. In @code{ls}, it -means to show directories themselves rather than their contents. In -@code{rm} and @code{ln}, it means to not treat links to directories -specially. - -@item discard-all -@samp{-x} in @code{strip}. - -@item discard-locals -@samp{-X} in @code{strip}. - -@item dry-run -@samp{-n} in Make. - -@item ed -@samp{-e} in @code{diff}. - -@item elide-empty-files -@samp{-z} in @code{csplit}. - -@item end-delete -@samp{-x} in @code{wdiff}. - -@item end-insert -@samp{-z} in @code{wdiff}. - -@item entire-new-file -@samp{-N} in @code{diff}. - -@item environment-overrides -@samp{-e} in Make. - -@item eof -@samp{-e} in @code{xargs}. - -@item epoch -Used in GDB. - -@item error-limit -Used in Makeinfo. - -@item error-output -@samp{-o} in @code{m4}. - -@item escape -@samp{-b} in @code{ls}. - -@item exclude-from -@samp{-X} in @code{tar}. - -@item exec -Used in GDB. - -@item exit -@samp{-x} in @code{xargs}. - -@item exit-0 -@samp{-e} in @code{unshar}. - -@item expand-tabs -@samp{-t} in @code{diff}. - -@item expression -@samp{-e} in @code{sed}. - -@item extern-only -@samp{-g} in @code{nm}. - -@item extract -@samp{-i} in @code{cpio}; -@samp{-x} in @code{tar}. - -@item faces -@samp{-f} in @code{finger}. - -@item fast -@samp{-f} in @code{su}. - -@item fatal-warnings -@samp{-E} in @code{m4}. - -@item file -@samp{-f} in @code{info}, Make, @code{mt}, and @code{tar}; -@samp{-n} in @code{sed}; -@samp{-r} in @code{touch}. - -@item file-prefix -@samp{-b} in Bison. - -@item file-type -@samp{-F} in @code{ls}. - -@item files-from -@samp{-T} in @code{tar}. - -@item fill-column -Used in Makeinfo. - -@item flag-truncation -@samp{-F} in @code{ptx}. - -@item fixed-output-files -@samp{-y} in Bison. - -@item follow -@samp{-f} in @code{tail}. - -@item footnote-style -Used in Makeinfo. - -@item force -@samp{-f} in @code{cp}, @code{ln}, @code{mv}, and @code{rm}. - -@item force-prefix -@samp{-F} in @code{shar}. - -@item format -Used in @code{ls}, @code{time}, and @code{ptx}. - -@item freeze-state -@samp{-F} in @code{m4}. - -@item fullname -Used in GDB. - -@item gap-size -@samp{-g} in @code{ptx}. - -@item get -@samp{-x} in @code{tar}. - -@item graphic -@samp{-i} in @code{ul}. - -@item graphics -@samp{-g} in @code{recode}. - -@item group -@samp{-g} in @code{install}. - -@item gzip -@samp{-z} in @code{tar} and @code{shar}. - -@item hashsize -@samp{-H} in @code{m4}. - -@item header -@samp{-h} in @code{objdump} and @code{recode} - -@item heading -@samp{-H} in @code{who}. - -@item help -Used to ask for brief usage information. - -@item here-delimiter -@samp{-d} in @code{shar}. - -@item hide-control-chars -@samp{-q} in @code{ls}. - -@item idle -@samp{-u} in @code{who}. - -@item ifdef -@samp{-D} in @code{diff}. - -@item ignore -@samp{-I} in @code{ls}; -@samp{-x} in @code{recode}. - -@item ignore-all-space -@samp{-w} in @code{diff}. - -@item ignore-backups -@samp{-B} in @code{ls}. - -@item ignore-blank-lines -@samp{-B} in @code{diff}. - -@item ignore-case -@samp{-f} in @code{look} and @code{ptx}; -@samp{-i} in @code{diff} and @code{wdiff}. - -@item ignore-errors -@samp{-i} in Make. - -@item ignore-file -@samp{-i} in @code{ptx}. - -@item ignore-indentation -@samp{-S} in @code{etags}. - -@item ignore-init-file -@samp{-f} in Oleo. - -@item ignore-interrupts -@samp{-i} in @code{tee}. - -@item ignore-matching-lines -@samp{-I} in @code{diff}. - -@item ignore-space-change -@samp{-b} in @code{diff}. - -@item ignore-zeros -@samp{-i} in @code{tar}. - -@item include -@samp{-i} in @code{etags}; -@samp{-I} in @code{m4}. - -@item include-dir -@samp{-I} in Make. - -@item incremental -@samp{-G} in @code{tar}. - -@item info -@samp{-i}, @samp{-l}, and @samp{-m} in Finger. - -@item initial -@samp{-i} in @code{expand}. - -@item initial-tab -@samp{-T} in @code{diff}. - -@item inode -@samp{-i} in @code{ls}. - -@item interactive -@samp{-i} in @code{cp}, @code{ln}, @code{mv}, @code{rm}; -@samp{-e} in @code{m4}; -@samp{-p} in @code{xargs}; -@samp{-w} in @code{tar}. - -@item intermix-type -@samp{-p} in @code{shar}. - -@item jobs -@samp{-j} in Make. - -@item just-print -@samp{-n} in Make. - -@item keep-going -@samp{-k} in Make. - -@item keep-files -@samp{-k} in @code{csplit}. - -@item kilobytes -@samp{-k} in @code{du} and @code{ls}. - -@item language -@samp{-l} in @code{etags}. - -@item less-mode -@samp{-l} in @code{wdiff}. - -@item level-for-gzip -@samp{-g} in @code{shar}. - -@item line-bytes -@samp{-C} in @code{split}. - -@item lines -Used in @code{split}, @code{head}, and @code{tail}. - -@item link -@samp{-l} in @code{cpio}. - -@item list -@samp{-t} in @code{cpio}; -@samp{-l} in @code{recode}. - -@item list -@samp{-t} in @code{tar}. - -@item literal -@samp{-N} in @code{ls}. - -@item load-average -@samp{-l} in Make. - -@item login -Used in @code{su}. - -@item machine -No listing of which programs already use this; -someone should check to -see if any actually do and tell @code{gnu@@prep.ai.mit.edu}. - -@item macro-name -@samp{-M} in @code{ptx}. - -@item mail -@samp{-m} in @code{hello} and @code{uname}. - -@item make-directories -@samp{-d} in @code{cpio}. - -@item makefile -@samp{-f} in Make. - -@item mapped -Used in GDB. - -@item max-args -@samp{-n} in @code{xargs}. - -@item max-chars -@samp{-n} in @code{xargs}. - -@item max-lines -@samp{-l} in @code{xargs}. - -@item max-load -@samp{-l} in Make. - -@item max-procs -@samp{-P} in @code{xargs}. - -@item mesg -@samp{-T} in @code{who}. - -@item message -@samp{-T} in @code{who}. - -@item minimal -@samp{-d} in @code{diff}. - -@item mixed-uuencode -@samp{-M} in @code{shar}. - -@item mode -@samp{-m} in @code{install}, @code{mkdir}, and @code{mkfifo}. - -@item modification-time -@samp{-m} in @code{tar}. - -@item multi-volume -@samp{-M} in @code{tar}. - -@item name-prefix -@samp{-a} in Bison. - -@item nesting-limit -@samp{-L} in @code{m4}. - -@item net-headers -@samp{-a} in @code{shar}. - -@item new-file -@samp{-W} in Make. - -@item no-builtin-rules -@samp{-r} in Make. - -@item no-character-count -@samp{-w} in @code{shar}. - -@item no-check-existing -@samp{-x} in @code{shar}. - -@item no-common -@samp{-3} in @code{wdiff}. - -@item no-create -@samp{-c} in @code{touch}. - -@item no-defines -@samp{-D} in @code{etags}. - -@item no-deleted -@samp{-1} in @code{wdiff}. - -@item no-dereference -@samp{-d} in @code{cp}. - -@item no-inserted -@samp{-2} in @code{wdiff}. - -@item no-keep-going -@samp{-S} in Make. - -@item no-lines -@samp{-l} in Bison. - -@item no-piping -@samp{-P} in @code{shar}. - -@item no-prof -@samp{-e} in @code{gprof}. - -@item no-regex -@samp{-R} in @code{etags}. - -@item no-sort -@samp{-p} in @code{nm}. - -@item no-split -Used in Makeinfo. - -@item no-static -@samp{-a} in @code{gprof}. - -@item no-time -@samp{-E} in @code{gprof}. - -@item no-timestamp -@samp{-m} in @code{shar}. - -@item no-validate -Used in Makeinfo. - -@item no-warn -Used in various programs to inhibit warnings. - -@item node -@samp{-n} in @code{info}. - -@item nodename -@samp{-n} in @code{uname}. - -@item nonmatching -@samp{-f} in @code{cpio}. - -@item nstuff -@samp{-n} in @code{objdump}. - -@item null -@samp{-0} in @code{xargs}. - -@item number -@samp{-n} in @code{cat}. - -@item number-nonblank -@samp{-b} in @code{cat}. - -@item numeric-sort -@samp{-n} in @code{nm}. - -@item numeric-uid-gid -@samp{-n} in @code{cpio} and @code{ls}. - -@item nx -Used in GDB. - -@item old-archive -@samp{-o} in @code{tar}. - -@item old-file -@samp{-o} in Make. - -@item one-file-system -@samp{-l} in @code{tar}, @code{cp}, and @code{du}. - -@item only-file -@samp{-o} in @code{ptx}. - -@item only-prof -@samp{-f} in @code{gprof}. - -@item only-time -@samp{-F} in @code{gprof}. - -@item output -In various programs, specify the output file name. - -@item output-prefix -@samp{-o} in @code{shar}. - -@item override -@samp{-o} in @code{rm}. - -@item overwrite -@samp{-c} in @code{unshar}. - -@item owner -@samp{-o} in @code{install}. - -@item paginate -@samp{-l} in @code{diff}. - -@item paragraph-indent -Used in Makeinfo. - -@item parents -@samp{-p} in @code{mkdir} and @code{rmdir}. - -@item pass-all -@samp{-p} in @code{ul}. - -@item pass-through -@samp{-p} in @code{cpio}. - -@item port -@samp{-P} in @code{finger}. - -@item portability -@samp{-c} in @code{cpio} and @code{tar}. - -@item prefix-builtins -@samp{-P} in @code{m4}. - -@item prefix -@samp{-f} in @code{csplit}. - -@item preserve -Used in @code{tar} and @code{cp}. - -@item preserve-environment -@samp{-p} in @code{su}. - -@item preserve-modification-time -@samp{-m} in @code{cpio}. - -@item preserve-order -@samp{-s} in @code{tar}. - -@item preserve-permissions -@samp{-p} in @code{tar}. - -@item print -@samp{-l} in @code{diff}. - -@item print-chars -@samp{-L} in @code{cmp}. - -@item print-data-base -@samp{-p} in Make. - -@item print-directory -@samp{-w} in Make. - -@item print-file-name -@samp{-o} in @code{nm}. - -@item print-symdefs -@samp{-s} in @code{nm}. - -@item printer -@samp{-p} in @code{wdiff}. - -@item query-user -@samp{-X} in @code{shar}. - -@item question -@samp{-q} in Make. - -@item quiet -Used in many programs to inhibit the usual output. @strong{Note:} every -program accepting @samp{--quiet} should accept @samp{--silent} as a -synonym. - -@item quiet-unshar -@samp{-Q} in @code{shar} - -@item quote-name -@samp{-Q} in @code{ls}. - -@item rcs -@samp{-n} in @code{diff}. - -@item read-full-blocks -@samp{-B} in @code{tar}. - -@item readnow -Used in GDB. - -@item recon -@samp{-n} in Make. - -@item record-number -@samp{-R} in @code{tar}. - -@item recursive -Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff}, -and @code{rm}. - -@item reference-limit -Used in Makeinfo. - -@item references -@samp{-r} in @code{ptx}. - -@item regex -@samp{-r} in @code{tac} and @code{etags}. - -@item release -@samp{-r} in @code{uname}. - -@item reload-state -@samp{-R} in @code{m4}. - -@item relocation -@samp{-r} in @code{objdump}. - -@item rename -@samp{-r} in @code{cpio}. - -@item replace -@samp{-i} in @code{xargs}. - -@item report-identical-files -@samp{-s} in @code{diff}. - -@item reset-access-time -@samp{-a} in @code{cpio}. - -@item reverse -@samp{-r} in @code{ls} and @code{nm}. - -@item reversed-ed -@samp{-f} in @code{diff}. - -@item right-side-defs -@samp{-R} in @code{ptx}. - -@item same-order -@samp{-s} in @code{tar}. - -@item same-permissions -@samp{-p} in @code{tar}. - -@item save -@samp{-g} in @code{stty}. - -@item se -Used in GDB. - -@item sentence-regexp -@samp{-S} in @code{ptx}. - -@item separate-dirs -@samp{-S} in @code{du}. - -@item separator -@samp{-s} in @code{tac}. - -@item sequence -Used by @code{recode} to chose files or pipes for sequencing passes. - -@item shell -@samp{-s} in @code{su}. - -@item show-all -@samp{-A} in @code{cat}. - -@item show-c-function -@samp{-p} in @code{diff}. - -@item show-ends -@samp{-E} in @code{cat}. - -@item show-function-line -@samp{-F} in @code{diff}. - -@item show-tabs -@samp{-T} in @code{cat}. - -@item silent -Used in many programs to inhibit the usual output. -@strong{Note:} every program accepting -@samp{--silent} should accept @samp{--quiet} as a synonym. - -@item size -@samp{-s} in @code{ls}. - -@item sort -Used in @code{ls}. - -@item sparse -@samp{-S} in @code{tar}. - -@item speed-large-files -@samp{-H} in @code{diff}. - -@item split-at -@samp{-E} in @code{unshar}. - -@item split-size-limit -@samp{-L} in @code{shar}. - -@item squeeze-blank -@samp{-s} in @code{cat}. - -@item start-delete -@samp{-w} in @code{wdiff}. - -@item start-insert -@samp{-y} in @code{wdiff}. - -@item starting-file -Used in @code{tar} and @code{diff} to specify which file within -a directory to start processing with. - -@item statistics -@samp{-s} in @code{wdiff}. - -@item stdin-file-list -@samp{-S} in @code{shar}. - -@item stop -@samp{-S} in Make. - -@item strict -@samp{-s} in @code{recode}. - -@item strip -@samp{-s} in @code{install}. - -@item strip-all -@samp{-s} in @code{strip}. - -@item strip-debug -@samp{-S} in @code{strip}. - -@item submitter -@samp{-s} in @code{shar}. - -@item suffix -@samp{-S} in @code{cp}, @code{ln}, @code{mv}. - -@item suffix-format -@samp{-b} in @code{csplit}. - -@item sum -@samp{-s} in @code{gprof}. - -@item summarize -@samp{-s} in @code{du}. - -@item symbolic -@samp{-s} in @code{ln}. - -@item symbols -Used in GDB and @code{objdump}. - -@item synclines -@samp{-s} in @code{m4}. - -@item sysname -@samp{-s} in @code{uname}. - -@item tabs -@samp{-t} in @code{expand} and @code{unexpand}. - -@item tabsize -@samp{-T} in @code{ls}. - -@item terminal -@samp{-T} in @code{tput} and @code{ul}. -@samp{-t} in @code{wdiff}. - -@item text -@samp{-a} in @code{diff}. - -@item text-files -@samp{-T} in @code{shar}. - -@item time -Used in @code{ls} and @code{touch}. - -@item to-stdout -@samp{-O} in @code{tar}. - -@item total -@samp{-c} in @code{du}. - -@item touch -@samp{-t} in Make, @code{ranlib}, and @code{recode}. - -@item trace -@samp{-t} in @code{m4}. - -@item traditional -@samp{-t} in @code{hello}; -@samp{-G} in @code{m4} and @code{ptx}. - -@item tty -Used in GDB. - -@item typedefs -@samp{-t} in @code{ctags}. - -@item typedefs-and-c++ -@samp{-T} in @code{ctags}. - -@item typeset-mode -@samp{-t} in @code{ptx}. - -@item uncompress -@samp{-z} in @code{tar}. - -@item unconditional -@samp{-u} in @code{cpio}. - -@item undefine -@samp{-U} in @code{m4}. - -@item undefined-only -@samp{-u} in @code{nm}. - -@item update -@samp{-u} in @code{cp}, @code{ctags}, @code{mv}, @code{tar}. - -@item uuencode -@samp{-B} in @code{shar}. - -@item vanilla-operation -@samp{-V} in @code{shar}. - -@item verbose -Print more information about progress. Many programs support this. - -@item verify -@samp{-W} in @code{tar}. - -@item version -Print the version number. - -@item version-control -@samp{-V} in @code{cp}, @code{ln}, @code{mv}. - -@item vgrind -@samp{-v} in @code{ctags}. - -@item volume -@samp{-V} in @code{tar}. - -@item what-if -@samp{-W} in Make. - -@item whole-size-limit -@samp{-l} in @code{shar}. - -@item width -@samp{-w} in @code{ls} and @code{ptx}. - -@item word-regexp -@samp{-W} in @code{ptx}. - -@item writable -@samp{-T} in @code{who}. - -@item zeros -@samp{-z} in @code{gprof}. - -@end table - -@node Documentation -@chapter Documenting Programs - -Please use Texinfo for documenting GNU programs. See the Texinfo -manual, either the hardcopy or the version in the GNU Emacs Info -subsystem (@kbd{C-h i}). See existing GNU Texinfo files (e.g., those -under the @file{man/} directory in the GNU Emacs distribution) for -examples. - -The title page of the manual should state the version of the program -which the manual applies to. The Top node of the manual should also -contain this information. If the manual is changing more frequently -than or independent of the program, also state a version number for -the manual in both of these places. - -The manual should document all command-line arguments and all -commands. It should give examples of their use. But don't organize -the manual as a list of features. Instead, organize it by the -concepts a user will have before reaching that point in the manual. -Address the goals that a user will have in mind, and explain how to -accomplish them. Don't use Unix man pages as a model for how to -write GNU documentation; they are a bad example to follow. - -The manual should have a node named @samp{@var{program} Invocation} or -@samp{Invoking @var{program}}, where @var{program} stands for the name -of the program being described, as you would type it in the shell to run -the program. This node (together with its subnodes, if any) should -describe the program's command line arguments and how to run it (the -sort of information people would look in a man page for). Start with an -@samp{@@example} containing a template for all the options and arguments -that the program uses. - -Alternatively, put a menu item in some menu whose item name fits one of -the above patterns. This identifies the node which that item points to -as the node for this purpose, regardless of the node's actual name. - -There will be automatic features for specifying a program name and -quickly reading just this part of its manual. - -If one manual describes several programs, it should have such a node for -each program described. - -In addition to its manual, the package should have a file named -@file{NEWS} which contains a list of user-visible changes worth -mentioning. In each new release, add items to the front of the file and -identify the version they pertain to. Don't discard old items; leave -them in the file after the newer items. This way, a user upgrading from -any previous version can see what is new. - -If the @file{NEWS} file gets very long, move some of the older items -into a file named @file{ONEWS} and put a note at the end referring the -user to that file. - -Please do not use the term ``pathname'' that is used in Unix -documentation; use ``file name'' (two words) instead. We use the term -``path'' only for search paths, which are lists of file names. - -It is ok to supply a man page for the program as well as a Texinfo -manual if you wish to. But keep in mind that supporting a man page -requires continual effort, each time the program is changed. Any time -you spend on the man page is time taken away from more useful things you -could contribute. - -Thus, even if a user volunteers to donate a man page, you may find this -gift costly to accept. Unless you have time on your hands, it may be -better to refuse the man page unless the same volunteer agrees to take -full responsibility for maintaining it---so that you can wash your hands -of it entirely. If the volunteer ceases to do the job, then don't feel -obliged to pick it up yourself; it may be better to withdraw the man -page until another volunteer offers to carry on with it. - -Alternatively, if you expect the discrepancies to be small enough that -the man page remains useful, put a prominent note near the beginning of -the man page explaining that you don't maintain it and that the Texinfo -manual is more authoritative, and describing how to access the Texinfo -documentation. - -@node Releases -@chapter Making Releases - -Package the distribution of Foo version 69.96 in a gzipped tar file -named @file{foo-69.96.tar.gz}. It should unpack into a subdirectory -named @file{foo-69.96}. - -Building and installing the program should never modify any of the files -contained in the distribution. This means that all the files that form -part of the program in any way must be classified into @dfn{source -files} and @dfn{non-source files}. Source files are written by humans -and never changed automatically; non-source files are produced from -source files by programs under the control of the Makefile. - -Naturally, all the source files must be in the distribution. It is okay -to include non-source files in the distribution, provided they are -up-to-date and machine-independent, so that building the distribution -normally will never modify them. We commonly include non-source files -produced by Bison, Lex, @TeX{}, and Makeinfo; this helps avoid -unnecessary dependencies between our distributions, so that users can -install whichever packages they want to install. - -Non-source files that might actually be modified by building and -installing the program should @strong{never} be included in the -distribution. So if you do distribute non-source files, always make -sure they are up to date when you make a new distribution. - -Make sure that the directory into which the distribution unpacks (as -well as any subdirectories) are all world-writable (octal mode 777). -This is so that old versions of @code{tar} which preserve the -ownership and permissions of the files from the tar archive will be -able to extract all the files even if the user is unprivileged. - -Make sure that all the files in the distribution are world-readable. - -Make sure that no file name in the distribution is more than 14 -characters long. Likewise, no file created by building the program -should have a name longer than 14 characters. The reason for this is -that some systems adhere to a foolish interpretation of the POSIX -standard, and refuse to open a longer name, rather than truncating as -they did in the past. - -Don't include any symbolic links in the distribution itself. If the tar -file contains symbolic links, then people cannot even unpack it on -systems that don't support symbolic links. Also, don't use multiple -names for one file in different directories, because certain file -systems cannot handle this and that prevents unpacking the -distribution. - -Try to make sure that all the file names will be unique on MS-DOG. A -name on MS-DOG consists of up to 8 characters, optionally followed by a -period and up to three characters. MS-DOG will truncate extra -characters both before and after the period. Thus, -@file{foobarhacker.c} and @file{foobarhacker.o} are not ambiguous; they -are truncated to @file{foobarha.c} and @file{foobarha.o}, which are -distinct. - -Include in your distribution a copy of the @file{texinfo.tex} you used -to test print any @file{*.texinfo} files. - -Likewise, if your program uses small GNU software packages like regex, -getopt, obstack, or termcap, include them in the distribution file. -Leaving them out would make the distribution file a little smaller at -the expense of possible inconvenience to a user who doesn't know what -other files to get. - -@contents - -@bye diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/str-list.c --- a/kpathsea/str-list.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* str-list.c: define routines for string lists. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -/* See the .h file for comments. */ - - -str_list_type -str_list_init P1H(void) -{ - str_list_type ret; - - STR_LIST_LENGTH (ret) = 0; - STR_LIST (ret) = NULL; - - return ret; -} - - -void -str_list_add P2C(str_list_type *, l, string, s) -{ - STR_LIST_LENGTH (*l)++; - XRETALLOC (STR_LIST (*l), STR_LIST_LENGTH (*l), string); - STR_LIST_LAST_ELT (*l) = s; -} - - -/* May as well save some reallocations and do everything in a chunk - instead of calling str_list_add on each element. */ - -void -str_list_concat P2C(str_list_type *, target, str_list_type, more) -{ - unsigned e; - unsigned prev_len = STR_LIST_LENGTH (*target); - - STR_LIST_LENGTH (*target) += STR_LIST_LENGTH (more); - XRETALLOC (STR_LIST (*target), STR_LIST_LENGTH (*target), string); - - for (e = 0; e < STR_LIST_LENGTH (more); e++) - STR_LIST_ELT (*target, prev_len + e) = STR_LIST_ELT (more, e); -} - - -/* Free the list (but not the elements within it). */ - -void -str_list_free P1C(str_list_type *, l) -{ - if (STR_LIST (*l)) - { - free (STR_LIST (*l)); - STR_LIST (*l) = NULL; - } -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/str-list.h --- a/kpathsea/str-list.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* str-list.h: Declarations for string lists. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_STR_LIST_H -#define KPATHSEA_STR_LIST_H - -#include -#include - - -/* Lists of strings; used for, e.g., directory lists. */ - -typedef struct -{ - unsigned length; - string *list; -} str_list_type; - -#define STR_LIST_LENGTH(l) ((l).length) -#define STR_LIST(l) ((l).list) -#define STR_LIST_ELT(l, n) STR_LIST (l)[n] -#define STR_LIST_LAST_ELT(l) STR_LIST_ELT (l, STR_LIST_LENGTH (l) - 1) - -/* Return a new, empty, list. */ -extern str_list_type str_list_init P1H(void); - -/* Append the string S to the list L. It's up to the caller to not - deallocate S; we don't copy it. Also up to the caller to terminate - the list with a null entry. */ -extern void str_list_add P2H(str_list_type *l, string s); - -/* Append all the elements from MORE to TARGET. */ -extern void str_list_concat P2H(str_list_type * target, str_list_type more); - -/* Free the space for the list elements (but not the list elements - themselves). */ -extern void str_list_free P1H(str_list_type *l); - -#endif /* not KPATHSEA_STR_LIST_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/str-llist.c --- a/kpathsea/str-llist.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* str-llist.c: Implementation of a linked list of strings. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -/* Add the new string STR to the end of the list L. */ - -void -str_llist_add P2C(str_llist_type *, l, string, str) -{ - str_llist_elt_type *e; - str_llist_elt_type *new_elt = XTALLOC1 (str_llist_elt_type); - - /* The new element will be at the end of the list. */ - STR_LLIST (*new_elt) = str; - STR_LLIST_MOVED (*new_elt) = false; - STR_LLIST_NEXT (*new_elt) = NULL; - - /* Find the current end of the list. */ - for (e = *l; e && STR_LLIST_NEXT (*e); e = STR_LLIST_NEXT (*e)) - ; - - if (!e) - *l = new_elt; - else - STR_LLIST_NEXT (*e) = new_elt; -} - -/* Move an element towards the top. The idea is that when a file is - found in a given directory, later files will likely be in that same - directory, and looking for the file in all the directories in between - is thus a waste. */ - -void -str_llist_float P2C(str_llist_type *, l, str_llist_elt_type *, mover) -{ - str_llist_elt_type *last_moved, *unmoved; - - /* If we've already moved this element, never mind. */ - if (STR_LLIST_MOVED (*mover)) - return; - - /* Find the first unmoved element (to insert before). We're - guaranteed this will terminate, since MOVER itself is currently - unmoved, and it must be in L (by hypothesis). */ - for (last_moved = NULL, unmoved = *l; STR_LLIST_MOVED (*unmoved); - last_moved = unmoved, unmoved = STR_LLIST_NEXT (*unmoved)) - ; - - /* If we are the first unmoved element, nothing to relink. */ - if (unmoved != mover) - { /* Remember `mover's current successor, so we can relink `mover's - predecessor to it. */ - str_llist_elt_type *before_mover; - str_llist_elt_type *after_mover = STR_LLIST_NEXT (*mover); - - /* Find `mover's predecessor. */ - for (before_mover = unmoved; STR_LLIST_NEXT (*before_mover) != mover; - before_mover = STR_LLIST_NEXT (*before_mover)) - ; - - /* `before_mover' now links to `after_mover'. */ - STR_LLIST_NEXT (*before_mover) = after_mover; - - /* Insert `mover' before `unmoved' and after `last_moved' (or at - the head of the list). */ - STR_LLIST_NEXT (*mover) = unmoved; - if (!last_moved) - *l = mover; - else - STR_LLIST_NEXT (*last_moved) = mover; - } - - /* We've moved it. */ - STR_LLIST_MOVED (*mover) = true; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/str-llist.h --- a/kpathsea/str-llist.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* str-llist.h: A linked list of strings, - -It's pretty disgusting that both this and str-list exist; the reason is -that C cannot express iterators very well, and I don't want to change -all the for loops right now. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef STR_LLIST_H -#define STR_LLIST_H - -#include -#include - - -/* It's a little bizarre to be using the same type for the list and the - elements of the list, but no reason not to in this case, I think -- - we never need a NULL string in the middle of the list, and an extra - NULL/NULL element always at the end is inconsequential. */ - -struct str_llist_elt -{ - string str; - boolean moved; - struct str_llist_elt *next; -}; -typedef struct str_llist_elt str_llist_elt_type; -typedef struct str_llist_elt *str_llist_type; - -#define STR_LLIST(sl) ((sl).str) -#define STR_LLIST_MOVED(sl) ((sl).moved) -#define STR_LLIST_NEXT(sl) ((sl).next) - - -/* Add the new string E to the end of the list L. */ -extern void str_llist_add P2H(str_llist_type *l, string e); - -/* Reorganize L so that E is below only other elements that have already - been moved. Set `moved' member for E. */ -extern void str_llist_float P2H(str_llist_type *l, str_llist_elt_type *e); - -#endif /* not STR_LLIST_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/systypes.h --- a/kpathsea/systypes.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* c-systypes.h: include . It's too bad we need this file, - but some systems don't protect from multiple - inclusions, and I'm not willing to put up with that. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef C_SYSTYPES_H -#define C_SYSTYPES_H - -#include - -/* This is the symbol that X uses to determine if has been - read, so we define it. */ -#define __TYPES__ - -#endif /* not C_SYSTYPES_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tex-file.c --- a/kpathsea/tex-file.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,344 +0,0 @@ -/* tex-file.c: stuff for all TeX formats. - -Copyright (C) 1993, 94, 95 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include -#include -#include - - -/* See tex-file.h. */ -const_string kpse_fallback_font = NULL; -unsigned *kpse_fallback_resolutions = NULL; -string kpse_font_override_path = NULL; -kpse_format_info_type kpse_format_info[kpse_last_format]; - -/* These are not in the structure - because it's annoying to initialize lists in C. */ -#define KPSE_GF_ENVS "GFFONTS", KPSE_GLYPH_ENVS -#define KPSE_PK_ENVS "PKFONTS", "TEXPKS", KPSE_GLYPH_ENVS -#define KPSE_GLYPH_ENVS "GLYPHFONTS", "TEXFONTS" -#define KPSE_BASE_ENVS "MFBASES" -#define KPSE_BIB_ENVS "BIBINPUTS" -#define KPSE_BST_ENVS "BSTINPUTS" -#define KPSE_CNF_ENVS "TEXMFCNF" -#define KPSE_FMT_ENVS "TEXFORMATS" -#define KPSE_MF_ENVS "MFINPUTS" -#define KPSE_MFPOOL_ENVS "MFPOOL" -#define KPSE_PICT_ENVS "TEXPICTS", KPSE_TEX_ENVS -#define KPSE_TEX_ENVS "TEXINPUTS" -#define KPSE_TEXPOOL_ENVS "TEXPOOL" -#define KPSE_TFM_ENVS "TFMFONTS", "TEXFONTS" -#define KPSE_VF_ENVS "VFFONTS", "TEXFONTS" -#define KPSE_DVIPS_CONFIG_ENVS "TEXCONFIG" -#define KPSE_DVIPS_HEADER_ENVS "DVIPSHEADERS" - -/* The compiled-in default list, DEFAULT_FONT_SIZES, is intended to be - set from the command line (presumably via the Makefile). */ - -#ifndef DEFAULT_FONT_SIZES -#define DEFAULT_FONT_SIZES "" -#endif - -void -kpse_init_fallback_resolutions P1C(string, envvar) -{ - const_string size_var = ENVVAR (envvar, "TEXSIZES"); - string size_str = getenv (size_var); - unsigned *last_resort_sizes = NULL; - unsigned size_count = 0; - string size_list = kpse_expand_default (size_str, DEFAULT_FONT_SIZES); - - /* Initialize the list of last-resort sizes. */ - for (size_str = kpse_path_element (size_list); size_str != NULL; - size_str = kpse_path_element (NULL)) - { - if (! *size_str) - continue; - - size_count++; - XRETALLOC (last_resort_sizes, size_count, unsigned); - last_resort_sizes[size_count - 1] = atoi (size_str); - } - - /* Add a zero to mark the end of the list. */ - size_count++; - XRETALLOC (last_resort_sizes, size_count, unsigned); - last_resort_sizes[size_count - 1] = 0; - - kpse_fallback_resolutions = last_resort_sizes; -} - -/* Find the final search path to use for the format entry INFO, given - FONT_P (whether the font override path applies), the compile-time - default (DEFAULT_PATH), and the environment variables to check (the - remaining arguments, terminated with NULL). We set the `path' and - `path_source' members of INFO. The `client_path' member must already - be set upon entry. */ - -#define EXPAND_DEFAULT(try_path, source_string) \ -if (try_path) \ - { \ - info->raw_path = try_path; \ - info->path = kpse_expand_default (try_path, info->path); \ - info->path_source = source_string; \ - } - -static void -init_path PVAR3C(kpse_format_info_type *, info, boolean, font_p, - const_string, default_path, ap) -{ - string env_name; - string var = NULL; - - info->font_override_p = font_p; - info->default_path = default_path; - - /* First envvar that's set to a nonempty value will exit the loop. If - none are set, we want the first cnf entry that matches. Find the - cnf entries simultaneously, to avoid having to go through envvar - list twice -- because of the PVAR?C macro, that would mean having - to create a str_list and then use it twice. Yuck. */ - while ((env_name = va_arg (ap, string)) != NULL) - { - if (!var) - { - string env_value = getenv (env_name); - if (env_value && *env_value) - var = env_name; - } - - /* If we are initializing the cnf path, don't try to get any - values from the cnf files; that's infinite loop time. */ - if (!info->cnf_path && (!info->suffix || !STREQ (info->suffix, ".cnf"))) - info->cnf_path = kpse_cnf_get (env_name); - - if (var && info->cnf_path) - break; - } - va_end (ap); - - /* Expand any extra :'s. For each level (the font override path down - through the compile-time default), an extra : should be replaced - with the path at the next lower level. For example, an extra : in - a user-set envvar should be replaced with the path from the cnf - file. Things are complicated because none of the levels above the - very bottom are guaranteed to exist. */ - - /* Assume we can reliably start with the compile-time default. */ - info->path = info->raw_path = info->default_path; - info->path_source = "compile-time paths.h"; - - EXPAND_DEFAULT (info->cnf_path, "texmf.cnf"); - EXPAND_DEFAULT (info->client_path, "program config file"); - if (var) - EXPAND_DEFAULT (getenv (var), concat (var, " environment variable")); - if (info->font_override_p) - EXPAND_DEFAULT (kpse_font_override_path, "font override variable"); - info->path = kpse_path_expand (info->path); -}} - - -/* The path spec we are defining, one element of the global array. */ -#define FMT_INFO kpse_format_info[format] - -/* Call `init_path', including appending the trailing NULL to the envvar - list. Also initialize the fields not needed in setting the path. - Don't set `program_enabled' -- it'll be false via the compiler - initialization, and programs may want to enable it beforehand. */ -#define INIT_FORMAT(ext, font_p, default_path, envs) \ - FMT_INFO.suffix = FMT_INFO.type = ext; \ - init_path (&FMT_INFO, font_p, default_path, envs, NULL) - -/* A few file types allow for runtime generation by an external program. */ -#define INIT_MT(prog, args) \ - FMT_INFO.program = prog; FMT_INFO.program_args = args -#define MAKETEXPK_SPEC \ - "$KPATHSEA_DPI $MAKETEX_BASE_DPI $MAKETEX_MAG $MAKETEX_MODE" - -/* Initialize everything for FORMAT. */ - -const_string -kpse_init_format P1C(kpse_file_format_type, format) -{ - /* If we get called twice, don't redo all the work. */ - if (FMT_INFO.path) - return FMT_INFO.path; - - switch (format) - { /* We could avoid this repetition by token pasting, but it doesn't - seem worth it. */ - case kpse_gf_format: - INIT_FORMAT ("gf", true, DEFAULT_GFFONTS, KPSE_GF_ENVS); - FMT_INFO.suffix_search_only = false; - break; - case kpse_pk_format: - INIT_MT ("MakeTeXPK", MAKETEXPK_SPEC); - INIT_FORMAT ("pk", true, DEFAULT_PKFONTS, KPSE_PK_ENVS); - FMT_INFO.suffix_search_only = true; - break; - case kpse_any_glyph_format: - INIT_MT ("MakeTeXPK", MAKETEXPK_SPEC); - INIT_FORMAT ("bitmap", true, DEFAULT_GLYPHFONTS, KPSE_GLYPH_ENVS); - FMT_INFO.suffix_search_only = true; - break; - case kpse_base_format: - INIT_FORMAT (".base", false, DEFAULT_MFBASES, KPSE_BASE_ENVS); - break; - case kpse_bib_format: - INIT_FORMAT (".bib", false, DEFAULT_BIBINPUTS, KPSE_BIB_ENVS); - break; - case kpse_bst_format: - INIT_FORMAT (".bst", false, DEFAULT_BSTINPUTS, KPSE_BST_ENVS); - break; - case kpse_cnf_format: - /* I admit this is ugly, but making another field just for - this one file type seemed a waste. We use this value in cnf.c - as the filename to search for in the path. */ - if (!FMT_INFO.program) - FMT_INFO.program = "texmf.cnf"; - INIT_FORMAT (".cnf", false, DEFAULT_TEXMFCNF, KPSE_CNF_ENVS); - break; - case kpse_fmt_format: - INIT_FORMAT (".fmt", false, DEFAULT_TEXFORMATS, KPSE_FMT_ENVS); - break; - case kpse_mf_format: - INIT_MT ("MakeTeXMF", NULL); - INIT_FORMAT (".mf", false, DEFAULT_MFINPUTS, KPSE_MF_ENVS); - break; - case kpse_mfpool_format: - INIT_FORMAT (".pool", false, DEFAULT_MFPOOL, KPSE_MFPOOL_ENVS); - break; - case kpse_tex_format: - INIT_MT ("MakeTeXTeX", NULL); - INIT_FORMAT (".tex", false, DEFAULT_TEXINPUTS, KPSE_TEX_ENVS); - break; - case kpse_texpool_format: - INIT_FORMAT (".pool", false, DEFAULT_TEXPOOL, KPSE_TEXPOOL_ENVS); - break; - case kpse_pict_format: - INIT_FORMAT (NULL, false, DEFAULT_TEXINPUTS, KPSE_PICT_ENVS); - FMT_INFO.type = "graphic/figure"; - break; - case kpse_tfm_format: - INIT_MT ("MakeTeXTFM", NULL); - INIT_FORMAT (".tfm", false, DEFAULT_TFMFONTS, KPSE_TFM_ENVS); - FMT_INFO.suffix_search_only = true; - break; - case kpse_vf_format: - INIT_FORMAT (".vf", false, DEFAULT_VFFONTS, KPSE_VF_ENVS); - FMT_INFO.suffix_search_only = true; - break; - case kpse_dvips_config_format: - INIT_FORMAT (NULL, false, DEFAULT_TEXCONFIG, KPSE_DVIPS_CONFIG_ENVS); - FMT_INFO.type = "dvips config"; - break; - case kpse_dvips_header_format: - INIT_FORMAT (NULL, false, DEFAULT_DVIPSHEADERS, KPSE_DVIPS_HEADER_ENVS); - FMT_INFO.type = "dvips header/type1 font"; - break; - default: - FATAL1 ("(kpathsea) init_path: Unknown format %d", format); - } - -#ifdef DEBUG -#define MAYBE_NULL(member) (FMT_INFO.member ? FMT_INFO.member : "(none)") - - /* Describe the monster we've created. */ - if (KPSE_DEBUG_P (KPSE_DEBUG_PATHS)) - { - DEBUGF2 ("Search path for %s files (from %s)\n", - FMT_INFO.type, FMT_INFO.path_source); - DEBUGF1 (" = %s\n", FMT_INFO.path); - DEBUGF1 (" before expansion = %s\n", FMT_INFO.raw_path); - DEBUGF1 (" font override var applies = %d\n", FMT_INFO.font_override_p); - DEBUGF1 (" application config file path = %s\n", - MAYBE_NULL (client_path)); - DEBUGF1 (" texmf.cnf path = %s\n", MAYBE_NULL (cnf_path)); - DEBUGF1 (" compile-time path = %s\n", MAYBE_NULL (default_path)); - DEBUGF1 (" suffix = %s\n", MAYBE_NULL (suffix)); - DEBUGF1 (" search only with suffix = %d\n", - FMT_INFO.suffix_search_only); - DEBUGF1 (" runtime generation program = %s\n", MAYBE_NULL (program)); - DEBUGF1 (" extra program args = %s\n", MAYBE_NULL (program_args)); - /* Don't print the `program_enabled_p' member, since it's likely - always false (made true on a per-font basis), and hence it - would just confuse matters. */ - } -#endif /* DEBUG */ - - return FMT_INFO.path; -} - -/* Look up a file NAME of type FORMAT, and the given MUST_EXIST. This - initializes the path spec for FORMAT if it's the first lookup of that - type. Return the filename found, or NULL. */ - -string -kpse_find_file P3C(const_string, name, kpse_file_format_type, format, - boolean, must_exist) -{ - boolean name_has_suffix; - const_string suffix; - string ret = NULL; - - if (FMT_INFO.path == NULL) - kpse_init_format (format); - - suffix = FMT_INFO.suffix; - - /* Does NAME already end in `.suffix'? */ - if (suffix) - { /* Don't do the strlen's at all if no SUFFIX. */ - unsigned suffix_len = strlen (suffix); - unsigned name_len = strlen (name); - name_has_suffix = (name_len > suffix_len - && STREQ (suffix, name + name_len - suffix_len)); - } - else - name_has_suffix = false; - - if (suffix && !name_has_suffix) - { - /* Append `.suffix' and search for it. If we're going to search - for the original name if this fails, then set must_exist=false; - otherwise, we'd be looking on the disk for foo.eps.tex. */ - string full_name = concat (name, suffix); - ret = kpse_path_search (FMT_INFO.path, full_name, - FMT_INFO.suffix_search_only ? must_exist : false); - free (full_name); - } - - /* For example, looking for foo.eps, first we look for foo.eps.tex, - which presumably fails, then we want to look for foo.eps. (But we - want to find foo.tex before foo, so have to try with `suffix' - first.) Another example: tftopl passes in cmr10.tfm, but the - drivers just pass in cmr10. To avoid pounding the disk for `cmr10', - `suffix_search_only' for PK format is true. But then - `name_has_suffix' must override, or tftopl would wind up doing - no searches at all. */ - if (!ret && (name_has_suffix || !FMT_INFO.suffix_search_only)) - ret = kpse_path_search (FMT_INFO.path, name, must_exist); - - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tex-file.h --- a/kpathsea/tex-file.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* tex-file.h: find files in a particular format. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_TEX_FILE_H -#define KPATHSEA_TEX_FILE_H - -#include -#include - - -/* If non-NULL, try looking for this if can't find the real font. */ -extern const_string kpse_fallback_font; - - -/* If non-NULL, check these if can't find (within a few percent of) the - given resolution. List must end with a zero element. */ -extern unsigned *kpse_fallback_resolutions; - -/* This initializes the fallback resolution list. If ENVVAR - is set, it is used; otherwise, the envvar `TEXSIZES' is looked at; if - that's not set either, a compile-time default is used. */ -extern void kpse_init_fallback_resolutions P1H(string envvar); - - -/* If non-null, used instead of the usual envvar/path defaults, e.g., - set to `getenv ("XDVIFONTS")'. */ -extern string kpse_font_override_path; - -/* We put the glyphs first so we don't waste space in an array. A new - format here must be accompanied by a new initialization - abbreviation below and a new entry in `tex-make.c'. */ -typedef enum -{ - kpse_gf_format, - kpse_pk_format, - kpse_any_glyph_format, /* ``any'' meaning anything above */ - kpse_base_format, - kpse_bib_format, - kpse_bst_format, - kpse_cnf_format, - kpse_fmt_format, - kpse_mf_format, - kpse_mfpool_format, - kpse_pict_format, - kpse_tex_format, - kpse_texpool_format, - kpse_tfm_format, - kpse_vf_format, - kpse_dvips_config_format, - kpse_dvips_header_format, - kpse_last_format /* one past last index */ -} kpse_file_format_type; - - -/* For each file format, we record the following information. The main - thing that is not part of this structure is the environment variable - lists above. They are used directly in tex-file.c. We could - incorporate them here, but it would complicate the code a bit. We - could also do it via variable expansion, but not now, maybe not ever: - ${PKFONTS-${TEXFONTS-/usr/local/lib/texmf/fonts//}}. */ - -typedef struct -{ - const_string type; /* Human-readable description. */ - const_string path; /* The search path to use. */ - const_string raw_path; /* Pre-$~ (but post-default) expansion. */ - const_string path_source; /* Where the path started from. */ - boolean font_override_p; /* Use kpse_font_override_path? */ - const_string client_path; /* E.g., from dvips's config.ps. */ - const_string cnf_path; /* From our texmf.cnf. */ - const_string default_path; /* If all else fails. */ - const_string suffix; /* For kpse_find_file to append, or NULL. */ - boolean suffix_search_only; /* Only search if the suffix is present? */ - const_string program; /* ``MakeTeXPK'', etc. */ - const_string program_args; /* Args to the `program'. */ - boolean program_enabled_p; /* Invoke the `program'? */ -} kpse_format_info_type; - -/* The sole variable of that type, indexed by `kpse_file_format_type'. - Initialized by calls to `kpse_find_file' for `kpse_init_format'. */ -extern kpse_format_info_type kpse_format_info[]; - - -/* Initialize the info for the given format. This is called - automatically by `kpse_find_file', but the glyph searching (for - example) can't use that function, so make it available. */ -extern const_string kpse_init_format P1H(kpse_file_format_type); - -/* If FORMAT has a non-null `suffix' member, concatenate NAME "." and it - and call `kpse_path_search' with the result and the other arguments. - If that fails, try just NAME. */ -extern string kpse_find_file P3H(const_string name, - kpse_file_format_type format, boolean must_exist); - -/* Here are some abbreviations. */ -#define kpse_find_pict(name) kpse_find_file (name, kpse_pict_format, true) -#define kpse_find_tex(name) kpse_find_file (name, kpse_tex_format, true) -#define kpse_find_tfm(name) kpse_find_file (name, kpse_tfm_format, true) - -/* The `false' is correct for DVI translators, which should clearly not - require vf files for every font (e.g., cmr10.vf). But it's wrong for - VF translators, such as vftovp. */ -#define kpse_find_vf(name) kpse_find_file (name, kpse_vf_format, false) - -#endif /* not KPATHSEA_TEX_FILE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tex-glyph.c --- a/kpathsea/tex-glyph.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,383 +0,0 @@ -/* tex-glyph.c: Search for GF/PK files. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include -#include -#include - -/* Routines are in bottom-up order. */ - -/* Support both cmr10.300pk and dpi300/cmr10.pk. (Use the latter - instead of dpi300\cmr10.pk since DOS supports /'s, but Unix doesn't - support \'s. */ -#define UNIX_BITMAP_SPEC "$KPATHSEA_NAME.$KPATHSEA_DPI$KPATHSEA_FORMAT" -#define DPI_BITMAP_SPEC "dpi$KPATHSEA_DPI/$KPATHSEA_NAME.$KPATHSEA_FORMAT" - -/* Look up FONT_NAME at resolution DPI in PATH, with filename suffix - EXTENSION. Return file found or NULL. */ - -static string -try_format P3C(const_string, font_name, unsigned, dpi, - kpse_file_format_type, format) -{ - static const_string bitmap_specs[] - = { UNIX_BITMAP_SPEC, DPI_BITMAP_SPEC, NULL }; - const_string *spec; - boolean must_exist; - string ret = NULL; - const_string path = kpse_format_info[format].path; - if (!path) - path = kpse_init_format (format); - - /* Set the suffix on the name we'll be searching for. */ - xputenv ("KPATHSEA_FORMAT", kpse_format_info[format].suffix); - - /* OK, the limits on this for loop are a little hokey, but it saves - having to repeat the body. We want to do it once with `must_exist' - false to avoid looking on the disk for cmr10.600pk if - dpi600/cmr10.pk is in ls-R. (The time spent in the extra variable - expansions and db searches is negligible.) */ - for (must_exist = false; !ret && must_exist <= true; must_exist++) - { - for (spec = bitmap_specs; !ret && *spec; spec++) - { - string name = kpse_var_expand (*spec); - ret = kpse_path_search (path, name, must_exist); - if (name != ret) - free (name); - } - } - - return ret; -} - -/* Look for FONT_NAME at resolution DPI in format FORMAT. Search the - (entire) PK path first, then the GF path, if we're looking for both. - Return any filename found, and (if we succeeded) fill in GLYPH_FILE. */ - -static string -try_size P4C(const_string, font_name, unsigned, dpi, - kpse_file_format_type, format, - kpse_glyph_file_type *, glyph_file) -{ - kpse_file_format_type format_found; - string ret; - boolean try_gf = format == kpse_gf_format || format == kpse_any_glyph_format; - boolean try_pk = format == kpse_pk_format || format == kpse_any_glyph_format; - - xputenv_int ("KPATHSEA_DPI", dpi); - - /* Look for PK first (since it's more likely to be found), then GF. */ - ret = try_pk ? try_format (font_name, dpi, kpse_pk_format) : NULL; - - if (ret != NULL) - format_found = kpse_pk_format; - else - { - if (try_gf) - { - ret = try_format (font_name, dpi, kpse_gf_format); - format_found = kpse_gf_format; - } - } - - if (ret != NULL && glyph_file) - { /* Success. Fill in the return info. Discard const. */ - glyph_file->name = (string) font_name; - glyph_file->dpi = dpi; - glyph_file->format = format_found; - } - - return ret; -} - -/* Look for FONT_NAME at resolution DPI, then at the resolutions within - KPSE_BITMAP_TOLERANCE of DPI. */ - -static string -try_resolution P4C(const_string, font_name, unsigned, dpi, - kpse_file_format_type, format, - kpse_glyph_file_type *, glyph_file) -{ - string ret = try_size (font_name, dpi, format, glyph_file); - - if (!ret) - { - unsigned r; - unsigned tolerance = KPSE_BITMAP_TOLERANCE (dpi); - unsigned lower_bound = (int) (dpi - tolerance) < 0 ? 0 : dpi - tolerance; - unsigned upper_bound = dpi + tolerance; - - /* Prefer scaling up to scaling down, since scaling down can omit - character features (Tom did this in dvips). */ - for (r = lower_bound; !ret && r <= upper_bound; r++) - if (r != dpi) - ret = try_size (font_name, r, format, glyph_file); - } - - return ret; -} - -/* Look up FONT_NAME in format FORMAT at DPI in the texfonts.map files - that we can find, returning the filename found and GLYPH_FILE. */ - -static string -try_fontmap P4C(const_string, font_name, unsigned, dpi, - kpse_file_format_type, format, - kpse_glyph_file_type *, glyph_file) -{ - static hash_table_type fontmap; - string *mapped_names; - string ret = NULL; - - if (fontmap.size == 0) - { /* If we wanted to complicate our lives, we could handle separate - maps for GF and PK ones. I don't see that this has any - practical utility, though, because if someone wants an alias, - most likely the alias should apply to non-glyphs as well as - glyphs (let alone to only GF format or PK format). */ - const_string map_path = kpse_init_format (kpse_any_glyph_format); - fontmap = map_create (map_path); - } - - mapped_names = map_lookup (fontmap, font_name); - if (mapped_names) - { - string mapped_name; - while ((mapped_name = *mapped_names++) && !ret) - { - xputenv ("KPATHSEA_NAME", mapped_name); - ret = try_resolution (mapped_name, dpi, format, glyph_file); - } - } - - return ret; -} - -/* Look for FONT_NAME in `kpse_fallback_resolutions', omitting DPI if we - happen across it. Return NULL if nothing found. Pass GLYPH_FILE - along as usual. Assume `kpse_fallback_resolutions' is sorted. */ - -static string -try_fallback_resolutions P4C(const_string, font_name, unsigned, dpi, - kpse_file_format_type, format, - kpse_glyph_file_type *, glyph_file) -{ - unsigned s; - int loc, max_loc; - int lower_loc, upper_loc; - unsigned lower_diff, upper_diff; - unsigned closest_diff = UINT_MAX; - string ret = NULL; /* In case the only fallback resolution is DPI. */ - - /* First find the fallback size closest to DPI. */ - for (s = 0; kpse_fallback_resolutions[s] != 0; s++) - { - unsigned this_diff = abs (kpse_fallback_resolutions[s] - dpi); - if (this_diff < closest_diff) - { - closest_diff = this_diff; - loc = s; - } - } - if (s == 0) - return ret; /* If nothing in list, quit now. */ - - max_loc = s; - lower_loc = loc - 1; - upper_loc = loc + 1; - - for (;;) - { - unsigned fallback = kpse_fallback_resolutions[loc]; - /* Don't bother to try DPI itself again. */ - if (fallback != dpi) - { - ret = try_resolution (font_name, fallback, format, glyph_file); - if (ret) - break; - } - - /* That didn't work. How far away are the locs above or below? */ - lower_diff = lower_loc > -1 - ? dpi - kpse_fallback_resolutions[lower_loc] : INT_MAX; - upper_diff = upper_loc < max_loc - ? kpse_fallback_resolutions[upper_loc] - dpi : INT_MAX; - - /* But if we're at the end in both directions, quit. */ - if (lower_diff == INT_MAX && upper_diff == INT_MAX) - break; - - /* Go in whichever direction is closest. */ - if (lower_diff < upper_diff) - { - loc = lower_loc; - lower_loc--; - } - else - { - loc = upper_loc; - upper_loc++; - } - } - - return ret; -} - -/* See the .h file for description. This is the entry point. */ - -string -kpse_find_glyph P4C(const_string, font_name, unsigned, dpi, - kpse_file_format_type, format, - kpse_glyph_file_type *, glyph_file) -{ - string ret; - kpse_glyph_source_type source; - - /* Start the search: try the name we're given. */ - source = kpse_glyph_source_normal; - xputenv ("KPATHSEA_NAME", font_name); - ret = try_resolution (font_name, dpi, format, glyph_file); - - /* Try all the various possibilities in order of preference. */ - if (!ret) - { - /* Maybe FONT_NAME was an alias. */ - source = kpse_glyph_source_alias; - ret = try_fontmap (font_name, dpi, format, glyph_file); - - /* If not an alias, try creating it on the fly with MakeTeXPK, - unless FONT_NAME is absolute or explicitly relative. */ - if (!ret && !kpse_absolute_p (font_name, true)) - { - source = kpse_glyph_source_maketex; - /* `try_resolution' leaves the envvar set randomly. */ - xputenv_int ("KPATHSEA_DPI", dpi); - ret = kpse_make_tex (format, font_name); - } - - /* If MakeTeX... succeeded, set return struct. Doesn't make sense for - `kpse_make_tex' to set it, since it can only succeed or fail, - unlike the other routines. */ - if (ret) - { - KPSE_GLYPH_FILE_DPI (*glyph_file) = dpi; - /* Have to discard const here. */ - KPSE_GLYPH_FILE_NAME (*glyph_file) = (string) font_name; - } - - /* If MakeTeX... failed, try any fallback resolutions. */ - else - { - if (kpse_fallback_resolutions) - ret = try_fallback_resolutions(font_name, dpi, format, glyph_file); - - /* We're down to the font of last resort. */ - if (!ret && kpse_fallback_font) - { - const_string name = kpse_fallback_font; - source = kpse_glyph_source_fallback; - xputenv ("KPATHSEA_NAME", name); - - /* As before, first try it at the given size. */ - ret = try_resolution (name, dpi, format, glyph_file); - - /* The fallback font at the fallback resolutions. */ - if (!ret && kpse_fallback_resolutions) - ret = try_fallback_resolutions (name, dpi, format, glyph_file); - } - } - } - - /* If RET is null, then the caller is not supposed to look at GLYPH_FILE, - so it doesn't matter if we assign something incorrect. */ - KPSE_GLYPH_FILE_SOURCE (*glyph_file) = source; - - return ret; -} - -/* The tolerances change whether we base things on DPI1 or DPI2. */ - -boolean -kpse_bitmap_tolerance P2C(double, dpi1, double, dpi2) -{ - unsigned tolerance = KPSE_BITMAP_TOLERANCE (dpi2); - unsigned lower_bound = (int) (dpi2 - tolerance) < 0 ? 0 : dpi2 - tolerance; - unsigned upper_bound = dpi2 + tolerance; - - return lower_bound <= dpi1 && dpi1 <= upper_bound; -} - -#ifdef TEST - -void -test_find_glyph (const_string font_name, unsigned dpi) -{ - string answer; - kpse_glyph_file_type ret; - - printf ("\nSearch for %s@%u:\n\t", font_name, dpi); - - answer = kpse_find_glyph_format (font_name, dpi, - kpse_any_glyph_format, &ret); - if (answer) - { - string format = ret.format == kpse_pk_format ? "pk" : "gf"; - if (!ret.name) - ret.name = "(null)"; - printf ("%s\n\t(%s@%u, %s)\n", answer, ret.name, ret.dpi, format); - } - else - puts ("(null)"); -} - - -int -main () -{ - test_find_glyph ("/usr/local/lib/tex/fonts/cm/cmr10", 300); /* absolute */ - test_find_glyph ("cmr10", 300); /* normal */ - test_find_glyph ("logo10", 300); /* find gf */ - test_find_glyph ("cmr10", 299); /* find 300 */ - test_find_glyph ("circle10", 300); /* in fontmap */ - test_find_glyph ("none", 300); /* do not find */ - kpse_fallback_font = "cmr10"; - test_find_glyph ("fallback", 300); /* find fallback font cmr10 */ - kpse_init_fallback_resolutions ("KPATHSEA_TEST_SIZES"); - test_find_glyph ("fallbackdpi", 759); /* find fallback font cmr10@300 */ - - xputenv ("GFFONTS", "."); - test_find_glyph ("cmr10", 300); /* different GFFONTS/TEXFONTS */ - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -test-compile-command: "gcc -g -I. -I.. -DTEST tex-glyph.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tex-glyph.h --- a/kpathsea/tex-glyph.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* tex-glyph.h: look for a TeX glyph font (GF or PK). - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_TEX_GLYPH_H -#define KPATHSEA_TEX_GLYPH_H - -#include - - -/* This type describes the origination of a glyph font. */ - -typedef enum -{ - kpse_glyph_source_normal, /* the searched-for font: already existed */ - kpse_glyph_source_alias, /* : was an alias for an existing file */ - kpse_glyph_source_maketex, /* : was created on the fly */ - kpse_glyph_source_fallback /* : wasn't found, but the fallback font was */ -} kpse_glyph_source_type; - - -typedef struct -{ - string name; /* font name found */ - unsigned dpi; /* size found, for glyphs */ - kpse_file_format_type format; /* glyph format found */ - kpse_glyph_source_type source; /* where we found it */ -} kpse_glyph_file_type; - -#define KPSE_GLYPH_FILE_NAME(f) ((f).name) -#define KPSE_GLYPH_FILE_DPI(f) ((f).dpi) -#define KPSE_GLYPH_FILE_FORMAT(f) ((f).format) -#define KPSE_GLYPH_FILE_SOURCE(f) ((f).source) - - -/* Search first for the font named FONT_NAME at resolution DPI in the - glyph format FORMAT (see `try_size' for details of format searching). - Then try resolutions within KPSE_BITMAP_TOLERANCE of DPI. Then try - the resolutions in `kpse_fallback_sizes', then within the tolerance - of each of those. Then if FONT_NAME is an alias defined in a - texfonts.map do all the above for its real name. Then try the above - for kpse_fallback_name. Then fail. Return either the filename - found, or NULL. Also return information about the file found in - *GLYPH_FILE. */ -extern string kpse_find_glyph P4H(const_string font_name, unsigned dpi, - kpse_file_format_type format, - kpse_glyph_file_type *glyph_file); - -/* Look for a specific format only. */ -#define kpse_find_pk(font_name, dpi, glyph_file) \ - kpse_find_glyph (font_name, dpi, kpse_pk_format, glyph_file) -#define kpse_find_gf(font_name, dpi, glyph_file) \ - kpse_find_glyph (font_name, dpi, kpse_gf_format, glyph_file) - - -/* Defines how far away a pixel file can be found from its stated size. - The DVI standard says any resolution within 0.2% of the stated size - is ok, but we are more forgiving. */ -#define KPSE_BITMAP_TOLERANCE(r) ((r) / 500.0 + 1) - -/* Check whether DPI1 is within KPSE_BITMAP_TOLERANCE of DPI2. */ -extern boolean kpse_bitmap_tolerance P2H(double dpi1, double dpi2); - -#endif /* not KPATHSEA_TEX_GLYPH_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tex-make.c --- a/kpathsea/tex-make.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,301 +0,0 @@ -/* tex-make.c: Run external programs to make TeX-related files. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* We never throw away stdout, since that is supposed to be the filename - found, if all is successful. This variable controls whether stderr - is thrown away. */ -boolean kpse_make_tex_discard_errors = false; - -/* We set the envvar MAKETEX_MAG, which is part of the default spec for - MakeTeXPK above, based on KPATHSEA_DPI and MAKETEX_BASE_DPI. */ - -static void -set_maketex_mag P1H(void) -{ - char q[MAX_INT_LENGTH * 3 + 3]; - int m; - string dpi_str = getenv ("KPATHSEA_DPI"); - string bdpi_str = getenv ("MAKETEX_BASE_DPI"); - unsigned dpi = dpi_str ? atoi (dpi_str) : 0; - unsigned bdpi = bdpi_str ? atoi (bdpi_str) : 0; - - /* If the environment variables aren't set, it's a bug. */ - assert (dpi != 0 && bdpi != 0); - - /* Fix up for roundoff error. Hopefully the driver has already fixed - up DPI, but may as well be safe, and also get the magstep number. */ - (void) kpse_magstep_fix (dpi, bdpi, &m); - - /* Have to do something different for DOS? */ - if (m == 0) - sprintf (q, "%d+%d/%d", dpi / bdpi, dpi % bdpi, bdpi); - else - { /* m is encoded with LSB being a ``half'' bit (see magstep.h). Are - we making an assumption here about two's complement? Probably. - In any case, if m is negative, we have to put in the sign - explicitly, since m/2==0 if m==-1. */ - const_string sign = ""; - if (m < 0) - { - m *= -1; - sign = "-"; - } - sprintf (q, "magstep\\(%s%d.%d\\)", sign, m / 2, (m & 1) * 5); - } - xputenv ("MAKETEX_MAG", q); -} - -/* This MakeTeX... program was disabled, or the script failed. If this - was a font creation (according to FORMAT), append CMD - to a file missfont.log in the current directory. */ - -static void -misstex P2C(kpse_file_format_type, format, const_string, cmd) -{ - static FILE *missfont = NULL; - - /* If we weren't trying to make a font, do nothing. Maybe should - allow people to specify what they want recorded? */ - if (format > kpse_any_glyph_format && format != kpse_tfm_format - && format != kpse_vf_format) - return; - - /* If this is the first time, have to open the log file. */ - if (!missfont) - { - const_string missfont_name = "missfont.log"; - missfont = fopen (missfont_name, FOPEN_A_MODE); - if (!missfont && getenv ("TEXMFOUTPUT")) - { - missfont_name = concat3 (getenv ("TEXMFOUTPUT"), DIR_SEP_STRING, - missfont_name); - missfont = fopen (missfont_name, FOPEN_A_MODE); - } - - /* Should we really be unconditionally shouting this message? */ - if (missfont) - fprintf (stderr, "kpathsea: Appending font creation commands to %s.\n", - missfont_name); - } - - /* Write the command if we have a log file. */ - if (missfont) - { - fputs (cmd, missfont); - putc ('\n', missfont); - } -} - - -/* Assume the script outputs the filename it creates (and nothing - else) on standard output; hence, we run the script with `popen'. */ - -static string -maketex P2C(kpse_file_format_type, format, const_string, cmd) -{ - string ret; - FILE *f; - - /* Tell the user we are running the script, so they have a clue as to - what's going on if something messes up. */ - fprintf (stderr, "kpathsea: Running %s\n", cmd); - - /* Run the script. */ - f = popen (cmd, FOPEN_R_MODE); - - if (f) - { - int c; - string fn; /* The final filename. */ - unsigned len; /* And its length. */ - fn_type output; - output = fn_init (); /* Collect the script output. */ - - /* Read all the output and terminate with a null. */ - while ((c = getc (f)) != EOF) - fn_1grow (&output, c); - fn_1grow (&output, 0); - - /* Maybe should check for `EXIT_SUCCESS' status before even - looking at the output? */ - if (pclose (f) == -1) - FATAL_PERROR (cmd); - - len = FN_LENGTH (output); - fn = FN_STRING (output); - - /* Remove trailing newlines and returns. */ - while (len > 1 && (fn[len - 2] == '\n' || fn[len - 2] == '\r')) - { - fn[len - 2] = 0; - len--; - } - - /* If no output from script, return NULL. Otherwise check - what it output. */ - ret = len == 1 ? NULL : kpse_readable_file (fn); - - /* Free the name if we're not returning it. */ - if (fn != ret) - free (fn); - } - else - /* popen failed. Maybe should give error (optionally), but for - now be silent, to avoid annoying people who purposefully - don't have the script installed. */ - ret = NULL; - - if (ret == NULL) - misstex (format, cmd); - else - db_insert (ret); - - return ret; -} - - -/* Create BASE in FORMAT and return the generated filename, or - return NULL. */ - -string -kpse_make_tex P2C(kpse_file_format_type, format, const_string, base) -{ - kpse_format_info_type spec; /* some compilers lack struct initialization */ - string ret = NULL; - - spec = kpse_format_info[format]; - - if (spec.program) - { - /* See the documentation for the envvars we're dealing with here. */ - string args, cmd; - const_string prog = spec.program; /* MakeTeXPK */ - string PROG = uppercasify (prog); /* MAKETEXPK */ - string progenv = getenv (PROG); /* ENV{"MAKETEXPK"} */ - const_string arg_spec = progenv ? progenv : spec.program_args; - string mode = getenv ("MAKETEX_MODE"); - boolean unset_mode = false; - - set_maketex_mag (); - - /* Here's an awful kludge: if the mode is `/', unset it for the - call and then reset it. We could ignore a mode of / in - MakeTeXPK, but then everyone's MakeTeXPK would have to handle - that special case, which seems too onerous. `kpse_prog_init' - sets it to this in the first place when no mode is otherwise - specified; this is so when the user defines a resolution, they - don't also have to specify a mode; instead, MakeTeXPK's guesses - will take over. They use / for the value because then when it - is expanded as part of the PKFONTS et al. path values, we'll - wind up searching all the pk directories. We put $MAKETEX_MODE - in the path values in the first place so that sites with two - different devices with the same resolution can find the right - fonts; but such sites are uncommon, so they shouldn't make - things harder for everyone else. */ - if (mode && STREQ (mode, DIR_SEP_STRING)) - { - xputenv ("MAKETEX_MODE", ""); - unset_mode = true; - } - args = arg_spec ? kpse_var_expand (arg_spec) : (string) ""; - if (unset_mode) - xputenv ("MAKETEX_MODE", DIR_SEP_STRING); - - /* The command is the program name plus the arguments. */ - cmd = concatn (prog, " ", base, " ", args, NULL); - - if (spec.program_enabled_p) - { - /* Only way to discard errors is redirect stderr inside another - shell; otherwise, if the MakeTeX... script doesn't exist, we - will see the `sh: MakeTeX...: not found' error. No point in - doing this if we're not actually going to run anything. */ - if (kpse_make_tex_discard_errors) - { - string old_cmd = cmd; - cmd = concat3 ("sh -c \"", cmd, "\" 2>/dev/null"); - free (old_cmd); - } - - ret = maketex (format, cmd); - } - else - misstex (format, cmd); - - free (PROG); - free (cmd); - if (*args) - free (args); - } - - return ret; -} - -#ifdef TEST - -void -test_make_tex (kpse_file_format_type fmt, const_string base) -{ - string answer; - - printf ("\nAttempting %s in format %d:\n", base, fmt); - - answer = kpse_make_tex (fmt, base); - puts (answer ? answer : "(null)"); -} - - -int -main () -{ - xputenv ("KPATHSEA_DPI", "781"); /* call MakeTeXPK */ - xputenv ("MAKETEX_BASE_DPI", "300"); /* call MakeTeXPK */ - KPSE_MAKE_SPEC_ENABLED (kpse_make_specs[kpse_pk_format]) = true; - test_make_tex (kpse_pk_format, "cmr10"); - - /* Fail with MakeTeXTFM. */ - KPSE_MAKE_SPEC_ENABLED (kpse_make_specs[kpse_tfm_format]) = true; - test_make_tex (kpse_tfm_format, "foozler99"); - - /* Call something disabled. */ - test_make_tex (kpse_bst_format, "no-way"); - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -test-compile-command: "gcc -g -I. -I.. -DTEST tex-make.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tex-make.h --- a/kpathsea/tex-make.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* tex-make.h: declarations for executing external scripts. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_TEX_MAKE_H -#define KPATHSEA_TEX_MAKE_H - -#include -#include -#include - - -/* Says whether to throw away stderr output from the MakeTeX... scripts, - or let it be seen. */ -extern boolean kpse_make_tex_discard_errors; - - -/* Run a program to create a file named by BASE_FILE in format FORMAT. - Return the full filename to it, or NULL. Any other information about - the file is passed through environment variables. See the MakeTeXPK - stuff in `tex-make.c' for an example. */ -extern string kpse_make_tex P2H(kpse_file_format_type format, - const_string base_file); - -#endif /* not KPATHSEA_TEX_MAKE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/texmf.cnf.in --- a/kpathsea/texmf.cnf.in Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -% original texmf.cnf -- runtime path configuration file for kpathsea. -% -% (If you change or delete `original' on the previous line, the -% distribution won't install its version over yours.) -% -% What follows is a super-summary of what this .cnf file can -% contain. Please read the Kpathsea manual for more information. -% -% texmf.cnf is generated from texmf.cnf.in, by replacing @var@ with the -% value of the Make variable `var', via a sed file texmf.sed, generated -% (once) by kpathsea/Makefile (itself generated from -% kpathsea/Makefile.in by configure). -% -% Any identifier (sticking to A-Za-z_ for names is safest) can be assigned. -% The `=' (and surrounding spaces) is optional. -% No space, %, or @ in variable values, for the sake of autogeneration. -% An environment variable foo overrides a definition of foo here. -% $foo (or ${foo}) in a value expands to the envvar or cnf value of foo. -% -% All definitions are read before anything is expanded, so you can use -% variables before they are defined. -% -% If a variable is qualified with `.', it is ignored unless the -% current executable (last component of argv[0]) is named . -% -% Which file formats use which paths for searches is described in the -% various programs' and the kpathsea documentation. -% -% // means to search subdirectories (recursively). -% A leading !! means to look only in the ls-R db, never on the disk. -% A leading/trailing/doubled : in the paths will be expanded into the -% compile-time default. Probably not what you want. - - -% Where the wild files are. You can set an environment variable to -% override this if you're testing a new TeX tree, without changing -% anything else. -TEXMF = @texmf@ - -% TeX input files -- i.e., anything to be found by \input or \openin, -% including .sty, .eps, etc. Things are confused by the many variants -% of LaTeX, which all have the same filenames. The current -% recommendation is to make `latex' be latex2e, and if you also want to -% support latex 2.09, call it latex209. If you do the reverse, the -% definitions below will need adjusting. -% -latex209_inputs = .:@texinputdir@/latex209//:@texinputdir@// -latex2e_inputs = .:@texinputdir@/latex2e//:@texinputdir@// -TEXINPUTS.latex209 = $latex209_inputs -TEXINPUTS.latex2e = $latex2e_inputs -TEXINPUTS.latex = $latex2e_inputs -% Earlier entries override later ones, so put this last. -TEXINPUTS = .:@texinputdir@// - -% Ditto for MF. -MFINPUTS = .:@mfinputdir@//:@fontdir@//src// - -% Predigested formats and string pools for initex/inimf. -TEXFORMATS = .:@fmtdir@ -MFBASES = .:@basedir@ -TEXPOOL = @texpooldir@ -MFPOOL = @mfpooldir@ - -% Device-independent font metric files. -VFFONTS = .:@fontdir@//vf -TFMFONTS = .:@fontdir@//tfm - -% Just an abbreviation. -pkdir = @fontdir@//pk - -% The $MAKETEX_MODE below means the drivers will not use a cx font when -% the mode is ricoh. If no mode is explicitly specified, kpse_prog_init -% sets MAKETEX_MODE to /, so all subdirectories are searched. See the manual. - -% xdvi needs to find bitmaps for PostScript fonts, which can be -% generated by standalone programs gsftopk and ps2pk (ps2mf needs no -% special treatment). See xdvik/INSTALL for more info. -PKFONTS.xdvi = .:$pkdir/$MAKETEX_MODE:$pkdir/gsftopk:$pkdir/ps2pk -% Again, the standard definition must come after the program-specific one. -% Don't use $pkdir since we can't do general variable expansion making paths.h. -PKFONTS = .:@fontdir@//pk/$MAKETEX_MODE - -% Similarly for the GF format, which only remains in existence because -% Metafont outputs it (and MF isn't going to change). -GFFONTS = .:@fontdir@//gf/$MAKETEX_MODE - -% Used to find texfonts.map; also a backup for PKFONTS and GFFONTS, -% but normally that is irrelevant, so don't bother with all subdirectories. -GLYPHFONTS = .:@fontdir@ - -% BibTeX bibliographies and style files. -BIBINPUTS = .:@texmf@/bibtex/bib -BSTINPUTS = .:@texmf@/bibtex/bst - -% Dvips' config.* files. -TEXCONFIG = .:~:@psheaderdir@ - -% Dvips' PostScript prologues (.pro) and .pfa/.pfb files. -DVIPSHEADERS = .:@psheaderdir@:@fontdir@//type1 - -% Enable this (or set the environment variable) if you want kpathsea to -% log names and times for all files found. -% TEXMFLOG = @texmf@/kpathsea.log - -% This definition isn't used from this .cnf file itself (that would be -% paradoxical), but the compile-time default in paths.h is built from it. -TEXMFCNF = .:@web2cdir@ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tilde.c --- a/kpathsea/tilde.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* tilde.c: Expand user's home directories. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include - -#ifdef HAVE_PWD_H -#include -#endif - - -/* If NAME has a leading ~ or ~user, Unix-style, expand it to the user's - home directory, and return a new malloced string. If no ~, or no - , just return NAME. */ - -string -kpse_tilde_expand P1C(const_string, name) -{ -#ifdef HAVE_PWD_H - const_string expansion; - const_string home; - - assert (name); - - /* If no leading tilde, do nothing. */ - if (*name != '~') - expansion = name; - - /* If `~' or `~/', use $HOME if it exists, or `.' if it doesn't. */ - else if (IS_DIR_SEP (name[1]) || name[1] == 0) - { - home = getenv ("HOME"); - if (!home) - home = "."; - - expansion = name[1] == 0 - ? xstrdup (home) : concat3 (home, DIR_SEP_STRING, name + 2); - } - - /* If `~user' or `~user/', look up user in the passwd database. */ - else - { - struct passwd *p; - string user; - unsigned c = 2; - while (!IS_DIR_SEP (name[c]) && name[c] != 0) - c++; - - user = (string) xmalloc (c); - strncpy (user, name + 1, c - 1); - user[c - 1] = 0; - - /* We only need the cast here for those (deficient) systems - which do not declare `getpwnam' in . */ - p = (struct passwd *) getpwnam (user); - free (user); - - /* If no such user, just use `.'. */ - home = p == NULL ? "." : p->pw_dir; - - expansion = name[c] == 0 ? xstrdup (home) : concat (home, name + c); - } - - /* We may return the same thing as the original, and then we might not - be returning a malloc-ed string. */ - return (string) expansion; -#else - return name; -#endif /* not HAVE_PWD_H */ -} - -#ifdef TEST - -void -test_expand_tilde (const_string filename) -{ - string answer; - - printf ("Tilde expansion of `%s':\t", filename ? filename : "(null)"); - answer = kpse_tilde_expand (filename); - puts (answer); -} - -int -main () -{ - string tilde_path = "tilde"; - - test_expand_tilde (""); - test_expand_tilde ("none"); - test_expand_tilde ("~root"); - test_expand_tilde ("~"); - test_expand_tilde ("foo~bar"); - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -standalone-compile-command: "gcc -g -I. -I.. -DTEST tilde.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/tilde.h --- a/kpathsea/tilde.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* tilde.h: Declare tilde expander. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_TILDE_H -#define KPATHSEA_TILDE_H - -#include -#include - - -/* Replace a leading ~ or ~name in FILENAME with getenv ("HOME") or - name's home directory, respectively. FILENAME may not be null. */ - -extern string kpse_tilde_expand P1H(const_string filename); - -#endif /* not KPATHSEA_TILDE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/truncate.c --- a/kpathsea/truncate.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* truncate.c: truncate too-long components in a filename. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include - - -/* Truncate any too-long components in NAME, returning the result. It's - too bad this is necessary. See comments in readable.c for why. */ - -string -kpse_truncate_filename P1C(const_string, name) -{ - unsigned c_len = 0; /* Length of current component. */ - unsigned ret_len = 0; /* Length of constructed result. */ - - /* Allocate enough space. */ - string ret = (string) xmalloc (strlen (name) + 1); - - for (; *name; name++) - { - if (IS_DIR_SEP (*name)) - { /* At a directory delimiter, reset component length. */ - c_len = 0; - } - else if (c_len > NAME_MAX) - { /* If past the max for a component, ignore this character. */ - continue; - } - - /* Copy this character. */ - ret[ret_len++] = *name; - c_len++; - } - ret[ret_len] = 0; - - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/truncate.h --- a/kpathsea/truncate.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* truncate.h: truncate too-long components in a filename. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_TRUNCATE_H -#define KPATHSEA_TRUNCATE_H - -#include -#include - -/* Truncate any component in NAME longer than the system NAME_MAX, and - return the result as a malloced string. If none, return a copy of - NAME. */ -extern string kpse_truncate_filename P1H(const_string name); - -#endif /* not KPATHSEA_TRUNCATE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/types.h --- a/kpathsea/types.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* types.h: general types. - -Copyright (C) 1993 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_TYPES_H -#define KPATHSEA_TYPES_H - -/* Booleans. */ -typedef enum { false = 0, true = 1 } boolean; - -/* The X11 library defines `FALSE' and `TRUE', and so we only want to - define them if necessary. */ -#ifndef FALSE -#define FALSE false -#define TRUE true -#endif /* FALSE */ - -/* The usual null-terminated string. */ -typedef char *string; - -/* A pointer to constant data. (ANSI says `const string' is - `char const *', which is a constant pointer, which is not what we - typically want.) */ -typedef const char *const_string; - -/* A generic pointer. */ -typedef void *address; - -#endif /* not KPATHSEA_TYPES_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/uppercasify.c --- a/kpathsea/uppercasify.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* uppercasify.c: change all lowercase letters to uppercase. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -string -uppercasify P1C(const_string, s) -{ - string target; - string ret = xstrdup (s); - - for (target = ret; *target; target++) - { - *target = TOUPPER (*target); - } - - return ret; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/variable.c --- a/kpathsea/variable.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/* variable.c: variable expansion. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include -#include -#include -#include - - -/* Append the result of value of `var' to EXPANSION, where `var' begins - at START and ends at END. If `var' is not set, do not complain. */ - -static void -expand P3C(fn_type *, expansion, const_string, start, const_string, end) -{ - string value; - unsigned len = end - start + 1; - string var = xmalloc (len + 1); - strncpy (var, start, len); - var[len] = 0; - - /* First check the environment variable. */ - value = getenv (var); - - /* If no envvar, check the config files. */ - if (!value) - value = kpse_cnf_get (var); - - if (value) - { - value = kpse_var_expand (value); - fn_grow (expansion, value, strlen (value)); - free (value); - } - - free (var); -} - -/* Can't think of when it would be useful to change these (and the - diagnostic messages assume them), but ... */ -#ifndef IS_VAR_START /* starts all variable references */ -#define IS_VAR_START(c) ((c) == '$') -#endif -#ifndef IS_VAR_CHAR /* variable name constituent */ -#define IS_VAR_CHAR(c) (ISALNUM (c) || (c) == '_') -#endif -#ifndef IS_VAR_BEGIN_DELIMITER /* start delimited variable name (after $) */ -#define IS_VAR_BEGIN_DELIMITER(c) ((c) == '{') -#endif -#ifndef IS_VAR_END_DELIMITER -#define IS_VAR_END_DELIMITER(c) ((c) == '}') -#endif - - -/* Maybe we should generalize to allow some or all of the various shell - ${...} constructs, especially ${var-value}. */ - -string -kpse_var_expand P1C(const_string, src) -{ - const_string s; - string ret; - fn_type expansion; - expansion = fn_init (); - - /* Copy everything but variable constructs. */ - for (s = src; *s; s++) - { - if (IS_VAR_START (*s)) - { - s++; - - /* Three cases: `$VAR', `${VAR}', `$'. */ - - if (IS_VAR_CHAR (*s)) - { /* $V: collect name constituents, then expand. */ - const_string var_end = s; - - do - var_end++; - while (IS_VAR_CHAR (*var_end)); - - var_end--; /* had to go one past */ - expand (&expansion, s, var_end); - s = var_end; - } - - else if (IS_VAR_BEGIN_DELIMITER (*s)) - { /* ${: scan ahead for matching delimiter, then expand. */ - const_string var_end = ++s; - - while (*var_end && !IS_VAR_END_DELIMITER (*var_end)) - var_end++; - - if (! *var_end) - { - WARNING1 ("%s: No matching right brace for ${", src); - s = var_end - 1; /* will incr to null at top of loop */ - } - else - { - expand (&expansion, s, var_end - 1); - s = var_end; /* will incr past } at top of loop*/ - } - } - - - else - { /* $: error. */ - WARNING2 ("%s: Unrecognized variable construct `$%c'", src, *s); - /* Just ignore those chars and keep going. */ - } - } - else - fn_1grow (&expansion, *s); - } - fn_1grow (&expansion, 0); - - ret = FN_STRING (expansion); - return ret; -} - -#ifdef TEST - -static void -test_var (string test, string right_answer) -{ - string result = kpse_var_expand (test); - - printf ("expansion of `%s'\t=> %s", test, result); - if (!STREQ (result, right_answer)) - printf (" [should be `%s']", right_answer); - putchar ('\n'); -} - - -int -main () -{ - test_var ("a", "a"); - test_var ("$foo", ""); - test_var ("a$foo", "a"); - test_var ("$foo a", " a"); - test_var ("a$foo b", "a b"); - - xputenv ("FOO", "foo value"); - test_var ("a$FOO", "afoo value"); - - xputenv ("Dollar", "$"); - test_var ("$Dollar a", "$ a"); - - test_var ("a${FOO}b", "afoo valueb"); - test_var ("a${}b", "ab"); - - test_var ("$$", ""); /* and error */ - test_var ("a${oops", "a"); /* and error */ - - return 0; -} - -#endif /* TEST */ - - -/* -Local variables: -standalone-compile-command: "gcc -g -I. -I.. -DTEST variable.c kpathsea.a" -End: -*/ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/variable.h --- a/kpathsea/variable.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* variable.h: Declare variable expander. - -Copyright (C) 1993 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_VARIABLE_H -#define KPATHSEA_VARIABLE_H - -#include -#include - - -/* Expand $VAR and ${VAR} references in SRC, returning the (always - dynamically-allocated) result. An unterminated ${ or any other - character following $ produce error messages, and that part of SRC is - ignored. In the $VAR form, the variable name consists of consecutive - letters, digits, and underscores. In the ${VAR} form, the variable - name consists of whatever is between the braces. In any case, - ``expansion'' just means calling `getenv'; if the variable is not - set, the expansion is the empty string. */ -extern string kpse_var_expand P1H(const_string src); - -#endif /* not KPATHSEA_VARIABLE_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/version.c --- a/kpathsea/version.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -char *kpathsea_version_string = (char *) "kpathsea version 2.6"; diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xcalloc.c --- a/kpathsea/xcalloc.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* xcalloc.c: calloc with error checking. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -address -xcalloc P2C(unsigned, nelem, unsigned, elsize) -{ - address new_mem = (address) calloc (nelem, elsize); - - if (new_mem == NULL) - { - fprintf (stderr, "xcalloc: request for %u elements of size %u failed.\n", - nelem, elsize); - abort (); - } - - return new_mem; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xfopen.c --- a/kpathsea/xfopen.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* xfopen.c: fopen and fclose with error checking. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -/* These routines just check the return status from standard library - routines and abort if an error happens. */ - -FILE * -xfopen P2C(const_string, filename, const_string, mode) -{ - FILE *f = fopen (filename, mode); - - if (f == NULL) - FATAL_PERROR (filename); - - return f; -} - - -void -xfclose P2C(FILE *, f, const_string, filename) -{ - if (fclose (f) == EOF) - FATAL_PERROR (filename); -} - - diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xmalloc.c --- a/kpathsea/xmalloc.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* xmalloc.c: malloc with error checking. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Don't include config.h or all our other usual includes, since - it's useful to just throw this file into other programs. */ - -#include -extern char *malloc (); - - -void * -xmalloc (size) - unsigned size; -{ - void *new_mem = (void *) malloc (size); - - if (new_mem == NULL) - { - fprintf (stderr, "fatal: memory exhausted (xmalloc of %u bytes).\n", - size); - /* 1 means success on VMS, so pick a random number (ASCII `K'). */ - exit (75); - } - - return new_mem; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xopendir.c --- a/kpathsea/xopendir.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* xopendir.c: opendir and closedir with error checking. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -DIR * -xopendir P1C(string, dirname) -{ - DIR *d = opendir (dirname); - - if (d == NULL) - FATAL_PERROR (dirname); - - return d; -} - - -void -xclosedir P1C(DIR *, d) -{ -#ifdef VOID_CLOSEDIR - closedir (d); -#else - int ret = closedir (d); - - if (ret != 0) - FATAL ("closedir failed"); -#endif -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xopendir.h --- a/kpathsea/xopendir.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* xopendir.h: Checked directory operations. - -Copyright (C) 1994 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_XDIR_H -#define KPATHSEA_XDIR_H - -#include -#include -#include - -/* Like opendir and closedir, but abort on error. */ -extern DIR *xopendir P1H(string dirname); -extern void xclosedir P1H(DIR *); - -#endif /* not KPATHSEA_XDIR_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xputenv.c --- a/kpathsea/xputenv.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* xputenv.c: set an environment variable without return. - -Copyright (C) 1993, 94 Karl Berry. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -/* Avoid implicit declaration warning. */ -extern int putenv (); - -/* This `x' function is different from the others in that it takes - different parameters than the standard function; but I find it much - more convenient to pass the variable and the value separately. Also, - this way we can guarantee that the environment value won't become - garbage. Also, putenv just overwrites old entries with - the new, and we want to reclaim that space -- this may be called - hundreds of times on a run. - - But naturally, some systems do it differently. In this case, it's - net2 that is smart and does its own saving/freeing. If you can write - a test for configure to check this, please send it to me. Until then, - you'll have to define SMART_PUTENV yourself. */ - -void -xputenv P2C(const_string, var_name, const_string, value) -{ - static const_string *saved_env_items = NULL; - static unsigned saved_len; - string old_item = NULL; - string new_item = concat3 (var_name, "=", value); - -#ifndef SMART_PUTENV - /* Check if we have saved anything yet. */ - if (!saved_env_items) - { - saved_env_items = XTALLOC1 (const_string); - saved_env_items[0] = var_name; - saved_len = 1; - } - else - { - /* Check if we've assigned VAR_NAME before. */ - unsigned i; - unsigned len = strlen (var_name); - for (i = 0; i < saved_len && !old_item; i++) - { - if (STREQ (saved_env_items[i], var_name)) - { - old_item = getenv (var_name); - assert (old_item); - /* Back up to the `NAME=' in the environment before the - value that getenv returns. */ - old_item -= (len + 1); - } - } - - if (!old_item) - { - /* If we haven't seen VAR_NAME before, save it. Assume it is - in safe storage. */ - saved_len++; - XRETALLOC (saved_env_items, saved_len, const_string); - saved_env_items[saved_len - 1] = var_name; - } - } -#endif /* not SMART_PUTENV */ - - /* As far as I can see there's no way to distinguish between the - various errors; putenv doesn't have errno values. */ - if (putenv (new_item) < 0) - FATAL1 ("putenv (%s) failed", new_item); - -#ifndef SMART_PUTENV - /* Can't free `new_item' because its contained value is now in - `environ', but we can free `old_item', since it's been replaced. */ - if (old_item) - free (old_item); -#endif /* not SMART_PUTENV */ -} - - -/* A special case for setting a variable to a numeric value - (specifically, KPATHSEA_DPI). We don't need to dynamically allocate - and free the string for the number, since it's saved as part of the - environment value. */ - -void -xputenv_int P2C(const_string, var_name, int, num) -{ - char str[MAX_INT_LENGTH]; - sprintf (str, "%d", num); - - xputenv (var_name, str); -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xrealloc.c --- a/kpathsea/xrealloc.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* xrealloc.c: realloc with error checking. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Don't include config.h or all our other usual includes, since - it's useful to just throw this file into other programs. */ - -#include -extern char *realloc (); - - -extern void *xmalloc (); - -void * -xrealloc (old_ptr, size) - void *old_ptr; - unsigned size; -{ - void *new_mem; - - if (old_ptr == NULL) - new_mem = xmalloc (size); - else - { - new_mem = (void *) realloc (old_ptr, size); - if (new_mem == NULL) - { - /* We used to print OLD_PTR here using %x, and casting its - value to unsigned, but that lost on the Alpha, where - pointers and unsigned had different sizes. Since the info - is of little or no value anyway, just don't print it. */ - fprintf (stderr, "fatal: memory exhausted (realloc of %u bytes).\n", - size); - /* 1 means success on VMS, so pick a random number (ASCII `B'). */ - exit (66); - } - } - - return new_mem; -} diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xstat.c --- a/kpathsea/xstat.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* xstat.c: stat and (maybe) lstat with error checking. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - -#include - - -struct stat -xstat P1C(const_string, path) -{ - struct stat s; - - if (stat (path, &s) != 0) - FATAL_PERROR (path); - - return s; -} - - -/* If we don't have symbolic links, lstat is the same as stat, and - a #define is made in the include file. We declare lstat to avoid an - implicit declaration warning for development; sigh. */ - -#ifdef S_ISLNK -extern int lstat (); -struct stat -xlstat P1C(const_string, path) -{ - struct stat s; - - if (lstat (path, &s) != 0) - FATAL_PERROR (path); - - return s; -} -#endif diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xstat.h --- a/kpathsea/xstat.h Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* xstat.h: stat with error checking. - -Copyright (C) 1992, 93, 94 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#ifndef KPATHSEA_XSTAT_H -#define KPATHSEA_XSTAT_H - -#include -#include -#include - -/* Two files are indistinguishable if they are on the same device - and have the same inode. This checks two stat buffers for that. Cf. - the `same_file_p' routine in file-p.c, declared in kpathlib.h. */ -#define SAME_FILE_P(s1, s2) \ - ((s1).st_ino == (s2).st_ino && (s1).st_dev == (s2).st_dev) - -/* Does stat(2) on PATH, and aborts if the stat fails. */ -extern struct stat xstat P1H(const_string path); - -/* Ditto, for lstat(2) (except that lstat might not exist). */ -#ifdef S_ISLNK -extern struct stat xlstat P1H(const_string path); -#else -#define xlstat xstat -#endif - -#endif /* not KPATHSEA_XSTAT_H */ diff -r e67089e1f2c8 -r 692ba9d441ec kpathsea/xstrdup.c --- a/kpathsea/xstrdup.c Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* xstrdup.c: strdup with error checking. - -Copyright (C) 1992, 93 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include - - -/* Return a copy of S in new storage. */ - -string -xstrdup P1C(const_string, s) -{ - string new_string = (string) xmalloc (strlen (s) + 1); - return strcpy (new_string, s); -} diff -r e67089e1f2c8 -r 692ba9d441ec make/ChangeLog --- a/make/ChangeLog Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,398 +0,0 @@ -Wed Feb 26 12:40:12 1997 John W. Eaton - - * misc.make (maintainer-clean): Also remove configure and stamp-auto. - -Thu Feb 13 21:26:03 1997 John W. Eaton - - * common.make (SH_LD, SH_LDFLAGS): Substitute here. - -Tue May 14 22:35:12 1996 John W. Eaton - - * misc.make (clean): Also remove pic/*.o. - (distclean): Also remove stamp-picdir and pic. - -Sat Mar 23 04:51:00 1996 John W. Eaton - - * common.make: Use separate pattern rule for compiling PIC. - -Fri Feb 2 22:51:32 1996 John W. Eaton - - * common.make (CPICFLAG): Fix typo. - -Mon Jan 8 22:57:17 1996 John W. Eaton - - * misc.make (mostlyclean): - If $(SHARED_LIBS), also remove shared libs. - -Fri Dec 29 21:42:33 1995 John W. Eaton - - * common.make: Handle creating position independent code. - -Thu Sep 14 04:36:44 1995 John Eaton - - * texi.make: Don't fail if makeinfo or tex fail. - - * misc.make (maintainer-clean): Rename from realclean. - -Sun Jan 8 12:16:36 1995 Karl Berry - - * kpathsea 2.6/dviljk 2.5/dvipsk 5.58f/xdvik 18f. - -Wed Jan 4 12:41:25 1995 Karl Berry - - * tkpathsea.make (kpathsea): Don't depend on texmf.cnf, since it - doesn't exist at the first make. - -Tue Jan 3 13:43:12 1995 Karl Berry - - * rdepend.make (depend): paths.h is not in the srcdir. - - * config.make (autoconf): Add acsite.m4. - - * dist.make (top_files): FTP belongs here, not in ln_files. - -Sun Jan 1 14:02:42 1995 Karl Berry - - * makevars.make (makevars): Include web2cdir. - * paths.make (web2cdir): New directory. Suggested by Joachim. - -Sat Dec 31 14:35:29 1994 Karl Berry - - * tmtpk.make: Just incorporate this in kpathsea/Makefile.in now. - - * rdepend.make (depend): Depend on ourselves. - -Fri Dec 30 15:50:37 1994 Karl Berry - - * rdepend.make (depend): Use kpathsea_srcdir, not kpathsea_dir. - From Joachim. - -Wed Dec 28 14:16:50 1994 Karl Berry - - * dist.make (ln_files): Add FTP. - -Mon Dec 26 10:31:14 1994 Karl Berry - - * dist.make (dist): Copy aclocal.m4 from acsite.m4. - Suggested by interran@uluru.Stanford.EDU (John Interrante). - -Wed Dec 14 15:17:42 1994 Karl Berry - - * kpathsea 2.5/dviljk 2.4/dvipsk 5.58e/xdvik 18e. - -Sun Dec 11 13:23:12 1994 Karl Berry - - * rdepend.make (depend): Remove system include files that are - alone on a line. - -Fri Nov 25 09:21:02 1994 Karl Berry - - * tmtpk.make (MakeTeXPK): Depend on the new filename. - -Tue Nov 15 15:28:14 1994 Karl Berry - - * tkpathsea.make (makeargs): Change MAKEARGS to XMAKEARGS. - - * targets.make (makeargs): Don't bother to pass $(SHELL). - -Tue Nov 8 19:12:45 1994 Karl Berry - - * common.make (CFLAGS): Don't include -g, since now it's automatic. - -Sun Nov 6 15:53:36 1994 Karl Berry - - * paths.make (prefix, exec_prefix): These value are now @prefix@ - and @exec_prefix@. - - * common.make: Call @SET_MAKE@. - - * misc.make (distclean): Remove config.log and config.cache. - - * programs.make (LDFLAGS): Add @LDFLAGS@. - * common.make (CPPFLAGS): Add @CPPFLAGS@. - (CFLAGS): Add @CFLAGS@. - - * dist.make (top_files): Distribute install-sh, not install.sh, - for Autoconf 2.0. - -Sun Oct 30 16:15:34 1994 Karl Berry - - * config.make (ac_dir): This is now $(gnu)/share. - -Tue Oct 25 17:48:02 1994 Karl Berry - - * kpathsea 2.3/dviljk 2.3/dvipsk 5.58c/xdvik 18d. - -Sun Oct 23 17:33:56 1994 Karl Berry - - * targets.make (MakeTeXPK): Make sed substitutions global. - Reported by wfranzki@hlrserv.hlrz.kfa-juelich.de. - -Mon Oct 17 13:28:41 1994 Karl Berry - - * paths.make (mfpooldir): Doc fix. - -Fri Oct 14 10:31:35 1994 Karl Berry - - * kpathsea 2.2/dviljk 2.2/dvipsk 5.58b/xdvik 18c. - -Mon Oct 10 15:31:06 1994 Karl Berry - - * common.make (.SUFFIXES): Declare .c.o. - - * programs.make (LOADLIBES): Omit LEXLIB here. - -Sun Sep 25 15:54:36 1994 Karl Berry - - * rdepend.make: Doc fix. - - * library.make: New file. - - * makevars.make (makevars): Remove MAKEARGS from here. - - * programs.make (CCLD, link_command): New variables. - (LOADLIBES): Add proglib, LEXLIB. - -Mon Sep 12 11:06:14 1994 Karl Berry (karl@cs.umb.edu) - - * kpathsea 2.1/dviljk 2.1/dvipsk 5.58a/xdvik 18b. - -Sun Sep 11 14:44:21 1994 Karl Berry (karl@cs.umb.edu) - - * targets.make (install-MakeTeXPK): Install this if it didn't - exist, and mkdirchain $(scriptdir). - - * dist.make (top_files): Include aclocal.m4. - -Sat Sep 10 13:40:10 1994 Karl Berry (karl@cs.umb.edu) - - * texi.make (.texi.dvi): No -o option to texi2dvi. - -Thu Sep 8 14:31:59 1994 Karl Berry (karl@cs.umb.edu) - - * kpathsea 2.0, dviljk 2.0, dvipsk 5.55b, xdvik 18a. - -Tue Sep 6 11:39:06 1994 Karl Berry (karl@cs.umb.edu) - - * targets.make (MakeTeXPK): Use psheaderdir, not psconfigdir, and - depend on ourselves. - -Sat Sep 3 08:37:11 1994 Karl Berry (karl@cs.umb.edu) - - * paths.make (psconfigdir): Toss this. - - * misc.make (distclean): Add MakeTeXPK. - - * rdepend.make: Rename from depend.make. - -Fri Sep 2 13:29:14 1994 Karl Berry (karl@cs.umb.edu) - - * targets.make (makeargs, installargs): Declare these here. - - * makevars.make (makevars): No need for ??_fontdir or psmacrodir. - - * misc.make (TAGS): Omit -t, use -i, for Emacs 19.25's etags. - -Thu Sep 1 17:51:10 1994 Karl Berry (karl@cs.umb.edu) - - * dist.make (top_files): Add install.sh. - -Tue Aug 30 14:46:18 1994 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): Touch *.info* if they exist. - -Mon Aug 29 16:28:19 1994 Karl Berry (karl@cs.umb.edu) - - * paths.make (dcfontdir, sauterdir): Move these here, since - everyone has MakeTeXPK now. - -Sun Aug 28 17:09:09 1994 Karl Berry (karl@cs.umb.edu) - - * common.make (INSTALL_FONTS): New variable. - -Thu Aug 25 17:04:43 1994 Karl Berry (karl@cs.umb.edu) - - * kpathsea.make (kpathsea): Also depend on texmf.cnf.in. - - * paths.make (texmf_prefix): Rename to texmf; change uses. - -Sun Aug 21 11:03:48 1994 Karl Berry (karl@cs.umb.edu) - - * programs.make: New file for driver-specific stuff. - - * paths.make (fontnamedir): New definition. - (configdir, headerdir): Prepend with `ps'. - -Sat Aug 13 17:19:53 1994 Karl Berry (karl@cs.umb.edu) - - * misc.make (mostlyclean): Don't remove $(lib), since we've tossed - that. - -Sun Jul 31 14:18:28 1994 Karl Berry (karl@cs.umb.edu) - - * paths.make (DB_DIR, DB_NAME): Remove from here. - -Fri Jul 29 14:56:47 1994 Karl Berry (karl@cs.umb.edu) - - * depend.make (depend): Add dvilj4l.o to the special cases. - -Sun Jul 17 11:37:57 1994 Karl Berry (karl@cs.umb.edu) - - * paths.make (db_dir): Use $TEXMF. - -Mon Jun 27 17:32:47 1994 Karl Berry (karl@cs.umb.edu) - - * paths.make (db_dir): Use $TEXMFROOT. - -Tue Jun 14 12:41:33 1994 Karl Berry (karl@cs.umb.edu) - - * depend.make (depend): No need for depend_encies, I think. - -Mon May 30 13:50:34 1994 Karl Berry (karl@cs.umb.edu) - - * common.make (LDFLAGS): Don't include $(CFLAGS), for Linux's sake. - -Tue May 24 13:26:05 1994 Karl Berry (karl@cs.umb.edu) - - * config.make (stamp-auto, stamp-auto.in): New targets, to avoid - rerunning autoheader/autoconf even when they don't change the main - output files. - -Sun Apr 17 16:11:34 1994 Karl Berry (karl@ra.cs.umb.edu) - - * config.make (configure): Change ; to && in case the cd fails. - -Thu Mar 24 11:12:56 1994 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): Don't append kutil/ChangeLog to the source - ChangeLog. - - * misc.make (extraclean): Don't delete patch*, since that kills - patchlevel.h. - -Sat Mar 5 13:48:15 1994 Karl Berry (karl@cs.umb.edu) - - * common.make (LOADLIBES): Include XLOADLIBES. - -Fri Feb 25 14:21:17 1994 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): Append kutil/ChangeLog to the top level, not - the main program. - -Thu Feb 24 16:11:37 1994 Karl Berry (karl@cs.umb.edu) - - * misc.make (clean): Remove *.lj here. - - * paths.make ({bh,cg,mt}_fontdir, install_fonts): Add these. - -Mon Feb 21 14:04:26 1994 Karl Berry (karl@cs.umb.edu) - - * misc.make (distclean): remove pool files here. - -Wed Feb 16 15:18:13 1994 Karl Berry (karl@cs.umb.edu) - - * paths.make: Doc fix. - -Sun Jan 23 17:17:37 1994 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): Don't fake kpathsea/MACHINES any more, now we - have a real one. - -Fri Jan 14 14:53:12 1994 Karl Berry (karl@cs.umb.edu) - - * paths.make ({tex,mf}pooldir, fmtdir, basedir): Use - $(texmf_prefix)/ini for all these. - -Tue Dec 21 19:23:29 1993 Karl Berry (karl@cs.umb.edu) - - * common.make (LDFLAGS): Don't include $(x_lib_flags) here -- - winds up getting included twice for virmf - -Tue Dec 14 17:40:23 1993 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): Dist the top-level and kutil/ChangeLog. - - * paths.make (formatdir): Rename to fmtdir. - (texprefix): Rename to texmf_prefix, change uses accordingly. - -Fri Dec 10 17:50:39 1993 Karl Berry (karl@cs.umb.edu) - - * paths.make (dvipsprefix): Rename to dvips_prefix. - -Sun Nov 14 11:52:33 1993 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): Do not depend on depend.make and TAGS, since - web2c doesn't have them. - - * paths.make: Change defaults for new hierarchy. - -Thu Nov 11 11:07:22 1993 Karl Berry (karl@cs.umb.edu) - - * common.make (CPPFLAGS, LDFLAGS): xincludedir, xlibdir, wlibs - names have changed. - -Sun Nov 7 15:22:32 1993 Karl Berry (karl@cs.umb.edu) - - * paths.h: Give dire warning that editing Makefiles will not - rebuild paths.h. - -Fri Oct 29 14:01:57 1993 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): chmod a+rw. - -Thu Oct 28 17:48:01 1993 Karl Berry (karl@cs.umb.edu) - - * common.make (CPPFLAGS): Include -I. before -I$(srcdir). - -Fri Oct 22 13:08:19 1993 Karl Berry (karl@cs.umb.edu) - - * paths.make: Remove the paths, and add the dvips directories. - - * common.make (kpathsea_srcdir{,_parent}): Define. From - simon@lia.di.epfl.ch. - -Tue Oct 19 15:59:03 1993 Karl Berry (karl@cs.umb.edu) - - * config.make (stamp-c-auto): New target. - (c-auto.h): Depend on it. - -Sat Oct 9 07:04:45 1993 Karl Berry (karl@cs.umb.edu) - - * misc.make (mostlyclean): Remove programs. - -Sun Oct 3 12:44:04 1993 Karl Berry (karl@cs.umb.edu) - - * misc.make (extraclean): Also remove .blg and .bbl, .vf and .vpl. - (clean): Remove *.pool. - -Tue Sep 28 13:11:01 1993 Karl Berry (karl@cs.umb.edu) - - * common.make (CPPFLAGS): Add $(xincludedir) again; when did I - remove it? - -Fri Sep 24 07:53:45 1993 Karl Berry (karl@cs.umb.edu) - - * common.make (warn_more) [kpathsea]: Move to kpathsea's Makefile. - - * texi.make (.texi.dvi): New rule. - - * common.make (warn_more): Had -pointer-arith twice. - -Thu Sep 23 17:42:42 1993 Karl Berry (karl@cs.umb.edu) - - * common.make (autoconf): Toss aclocal.m4. - * dist.make (top_files): Ditto. - - * common.make (autoheader): New variable, split off from autoconf. - -Sun Aug 29 11:30:39 1993 Karl Berry (karl@cs.umb.edu) - - * dist.make (dist): Remove MACHINES in kpathsea. - - * common.make (CPPFLAGS): Remove the -I. Why did I put it there? - -Sat Aug 28 07:01:52 1993 Karl Berry (karl@cs.umb.edu) - - * unbackslsh.awk: New file. - - * common.make (CPPFLAGS): Add -I before $(xincludedir). diff -r e67089e1f2c8 -r 692ba9d441ec make/README --- a/make/README Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -make -- this subdirectory contains Makefile fragments. -configure substitutes them for ac_include lines in Makefile.in. -(This is an enhancement to standard Autoconf; see aclocal.m4.) diff -r e67089e1f2c8 -r 692ba9d441ec make/common.make --- a/make/common.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -# common.make -- used by all Makefiles. -SHELL = /bin/sh -@SET_MAKE@ -top_srcdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -CPICFLAG = @CPICFLAG@ - -SHLEXT = @SHLEXT@ - -SH_LD = @SH_LD@ -SH_LDFLAGS = @SH_LDFLAGS@ - -SHARED_LIBS = @SHARED_LIBS@ - -CC = @CC@ -# CFLAGS is used for both compilation and linking. -CFLAGS = @CFLAGS@ $(XCFLAGS) - -# Do not override CPPFLAGS; change XCPPFLAGS, CFLAGS, XCFLAGS, or DEFS instead. -CPPFLAGS = $(XCPPFLAGS) -I. -I$(srcdir) \ - -I$(kpathsea_parent) -I$(kpathsea_srcdir_parent) \ - $(prog_cflags) @CPPFLAGS@ $(DEFS) - -%.o : %.c - $(CC) $(CPPFLAGS) $(CFLAGS) -c $< - -pic/%.o : %.c - $(CC) $(CPPFLAGS) $(CPICFLAG) $(CFLAGS) -c $< -o $@ - -# Installation. -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# This is used to recursively copy a fonts/ or tex/ directory to -# $(fontdir) or $(texinputdir). -# The first arg is `.', and the second is the target directory. -CP_R = cp -r - -# This is so kpathsea will get remade automatically if you change -# something in it and recompile from the package directory. -kpathsea_parent = .. -kpathsea_dir = $(kpathsea_parent)/kpathsea -kpathsea_srcdir_parent = $(top_srcdir)/.. -kpathsea_srcdir = $(kpathsea_srcdir_parent)/kpathsea -kpathsea = $(kpathsea_dir)/libkpathsea.a - -##ifeq ($(CC), gcc) -##XDEFS = -Wall -Wpointer-arith $(warn_more) -##CFLAGS = -g $(XCFLAGS) -##endif -# End of common.make. diff -r e67089e1f2c8 -r 692ba9d441ec make/config.make --- a/make/config.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -# config.make -- autoconf rules to remake the Makefile, c-auto.h, etc. - -##ifdef HOSTNAME -##ac_dir = $(gnu)/share/autoconf -##autoconf = $(ac_dir)/acspecific.m4 $(ac_dir)/acgeneral.m4 $(ac_dir)/acsite.m4 -##autoheader = $(ac_dir)/acconfig.h -## -### I define $(autoconf) to acgeneral.m4 and the other Autoconf files, so -### configure automatically gets remade in the sources with a new Autoconf -### release. But it would be bad for installers with Autoconf to remake -### configure (not to mention require Autoconf), so I take out the variable -### $(autoconf) definition before release. -##configure_in = $(srcdir)/configure.in $(kpathsea_srcdir)/common.ac -##$(srcdir)/configure: $(configure_in) $(autoconf) -## cd $(srcdir) && autoconf -##endif - -config.status: $(srcdir)/configure - $(SHELL) $(srcdir)/configure --no-create --verbose - -Makefile: $(srcdir)/Makefile.in config.status $(top_srcdir)/../make/*.make - $(SHELL) config.status - -# This rule isn't used for web2c or the top-level Makefile, but it -# doesn't hurt. We don't depend on config.status because configure -# always rewrites config.status, even when it doesn't change. Thus it -# might be newer than c-auto.h when we don't need to remake the latter. -c-auto.h: $(srcdir)/stamp-auto -$(srcdir)/stamp-auto: $(srcdir)/c-auto.h.in - $(SHELL) config.status - touch $(srcdir)/stamp-auto - -##ifdef HOSTNAME -### autoheader reads acconfig.h (and c-auto.h.top) automatically. -##$(srcdir)/c-auto.h.in: $(srcdir)/stamp-auto.in -##$(srcdir)/stamp-auto.in: $(configure_in) $(autoheader) $(srcdir)/acconfig.h -## cd $(srcdir) && autoheader -## touch $(srcdir)/stamp-auto.in -##endif diff -r e67089e1f2c8 -r 692ba9d441ec make/dist.make --- a/make/dist.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -# dist.make -- how to make the distribution tar file. - -top_distdir = $(distname)-$(version) -top_files = ChangeLog FTP Makefile.in configure configure.in README \ - $(HOME)/gnu/gnuorg/COPYING* $(HOME)/gnu/gnuorg/install-sh \ - $(HOME)/bin/mkdirchain \ - $(plain)/texinfo.tex -distdir = $(top_distdir)/$(distname) -kpathsea_distdir = ../$(distname)/$(top_distdir)/kpathsea -ln_files = AUTHORS ChangeLog INSTALL NEWS README TAGS *.in *.h *.c \ - configure *.make .gdbinit stamp-auto - -dist: depend.make TAGS pre-dist-$(distname) - rm -rf $(top_distdir)* - mkdir -p $(distdir) - cd ..; make Makefile ./configure - cd ..; cp -p $(top_files) $(distname)/$(top_distdir) - ln -s $(gnu)/share/autoconf/acsite.m4 $(top_distdir)/aclocal.m4 - -ln $(ln_files) $(distdir) - ln $(program_files) $(distdir) - cd $(kpathsea_dir); $(MAKE) distdir=$(kpathsea_distdir) \ - ln_files='$(ln_files)' distdir - cp -rp ../make $(top_distdir) - ungnumake $(distdir)/Makefile.in $(kpathsea_distdir)/Makefile.in \ - $(top_distdir)/Makefile.in $(top_distdir)/make/*.make -# Remove the extra files our patterns got us. - cd $(top_distdir); rm -f */depend.make */c-auto.h */Makefile - $(MAKE) post-dist-$(distname) - cd $(distdir); add-version $(version) $(version_files) - cd $(distdir); test ! -r *.info || touch *.info* - chmod -R a+rwX $(top_distdir) - GZIP=-9 tar chzf $(top_distdir).tar.gz $(top_distdir) - rm -rf $(top_distdir) diff -r e67089e1f2c8 -r 692ba9d441ec make/library.make --- a/make/library.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -# library.make -- stuff only useful for libraries. -AR = ar -ARFLAGS = cq -RANLIB = @RANLIB@ -# End of library.make. diff -r e67089e1f2c8 -r 692ba9d441ec make/makevars.make --- a/make/makevars.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -# makevars.make -- the directory names we pass. -# It's important that none of these values contain [ @%], for the sake -# of kpathsea/texmf.sed. -makevars = prefix=$(prefix) exec_prefix=$(exec_prefix) \ - bindir=$(bindir) scriptdir=$(scriptdir) libdir=$(libdir) \ - datadir=$(datadir) infodir=$(infodir) includedir=$(includedir) \ - manext=$(manext) mandir=$(mandir) \ - texmf=$(texmf) web2cdir=$(web2cdir) \ - texinputdir=$(texinputdir) mfinputdir=$(mfinputdir) \ - fontdir=$(fontdir) \ - fmtdir=$(fmtdir) basedir=$(basedir) \ - texpooldir=$(texpooldir) mfpooldir=$(mfpooldir) \ - install_fonts=$(install_fonts) \ - dvipsdir=$(dvipsdir) psheaderdir=$(psheaderdir) \ - default_texsizes='$(default_texsizes)' -# End of makevars.make. diff -r e67089e1f2c8 -r 692ba9d441ec make/misc.make --- a/make/misc.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -# misc.make -- cleaning, etc. -TAGS: *.c *.h - if pwd | grep kpathsea >/dev/null; then \ - etags *.c *.h; else etags -i $(kpathsea_dir)/TAGS *.c *.h; fi - -mostlyclean:: - rm -f *.o $(program) $(programs) squeeze $(library).a pic/*.o - if $(SHARED_LIBS); then rm -f *.$(SHLEXT); fi - -clean:: mostlyclean - rm -f *.dvi *.lj - -distclean:: clean - rm -f Makefile MakeTeXPK *.pool - rm -f config.status config.log config.cache c-auto.h - rm -f stamp-picdir - -rmdir pic - -# Although we can remake configure and c-auto.h.in, we don't remove -# them, since many people may lack Autoconf. Use configclean for that. -maintainer-clean:: distclean - rm -f TAGS *.info* configure stamp-auto - -extraclean:: - rm -f *.aux *.bak *.bbl *.blg *.dvi *.log *.orig *.pl *.rej - rm -f *.i *.s *.tfm *.vf *.vpl *\#* *gf *pk *~ - rm -f CONTENTS.tex a.out core mfput.* texput.* - -configclean: - rm -f configure c-auto.h.in c-auto.h - -# Prevent GNU make 3.[59,63) from overflowing arg limit on system V. -.NOEXPORT: -# End of misc.make. diff -r e67089e1f2c8 -r 692ba9d441ec make/paths.make --- a/make/paths.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -# paths.make -- installation directories. -# -# The compile-time paths are defined in kpathsea/paths.h, which is built -# from kpathsea/paths.h.in and these definitions. See kpathsea/INSTALL -# for a description of how the various path-related files are used and -# created. - -# Do not change prefix and exec_prefix in Makefile.in! -# configure doesn't propagate the change to the other Makefiles. -# Instead, give the -prefix/-exec-prefix options to configure. -# (See kpathsea/INSTALL for more details.) This is arguably -# a bug, but it's not likely to change soon. -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -# Architecture-dependent executables. -bindir = $(exec_prefix)/bin - -# Architecture-independent executables. -scriptdir = $(bindir) - -# Architecture-dependent files, such as lib*.a files. -libdir = $(exec_prefix)/lib - -# Architecture-independent files. -datadir = $(prefix)/lib - -# Header files. -includedir = $(prefix)/include - -# GNU .info* files. -infodir = $(prefix)/info - -# Unix man pages. -manext = 1 -mandir = $(prefix)/man/man$(manext) - -# TeX & MF-specific directories. Not all of the following are relevant -# for all programs, but it seems cleaner to collect everything in one place. - -# The default paths are now in kpathsea/paths.h.in. Passing all the -# paths to sub-makes can make the arg list too long on system V. - -# The root of the tree. -texmf = $(datadir)/texmf - -# TeX and MF source files. -texinputdir = $(texmf)/tex -mfinputdir = $(texmf)/mf - -# MakeTeXPK.site, texmf.cnf, etc. -web2cdir = $(texmf)/web2c - -# The top-level font directory. -fontdir = $(texmf)/fonts - -# Memory dumps (.fmt and .base). -fmtdir = $(texmf)/ini -basedir = $(fmtdir) - -# Pool files. -texpooldir = $(texmf)/ini -mfpooldir = $(texpooldir) - -# If install_fonts=true, the PostScript/LaserJet TFM and VF files for -# the builtin fonts get installed in subdirectories of this directory, -# named for the typeface families of these directories. If you don't -# have the default directory setup, you will want to set -# install_fonts=false. Ditto for install_macros. -install_fonts = true -install_macros = true - -# Where the .map files from fontname are installed. -fontnamedir = $(texmf)/fontname - -# Where the dvips configuration files get installed, and where -# psfonts.map is. -dvipsdir = $(texmf)/dvips -psheaderdir = $(dvipsdir) - -# MakeTeXPK will go here to create dc*. -dcfontdir = $(fontdir)/public/dc - -# MakeTeXPK will go here if it exists to create nonstandard CM fonts, -# e.g., cmr11. See ftp.cs.umb.edu:pub/tex/sauter.tar.gz. The Sauter -# files must be in your regular MFINPUTS. -sauterdir = $(fontdir)/public/sauter - -# If a font can't be found close enough to its stated size, we look for -# each of these sizes in the order given. This colon-separated list is -# overridden by the envvar TEXSIZES, and by a program-specific variable -# (e.g., XDVISIZES), and perhaps by a config file (e.g., in dvips). -default_texsizes = 300:600 - -# End of paths.make. diff -r e67089e1f2c8 -r 692ba9d441ec make/programs.make --- a/make/programs.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -# programs.make -- used by Makefiles for executables only. -# Linking. Don't include $(CFLAGS), since ld -g under Linux forces -# static libraries, including libc.a and libX*.a -LDFLAGS = @LDFLAGS@ $(XLDFLAGS) -LIBS = @LIBS@ -# proglib is for web2c; -# XLOADLIBES is for the installer. -LOADLIBES= $(proglib) $(kpathsea) $(LIBS) -lm $(XLOADLIBES) - -# Why separate CCLD from CC? No particular reason. -CCLD = $(CC) -link_command = $(CCLD) -o $@ $(LDFLAGS) -# End of programs.make. diff -r e67089e1f2c8 -r 692ba9d441ec make/rdepend.make --- a/make/rdepend.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -# rdepend.make -- rules for remaking the dependencies. -# Have to use -M, not -MM, since we use instead of -# "kpathsea/..." in the sources. But that means we have to remove the -# directory prefixes and all the system include files. -# And is generated, not part of the distribution. -depend depend.make:: c-auto.h $(top_srcdir)/../make/rdepend.make - $(CC) -M $(CPPFLAGS) *.c \ - | sed -e 's,\.\./kpathsea/,$$(kpathsea_srcdir)/,g' \ - -e 's,$$(kpathsea_srcdir)/paths.h,paths.h,g' \ - -e 's,/usr[^ ]* ,,g' \ - -e 's,/usr[^ ]*$$,,g' \ - -e 's,dvi2xx.o,dvilj.o dvilj2p.o dvilj4.o dvilj4l.o,' \ - | grep -v '^ *\\$$' \ - >depend.make -# End of rdepend.make. diff -r e67089e1f2c8 -r 692ba9d441ec make/texi.make --- a/make/texi.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -# texi.make -- making .dvi and .info from .texi. - -MAKEINFO = makeinfo -MAKEINFO_FLAGS = --paragraph-indent=2 -I$(srcdir) -TEXI2DVI = texi2dvi - -.SUFFIXES: .info .dvi .texi -.texi.info: - -$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@ -.texi.dvi: - -$(TEXI2DVI) $(TEXI2DVI_FLAGS) $< diff -r e67089e1f2c8 -r 692ba9d441ec make/tkpathsea.make --- a/make/tkpathsea.make Thu May 22 21:38:48 1997 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -# tkpathsea.make -- remaking kpathsea. - -makeargs = $(MFLAGS) CC='$(CC)' CFLAGS='$(CFLAGS)' $(XMAKEARGS) - -$(kpathsea): $(kpathsea_srcdir)/*.c $(kpathsea_srcdir)/*.h \ - $(kpathsea_srcdir)/texmf.cnf.in $(top_srcdir)/../make/paths.make - cd $(kpathsea_dir); $(MAKE) $(makeargs) - -# End of tkpathsea.make.