This file contains diffs from version 3.71 of GNU Make to version 3.72.1. Changes in files that are generated by etags, TeX, or Makeinfo have been omitted. diff -ruN make-3.71/ChangeLog make-3.72.1/ChangeLog --- make-3.71/ChangeLog Sat May 21 16:30:42 1994 +++ make-3.72.1/ChangeLog Sun Nov 6 18:34:54 1994 @@ -1,3 +1,266 @@ +Sun Nov 6 18:34:01 1994 Roland McGrath + + * Version 3.72.1. + + * main.c (define_makeflags): Terminate properly when FLAGSTRING is + empty. + +Fri Nov 4 16:02:51 1994 Roland McGrath + + * Version 3.72. + +Tue Nov 1 01:18:10 1994 Roland McGrath + + * Version 3.71.5. + + * job.c (start_job_command): When ARGV is nil, only set + update_state and call notice_finished_file if job_next_command + returns zero. + + * job.c (start_job_command): Call notice_finished_file for empty + command line. + +Thu Oct 27 02:02:45 1994 Roland McGrath + + * file.c (snap_deps): Set COMMANDS_SILENT for .SILENT, not + COMMANDS_NOERROR. + +Wed Oct 26 02:14:10 1994 Roland McGrath + + * Version 3.71.4. + +Tue Oct 25 22:49:24 1994 Roland McGrath + + * file.c (snap_deps): Set command_flags bits in all :: entries. + +Mon Oct 24 18:47:50 1994 Roland McGrath + + * make.h (posix_pedantic): Declare it. + * main.c (main): Move checks .IGNORE, .SILENT, .POSIX to + snap_deps. + * file.c (snap_deps): Check .IGNORE, .SILENT, .POSIX here instead + of in main. If .IGNORE has deps, OR COMMANDS_NOERROR into their + command_flags and don't set -i. Likewise .SILENT. + * job.c (start_job_command): In FLAGS initialization, OR in + CHILD->file->command_flags. + * file.h (struct file): New member `command_flags'. + +Sun Oct 16 01:01:51 1994 Roland McGrath + + * main.c (switches): Bump flag values for --no-print-directory and + --warn-undefined-variables, so neither is 1 (which indicates a + nonoption argument). + +Sat Oct 15 23:39:48 1994 Roland McGrath + + * main.c (main): Add missing code in .IGNORE test. + +Mon Oct 10 04:09:03 1994 Roland McGrath + + * variable.c (define_automatic_variables): Define +D and +F. + +Sat Oct 1 04:07:48 1994 Roland McGrath + + * main.c (main): Define hidden automatic variable with command + vars, and MAKEOVERRIDES to a reference to that. + (define_makeflags): If posix_pedantic, write a reference to that + instead. + +Thu Sep 29 00:14:26 1994 Roland McGrath + + * main.c (posix_pedantic): New variable. + (main): Set posix_pedantic if .POSIX is a target. + Fix .IGNORE and .SILENT checks to require is_target. + + * commands.c (set_file_variables): Define new automatic variable + $+, like $^ but before calling uniquize_deps. + + * job.c (reap_children): Call delete_child_targets for non-signal + error if .DELETE_ON_ERROR is a target. + +Tue Sep 27 01:57:14 1994 Roland McGrath + + * Version 3.71.3. + +Mon Sep 26 18:16:55 1994 Roland McGrath + + * job.c (reap_children): Don't change C->file->command_state when + dying. Test it only after calling start_job_command for a new + command line. When no more cmds, just set C->file->update_status. + (start_job_command): When the last line is empty or under -n, set + C->file->update_status. + (start_waiting_job): Grok cs_not_started after start_job_command + as success. + (new_job): Set C->file->update_status when there are no cmds. + (job_next_command): When out of lines, don't set + CHILD->file->update_status or CHILD->file->command_state. + + * main.c (quote_as_word): Renamed from shell_quote. Take new arg; + if nonzero, also double $s. + (main): Define MAKEOVERRIDES from command_variables here. + (define_makeflags): Don't use command_variables here; instead write a + reference $(MAKEOVERRIDES) in MAKEFLAGS. Make vars recursive. + + * dir.c [__MSDOS__]: Fixed typo. + + * vpath.c (selective_vpath_search): Reset EXISTS when stat fails. + +Sat Sep 10 03:01:35 1994 Roland McGrath + + * remake.c: Include and use assert instead of printfs + and abort. + + * main.c (decode_switches): Loop until optind hits ARGC, not just + until getopt_long returns EOF. Initialize C to zero before loop; + in loop if C is EOF, set optarg from ARGV[optind++], else call + getopt_long. + (decode_env_switches): Use variable_expand instead of + allocated_variable_expand. Allocate a fresh buffer to copy split + words into; scan characters by hand to break words and + debackslashify. + (shell_quote): New function. + (define_makeflags): Allocate doubled space for switch args, and command + variable names and values; use shell_quote to quote those things. + +Fri Sep 9 01:37:47 1994 Roland McGrath + + * Version 3.71.2. + + * acconfig.h: Add HAVE_SYS_SIGLIST and HAVE__SYS_SIGLIST. + + * main.c (decode_switches): The non-option return from getopt is + 1, not 0. + (command_variables): New type and variable. + (decode_switches, decode_env_switches): After making a variable + definition, record the struct variable pointer in the + command_variables chain. + (define_makeflags): If ALL, write variable definitions for + command_variables. + + * main.c (other_args): Variable removed. + (goals, lastgoal): New static variables (moved from auto in main). + (main): Don't process OTHER_ARGS at all. + Don't set variable MAKEOVERRIDES at all; define MAKE to just + $(MAKE_COMMAND). + (init_switches): Prepend a - {return in order} instead of a + + {require order}. + (decode_switches): Don't set OTHER_ARGS at all. + Grok '\0' return from getopt_long as non-option argument; try + variable definition and (if !ENV) enter goal targets here. + (decode_env_switches): Use allocated_variable_expand to store value. + Use find_next_token to simplify word-splitting loop. Don't + prepend a dash to uninterpreted value. Instead, if split into + only one word, try variable definition and failing that prepend a + dash to the word and pass it to decode_switches as a single arg. + +Wed Sep 7 03:02:46 1994 Roland McGrath + + * remake.c (notice_finished_file): Only recheck modtimes if + FILE->command_state was cs_running on entry (meaning the commands + actually just ran). + (update_file_1): Whenever we set FILE->update_status, call + notice_finished_file instead of just set_command_state. + * job.c (start_job_command): Whenever we set + CHILD->file->update_status, call notice_finished_file instead of + just set_command_state. + +Tue Sep 6 19:13:54 1994 Roland McGrath + + * default.c: Add missing ". + + * job.c: Changed all assignments of command_state members to calls + to set_command_state. + * remake.c: Likewise. + * file.c (set_command_state): New function. + * file.h: Declare set_command_state. + + * main.c (init_switches): Put a + first in options. + +Mon Jul 25 18:07:46 1994 Roland McGrath + + Merge MSDOS/GO32 port from DJ Delorie . + * vpath.c: Changed all uses of ':' to PATH_SEPARATOR_CHAR. + * main.c (directory_before_chdir): New variable, moved out of main + (was local). + (main) [__MSDOS__]: Look for \ or : to delimit last component of + PROGRAM. Don't frob ARGV[0] before setting MAKE_COMMAND variable. + (die): Change back to `directory_before_chdir' before dying. + * make.h (PATH_SEPARATOR_CHAR): New macro; differing defns for + [__MSDOS__] and not. + * job.c [__MSDOS__]: Include . + [__MSDOS__] (dos_pid, dos_status, dos_bname, dos_bename, + dos_batch_file): New variables. + (reap_children) [__MSDOS__]: Don't call wait; just examine those vars. + (unblock_sigs) [__MSDOS__]: Do nothing. + (start_job_command) [__MSDOS__]: Use spawnvpe instead of vfork & exec. + (load_too_high) [__MSDOS__]: Always return true. + (search_path) [__MSDOS__]: Check for : or / in FILE to punt. + Use PATH_SEPARATOR_CHAR instead of ':'. + (construct_command_argv_internal) [__MSDOS__]: Wholly different + values for sh_chars and sh_cmds. Wholly new code to handle shell + scripts. + * function.c (expand_function: `shell') [__MSDOS__]: Wholly new + implementation. + * dir.c [__MSDOS__] (dosify): New function. + (dir_contents_file_exists_p) [__MSDOS__]: Call it on FILENAME and + process the result instead of FILENAME itself. + (file_impossible_p) [__MSDOS__]: Likewise. + * default.c [__MSDOS__]: Define GCC_IS_NATIVE. + (default_suffix_rules) [__MSDOS__]: Use `y_tab.c' instead of `y.tab.c'. + (default_variables) [GCC_IS_NATIVE]: Set CC and CXX to `gcc', YACC to + `bison -y', and LEX to `flex'. + * configure.bat, configh.dos: New files. + * commands.c (fatal_error_signal) [__MSDOS__]: Just remove + intermediates and exit. + + * commands.c (set_file_variables): Add parens in length + computation in .SUFFIXES dep loop to quiet compiler warning. From + Jim Meyering. + + * read.c (read_makefile): Free FILENAME if we allocated it. From + Jim Meyering. + +Mon Jul 4 17:47:08 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc.c (safe_stat): New function, EINTR-safe wrapper around stat. + * vpath.c (selective_vpath_search): Use safe_stat in place of stat. + * read.c (construct_include_path): Use safe_stat in place of stat. + * job.c (search_path): Use safe_stat in place of stat. + * dir.c (find_directory): Use safe_stat in place of stat. + * commands.c (delete_target): Use safe_stat in place of stat. + * arscan.c (ar_member_touch) [EINTR]: Do EINTR looping around fstat. + * remake.c (name_mtime): Use safe_stat in place of stat. + (touch_file) [EINTR]: Do EINTR looping around fstat. + +Fri Jun 24 05:40:24 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Check for a shell command first, and + then strip leading tabs before further checking if it's not a + shell command line. + + * make.h [__arm]: Undefine POSIX. + [!__GNU_LIBRARY__ && !POSIX && !_POSIX_VERSION]: Don't declare system + functions that return int. + + * job.c (construct_command_argv_internal): After swallowing a + backslash-newline combination, if INSTRING is set goto string_char + (new label) for normal INSTRING handling code. + +Sat Jun 4 01:11:20 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * configure.in: Don't check for sys_siglist and _sys_siglist with + AC_HAVE_FUNCS. Instead use two AC_COMPILE_CHECKs. + +Mon May 23 18:20:38 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.71.1 released. + + * make.h [!__GNU_LIBRARY__ && !POSIX]: Also test #ifndef + _POSIX_VERSION for these declarations. + + * misc.c [GETLOADAVG_PRIVILEGED] [POSIX]: Remove bogus #ifndefs + around #undefs of HAVE_SETREUID and HAVE_SETREGID. + Sat May 21 16:26:38 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) * Version 3.71 released. diff -ruN make-3.71/INSTALL make-3.72.1/INSTALL --- make-3.71/INSTALL Mon Apr 18 22:19:55 1994 +++ make-3.72.1/INSTALL Tue Oct 18 16:30:28 1994 @@ -1,63 +1,151 @@ - This is a generic INSTALL file for utilities distributions. -If this package does not come with, e.g., installable documentation or -data files, please ignore the references to them below. +Basic Installation +================== + These are generic installation instructions. + The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation, and -creates the Makefile(s) (one in each subdirectory of the source -directory). In some packages it creates a C header file containing -system-dependent definitions. It also creates a file `config.status' -that you can run in the future to recreate the current configuration. - -To compile this package: - -1. Configure the package for your system. - - Normally, you just `cd' to the directory containing the package's -source code and type `./configure'. 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 it is running, it -prints some messages that tell what it is doing. If you don't want to -see any messages, run `configure' with its standard output redirected -to `/dev/null'; for example, `./configure >/dev/null'. - - To compile the package in a different directory from the one -containing the source code, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. If -for some reason `configure' is not in the source code directory that -you are configuring, then it will report that it can't find the source -code. In that case, run `configure' with the option `--srcdir=DIR', -where DIR is the directory that contains the source code. +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'. Alternately, you can do so by consistently -giving a value for the `prefix' variable when you run `make', e.g., - make prefix=/usr/gnu - make prefix=/usr/gnu install +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' or set the `make' -variable `exec_prefix' to PATH, the package will use PATH as the prefix -for installing programs and libraries. Data files and documentation -will still use the regular prefix. Normally, all files are installed -using the same prefix. - - Some packages pay attention to `--with-PACKAGE' options to -`configure', where PACKAGE is something like `gnu-as' or `x' (for the -X Window System). They may also pay attention to `--enable-FEATURE' -options, where FEATURE indicates an optional part of the package. The -README should mention any `--with-' and `--enable-' options that the +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. - `configure' also recognizes the following options: + 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. @@ -64,83 +152,16 @@ `--quiet' `--silent' +`-q' Do not print messages saying which checks are being made. -`--verbose' - Print the results of the checks. +`--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. -`--x-includes=DIR' - X include files are in DIR. - -`--x-libraries=DIR' - X library files are in DIR. - - `configure' also accepts and ignores some other options. - - On systems that require unusual options for compilation or linking -that the package's `configure' script does not know about, you can give -`configure' initial values for variables by setting them in the -environment. In Bourne-compatible shells, you can do that on the -command line like this: - - CC='gcc -traditional' LIBS=-lposix ./configure - -On systems that have the `env' program, you can do it like this: - - env CC='gcc -traditional' LIBS=-lposix ./configure - - Here are the `make' variables that you might want to override with -environment variables when running `configure'. +`configure' also accepts some other, not widely useful, options. - For these variables, any value given in the environment overrides the -value that `configure' would choose: - - - Variable: CC - C compiler program. The default is `cc'. - - - Variable: INSTALL - Program to use to install files. The default is `install' if you - have it, `cp' otherwise. - - For these variables, any value given in the environment is added to -the value that `configure' chooses: - - - Variable: DEFS - Configuration options, in the form `-Dfoo -Dbar...'. Do not use - this variable in packages that create a configuration header file. - - - Variable: LIBS - Libraries to link with, in the form `-lfoo -lbar...'. - - If you need to do unusual things to compile the package, we encourage -you to figure out how `configure' could check whether to do them, and -mail diffs or instructions to the address given in the README so we -can include them in the next release. - -2. Type `make' to compile the package. If you want, you can override -the `make' variables CFLAGS and LDFLAGS like this: - - make CFLAGS=-O2 LDFLAGS=-s - -3. If the package comes with self-tests and you want to run them, -type `make check'. If you're not sure whether there are any, try it; -if `make' responds with something like - make: *** No way to make target `check'. Stop. -then the package does not come with self-tests. - -4. Type `make install' to install programs, 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 -Makefile(s), the header file containing system-dependent definitions -(if the package uses one), and `config.status' (all the files that -`configure' created), type `make distclean'. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need it if you want to regenerate -`configure' using a newer version of `autoconf'. diff -ruN make-3.71/Makefile.in make-3.72.1/Makefile.in --- make-3.71/Makefile.in Sat May 21 16:48:45 1994 +++ make-3.72.1/Makefile.in Sun Nov 6 18:35:49 1994 @@ -288,7 +288,7 @@ # Automatically generated dependencies. commands.o : commands.c make.h dep.h commands.h file.h variable.h job.h job.o : job.c make.h commands.h job.h file.h variable.h -dir.o : dir.c make.h config.h +dir.o : dir.c make.h file.o : file.c make.h commands.h dep.h file.h variable.h misc.o : misc.c make.h dep.h main.o : main.c make.h commands.h dep.h file.h variable.h job.h getopt.h @@ -304,8 +304,8 @@ version.o : version.c ar.o : ar.c make.h file.h dep.h arscan.o : arscan.c make.h -signame.o : signame.c config.h signame.h +signame.o : signame.c signame.h remote-stub.o : remote-stub.c make.h commands.h -getopt.o : getopt.c config.h getopt.h -getopt1.o : getopt1.c config.h getopt.h -getloadavg.o : getloadavg.c config.h +getopt.o : getopt.c getopt.h +getopt1.o : getopt1.c getopt.h +getloadavg.o : getloadavg.c diff -ruN make-3.71/NEWS make-3.72.1/NEWS --- make-3.71/NEWS Wed Apr 20 22:35:23 1994 +++ make-3.72.1/NEWS Wed Oct 26 02:15:40 1994 @@ -1,9 +1,42 @@ -GNU make NEWS -- history of user-visible changes. 20 April 1994 +GNU make NEWS -- history of user-visible changes. 24 October 1994 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU make bug reports to bug-gnu-utils@prep.ai.mit.edu. + +Version 3.72 + +* DJ Delorie has ported Make to MS-DOS using the GO32 extender. + He is maintaining the DOS port, not the GNU Make maintainer; + please direct bugs and questions for DOS to . + MS-DOS binaries are available for FTP from oak.oakland.edu:pub/msdos/djgpp. + +* The `MAKEFLAGS' variable (in the environment or in a makefile) can now + contain variable definitions itself; these are treated just like + command-line variable definitions. Make will automatically insert any + variable definitions from the environment value of `MAKEFLAGS' or from + the command line, into the `MAKEFLAGS' value exported to children. The + `MAKEOVERRIDES' variable previously included in the value of `$(MAKE)' + for sub-makes is now included in `MAKEFLAGS' instead. As before, you can + reset `MAKEOVERRIDES' in your makefile to avoid putting all the variables + in the environment when its size is limited. + +* If `.DELETE_ON_ERROR' appears as a target, Make will delete the target of + a rule if it has changed when its commands exit with a nonzero status, + just as when the commands get a signal. + +* The automatic variable `$+' is new. It lists all the dependencies like + `$^', but preserves duplicates listed in the makefile. This is useful + for linking rules, where library files sometimes need to be listed twice + in the link order. + +* You can now specify the `.IGNORE' and `.SILENT' special targets with + dependencies to limit their effects to those files. If a file appears as + a dependency of `.IGNORE', then errors will be ignored while running the + commands to update that file. Likewise if a file appears as a dependency + of `.SILENT', then the commands to update that file will not be printed + before they are run. (This change was made to conform to POSIX.2.) Version 3.71 diff -ruN make-3.71/README make-3.72.1/README --- make-3.71/README Sat May 21 16:48:32 1994 +++ make-3.72.1/README Sun Nov 6 18:35:42 1994 @@ -1,4 +1,4 @@ -This directory contains the 3.71 test release of GNU Make. +This directory contains the 3.72.1 test release of GNU Make. All bugs reported for previous test releases have been fixed. Some bugs surely remain. diff -ruN make-3.71/acconfig.h make-3.72.1/acconfig.h --- make-3.71/acconfig.h Tue Dec 14 16:50:51 1993 +++ make-3.72.1/acconfig.h Fri Sep 9 03:16:54 1994 @@ -3,3 +3,9 @@ /* Define this if the SCCS `get' command understands the `-G' option. */ #undef SCCS_GET_MINUS_G + +/* Define this if the C library defines the variable `sys_siglist'. */ +#undef HAVE_SYS_SIGLIST + +/* Define this if the C library defines the variable `_sys_siglist'. */ +#undef HAVE__SYS_SIGLIST diff -ruN make-3.71/alloca.c make-3.72.1/alloca.c --- make-3.71/alloca.c Mon May 9 22:08:48 1994 +++ make-3.72.1/alloca.c Mon Sep 26 17:52:28 1994 @@ -22,11 +22,11 @@ your main control loop, etc. to force garbage collection. */ #ifdef HAVE_CONFIG_H -#if defined (emacs) || defined (CONFIG_BROKETS) #include -#else -#include "config.h" #endif + +#ifdef emacs +#include "blockinput.h" #endif /* If compiling with GCC 2, this file's not needed. */ @@ -176,6 +176,10 @@ { register header *hp; /* Traverses linked list. */ +#ifdef emacs + BLOCK_INPUT; +#endif + for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) @@ -190,6 +194,10 @@ break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ + +#ifdef emacs + UNBLOCK_INPUT; +#endif } if (size == 0) diff -ruN make-3.71/arscan.c make-3.72.1/arscan.c --- make-3.71/arscan.c Wed Feb 16 16:32:47 1994 +++ make-3.72.1/arscan.c Mon Jul 4 17:51:49 1994 @@ -495,7 +495,11 @@ if (AR_HDR_SIZE != write (fd, (char *) &ar_hdr, AR_HDR_SIZE)) goto lose; /* The file's mtime is the time we we want. */ +#ifdef EINTR + while (fstat (fd, &statbuf) < 0 && errno == EINTR); +#else fstat (fd, &statbuf); +#endif #if defined(ARFMAG) || defined(AIAMAG) /* Advance member's time to that time */ for (i = 0; i < sizeof ar_hdr.ar_date; i++) diff -ruN make-3.71/commands.c make-3.72.1/commands.c --- make-3.71/commands.c Thu Apr 21 18:12:57 1994 +++ make-3.72.1/commands.c Thu Sep 29 04:23:25 1994 @@ -87,7 +87,7 @@ for (d = enter_file (".SUFFIXES")->deps; d != 0; d = d->next) { unsigned int slen = strlen (dep_name (d)); - if (len > slen && !strncmp (dep_name (d), name + len - slen, slen)) + if (len > slen && !strncmp (dep_name (d), name + (len - slen), slen)) { file->stem = savestring (name, len - slen); break; @@ -116,17 +116,11 @@ DEFINE_VARIABLE ("@", 1, at); DEFINE_VARIABLE ("%", 1, percent); - /* Make sure that no dependencies are repeated. This does not - really matter for the purpose of updating targets, but it - might make some names be listed twice for $^ and $?. */ + /* Compute the values for $^, $+, and $?. */ - uniquize_deps (file->deps); - - /* Compute the values for $^ and $?. */ - { - register unsigned int caret_len, qmark_len; - char *caret_value; + register unsigned int qmark_len, plus_len; + char *caret_value, *plus_value; register char *cp; char *qmark_value; register char *qp; @@ -133,17 +127,53 @@ register struct dep *d; unsigned int len; - caret_len = qmark_len = 0; + /* Compute first the value for $+, which is supposed to contain + duplicate dependencies as they were listed in the makefile. */ + + plus_len = 0; + for (d = file->deps; d != 0; d = d->next) + plus_len += strlen (dep_name (d)) + 1; + + len = plus_len == 0 ? 1 : plus_len; + cp = plus_value = (char *) alloca (len); + + qmark_len = plus_len; /* Will be this or less. */ for (d = file->deps; d != 0; d = d->next) { - register unsigned int i = strlen (dep_name (d)) + 1; - caret_len += i; - if (d->changed) - qmark_len += i; + char *c = dep_name (d); + +#ifndef NO_ARCHIVES + if (ar_name (c)) + { + c = index (c, '(') + 1; + len = strlen (c) - 1; + } + else +#endif + len = strlen (c); + + bcopy (c, cp, len); + cp += len; + *cp++ = ' '; + + if (! d->changed) + qmark_len -= len + 1; /* Don't space in $? for this one. */ } - len = caret_len == 0 ? 1 : caret_len; - cp = caret_value = (char *) alloca (len); + /* Kill the last space and define the variable. */ + + cp[cp > plus_value ? -1 : 0] = '\0'; + DEFINE_VARIABLE ("+", 1, plus_value); + + /* Make sure that no dependencies are repeated. This does not + really matter for the purpose of updating targets, but it + might make some names be listed twice for $^ and $?. */ + + uniquize_deps (file->deps); + + /* Compute the values for $^ and $?. */ + + cp = caret_value = plus_value; /* Reuse the buffer; it's big enough. */ len = qmark_len == 0 ? 1 : qmark_len; qp = qmark_value = (char *) alloca (len); @@ -329,6 +359,10 @@ fatal_error_signal (sig) int sig; { +#ifdef __MSDOS__ + remove_intermediates (1); + exit (1); +#else /* Not MSDOS. */ handling_fatal_signal = 1; /* Set the handling for this signal to the default. @@ -385,6 +419,7 @@ will be unblocked when we return and arrive then to kill us. */ if (kill (getpid (), sig) < 0) pfatal_with_name ("kill"); +#endif /* MSDOS. */ } /* Delete FILE unless it's precious or not actually a file (phony), @@ -416,7 +451,7 @@ } #endif - if (stat (file->name, &st) == 0 + if (safe_stat (file->name, &st) == 0 && S_ISREG (st.st_mode) && (time_t) st.st_mtime != file->last_mtime) { diff -ruN make-3.71/config.h.in make-3.72.1/config.h.in --- make-3.71/config.h.in Wed May 18 20:23:35 1994 +++ make-3.72.1/config.h.in Fri Sep 9 03:18:33 1994 @@ -130,7 +130,10 @@ /* Define this if the SCCS `get' command understands the `-G' option. */ #undef SCCS_GET_MINUS_G -/* Define if you have _sys_siglist. */ +/* Define this if the C library defines the variable `sys_siglist'. */ +#undef HAVE_SYS_SIGLIST + +/* Define this if the C library defines the variable `_sys_siglist'. */ #undef HAVE__SYS_SIGLIST /* Define if you have dup2. */ @@ -168,9 +171,6 @@ /* Define if you have strerror. */ #undef HAVE_STRERROR - -/* Define if you have sys_siglist. */ -#undef HAVE_SYS_SIGLIST /* Define if you have wait3. */ #undef HAVE_WAIT3 diff -ruN make-3.71/configure make-3.72.1/configure --- make-3.71/configure Sat May 21 16:37:43 1994 +++ make-3.72.1/configure Fri Sep 9 03:10:11 1994 @@ -1137,7 +1137,7 @@ -for ac_func in getdtablesize sys_siglist _sys_siglist psignal \ +for ac_func in getdtablesize psignal \ dup2 getcwd sigsetmask getgroups setlinebuf \ seteuid setegid setreuid setregid strerror do @@ -1176,6 +1176,56 @@ fi rm -f conftest* done + +test -n "$silent" || echo "checking for sys_siglist" +cat > conftest.${ac_ext} <> confdefs.h +DEFS="$DEFS -DHAVE_SYS_SIGLIST=1" +ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_SYS_SIGLIST\${ac_dB}HAVE_SYS_SIGLIST\${ac_dC}1\${ac_dD} +\${ac_uA}HAVE_SYS_SIGLIST\${ac_uB}HAVE_SYS_SIGLIST\${ac_uC}1\${ac_uD} +\${ac_eA}HAVE_SYS_SIGLIST\${ac_eB}HAVE_SYS_SIGLIST\${ac_eC}1\${ac_eD} +" +} + + +fi +rm -f conftest* + +test -n "$silent" || echo "checking for _sys_siglist" +cat > conftest.${ac_ext} <> confdefs.h +DEFS="$DEFS -DHAVE__SYS_SIGLIST=1" +ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE__SYS_SIGLIST\${ac_dB}HAVE__SYS_SIGLIST\${ac_dC}1\${ac_dD} +\${ac_uA}HAVE__SYS_SIGLIST\${ac_uB}HAVE__SYS_SIGLIST\${ac_uC}1\${ac_uD} +\${ac_eA}HAVE__SYS_SIGLIST\${ac_eB}HAVE__SYS_SIGLIST\${ac_eC}1\${ac_eD} +" +} + + +fi +rm -f conftest* # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! diff -ruN make-3.71/configure.in make-3.72.1/configure.in --- make-3.71/configure.in Mon May 16 23:00:07 1994 +++ make-3.72.1/configure.in Sat Jun 4 01:11:12 1994 @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -AC_REVISION([$Id: configure.in,v 1.36 1994/05/17 02:59:57 roland Exp $]) +AC_REVISION([$Id: configure.in,v 1.37 1994/06/04 05:11:12 roland Beta $]) AC_INIT(vpath.c) dnl A distinctive file to look for in srcdir. AC_CONFIG_HEADER(config.h) @@ -29,9 +29,15 @@ AC_SUBST(LIBOBJS) -AC_HAVE_FUNCS(getdtablesize sys_siglist _sys_siglist psignal \ +AC_HAVE_FUNCS(getdtablesize psignal \ dup2 getcwd sigsetmask getgroups setlinebuf \ seteuid setegid setreuid setregid strerror) +AC_COMPILE_CHECK(sys_siglist, , + [extern char *sys_siglist[]; puts(*sys_siglist);], + AC_DEFINE(HAVE_SYS_SIGLIST)) +AC_COMPILE_CHECK(_sys_siglist, , + [extern char *_sys_siglist[]; puts(*_sys_siglist);], + AC_DEFINE(HAVE__SYS_SIGLIST)) AC_ALLOCA AC_VFORK AC_SETVBUF_REVERSED diff -ruN make-3.71/default.c make-3.72.1/default.c --- make-3.71/default.c Mon May 16 22:58:34 1994 +++ make-3.72.1/default.c Tue Sep 6 20:15:23 1994 @@ -23,6 +23,12 @@ #include "commands.h" #include "variable.h" +/* Define GCC_IS_NATIVE if gcc is the native development environment on + your system (gcc/bison/flex vs cc/yacc/lex). */ +#ifdef __MSDOS__ +#define GCC_IS_NATIVE +#endif + /* This is the default list of suffixes for suffix rules. `.s' must come last, so that a `.o' file will be made from @@ -133,12 +139,20 @@ ".c.ln", "$(LINT.c) -C$* $<", ".y.ln", +#ifndef __MSDOS__ "$(YACC.y) $< \n $(LINT.c) -C$* y.tab.c \n $(RM) y.tab.c", +#else + "$(YACC.y) $< \n $(LINT.c) -C$* y_tab.c \n $(RM) y_tab.c", +#endif ".l.ln", "@$(RM) $*.c\n $(LEX.l) $< > $*.c\n$(LINT.c) -i $*.c -o $@\n $(RM) $*.c", ".y.c", +#ifndef __MSDOS__ "$(YACC.y) $< \n mv -f y.tab.c $@", +#else + "$(YACC.y) $< \n mv -f y_tab.c $@", +#endif ".l.c", "@$(RM) $@ \n $(LEX.l) $< > $@", @@ -203,8 +217,13 @@ "ARFLAGS", "rfv", #endif "AS", "as", +#ifdef GCC_IS_NATIVE + "CC", "gcc", + "CXX", "gcc", +#else "CC", "cc", "CXX", "g++", +#endif /* This expands to $(CO) $(COFLAGS) $< $@ if $@ does not exist, and to the empty string if $@ does exist. */ @@ -237,7 +256,11 @@ #endif /* Cray. */ "GET", SCCS_GET, "LD", "ld", +#ifdef GCC_IS_NATIVE + "LEX", "flex", +#else "LEX", "lex", +#endif "LINT", "lint", "M2C", "m2c", #ifdef pyr @@ -250,7 +273,11 @@ "PC", "pc", #endif /* CRAY. */ #endif /* pyr. */ +#ifdef GCC_IS_NATIVE + "YACC", "bison -y", +#else "YACC", "yacc", /* Or "bison -y" */ +#endif "MAKEINFO", "makeinfo", "TEX", "tex", "TEXI2DVI", "texi2dvi", diff -ruN make-3.71/dir.c make-3.72.1/dir.c --- make-3.71/dir.c Wed Jun 2 16:56:37 1993 +++ make-3.72.1/dir.c Mon Sep 26 18:20:56 1994 @@ -1,5 +1,5 @@ /* Directory hashing for GNU Make. -Copyright (C) 1988, 1989, 1991, 1992, 1993 Free Software Foundation, Inc. +Copyright (C) 1988, 1989, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. This file is part of GNU Make. GNU Make is free software; you can redistribute it and/or modify @@ -47,6 +47,49 @@ #define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) #endif /* POSIX */ +#ifdef __MSDOS__ +#include + +static char * +dosify (filename) + char *filename; +{ + static char dos_filename[14]; + char *df; + int i; + + if (filename == 0) + return 0; + + if (strpbrk (filename, "\"*+,;<=>?[\\]|") != 0) + return filename; + + df = dos_filename; + + /* First, transform the name part. */ + for (i = 0; *filename != '\0' && i < 8 && *filename != '.'; ++i) + *df++ = tolower (*filename++); + + /* Now skip to the next dot. */ + while (*filename != '\0' && *filename != '.') + ++filename; + if (*filename != '\0') + { + *df++ = *filename++; + for (i = 0; *filename != '\0' && i < 3 && *filename != '.'; ++i) + *df++ = tolower (*filename++); + } + + /* Look for more dots. */ + while (*filename != '\0' && *filename != '.') + ++filename; + if (*filename == '.') + return filename; + *df = 0; + return dos_filename; +} +#endif + /* Hash table of directories. */ #ifndef DIRECTORY_BUCKETS @@ -136,7 +179,7 @@ /* The directory is not in the name hash table. Find its device and inode numbers, and look it up by them. */ - if (stat (name, &st) < 0) + if (safe_stat (name, &st) < 0) /* Couldn't stat the directory. Mark this by setting the `contents' member to a nil pointer. */ dir->contents = 0; @@ -213,6 +256,10 @@ /* The directory could not be stat'd or opened. */ return 0; +#ifdef __MSDOS__ + filename = dosify (filename); +#endif + hash = 0; if (filename != 0) { @@ -403,6 +450,10 @@ if (dir == 0 || dir->files == 0) /* There are no files entered for this directory. */ return 0; + +#ifdef __MSDOS__ + p = filename = dosify (p); +#endif for (hash = 0; *p != '\0'; ++p) HASH (hash, *p); diff -ruN make-3.71/file.c make-3.72.1/file.c --- make-3.71/file.c Tue Apr 5 06:04:40 1994 +++ make-3.72.1/file.c Thu Oct 27 02:02:43 1994 @@ -383,6 +383,47 @@ f = lookup_file (".EXPORT_ALL_VARIABLES"); if (f != 0 && f->is_target) export_all_variables = 1; + + f = lookup_file (".IGNORE"); + if (f != 0 && f->is_target) + { + if (f->deps == 0) + ignore_errors_flag = 1; + else + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->command_flags |= COMMANDS_NOERROR; + } + + f = lookup_file (".SILENT"); + if (f != 0 && f->is_target) + { + if (f->deps == 0) + silent_flag = 1; + else + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->command_flags |= COMMANDS_SILENT; + } + + f = lookup_file (".POSIX"); + if (f != 0 && f->is_target) + posix_pedantic = 1; +} + +/* Set the `command_state' member of FILE and all its `also_make's. */ + +void +set_command_state (file, state) + struct file *file; + int state; +{ + struct dep *d; + + file->command_state = state; + + for (d = file->also_make; d != 0; d = d->next) + d->file->command_state = state; } /* Print the data base of files. */ diff -ruN make-3.71/file.h make-3.72.1/file.h --- make-3.71/file.h Tue Apr 5 05:22:07 1994 +++ make-3.72.1/file.h Mon Oct 24 18:47:43 1994 @@ -25,7 +25,8 @@ struct file *next; char *name; struct dep *deps; - struct commands *cmds; /* Commands to execute for this target */ + struct commands *cmds; /* Commands to execute for this target. */ + int command_flags; /* Flags OR'd in for cmds; see commands.h. */ char *stem; /* Implicit stem, if an implicit rule has been used */ struct dep *also_make; /* Targets that are made by making this. */ @@ -85,6 +86,7 @@ extern struct file *lookup_file (), *enter_file (); extern void remove_intermediates (), snap_deps (); extern void rename_file (), file_hash_enter (); +extern void set_command_state (); extern time_t f_mtime (); diff -ruN make-3.71/function.c make-3.72.1/function.c --- make-3.71/function.c Fri Mar 4 00:36:26 1994 +++ make-3.72.1/function.c Mon Jul 25 19:06:00 1994 @@ -22,6 +22,10 @@ #include "commands.h" #include "job.h" +#ifdef __MSDOS__ +#include +#endif + static char *string_glob (); /* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing @@ -371,6 +375,7 @@ else error_prefix = ""; +#ifndef __MSDOS__ if (pipe (pipedes) < 0) { perror_with_name (error_prefix, "pipe"); @@ -475,6 +480,69 @@ free (buffer); } +#else /* MSDOS. */ + { + /* MS-DOS can't do fork, but it can do spawn. However, this + means that we don't have an opportunity to reopen stdout to + trap it. Thus, we save our own stdout onto a new descriptor + and dup a temp file's descriptor onto our stdout temporarily. + After we spawn the shell program, we dup our own stdout back + to the stdout descriptor. The buffer reading is the same as + above, except that we're now reading from a file. */ + + int save_stdout; + int child_stdout; + char tmp_output[FILENAME_MAX]; + FILE *child_stream; + unsigned int maxlen = 200; + int cc; + char *buffer; + + strcpy (tmp_output, "shXXXXXX"); + mktemp (tmp_output); + child_stdout = open (tmp_output, + O_WRONLY|O_CREAT|O_TRUNC|O_TEXT, 0644); + save_stdout = dup (1); + dup2 (child_stdout, 1); + spawnvp (P_WAIT, argv[0], argv); + dup2 (save_stdout, 1); + close (child_stdout); + close (save_stdout); + + child_stdout = open (tmp_output, O_RDONLY|O_TEXT, 0644); + + buffer = xmalloc (maxlen); + i = 0; + do + { + if (i == maxlen) + { + maxlen += 512; + buffer = (char *) xrealloc (buffer, maxlen + 1); + } + + cc = read (child_stdout, &buffer[i], maxlen - i); + if (cc > 0) + i += cc; + } while (cc > 0); + + close (child_stdout); + unlink (tmp_output); + + if (i > 0) + { + if (buffer[i - 1] == '\n') + buffer[--i] = '\0'; + else + buffer[i] = '\0'; + p = buffer; + while ((p = index (p, '\n')) != 0) + *p++ = ' '; + o = variable_buffer_output (o, buffer, i); + } + free (buffer); + } +#endif /* Not MSDOS. */ free (text); break; diff -ruN make-3.71/getloadavg.c make-3.72.1/getloadavg.c --- make-3.71/getloadavg.c Mon May 9 22:10:29 1994 +++ make-3.72.1/getloadavg.c Wed Oct 26 20:34:42 1994 @@ -1,5 +1,5 @@ /* Get the system load averages. - Copyright (C) 1985, 86, 87, 88, 89, 91, 92, 93 + Copyright (C) 1985, 86, 87, 88, 89, 91, 92, 93, 1994 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -70,19 +70,20 @@ #ifdef HAVE_CONFIG_H -#if defined (emacs) || defined (CONFIG_BROKETS) -/* We use instead of "config.h" so that a compilation - using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h - (which it would do because it found this file in $srcdir). */ #include -#else -#include "config.h" -#endif #endif - /* Exclude all the code except the test program at the end - if the system has its own `getloadavg' function. */ + if the system has its own `getloadavg' function. + + The declaration of `errno' is needed by the test program + as well as the function itself, so it comes first. */ + +#include + +#ifndef errno +extern int errno; +#endif #ifndef HAVE_GETLOADAVG @@ -141,6 +142,7 @@ #if defined (__osf__) && (defined (__alpha) || defined (__alpha__)) #define OSF_ALPHA +#include #endif #if defined (__osf__) && (defined (mips) || defined (__mips__)) @@ -203,6 +205,10 @@ #define LOAD_AVE_TYPE long #endif +#if defined(alliant) && defined(i860) /* Alliant FX/2800 */ +#define LOAD_AVE_TYPE long +#endif + #endif /* No LOAD_AVE_TYPE. */ #ifdef OSF_ALPHA @@ -212,6 +218,13 @@ #define FSCALE 1024.0 #endif +#if defined(alliant) && defined(i860) /* Alliant FX/2800 */ +/* defines an incorrect value for FSCALE on an + Alliant FX/2800 Concentrix 2.2, according to ghazi@noc.rutgers.edu. */ +#undef FSCALE +#define FSCALE 100.0 +#endif + #ifndef FSCALE @@ -289,7 +302,7 @@ #define NLIST_STRUCT #endif -#ifdef tex4300 +#ifdef tek4300 #define NLIST_STRUCT #endif @@ -297,6 +310,10 @@ #define NLIST_STRUCT #endif +#if defined(alliant) && defined(i860) /* Alliant FX/2800 */ +#define NLIST_STRUCT +#endif + #endif /* defined (NLIST_STRUCT) */ @@ -331,11 +348,6 @@ #endif #include -#include - -#ifndef errno -extern int errno; -#endif /* LOAD_AVE_TYPE should only get defined if we're going to use the nlist method. */ @@ -698,6 +710,18 @@ ? load_ave.tl_avenrun.d[0] : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale)); #endif /* OSF_MIPS */ + +#if !defined (LDAV_DONE) && defined (OSF_ALPHA) +#define LDAV_DONE + + struct tbl_loadavg load_ave; + table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); + for (elem = 0; elem < nelem; elem++) + loadavg[elem] + = (load_ave.tl_lscale == 0 + ? load_ave.tl_avenrun.d[elem] + : (load_ave.tl_avenrun.l[elem] / (double) load_ave.tl_lscale)); +#endif /* OSF_ALPHA */ #if !defined (LDAV_DONE) && defined (VMS) /* VMS specific code -- read from the Load Ave driver. */ diff -ruN make-3.71/getopt.c make-3.72.1/getopt.c --- make-3.71/getopt.c Mon May 9 22:11:02 1994 +++ make-3.72.1/getopt.c Wed Nov 2 16:16:08 1994 @@ -27,17 +27,10 @@ #endif #ifdef HAVE_CONFIG_H -#if defined (emacs) || defined (CONFIG_BROKETS) -/* We use instead of "config.h" so that a compilation - using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h - (which it would do because it found this file in $srcdir). */ #include -#else -#include "config.h" -#endif #endif -#ifndef __STDC__ +#if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const @@ -158,6 +151,9 @@ { 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 @@ -192,7 +188,7 @@ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ -#ifndef __STDC__ +#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 *); @@ -289,6 +285,8 @@ nextchar = NULL; + posixly_correct = getenv ("POSIXLY_CORRECT"); + /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') @@ -301,7 +299,7 @@ ordering = REQUIRE_ORDER; ++optstring; } - else if (getenv ("POSIXLY_CORRECT") != NULL) + else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; @@ -605,8 +603,11 @@ { if (opterr) { - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); + 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 '?'; diff -ruN make-3.71/getopt.h make-3.72.1/getopt.h --- make-3.71/getopt.h Mon May 9 22:11:05 1994 +++ make-3.72.1/getopt.h Mon Oct 31 07:10:42 1994 @@ -1,5 +1,5 @@ /* Declarations for getopt. - Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. + 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 @@ -76,7 +76,7 @@ struct option { -#if __STDC__ +#if defined (__STDC__) && __STDC__ const char *name; #else char *name; @@ -94,8 +94,8 @@ #define required_argument 1 #define optional_argument 2 -#if __STDC__ -#if defined(__GNU_LIBRARY__) +#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. */ @@ -102,7 +102,7 @@ extern int getopt (int argc, char *const *argv, const char *shortopts); #else /* not __GNU_LIBRARY__ */ extern int getopt (); -#endif /* not __GNU_LIBRARY__ */ +#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, @@ -120,7 +120,7 @@ extern int getopt_long_only (); extern int _getopt_internal (); -#endif /* not __STDC__ */ +#endif /* __STDC__ */ #ifdef __cplusplus } diff -ruN make-3.71/getopt1.c make-3.72.1/getopt1.c --- make-3.71/getopt1.c Mon May 9 22:11:12 1994 +++ make-3.72.1/getopt1.c Mon Oct 31 07:08:37 1994 @@ -1,5 +1,5 @@ /* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 + 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 @@ -17,19 +17,12 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H -#if defined (emacs) || defined (CONFIG_BROKETS) -/* We use instead of "config.h" so that a compilation - using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h - (which it would do because it found this file in $srcdir). */ #include -#else -#include "config.h" #endif -#endif #include "getopt.h" -#ifndef __STDC__ +#if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const diff -ruN make-3.71/glob/fnmatch.c make-3.72.1/glob/fnmatch.c --- make-3.71/glob/fnmatch.c Tue Oct 12 11:18:06 1993 +++ make-3.72.1/glob/fnmatch.c Sun Oct 9 01:20:13 1994 @@ -16,14 +16,7 @@ Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H -#if defined (CONFIG_BROKETS) -/* We use instead of "config.h" so that a compilation - using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h - (which it would do because it found this file in $srcdir). */ #include -#else -#include "config.h" -#endif #endif #include diff -ruN make-3.71/glob/fnmatch.h make-3.72.1/glob/fnmatch.h --- make-3.71/glob/fnmatch.h Tue Dec 14 15:02:10 1993 +++ make-3.72.1/glob/fnmatch.h Sun Oct 2 18:34:36 1994 @@ -25,10 +25,10 @@ #if defined (__cplusplus) || (defined (__STDC__) && __STDC__) #undef __P -#define __P(args) args +#define __P(protos) protos #else /* Not C++ or ANSI C. */ #undef __P -#define __P(args) () +#define __P(protos) () /* We can get away without defining `const' here only because in this file it is used only inside the prototype for `fnmatch', which is elided in non-ANSI C where `const' is problematical. */ diff -ruN make-3.71/glob/glob.c make-3.72.1/glob/glob.c --- make-3.71/glob/glob.c Thu Aug 12 18:15:21 1993 +++ make-3.72.1/glob/glob.c Tue Sep 6 19:03:42 1994 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -344,7 +344,7 @@ /* No matches. */ if (flags & GLOB_NOCHECK) { - const size_t len = strlen (pattern) + 1; + size_t len = strlen (pattern) + 1; char *patcopy = (char *) malloc (len); if (patcopy == NULL) return GLOB_NOSPACE; @@ -458,7 +458,7 @@ for (i = 0; i < n; ++i) { - const size_t eltlen = strlen (array[i]) + 1; + size_t eltlen = strlen (array[i]) + 1; char *new = (char *) malloc (dirlen + 1 + eltlen); if (new == NULL) { diff -ruN make-3.71/glob/glob.h make-3.72.1/glob/glob.h --- make-3.71/glob/glob.h Sun Oct 11 20:47:05 1992 +++ make-3.72.1/glob/glob.h Sun Oct 2 18:35:50 1994 @@ -27,11 +27,11 @@ #undef __ptr_t #if defined (__cplusplus) || (defined (__STDC__) && __STDC__) #undef __P -#define __P(args) args +#define __P(protos) protos #define __ptr_t void * #else /* Not C++ or ANSI C. */ #undef __P -#define __P(args) () +#define __P(protos) () #undef const #define const #define __ptr_t char * diff -ruN make-3.71/implicit.c make-3.72.1/implicit.c --- make-3.71/implicit.c Wed Apr 20 23:46:03 1994 +++ make-3.72.1/implicit.c Thu Sep 29 15:52:49 1994 @@ -262,7 +262,7 @@ } /* If we have found a matching rule that won't match all filenames, - retroactively reject any "terminal" rules that do always match. */ + retroactively reject any non-"terminal" rules that do always match. */ if (specific_rule_matched) for (i = 0; i < nrules; ++i) if (!tryrules[i]->terminal) diff -ruN make-3.71/install.sh make-3.72.1/install.sh --- make-3.71/install.sh Wed Apr 27 15:12:14 1994 +++ make-3.72.1/install.sh Tue Sep 13 00:32:22 1994 @@ -3,7 +3,9 @@ # install - install a program, script, or datafile # This comes from X11R5. # -# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. diff -ruN make-3.71/job.c make-3.72.1/job.c --- make-3.71/job.c Tue May 10 16:00:40 1994 +++ make-3.72.1/job.c Tue Nov 1 03:34:10 1994 @@ -21,6 +21,7 @@ #include "job.h" #include "file.h" #include "variable.h" +#include /* Default path to search for executables. */ static char default_path[] = ":/bin:/usr/bin"; @@ -28,6 +29,16 @@ /* Default shell to use. */ char default_shell[] = "/bin/sh"; +#ifdef __MSDOS__ +#include +static int dos_pid = 123; +static int dos_status; +static char *dos_bname; +static char *dos_bename; +static int dos_batch_file; +#endif /* MSDOS. */ + + /* If NGROUPS_MAX == 0 then try other methods for finding a real value. */ #if defined (NGROUPS_MAX) && NGROUPS_MAX == 0 #undef NGROUPS_MAX @@ -260,6 +271,7 @@ } else if (pid == 0) { +#ifndef __MSDOS__ /* No remote children. Check for local children. */ if (any_local) @@ -308,6 +320,14 @@ exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0; coredump = WCOREDUMP (status); } +#else /* MSDOS. */ + /* Life is very different on MSDOS. */ + pid = dos_pid - 1; + status = dos_status; + exit_code = dos_status; + exit_sig = 0; + coredump = 0; +#endif /* Not MSDOS. */ } else /* We got a remote child. */ @@ -359,9 +379,15 @@ { /* The commands failed. Write an error message, delete non-precious targets, and abort. */ + static int delete_on_error = -1; child_error (c->file->name, exit_code, exit_sig, coredump, 0); c->file->update_status = 1; - if (exit_sig != 0) + if (delete_on_error == -1) + { + struct file *f = lookup_file (".DELETE_ON_ERROR"); + delete_on_error = f != 0 && f->is_target; + } + if (exit_sig != 0 || delete_on_error) delete_child_targets (c); } else @@ -383,7 +409,6 @@ Since there are more commands that wanted to be run, the target was not completely remade. So we treat this as if a command had failed. */ - c->file->command_state = cs_finished; c->file->update_status = 1; } else @@ -394,32 +419,33 @@ by start_remote_job_p. */ c->remote = start_remote_job_p (); start_job_command (c); + if (c->file->command_state == cs_running) + /* We successfully started the new command. + Loop to reap more children. */ + continue; } - } - switch (c->file->command_state) - { - case cs_running: - /* Successfully started. Loop to reap more children. */ - continue; - - case cs_finished: if (c->file->update_status != 0) /* We failed to start the commands. */ delete_child_targets (c); - break; - - default: - error ("internal error: `%s' has bogus command_state \ -%d in reap_children", - c->file->name, (int) c->file->command_state); - abort (); - break; } + else + /* There are no more commands. We got through them all + without an unignored error. Now the target has been + successfully updated. */ + c->file->update_status = 0; } + /* When we get here, all the commands for C->file are finished + (or aborted) and C->file->update_status contains 0 or 1. But + C->file->command_state is still cs_running if all the commands + ran; notice_finish_file looks for cs_running to tell it that + it's interesting to check the file's modtime again now. */ + if (! handling_fatal_signal) - /* Notice if the target of the commands has been changed. */ + /* Notice if the target of the commands has been changed. + This also propagates its values for command_state and + update_status to its also_make files. */ notice_finished_file (c->file); if (debug_flag) @@ -475,6 +501,13 @@ } #ifdef POSIX +#ifdef __MSDOS__ +void +unblock_sigs () +{ + return; +} +#else extern sigset_t fatal_signal_set; void @@ -485,6 +518,7 @@ sigprocmask (SIG_SETMASK, &empty, (sigset_t *) 0); } #endif +#endif /* Start a job to run the commands specified in CHILD. CHILD is updated to reflect the commands and ID of the child process. */ @@ -495,9 +529,14 @@ { static int bad_stdin = -1; register char *p; - int flags = child->file->cmds->lines_flags[child->command_line - 1]; + int flags; char **argv; + /* Combine the flags parsed for the line itself with + the flags specified globally for this target. */ + flags = (child->file->command_flags + | child->file->cmds->lines_flags[child->command_line - 1]); + p = child->command_ptr; child->noerror = flags & COMMANDS_NOERROR; while (*p != '\0') @@ -519,7 +558,7 @@ if (question_flag && !(flags & COMMANDS_RECURSE)) { child->file->update_status = 1; - child->file->command_state = cs_finished; + notice_finished_file (child->file); return; } @@ -555,6 +594,12 @@ /* This line has no commands. Go to the next. */ if (job_next_command (child)) start_job_command (child); + else + { + /* No more commands. All done. */ + child->file->update_status = 0; + notice_finished_file (child->file); + } return; } @@ -580,6 +625,7 @@ free ((char *) argv); if (job_next_command (child)) start_job_command (child); + child->file->update_status = 0; return; } @@ -618,6 +664,8 @@ if (child->environment == 0) child->environment = target_environment (child->file); +#ifndef __MSDOS__ + /* start_waiting_job has set CHILD->remote if we can start a remote job. */ if (child->remote) { @@ -667,10 +715,26 @@ } } +#else /* MSDOS. */ + dos_status = spawnvpe (P_WAIT, argv[0], argv, child->environment); + ++dead_children; + child->pid = dos_pid++; + if (dos_batch_file) + { + dos_batch_file = 0; + remove (dos_bname); /* Ignore errors. */ + if (access (dos_bename, 0)) + dos_status = 1; + else + dos_status = 0; + remove (dos_bename); + } +#endif /* Not MSDOS. */ + /* We are the parent side. Set the state to say the commands are running and return. */ - child->file->command_state = cs_running; + set_command_state (child->file, cs_running); /* Free the storage used by the child's argument list. */ @@ -681,7 +745,7 @@ error: child->file->update_status = 2; - child->file->command_state = cs_finished; + notice_finished_file (child->file); } /* Try to start a child running. @@ -727,6 +791,11 @@ unblock_sigs (); break; + case cs_not_started: + /* All the command lines turned out to be empty. */ + c->file->update_status = 0; + /* FALLTHROUGH */ + case cs_finished: notice_finished_file (c->file); free_child (c); @@ -733,9 +802,7 @@ break; default: - error ("internal error: `%s' command_state == %d in new_job", - c->file->name, (int) c->file->command_state); - abort (); + assert (c->file->command_state == cs_finished); break; } @@ -881,8 +948,11 @@ /* Fetch the first command line to be run. */ if (! job_next_command (c)) - /* There were no commands! */ - free_child (c); + { + /* There were no commands! */ + free_child (c); + c->file->update_status = 0; + } else { /* The job is now primed. Start it running. */ @@ -910,8 +980,6 @@ { /* There are no more lines to be expanded. */ child->command_ptr = 0; - child->file->command_state = cs_finished; - child->file->update_status = 0; return 0; } else @@ -924,6 +992,9 @@ static int load_too_high () { +#ifdef __MSDOS__ + return 1; +#else extern int getloadavg (); double load; @@ -949,6 +1020,7 @@ user_access (); return load >= max_load_average; +#endif } /* Start jobs that are waiting for the load to be lower. */ @@ -1012,7 +1084,13 @@ if (path == 0 || path[0] == '\0') path = default_path; - if (index (file, '/') != 0) + if ( +#ifdef __MSDOS__ + strpbrk (file, "/\\:") +#else + index (file, '/') +#endif + != 0) { strcpy (program, file); return 1; @@ -1049,7 +1127,7 @@ int perm; char *p; - p = index (path, ':'); + p = index (path, PATH_SEPARATOR_CHAR); if (p == 0) p = path + strlen (path); @@ -1062,7 +1140,7 @@ bcopy (file, program + (p - path) + 1, len); } - if (stat (program, &st) == 0 + if (safe_stat (program, &st) == 0 && S_ISREG (st.st_mode)) { if (st.st_uid == geteuid ()) @@ -1189,6 +1267,15 @@ char *line, **restp; char *shell, *ifs; { +#ifdef __MSDOS__ + static char sh_chars[] = "\"|<>"; + static char *sh_cmds[] = { "break", "call", "cd", "chcp", "chdir", "cls", + "copy", "ctty", "date", "del", "dir", "echo", + "erase", "exit", "for", "goto", "if", "if", "md", + "mkdir", "path", "pause", "prompt", "rem", "ren", + "rename", "set", "shift", "time", "type", + "ver", "verify", "vol", ":", 0 }; +#else static char sh_chars[] = "#;\"*?[]&|<>(){}$`^"; static char *sh_cmds[] = { "cd", "eval", "exec", "exit", "login", "logout", "set", "umask", "wait", "while", "for", @@ -1195,6 +1282,7 @@ "case", "if", ":", ".", "break", "continue", "export", "read", "readonly", "shift", "times", "trap", "switch", 0 }; +#endif register int i; register char *p; register char *ap; @@ -1241,6 +1329,7 @@ if (instring) { + string_char: /* Inside a string, just copy any char except a closing quote or a backslash-newline combination. */ if (*p == '\'') @@ -1292,7 +1381,7 @@ strcpy (p, p + 1); if (instring) - *ap++ = *p; + goto string_char; else { if (ap != new_argv[i]) @@ -1401,6 +1490,34 @@ free (new_argv); } +#ifdef __MSDOS__ + { + FILE *batch; + dos_batch_file = 1; + if (dos_bname == 0) + { + dos_bname = tempnam (".", "mk"); + for (i = 0; dos_bname[i] != '\0'; ++i) + if (dos_bname[i] == '/') + dos_bname[i] = '\\'; + dos_bename = (char *) xmalloc (strlen (dos_bname) + 5); + strcpy (dos_bename, dos_bname); + strcat (dos_bname, ".bat"); + strcat (dos_bename, ".err"); + } + batch = fopen(bename, "w"); /* Create a file. */ + if (batch != NULL) + fclose (batch); + batch = fopen (dos_bname, "w"); + fputs ("@echo off\n", batch); + fputs (line, batch); + fprintf (batch, "\nif errorlevel 1 del %s\n", dos_bename); + fclose (batch); + new_argv = (char **) xmalloc(2 * sizeof(char *)); + new_argv[0] = strdup (bname); + new_argv[1] = 0; + } +#else /* Not MSDOS. */ { /* SHELL may be a multi-word command. Construct a command line "SHELL -c LINE", with all special chars in LINE escaped. @@ -1458,6 +1575,7 @@ new_argv = construct_command_argv_internal (new_line, (char **) NULL, (char *) 0, (char *) 0); } +#endif /* MSDOS. */ return new_argv; } diff -ruN make-3.71/main.c make-3.72.1/main.c --- make-3.71/main.c Wed Apr 20 22:08:24 1994 +++ make-3.72.1/main.c Sun Nov 6 18:29:21 1994 @@ -46,6 +46,7 @@ static void print_data_base (), print_version (); static void decode_switches (), decode_env_switches (); static void define_makeflags (); +static char *quote_as_word (); /* The structure that describes an accepted command switch. */ @@ -271,13 +272,13 @@ { 'w', flag, (char *) &print_directory_flag, 1, 1, 0, 0, 0, "print-directory", 0, "Print the current directory" }, - { 1, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0, + { 2, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0, "no-print-directory", 0, "Turn off -w, even if it was turned on implicitly" }, { 'W', string, (char *) &new_files, 0, 0, 0, 0, 0, "what-if", "FILE", "Consider FILE to be infinitely new" }, - { 2, flag, (char *) &warn_undefined_variables_flag, 1, 1, 0, 0, 0, + { 3, flag, (char *) &warn_undefined_variables_flag, 1, 1, 0, 0, 0, "warn-undefined-variables", 0, "Warn when an undefined variable is referenced" }, { '\0', } @@ -304,14 +305,28 @@ #define DESCRIPTION_COLUMN 30 -/* List of non-switch arguments. */ +/* List of goal targets. */ -struct stringlist *other_args = 0; +static struct dep *goals, *lastgoal; + +/* List of variables which were defined on the command line + (or, equivalently, in MAKEFLAGS). */ + +struct command_variable + { + struct command_variable *next; + struct variable *variable; + }; +static struct command_variable *command_variables; /* The name we were invoked with. */ char *program; +/* Our current directory before processing any -C options. */ + +char *directory_before_chdir; + /* Our current directory after processing all -C options. */ char *starting_directory; @@ -331,6 +346,11 @@ This is zero if the makefiles do not define .DEFAULT. */ struct file *default_file; + +/* Nonzero if we have seen the magic `.POSIX' target. + This turns on pedantic compliance with POSIX.2. */ + +int posix_pedantic; /* Mask of signals that are being caught with fatal_error_signal. */ @@ -387,14 +407,9 @@ extern RETSIGTYPE fatal_error_signal (), child_handler (); register struct file *f; register unsigned int i; - register char *cmd_defs; - register unsigned int cmd_defs_len, cmd_defs_idx; char **p; - struct dep *goals = 0; - register struct dep *lastgoal; struct dep *read_makefiles; PATH_VAR (current_directory); - char *directory_before_chdir; default_goal_file = 0; reading_filename = 0; @@ -464,7 +479,13 @@ else { program = rindex (argv[0], '/'); +#ifdef __MSDOS__ if (program == 0) + program = rindex (argv[0], '\\'); + if (program == 0) + program = rindex (argv[0], ':'); +#endif + if (program == 0) program = argv[0]; else ++program; @@ -490,8 +511,8 @@ strlen (current_directory)); /* Read in variables from the environment. It is important that this be - done before `MAKE' and `MAKEOVERRIDES' are figured out so their - definitions will not be ones from the environment. */ + done before $(MAKE) is are figured out so its definitions will not be + one from the environment. */ for (i = 0; envp[i] != 0; ++i) { @@ -531,76 +552,7 @@ if (print_version_flag) die (0); - /* Search for command line arguments that define variables, - and do the definitions. Also save up the text of these - arguments in CMD_DEFS so we can put them into the values - of $(MAKEOVERRIDES) and $(MAKE). */ - - cmd_defs_len = 200; - cmd_defs = (char *) xmalloc (cmd_defs_len); - cmd_defs_idx = 0; - - for (i = 1; other_args->list[i] != 0; ++i) - { - if (other_args->list[i][0] == '\0') - /* Ignore empty arguments, so they can't kill enter_file. */ - continue; - - /* Try a variable definition. */ - if (try_variable_definition ((char *) 0, 0, - other_args->list[i], o_command)) - { - /* It succeeded. The variable is already defined. - Backslash-quotify it and append it to CMD_DEFS, then clobber it - to 0 in the list so that it won't be taken for a goal target. */ - register char *p = other_args->list[i]; - unsigned int l = strlen (p); - if (cmd_defs_idx + (l * 2) + 1 > cmd_defs_len) - { - if (l * 2 > cmd_defs_len) - cmd_defs_len += l * 2; - else - cmd_defs_len *= 2; - cmd_defs = (char *) xrealloc (cmd_defs, cmd_defs_len); - } - - while (*p != '\0') - { - if (index ("^;'\"*?[]$<>(){}|&~`\\ \t\r\n\f\v", *p) != 0) - cmd_defs[cmd_defs_idx++] = '\\'; - cmd_defs[cmd_defs_idx++] = *p++; - } - cmd_defs[cmd_defs_idx++] = ' '; - } - else - { - /* It was not a variable definition, so it is a target to be made. - Enter it as a file and add it to the dep chain of goals. */ - f = enter_command_line_file (other_args->list[i]); - f->cmd_target = 1; - - if (goals == 0) - { - goals = (struct dep *) xmalloc (sizeof (struct dep)); - lastgoal = goals; - } - else - { - lastgoal->next = (struct dep *) xmalloc (sizeof (struct dep)); - lastgoal = lastgoal->next; - } - lastgoal->name = 0; - lastgoal->file = f; - } - } - - if (cmd_defs_idx > 0) - { - cmd_defs[cmd_defs_idx - 1] = '\0'; - (void) define_variable ("MAKEOVERRIDES", 13, cmd_defs, o_default, 0); - } - free (cmd_defs); - +#ifndef __MSDOS__ /* Set the "MAKE_COMMAND" variable to the name we were invoked with. (If it is a relative pathname with a slash, prepend our directory name so the result will run the same program regardless of the current dir. @@ -610,17 +562,62 @@ if (current_directory[0] != '\0' && argv[0] != 0 && argv[0][0] != '/' && index (argv[0], '/') != 0) argv[0] = concat (current_directory, "/", argv[0]); +#endif + /* The extra indirection through $(MAKE_COMMAND) is done + for hysterical raisins. */ (void) define_variable ("MAKE_COMMAND", 12, argv[0], o_default, 0); + (void) define_variable ("MAKE", 4, "$(MAKE_COMMAND)", o_default, 1); + + if (command_variables != 0) + { + struct command_variable *cv; + struct variable *v; + unsigned int len = 0; + char *value, *p; + + /* Figure out how much space will be taken up by the command-line + variable definitions. */ + for (cv = command_variables; cv != 0; cv = cv->next) + { + v = cv->variable; + len += 2 * strlen (v->name); + if (! v->recursive) + ++len; + ++len; + len += 2 * strlen (v->value); + } - /* Append the command-line variable definitions gathered above - so sub-makes will get them as command-line definitions. */ + /* Now allocate a buffer big enough and fill it. */ + p = value = alloca (len); + for (cv = command_variables; cv != 0; cv = cv->next) + { + v = cv->variable; + p = quote_as_word (p, v->name, 0); + if (! v->recursive) + *p++ = ':'; + *p++ = '='; + p = quote_as_word (p, v->value, 0); + *p++ = ' '; + } + p[-1] = '\0'; /* Kill the final space and terminate. */ - (void) define_variable ("MAKE", 4, - "$(MAKE_COMMAND) $(MAKEOVERRIDES)", o_default, 1); + /* Define an unchangeable variable with a name that no POSIX.2 + makefile could validly use for its own variable. */ + (void) define_variable ("-*-command-variables-*-", 23, + value, o_automatic, 0); + + /* Define the variable; this will not override any user definition. + Normally a reference to this variable is written into the value of + MAKEFLAGS, allowing the user to override this value to affect the + exported value of MAKEFLAGS. In POSIX-pedantic mode, we cannot + allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so + a reference to this hidden variable is written instead. */ + (void) define_variable ("MAKEOVERRIDES", 13, + "${-*-command-variables-*-}", o_env, 1); + } /* If there were -C flags, move ourselves about. */ - if (directories != 0) for (i = 0; directories->list[i] != 0; ++i) { @@ -788,13 +785,9 @@ define_makeflags (1, 0); - ignore_errors_flag |= lookup_file (".IGNORE") != 0; + /* Make each `struct dep' point at the `struct file' for the file + depended on. Also do magic for special targets. */ - silent_flag |= lookup_file (".SILENT") != 0; - - /* Make each `struct dep' point at the - `struct file' for the file depended on. */ - snap_deps (); /* Convert old-style suffix rules to pattern rules. It is important to @@ -1123,7 +1116,7 @@ /* Parsing of arguments, decoding of switches. */ -static char options[sizeof (switches) / sizeof (switches[0]) * 3]; +static char options[1 + sizeof (switches) / sizeof (switches[0]) * 3]; static struct option long_options[(sizeof (switches) / sizeof (switches[0])) + (sizeof (long_option_aliases) / sizeof (long_option_aliases[0]))]; @@ -1141,6 +1134,11 @@ return; p = options; + + /* Return switch and non-switch args in order, regardless of + POSIXLY_CORRECT. Non-switch args are returned as option 1. */ + *p++ = '-'; + for (i = 0; switches[i].c != '\0'; ++i) { long_options[i].name = (switches[i].long_name == 0 ? "" : @@ -1195,15 +1193,6 @@ register struct stringlist *sl; register int c; - if (!env) - { - other_args = (struct stringlist *) xmalloc (sizeof (struct stringlist)); - other_args->max = argc + 1; - other_args->list = (char **) xmalloc ((argc + 1) * sizeof (char *)); - other_args->idx = 1; - other_args->list[0] = argv[0]; - } - /* getopt does most of the parsing for us. First, get its vectors set up. */ @@ -1215,10 +1204,65 @@ /* Reset getopt's state. */ optind = 0; - while ((c = getopt_long (argc, argv, - options, long_options, (int *) 0)) != EOF) + c = 0; + while (optind < argc) { - if (c == '?') + if (c == EOF) + { + /* There are no more options according to getting getopt, but + there are some arguments left. Since we have asked for + non-option arguments to be returned in order, I think this + only happens when there is a "--" argument to prevent later + argument from being options. Since getopt has finished its + job, just update its state variables for the next argument and + set C as if it had returned 1, indicating a non-option + argument. */ + optarg = argv[optind++]; + c = 1; + } + else + /* Parse the next argument. */ + c = getopt_long (argc, argv, options, long_options, (int *) 0); + + if (c == 1) + { + /* Non-option argument. It might be a variable definition. */ + struct variable *v; + v = try_variable_definition ((char *) 0, 0, optarg, o_command); + if (v != 0) + { + /* It is indeed a variable definition. Record a pointer to + the variable for later use in define_makeflags. */ + struct command_variable *cv + = (struct command_variable *) xmalloc (sizeof (*cv)); + cv->variable = v; + cv->next = command_variables; + command_variables = cv; + } + else if (! env) + { + /* Not an option or variable definition; it must be a goal + target! Enter it as a file and add it to the dep chain of + goals. */ + struct file *f = enter_command_line_file (optarg); + f->cmd_target = 1; + + if (goals == 0) + { + goals = (struct dep *) xmalloc (sizeof (struct dep)); + lastgoal = goals; + } + else + { + lastgoal->next + = (struct dep *) xmalloc (sizeof (struct dep)); + lastgoal = lastgoal->next; + } + lastgoal->name = 0; + lastgoal->file = f; + } + } + else if (c == '?') /* Bad option. We will print a usage message and die later. But continue to parse the other options so the user can see all he did wrong. */ @@ -1320,19 +1364,6 @@ } } - if (!env) - { - /* Collect the remaining args in the `other_args' string list. */ - - while (optind < argc) - { - char *arg = argv[optind++]; - if (arg[0] != '-' || arg[1] != '\0') - other_args->list[other_args->idx++] = arg; - } - other_args->list[other_args->idx] = 0; - } - if (!env && (bad || print_usage_flag)) { /* Print a nice usage message. */ @@ -1437,7 +1468,7 @@ unsigned int len; { char *varref = (char *) alloca (2 + len + 2); - char *value, *args; + char *value, *p; int argc; char **argv; @@ -1455,37 +1486,95 @@ if (len == 0) return; - /* Make a copy of the value in ARGS, where we will munge it. - If it does not begin with a dash, prepend one. - We must allocate lasting storage for this (and we never free it) because - decode_switches may save pointers into it for string-valued switches. */ - args = (char *) xmalloc (1 + len + 2); - if (value[0] != '-') - args[0] = '-'; - bcopy (value, value[0] == '-' ? args : &args[1], len + 1); - /* Write an extra null terminator so our loop below will - never be in danger of looking past the end of the string. */ - args[(value[0] == '-' ? 0 : 1) + len + 1] = '\0'; - /* Allocate a vector that is definitely big enough. */ argv = (char **) alloca ((1 + len + 1) * sizeof (char *)); + /* Allocate a buffer to copy the value into while we split it into words + and unquote it. We must use permanent storage for this because + decode_switches may store pointers into the passed argument words. */ + p = (char *) xmalloc (2 * len); + /* getopt will look at the arguments starting at ARGV[1]. Prepend a spacer word. */ argv[0] = 0; argc = 1; - do + argv[argc] = p; + while (*value != '\0') + { + if (*value == '\\') + ++value; /* Skip the backslash. */ + else if (isblank (*value)) + { + /* End of the word. */ + *p++ = '\0'; + argv[++argc] = p; + do + ++value; + while (isblank (*value)); + continue; + } + *p++ = *value++; + } + *p = '\0'; + argv[++argc] = 0; + + if (argc == 2 && argv[1][0] != '-') { - argv[argc++] = args; - args = end_of_token (args); - *args++ = '\0'; - } while (*args != '\0'); - argv[argc] = 0; + /* There is just one word in the value, and it is not a switch. + Either this is the single-word form and we should prepend a dash + before calling decode_switches, or this is the multi-word form and + there is no dash because it is a variable definition. */ + struct variable *v; + v = try_variable_definition ((char *) 0, 0, argv[1], o_command); + if (v != 0) + { + /* It was indeed a variable definition, and now it has been + processed. There is nothing for decode_switches to do. + Record a pointer to the variable for later use in + define_makeflags. */ + struct command_variable *cv + = (struct command_variable *) xmalloc (sizeof (*cv)); + cv->variable = v; + cv->next = command_variables; + command_variables = cv; + return; + } + /* It wasn't a variable definition, so it's some switches without a + leading dash. Add one and pass it along to decode_switches. We + need permanent storage for this in case decode_switches saves + pointers into the value. */ + argv[1] = concat ("-", argv[1], ""); + } + /* Parse those words. */ decode_switches (argc, argv, 1); } +/* Quote the string IN so that it will be interpreted as a single word with + no magic by the shell; if DOUBLE_DOLLARS is nonzero, also double dollar + signs to avoid variable expansion in make itself. Write the result into + OUT, returning the address of the next character to be written. + Allocating space for OUT twice the length of IN (thrice if + DOUBLE_DOLLARS is nonzero) is always sufficient. */ + +static char * +quote_as_word (out, in, double_dollars) + char *out, *in; + int double_dollars; +{ + while (*in != '\0') + { + if (index ("^;'\"*?[]$<>(){}|&~`\\ \t\r\n\f\v", *in) != 0) + *out++ = '\\'; + if (double_dollars && *in == '$') + *out++ = '$'; + *out++ = *in++; + } + + return out; +} + /* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the command switches. Include options with args if ALL is nonzero. Don't include options with the `no_makefile' flag set if MAKEFILE. */ @@ -1494,8 +1583,12 @@ define_makeflags (all, makefile) int all, makefile; { + static const char ref[] = "$(MAKEOVERRIDES)"; + static const char posixref[] = "$(-*-command-variables-*-)"; register const struct command_switch *cs; char *flagstring; + register char *p; + unsigned int words; struct variable *v; /* We will construct a linked list of `struct flag's describing @@ -1508,7 +1601,6 @@ struct flag *next; const struct command_switch *cs; char *arg; - unsigned int arglen; }; struct flag *flags = 0; unsigned int flagslen = 0; @@ -1517,13 +1609,12 @@ struct flag *new = (struct flag *) alloca (sizeof (struct flag)); \ new->cs = cs; \ new->arg = (ARG); \ - new->arglen = (LEN); \ new->next = flags; \ flags = new; \ if (new->arg == 0) \ ++flagslen; /* Just a single flag letter. */ \ else \ - flagslen += 1 + 1 + 1 + 1 + new->arglen; /* " -x foo" */ \ + flagslen += 1 + 1 + 1 + 1 + 3 * (LEN); /* " -x foo" */ \ if (!isalnum (cs->c)) \ /* This switch has no single-letter version, so we use the long. */ \ flagslen += 2 + strlen (cs->long_name); \ @@ -1607,72 +1698,104 @@ break; } + flagslen += 4 + sizeof posixref; /* Four more for the possible " -- ". */ + #undef ADD_FLAG - if (flags == 0) - /* No flags. Use a string of two nulls so [1] works below. */ - flagstring = "\0"; - else + /* Construct the value in FLAGSTRING. + We allocate enough space for a preceding dash and trailing null. */ + flagstring = (char *) alloca (1 + flagslen + 1); + p = flagstring; + words = 1; + *p++ = '-'; + while (flags != 0) { - /* Construct the value in FLAGSTRING. - We allocate enough space for a preceding dash and trailing null. */ - register char *p; - flagstring = (char *) alloca (1 + flagslen + 1); - p = flagstring; - *p++ = '-'; - do + /* Add the flag letter or name to the string. */ + if (!isalnum (flags->cs->c)) { - /* Add the flag letter or name to the string. */ - if (!isalnum (flags->cs->c)) - { - *p++ = '-'; - strcpy (p, flags->cs->long_name); - p += strlen (p); - } - else - *p++ = flags->cs->c; - if (flags->arg != 0) + *p++ = '-'; + strcpy (p, flags->cs->long_name); + p += strlen (p); + } + else + *p++ = flags->cs->c; + if (flags->arg != 0) + { + /* A flag that takes an optional argument which in this case is + omitted is specified by ARG being "". We must distinguish + because a following flag appended without an intervening " -" + is considered the arg for the first. */ + if (flags->arg[0] != '\0') { - /* A flag that takes an optional argument which in this case - is omitted is specified by ARG being "" and ARGLEN being 0. - We must distinguish because a following flag appended without - an intervening " -" is considered the arg for the first. */ - if (flags->arglen > 0) - { - /* Add its argument too. */ - *p++ = !isalnum (flags->cs->c) ? '=' : ' '; - bcopy (flags->arg, p, flags->arglen); - p += flags->arglen; - } - /* Write a following space and dash, for the next flag. */ - *p++ = ' '; - *p++ = '-'; + /* Add its argument too. */ + *p++ = !isalnum (flags->cs->c) ? '=' : ' '; + p = quote_as_word (p, flags->arg, 1); } - else if (!isalnum (flags->cs->c)) + ++words; + /* Write a following space and dash, for the next flag. */ + *p++ = ' '; + *p++ = '-'; + } + else if (!isalnum (flags->cs->c)) + { + ++words; + /* Long options must each go in their own word, + so we write the following space and dash. */ + *p++ = ' '; + *p++ = '-'; + } + flags = flags->next; + } + + if (all && command_variables != 0) + { + /* Now write a reference to $(MAKEOVERRIDES), which contains all the + command-line variable definitions. */ + + if (p == &flagstring[1]) + /* No flags written, so elide the leading dash already written. */ + p = flagstring; + else + { + /* Separate the variables from the switches with a "--" arg. */ + if (p[-1] != '-') { - /* Long options must each go in their own word, - so we write the following space and dash. */ + /* We did not already write a trailing " -". */ *p++ = ' '; *p++ = '-'; } - flags = flags->next; - } while (flags != 0); - - if (p[-1] == '-') - /* Kill the final space and dash. */ - p -= 2; + /* There is a trailing " -"; fill it out to " -- ". */ + *p++ = '-'; + *p++ = ' '; + } - /* Terminate the string. */ - *p = '\0'; + /* Copy in the string. */ + if (posix_pedantic) + { + bcopy (posixref, p, sizeof posixref - 1); + p += sizeof posixref - 1; + } + else + { + bcopy (ref, p, sizeof ref - 1); + p += sizeof ref - 1; + } } + else if (p == &flagstring[1]) + --p; + else if (p[-1] == '-') + /* Kill the final space and dash. */ + p -= 2; + /* Terminate the string. */ + *p = '\0'; v = define_variable ("MAKEFLAGS", 9, - /* On Sun, the value of MFLAGS starts with a `-' but - the value of MAKEFLAGS lacks the `-'. - Be compatible with this unless FLAGSTRING starts - with a long option `--foo', since removing the - first dash would result in the bogus `-foo'. */ - flagstring[1] == '-' ? flagstring : &flagstring[1], + /* If there is just a single word of switches, + omit the leading dash unless it is a single + long option with two leading dashes. */ + &flagstring[(words == 1 && command_variables == 0 + && flagstring[1] != '-') + ? 1 : 0], /* This used to use o_env, but that lost when a makefile defined MAKEFLAGS. Makefiles set MAKEFLAGS to add switches, but we still want @@ -1679,7 +1802,7 @@ to redefine its value with the full set of switches. Of course, an override or command definition will still take precedence. */ - o_file, 0); + o_file, 1); if (! all) /* The first time we are called, set MAKEFLAGS to always be exported. We should not do this again on the second call, because that is @@ -1687,7 +1810,7 @@ v->export = v_export; /* Since MFLAGS is not parsed for flags, there is no reason to override any makefile redefinition. */ - (void) define_variable ("MFLAGS", 6, flagstring, o_env, 0); + (void) define_variable ("MFLAGS", 6, flagstring, o_env, 1); } /* Print version information. */ @@ -1754,6 +1877,13 @@ int err; dying = 1; + + /* Try to move back to the original directory. This is essential on + MS-DOS (where there is really only one process), and on Unix it + puts core files in the original directory instead of the -C + directory. */ + if (directory_before_chdir != 0) + chdir (directory_before_chdir); if (print_version_flag) print_version (); diff -ruN make-3.71/make-stds.texi make-3.72.1/make-stds.texi --- make-3.71/make-stds.texi Thu Aug 12 00:00:00 1993 +++ make-3.72.1/make-stds.texi Sun Aug 21 13:29:57 1994 @@ -32,6 +32,20 @@ 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 @@ -69,7 +83,7 @@ @smallexample foo.o : bar.c - $(CC) $(CFLAGS) $< -o $@@ + $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@ @end smallexample @noindent @@ -80,7 +94,7 @@ @smallexample foo.1 : foo.man sedscript - sed -s $(srcdir)/sedscript $(srcdir)/foo.man > foo.1 + sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@@ @end smallexample @node Utilities in Makefiles @@ -112,9 +126,17 @@ make makeinfo ranlib texi2dvi yacc @end example -When you use @code{ranlib}, you should test whether it exists, and run -it only if it exists, so that the distribution will work on systems that -don't have @code{ranlib}. +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. @@ -379,8 +401,12 @@ 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: +variables are as follows. +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 @@ -395,32 +421,100 @@ 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 libdir -The directory for installing executable files to be run by the program -rather than by users. Object files and libraries of object code should -also go in this directory. The idea is that this directory is used for -files that pertain to a specific machine architecture, but need not be -in the path for commands. The value of @code{libdir} should normally be -@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. +@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 data files which the programs -refer to while they run. This directory is used for files which are -independent of the type of machine being used. This should normally be -@file{/usr/local/lib}, but write it as @file{$(prefix)/lib}. +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 statedir +@item localstatedir The directory for installing data files which the programs modify while -they run. These files should be independent of the type of machine -being used, and it should be possible to share them among machines at a -network installation. This should normally be @file{/usr/local/lib}, -but write it as @file{$(prefix)/lib}. +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 @@ -454,7 +548,11 @@ 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 @@ -486,12 +584,11 @@ @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 -@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}. +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. @@ -509,7 +606,7 @@ # Where to put the executable for the command `gcc'. bindir = $(exec_prefix)/bin # Where to put the directories used by the compiler. -libdir = $(exec_prefix)/lib +libexecdir = $(exec_prefix)/libexec # Where to put the Info files. infodir = $(prefix)/info @end smallexample diff -ruN make-3.71/make.aux make-3.72.1/make.aux --- make-3.71/make.aux Mon May 16 23:55:39 1994 +++ make-3.72.1/make.aux Fri Nov 4 15:28:17 1994 @@ -38,7 +38,7 @@ 'xrdef {Makefile Contents-pg}{13} 'xrdef {Makefile Contents-snt}{Section'tie3.1} 'xrdef {Makefile Names-title}{What Name to Give Your Makefile} -'xrdef {Makefile Names-pg}{14} +'xrdef {Makefile Names-pg}{13} 'xrdef {Makefile Names-snt}{Section'tie3.2} 'xrdef {Include-title}{Including Other Makefiles} 'xrdef {Include-pg}{14} @@ -65,7 +65,7 @@ 'xrdef {Wildcard Examples-pg}{21} 'xrdef {Wildcard Examples-snt}{Section'tie4.2.1} 'xrdef {Wildcard Pitfall-title}{Pitfalls of Using Wildcards} -'xrdef {Wildcard Pitfall-pg}{22} +'xrdef {Wildcard Pitfall-pg}{21} 'xrdef {Wildcard Pitfall-snt}{Section'tie4.2.2} 'xrdef {Wildcard Function-title}{The Function \code {wildcard}} 'xrdef {Wildcard Function-pg}{22} @@ -83,22 +83,22 @@ 'xrdef {Commands/Search-pg}{26} 'xrdef {Commands/Search-snt}{Section'tie4.3.3} 'xrdef {Implicit/Search-title}{Directory Search and Implicit Rules} -'xrdef {Implicit/Search-pg}{27} +'xrdef {Implicit/Search-pg}{26} 'xrdef {Implicit/Search-snt}{Section'tie4.3.4} 'xrdef {Libraries/Search-title}{Directory Search for Link Libraries} 'xrdef {Libraries/Search-pg}{27} 'xrdef {Libraries/Search-snt}{Section'tie4.3.5} 'xrdef {Phony Targets-title}{Phony Targets} -'xrdef {Phony Targets-pg}{28} +'xrdef {Phony Targets-pg}{27} 'xrdef {Phony Targets-snt}{Section'tie4.4} 'xrdef {Force Targets-title}{Rules without Commands or Dependencies} -'xrdef {Force Targets-pg}{30} +'xrdef {Force Targets-pg}{29} 'xrdef {Force Targets-snt}{Section'tie4.5} 'xrdef {Empty Targets-title}{Empty Target Files to Record Events} 'xrdef {Empty Targets-pg}{30} 'xrdef {Empty Targets-snt}{Section'tie4.6} 'xrdef {Special Targets-title}{Special Built-in Target Names} -'xrdef {Special Targets-pg}{31} +'xrdef {Special Targets-pg}{30} 'xrdef {Special Targets-snt}{Section'tie4.7} 'xrdef {Multiple Targets-title}{Multiple Targets in a Rule} 'xrdef {Multiple Targets-pg}{32} @@ -116,7 +116,7 @@ 'xrdef {Static versus Implicit-pg}{36} 'xrdef {Static versus Implicit-snt}{Section'tie4.10.2} 'xrdef {Double-Colon-title}{Double-Colon Rules} -'xrdef {Double-Colon-pg}{37} +'xrdef {Double-Colon-pg}{36} 'xrdef {Double-Colon-snt}{Section'tie4.11} 'xrdef {Automatic Dependencies-title}{Generating Dependencies Automatically} 'xrdef {Automatic Dependencies-pg}{37} @@ -152,7 +152,7 @@ 'xrdef {Options/Recursion-pg}{50} 'xrdef {Options/Recursion-snt}{Section'tie5.6.3} 'xrdef {-w Option-title}{The \samp {--print-directory} Option} -'xrdef {-w Option-pg}{51} +'xrdef {-w Option-pg}{52} 'xrdef {-w Option-snt}{Section'tie5.6.4} 'xrdef {Sequences-title}{Defining Canned Command Sequences} 'xrdef {Sequences-pg}{52} @@ -227,7 +227,7 @@ 'xrdef {Origin Function-pg}{85} 'xrdef {Origin Function-snt}{Section'tie8.5} 'xrdef {Shell Function-title}{The \code {shell} Function} -'xrdef {Shell Function-pg}{87} +'xrdef {Shell Function-pg}{86} 'xrdef {Shell Function-snt}{Section'tie8.6} 'xrdef {Running-title}{How to Run \code {make}} 'xrdef {Running-pg}{89} @@ -236,7 +236,7 @@ 'xrdef {Makefile Arguments-pg}{89} 'xrdef {Makefile Arguments-snt}{Section'tie9.1} 'xrdef {Goals-title}{Arguments to Specify the Goals} -'xrdef {Goals-pg}{90} +'xrdef {Goals-pg}{89} 'xrdef {Goals-snt}{Section'tie9.2} 'xrdef {Instead of Execution-title}{Instead of Executing the Commands} 'xrdef {Instead of Execution-pg}{91} @@ -272,7 +272,7 @@ 'xrdef {Pattern Rules-pg}{109} 'xrdef {Pattern Rules-snt}{Section'tie10.5} 'xrdef {Pattern Intro-title}{Introduction to Pattern Rules} -'xrdef {Pattern Intro-pg}{110} +'xrdef {Pattern Intro-pg}{109} 'xrdef {Pattern Intro-snt}{Section'tie10.5.1} 'xrdef {Pattern Examples-title}{Pattern Rule Examples} 'xrdef {Pattern Examples-pg}{111} @@ -308,11 +308,14 @@ 'xrdef {Archive Update-pg}{122} 'xrdef {Archive Update-snt}{Section'tie11.2} 'xrdef {Archive Symbols-title}{Updating Archive Symbol Directories} -'xrdef {Archive Symbols-pg}{123} +'xrdef {Archive Symbols-pg}{122} 'xrdef {Archive Symbols-snt}{Section'tie11.2.1} +'xrdef {Archive Pitfalls-title}{Dangers When Using Archives} +'xrdef {Archive Pitfalls-pg}{123} +'xrdef {Archive Pitfalls-snt}{Section'tie11.3} 'xrdef {Archive Suffix Rules-title}{Suffix Rules for Archive Files} 'xrdef {Archive Suffix Rules-pg}{123} -'xrdef {Archive Suffix Rules-snt}{Section'tie11.3} +'xrdef {Archive Suffix Rules-snt}{Section'tie11.4} 'xrdef {Features-title}{Features of GNU \code {make}} 'xrdef {Features-pg}{125} 'xrdef {Features-snt}{Chapter'tie12} @@ -332,20 +335,20 @@ 'xrdef {Standard Targets-pg}{133} 'xrdef {Standard Targets-snt}{Section'tie14.3} 'xrdef {Command Variables-title}{Variables for Specifying Commands} -'xrdef {Command Variables-pg}{135} +'xrdef {Command Variables-pg}{136} 'xrdef {Command Variables-snt}{Section'tie14.4} 'xrdef {Directory Variables-title}{Variables for Installation Directories} 'xrdef {Directory Variables-pg}{137} 'xrdef {Directory Variables-snt}{Section'tie14.5} 'xrdef {Quick Reference-title}{Quick Reference} -'xrdef {Quick Reference-pg}{141} +'xrdef {Quick Reference-pg}{143} 'xrdef {Quick Reference-snt}{Appendix'tie'char65{}} 'xrdef {Complex Makefile-title}{Complex Makefile Example} -'xrdef {Complex Makefile-pg}{147} +'xrdef {Complex Makefile-pg}{149} 'xrdef {Complex Makefile-snt}{Appendix'tie'char66{}} 'xrdef {Concept Index-title}{Index of Concepts} -'xrdef {Concept Index-pg}{153} +'xrdef {Concept Index-pg}{155} 'xrdef {Concept Index-snt}{} 'xrdef {Name Index-title}{Index of Functions, Variables, & Directives} -'xrdef {Name Index-pg}{163} +'xrdef {Name Index-pg}{165} 'xrdef {Name Index-snt}{} diff -ruN make-3.71/make.cp make-3.72.1/make.cp --- make-3.71/make.cp Mon May 16 23:55:40 1994 +++ make-3.72.1/make.cp Fri Nov 4 15:28:17 1994 @@ -54,10 +54,10 @@ \entry {directive}{13}{directive} \entry {comments, in makefile}{13}{comments, in makefile} \entry {# (comments), in makefile}{13}{\code {#} (comments), in makefile} -\entry {makefile name}{14}{makefile name} -\entry {name of makefile}{14}{name of makefile} -\entry {default makefile name}{14}{default makefile name} -\entry {file name of makefile}{14}{file name of makefile} +\entry {makefile name}{13}{makefile name} +\entry {name of makefile}{13}{name of makefile} +\entry {default makefile name}{13}{default makefile name} +\entry {file name of makefile}{13}{file name of makefile} \entry {README}{14}{\code {README}} \entry {-f}{14}{\code {-f}} \entry {--file}{14}{\code {--file}} @@ -115,11 +115,11 @@ \entry {print target}{21}{\code {print} target} \entry {lpr (shell command)}{21}{\code {lpr} (shell command)} \entry {touch (shell command)}{21}{\code {touch} (shell command)} -\entry {wildcard pitfalls}{22}{wildcard pitfalls} -\entry {pitfalls of wildcards}{22}{pitfalls of wildcards} -\entry {mistakes with wildcards}{22}{mistakes with wildcards} -\entry {errors with wildcards}{22}{errors with wildcards} -\entry {problems with wildcards}{22}{problems with wildcards} +\entry {wildcard pitfalls}{21}{wildcard pitfalls} +\entry {pitfalls of wildcards}{21}{pitfalls of wildcards} +\entry {mistakes with wildcards}{21}{mistakes with wildcards} +\entry {errors with wildcards}{21}{errors with wildcards} +\entry {problems with wildcards}{21}{problems with wildcards} \entry {vpath}{23}{vpath} \entry {search path for dependencies (VPATH)}{23}{search path for dependencies (\code {VPATH})} \entry {directory search (VPATH)}{23}{directory search (\code {VPATH})} @@ -130,13 +130,13 @@ \entry {quoting %, in vpath}{25}{quoting \code {%}, in \code {vpath}} \entry {shell command, and directory search}{26}{shell command, and directory search} \entry {directory search (VPATH), and shell commands}{26}{directory search (\code {VPATH}), and shell commands} -\entry {VPATH, and implicit rules}{27}{\code {VPATH}, and implicit rules} -\entry {directory search (VPATH), and implicit rules}{27}{directory search (\code {VPATH}), and implicit rules} -\entry {search path for dependencies (VPATH), and implicit rules}{27}{search path for dependencies (\code {VPATH}), and implicit rules} -\entry {implicit rule, and directory search}{27}{implicit rule, and directory search} -\entry {implicit rule, and VPATH}{27}{implicit rule, and \code {VPATH}} -\entry {rule, implicit, and directory search}{27}{rule, implicit, and directory search} -\entry {rule, implicit, and VPATH}{27}{rule, implicit, and \code {VPATH}} +\entry {VPATH, and implicit rules}{26}{\code {VPATH}, and implicit rules} +\entry {directory search (VPATH), and implicit rules}{26}{directory search (\code {VPATH}), and implicit rules} +\entry {search path for dependencies (VPATH), and implicit rules}{26}{search path for dependencies (\code {VPATH}), and implicit rules} +\entry {implicit rule, and directory search}{26}{implicit rule, and directory search} +\entry {implicit rule, and VPATH}{26}{implicit rule, and \code {VPATH}} +\entry {rule, implicit, and directory search}{26}{rule, implicit, and directory search} +\entry {rule, implicit, and VPATH}{26}{rule, implicit, and \code {VPATH}} \entry {link libraries, and directory search}{27}{link libraries, and directory search} \entry {libraries for linking, directory search}{27}{libraries for linking, directory search} \entry {directory search (VPATH), and link libraries}{27}{directory search (\code {VPATH}), and link libraries} @@ -143,14 +143,14 @@ \entry {VPATH, and link libraries}{27}{\code {VPATH}, and link libraries} \entry {search path for dependencies (VPATH), and link libraries}{27}{search path for dependencies (\code {VPATH}), and link libraries} \entry {-l (library search)}{27}{\code {-l} (library search)} -\entry {phony targets}{28}{phony targets} -\entry {targets, phony}{28}{targets, phony} -\entry {targets without a file}{28}{targets without a file} +\entry {phony targets}{27}{phony targets} +\entry {targets, phony}{27}{targets, phony} +\entry {targets without a file}{27}{targets without a file} \entry {rm (shell command)}{28}{\code {rm} (shell command)} -\entry {force targets}{30}{force targets} -\entry {targets, force}{30}{targets, force} -\entry {FORCE}{30}{\code {FORCE}} -\entry {rule, no commands or dependencies}{30}{rule, no commands or dependencies} +\entry {force targets}{29}{force targets} +\entry {targets, force}{29}{targets, force} +\entry {FORCE}{29}{\code {FORCE}} +\entry {rule, no commands or dependencies}{29}{rule, no commands or dependencies} \entry {empty targets}{30}{empty targets} \entry {targets, empty}{30}{targets, empty} \entry {recording events with empty targets}{30}{recording events with empty targets} @@ -157,9 +157,9 @@ \entry {print target}{30}{\code {print} target} \entry {lpr (shell command)}{30}{\code {lpr} (shell command)} \entry {touch (shell command)}{30}{\code {touch} (shell command)} -\entry {special targets}{31}{special targets} -\entry {built-in special targets}{31}{built-in special targets} -\entry {targets, built-in special}{31}{targets, built-in special} +\entry {special targets}{30}{special targets} +\entry {built-in special targets}{30}{built-in special targets} +\entry {targets, built-in special}{30}{targets, built-in special} \entry {precious targets}{31}{precious targets} \entry {preserving with .PRECIOUS}{31}{preserving with \code {.PRECIOUS}} \entry {multiple targets}{32}{multiple targets} @@ -179,18 +179,18 @@ \entry {pattern rules, static, syntax of}{34}{pattern rules, static, syntax of} \entry {target pattern, static (not implicit)}{34}{target pattern, static (not implicit)} \entry {stem}{34}{stem} -\entry {dependency pattern, static (not implicit)}{35}{dependency pattern, static (not implicit)} -\entry {%, quoting in static pattern}{35}{\code {%}, quoting in static pattern} -\entry {%, quoting with {\tt\indexbackslash } (backslash)}{35}{\code {%}, quoting with \code {{\tt\indexbackslash }} (backslash)} -\entry {{\tt\indexbackslash } (backslash), to quote %}{35}{\code {{\tt\indexbackslash }} (backslash), to quote \code {%}} -\entry {backslash ({\tt\indexbackslash }), to quote %}{35}{backslash (\code {{\tt\indexbackslash }}), to quote \code {%}} -\entry {quoting %, in static pattern}{35}{quoting \code {%}, in static pattern} +\entry {dependency pattern, static (not implicit)}{34}{dependency pattern, static (not implicit)} +\entry {%, quoting in static pattern}{34}{\code {%}, quoting in static pattern} +\entry {%, quoting with {\tt\indexbackslash } (backslash)}{34}{\code {%}, quoting with \code {{\tt\indexbackslash }} (backslash)} +\entry {{\tt\indexbackslash } (backslash), to quote %}{34}{\code {{\tt\indexbackslash }} (backslash), to quote \code {%}} +\entry {backslash ({\tt\indexbackslash }), to quote %}{34}{backslash (\code {{\tt\indexbackslash }}), to quote \code {%}} +\entry {quoting %, in static pattern}{34}{quoting \code {%}, in static pattern} \entry {rule, static pattern versus implicit}{36}{rule, static pattern versus implicit} \entry {static pattern rule, versus implicit}{36}{static pattern rule, versus implicit} -\entry {double-colon rules}{37}{double-colon rules} -\entry {rule, double-colon (::)}{37}{rule, double-colon (\code {::})} -\entry {multiple rules for one target (::)}{37}{multiple rules for one target (\code {::})} -\entry {:: rules (double-colon)}{37}{\code {::} rules (double-colon)} +\entry {double-colon rules}{36}{double-colon rules} +\entry {rule, double-colon (::)}{36}{rule, double-colon (\code {::})} +\entry {multiple rules for one target (::)}{36}{multiple rules for one target (\code {::})} +\entry {:: rules (double-colon)}{36}{\code {::} rules (double-colon)} \entry {dependencies, automatic generation}{37}{dependencies, automatic generation} \entry {automatic generation of dependencies}{37}{automatic generation of dependencies} \entry {generating dependencies automatically}{37}{generating dependencies automatically} @@ -197,8 +197,9 @@ \entry {#include}{37}{\code {#include}} \entry {-M (to compiler)}{37}{\code {-M} (to compiler)} \entry {make depend}{38}{\code {make depend}} -\entry {-e (shell flag)}{39}{\code {-e} (shell flag)} -\entry {sed (shell command)}{39}{\code {sed} (shell command)} +\entry {-e (shell flag)}{38}{\code {-e} (shell flag)} +\entry {-MM (to GNU compiler)}{38}{\code {-MM} (to GNU compiler)} +\entry {sed (shell command)}{38}{\code {sed} (shell command)} \entry {.d}{39}{\code {.d}} \entry {commands, how to write}{41}{commands, how to write} \entry {rule commands}{41}{rule commands} @@ -253,9 +254,13 @@ \entry {-k}{45}{\code {-k}} \entry {--keep-going}{45}{\code {--keep-going}} \entry {Emacs (M-x compile)}{45}{Emacs (\code {M-x compile})} +\entry {deletion of target files}{45}{deletion of target files} +\entry {removal of target files}{45}{removal of target files} +\entry {target, deleting on error}{45}{target, deleting on error} \entry {interrupt}{45}{interrupt} \entry {signal}{45}{signal} \entry {deletion of target files}{45}{deletion of target files} +\entry {removal of target files}{45}{removal of target files} \entry {target, deleting on interrupt}{45}{target, deleting on interrupt} \entry {killing (interruption)}{45}{killing (interruption)} \entry {recursion}{46}{recursion} @@ -263,7 +268,7 @@ \entry {-C}{46}{\code {-C}} \entry {--directory}{46}{\code {--directory}} \entry {recursion, and MAKE variable}{46}{recursion, and \code {MAKE} variable} -\entry {cd (shell command)}{46}{\code {cd} (shell command)} +\entry {cd (shell command)}{47}{\code {cd} (shell command)} \entry {-t, and recursion}{47}{\code {-t}, and recursion} \entry {recursion, and -t}{47}{recursion, and \code {-t}} \entry {--touch, and recursion}{47}{\code {--touch}, and recursion} @@ -278,6 +283,9 @@ \entry {recursion, level of}{49}{recursion, level of} \entry {options, and recursion}{50}{options, and recursion} \entry {recursion, and options}{50}{recursion, and options} +\entry {command line variable definitions, and recursion}{50}{command line variable definitions, and recursion} +\entry {variables, command line, and recursion}{50}{variables, command line, and recursion} +\entry {recursion, and command line variable definitions}{50}{recursion, and command line variable definitions} \entry {-C, and recursion}{50}{\code {-C}, and recursion} \entry {-f, and recursion}{50}{\code {-f}, and recursion} \entry {-I, and recursion}{50}{\code {-I}, and recursion} @@ -299,13 +307,16 @@ \entry {--jobs, and recursion}{50}{\code {--jobs}, and recursion} \entry {recursion, and -j}{50}{recursion, and \code {-j}} \entry {job slots, and recursion}{50}{job slots, and recursion} +\entry {Arg list too long}{51}{Arg list too long} +\entry {E2BIG}{51}{E2BIG} +\entry {POSIX.2}{51}{POSIX.2} \entry {setting options from environment}{51}{setting options from environment} \entry {options, setting from environment}{51}{options, setting from environment} \entry {setting options in makefiles}{51}{setting options in makefiles} \entry {options, setting in makefiles}{51}{options, setting in makefiles} -\entry {directories, printing them}{51}{directories, printing them} -\entry {printing directories}{51}{printing directories} -\entry {recursion, and printing directories}{51}{recursion, and printing directories} +\entry {directories, printing them}{52}{directories, printing them} +\entry {printing directories}{52}{printing directories} +\entry {recursion, and printing directories}{52}{recursion, and printing directories} \entry {-C, and -w}{52}{\code {-C}, and \code {-w}} \entry {--directory, and --print-directory}{52}{\code {--directory}, and \code {--print-directory}} \entry {recursion, and -w}{52}{recursion, and \code {-w}} @@ -318,7 +329,7 @@ \entry {-w, disabling}{52}{\code {-w}, disabling} \entry {sequences of commands}{52}{sequences of commands} \entry {commands, sequences of}{52}{commands, sequences of} -\entry {yacc}{52}{\code {yacc}} +\entry {yacc}{53}{\code {yacc}} \entry {{\tt\char'100}, and define}{53}{{\tt\char'100}, and \code {define}} \entry {-, and define}{53}{-, and \code {define}} \entry {{\tt\char43}, and define}{53}{{\tt\char43}, and \code {define}} @@ -427,14 +438,14 @@ \entry {words, iterating over}{83}{words, iterating over} \entry {variables, origin of}{85}{variables, origin of} \entry {origin of variable}{85}{origin of variable} -\entry {commands, expansion}{87}{commands, expansion} -\entry {backquotes}{87}{backquotes} -\entry {shell command, function for}{87}{shell command, function for} +\entry {commands, expansion}{86}{commands, expansion} +\entry {backquotes}{86}{backquotes} +\entry {shell command, function for}{86}{shell command, function for} \entry {--file}{89}{\code {--file}} \entry {--makefile}{89}{\code {--makefile}} \entry {-f}{89}{\code {-f}} -\entry {goal, how to specify}{90}{goal, how to specify} -\entry {all (standard target)}{91}{\code {all} \r {(standard target)}} +\entry {goal, how to specify}{89}{goal, how to specify} +\entry {all (standard target)}{90}{\code {all} \r {(standard target)}} \entry {clean (standard target)}{91}{\code {clean} \r {(standard target)}} \entry {mostlyclean (standard target)}{91}{\code {mostlyclean} \r {(standard target)}} \entry {distclean (standard target)}{91}{\code {distclean} \r {(standard target)}} @@ -640,8 +651,8 @@ \entry {preserving intermediate files}{109}{preserving intermediate files} \entry {preserving with .PRECIOUS}{109}{preserving with \code {.PRECIOUS}} \entry {.PRECIOUS intermediate files}{109}{\code {.PRECIOUS} intermediate files} -\entry {pattern rule}{110}{pattern rule} -\entry {rule, pattern}{110}{rule, pattern} +\entry {pattern rule}{109}{pattern rule} +\entry {rule, pattern}{109}{rule, pattern} \entry {target pattern, implicit}{110}{target pattern, implicit} \entry {%, in pattern rules}{110}{\code {%}, in pattern rules} \entry {dependency pattern, implicit}{110}{dependency pattern, implicit} @@ -669,11 +680,15 @@ \entry {archive}{121}{archive} \entry {archive member targets}{121}{archive member targets} \entry {wildcard, in archive member}{121}{wildcard, in archive member} -\entry {{\_}{\_}.SYMDEF}{123}{\code {{\_}{\_}.SYMDEF}} -\entry {updating archive symbol directories}{123}{updating archive symbol directories} -\entry {archive symbol directory updating}{123}{archive symbol directory updating} -\entry {symbol directories, updating archive}{123}{symbol directories, updating archive} -\entry {directories, updating archive symbol}{123}{directories, updating archive symbol} +\entry {{\_}{\_}.SYMDEF}{122}{\code {{\_}{\_}.SYMDEF}} +\entry {updating archive symbol directories}{122}{updating archive symbol directories} +\entry {archive symbol directory updating}{122}{archive symbol directory updating} +\entry {symbol directories, updating archive}{122}{symbol directories, updating archive} +\entry {directories, updating archive symbol}{122}{directories, updating archive symbol} +\entry {archive, and parallel execution}{123}{archive, and parallel execution} +\entry {parallel execution, and archive update}{123}{parallel execution, and archive update} +\entry {archive, and -j}{123}{archive, and \code {-j}} +\entry {-j, and archive update}{123}{\code {-j}, and archive update} \entry {suffix rule, for archive}{123}{suffix rule, for archive} \entry {archive, suffix rule for}{123}{archive, suffix rule for} \entry {library archive, suffix rule for}{123}{library archive, suffix rule for} diff -ruN make-3.71/make.cps make-3.72.1/make.cps --- make-3.71/make.cps Mon May 16 23:53:41 1994 +++ make-3.72.1/make.cps Fri Nov 4 15:26:59 1994 @@ -1,642 +1,655 @@ \initial {#} -\entry {\code {#} (comments), in commands}{39} -\entry {\code {#} (comments), in makefile}{11} -\entry {\code {#include}}{36} +\entry {\code {#} (comments), in commands}{41} +\entry {\code {#} (comments), in makefile}{13} +\entry {\code {#include}}{37} \initial {$} -\entry {\code {$}, in function call}{75} -\entry {\code {$}, in rules}{18} -\entry {\code {$}, in variable name}{58} -\entry {\code {$}, in variable reference}{53} +\entry {\code {$}, in function call}{77} +\entry {\code {$}, in rules}{20} +\entry {\code {$}, in variable name}{60} +\entry {\code {$}, in variable reference}{55} \initial {%} -\entry {\code {%}, in pattern rules}{108} -\entry {\code {%}, quoting in \code {patsubst}}{76} -\entry {\code {%}, quoting in static pattern}{33} -\entry {\code {%}, quoting in \code {vpath}}{23} -\entry {\code {%}, quoting with \code {{\tt\indexbackslash }} (backslash)}{23, 33, 76} +\entry {\code {%}, in pattern rules}{110} +\entry {\code {%}, quoting in \code {patsubst}}{78} +\entry {\code {%}, quoting in static pattern}{34} +\entry {\code {%}, quoting in \code {vpath}}{25} +\entry {\code {%}, quoting with \code {{\tt\indexbackslash }} (backslash)}{25, 34, 78} \initial {*} -\entry {\code {*} (wildcard character)}{18} +\entry {\code {*} (wildcard character)}{20} \initial {,} -\entry {\code {,v \r {(RCS file extension)}}}{103} +\entry {\code {,v \r {(RCS file extension)}}}{105} \initial {-} -\entry {\code {-} (in commands)}{42} -\entry {-, and \code {define}}{51} -\entry {\code {--assume-new}}{90, 97} -\entry {\code {--assume-new}, and recursion}{48} -\entry {\code {--assume-old}}{91, 95} -\entry {\code {--assume-old}, and recursion}{48} -\entry {\code {--debug}}{94} -\entry {\code {--directory}}{44, 93} -\entry {\code {--directory}, and \code {--print-directory}}{50} -\entry {\code {--directory}, and recursion}{48} -\entry {\code {--dry-run}}{39, 89, 95} -\entry {\code {--environment-overrides}}{94} -\entry {\code {--file}}{12, 87, 94} -\entry {\code {--file}, and recursion}{48} -\entry {\code {--help}}{94} -\entry {\code {--ignore-errors}}{42, 94} -\entry {\code {--include-dir}}{13, 94} -\entry {\code {--include-dir}, and recursion}{48} -\entry {\code {--jobs}}{40, 94} -\entry {\code {--jobs}, and recursion}{48} -\entry {\code {--just-print}}{39, 89, 95} -\entry {\code {--keep-going}}{43, 93, 94} -\entry {\code {--load-average}}{41, 95} -\entry {\code {--makefile}}{12, 87, 94} -\entry {\code {--max-load}}{41, 95} -\entry {\code {--new-file}}{90, 97} -\entry {\code {--new-file}, and recursion}{48} -\entry {\code {--no-builtin-rules}}{95} -\entry {\code {--no-keep-going}}{96} -\entry {\code {--no-print-directory}}{50, 96} -\entry {\code {--old-file}}{91, 95} -\entry {\code {--old-file}, and recursion}{48} -\entry {\code {--print-data-base}}{95} -\entry {\code {--print-directory}}{96} -\entry {\code {--print-directory}, and \code {--directory}}{50} -\entry {\code {--print-directory}, and recursion}{50} -\entry {\code {--print-directory}, disabling}{50} -\entry {\code {--question}}{90, 95} -\entry {\code {--quiet}}{39, 96} -\entry {\code {--recon}}{39, 89, 95} -\entry {\code {--silent}}{39, 96} -\entry {\code {--stop}}{96} -\entry {\code {--touch}}{90, 96} -\entry {\code {--touch}, and recursion}{45} -\entry {\code {--version}}{96} -\entry {\code {--warn-undefined-variables}}{97} -\entry {\code {--what-if}}{90, 97} -\entry {\code {-b}}{93} -\entry {\code {-C}}{44, 93} -\entry {\code {-C}, and \code {-w}}{50} -\entry {\code {-C}, and recursion}{48} -\entry {\code {-d}}{94} -\entry {\code {-e}}{94} -\entry {\code {-e} (shell flag)}{37} -\entry {\code {-f}}{12, 87, 94} -\entry {\code {-f}, and recursion}{48} -\entry {\code {-h}}{94} -\entry {\code {-i}}{42, 94} -\entry {\code {-I}}{13, 94} -\entry {\code {-I}, and recursion}{48} -\entry {\code {-j}}{40, 94} -\entry {\code {-j}, and recursion}{48} -\entry {\code {-k}}{43, 93, 94} -\entry {\code {-l}}{95} -\entry {\code {-l} (library search)}{25} -\entry {\code {-l} (load average)}{41} -\entry {\code {-m}}{93} -\entry {\code {-M} (to compiler)}{36} -\entry {\code {-n}}{39, 89, 95} -\entry {\code {-o}}{91, 95} -\entry {\code {-o}, and recursion}{48} -\entry {\code {-p}}{95} -\entry {\code {-q}}{90, 95} -\entry {\code {-r}}{95} -\entry {\code {-s}}{39, 96} -\entry {\code {-S}}{96} -\entry {\code {-t}}{90, 96} -\entry {\code {-t}, and recursion}{45} -\entry {\code {-v}}{96} -\entry {\code {-w}}{96} -\entry {\code {-W}}{90, 96} -\entry {\code {-w}, and \code {-C}}{50} -\entry {\code {-w}, and recursion}{50} -\entry {\code {-W}, and recursion}{48} -\entry {\code {-w}, disabling}{50} +\entry {\code {-} (in commands)}{44} +\entry {-, and \code {define}}{53} +\entry {\code {--assume-new}}{92, 98} +\entry {\code {--assume-new}, and recursion}{50} +\entry {\code {--assume-old}}{93, 97} +\entry {\code {--assume-old}, and recursion}{50} +\entry {\code {--debug}}{96} +\entry {\code {--directory}}{46, 95} +\entry {\code {--directory}, and \code {--print-directory}}{52} +\entry {\code {--directory}, and recursion}{50} +\entry {\code {--dry-run}}{41, 91, 97} +\entry {\code {--environment-overrides}}{96} +\entry {\code {--file}}{14, 89, 96} +\entry {\code {--file}, and recursion}{50} +\entry {\code {--help}}{96} +\entry {\code {--ignore-errors}}{44, 96} +\entry {\code {--include-dir}}{15, 96} +\entry {\code {--include-dir}, and recursion}{50} +\entry {\code {--jobs}}{42, 96} +\entry {\code {--jobs}, and recursion}{50} +\entry {\code {--just-print}}{41, 91, 97} +\entry {\code {--keep-going}}{45, 95, 96} +\entry {\code {--load-average}}{43, 97} +\entry {\code {--makefile}}{14, 89, 96} +\entry {\code {--max-load}}{43, 97} +\entry {\code {--new-file}}{92, 98} +\entry {\code {--new-file}, and recursion}{50} +\entry {\code {--no-builtin-rules}}{97} +\entry {\code {--no-keep-going}}{98} +\entry {\code {--no-print-directory}}{52, 98} +\entry {\code {--old-file}}{93, 97} +\entry {\code {--old-file}, and recursion}{50} +\entry {\code {--print-data-base}}{97} +\entry {\code {--print-directory}}{98} +\entry {\code {--print-directory}, and \code {--directory}}{52} +\entry {\code {--print-directory}, and recursion}{52} +\entry {\code {--print-directory}, disabling}{52} +\entry {\code {--question}}{92, 97} +\entry {\code {--quiet}}{41, 98} +\entry {\code {--recon}}{41, 91, 97} +\entry {\code {--silent}}{41, 98} +\entry {\code {--stop}}{98} +\entry {\code {--touch}}{92, 98} +\entry {\code {--touch}, and recursion}{47} +\entry {\code {--version}}{98} +\entry {\code {--warn-undefined-variables}}{99} +\entry {\code {--what-if}}{92, 98} +\entry {\code {-b}}{95} +\entry {\code {-C}}{46, 95} +\entry {\code {-C}, and \code {-w}}{52} +\entry {\code {-C}, and recursion}{50} +\entry {\code {-d}}{96} +\entry {\code {-e}}{96} +\entry {\code {-e} (shell flag)}{38} +\entry {\code {-f}}{14, 89, 96} +\entry {\code {-f}, and recursion}{50} +\entry {\code {-h}}{96} +\entry {\code {-i}}{44, 96} +\entry {\code {-I}}{15, 96} +\entry {\code {-I}, and recursion}{50} +\entry {\code {-j}}{42, 96} +\entry {\code {-j}, and archive update}{123} +\entry {\code {-j}, and recursion}{50} +\entry {\code {-k}}{45, 95, 96} +\entry {\code {-l}}{97} +\entry {\code {-l} (library search)}{27} +\entry {\code {-l} (load average)}{43} +\entry {\code {-m}}{95} +\entry {\code {-M} (to compiler)}{37} +\entry {\code {-MM} (to GNU compiler)}{38} +\entry {\code {-n}}{41, 91, 97} +\entry {\code {-o}}{93, 97} +\entry {\code {-o}, and recursion}{50} +\entry {\code {-p}}{97} +\entry {\code {-q}}{92, 97} +\entry {\code {-r}}{97} +\entry {\code {-s}}{41, 97} +\entry {\code {-S}}{98} +\entry {\code {-t}}{92, 98} +\entry {\code {-t}, and recursion}{47} +\entry {\code {-v}}{98} +\entry {\code {-w}}{98} +\entry {\code {-W}}{92, 98} +\entry {\code {-w}, and \code {-C}}{52} +\entry {\code {-w}, and recursion}{52} +\entry {\code {-W}, and recursion}{50} +\entry {\code {-w}, disabling}{52} \initial {.} -\entry {\code {.a} (archives)}{121} -\entry {\code {.c}}{101} -\entry {\code {.C}}{101} -\entry {\code {.cc}}{101} -\entry {\code {.ch}}{103} -\entry {\code {.d}}{37} -\entry {\code {.def}}{102} -\entry {\code {.dvi}}{103} -\entry {\code {.f}}{101} -\entry {\code {.F}}{101} -\entry {\code {.info}}{103} -\entry {\code {.l}}{103} -\entry {\code {.ln}}{103} -\entry {\code {.mod}}{102} -\entry {\code {.o}}{101, 102} -\entry {\code {.p}}{101} -\entry {\code {.PRECIOUS} intermediate files}{107} -\entry {\code {.r}}{101} -\entry {\code {.s}}{102} -\entry {\code {.S}}{102} -\entry {\code {.sh}}{103} -\entry {\code {.sym}}{102} -\entry {\code {.tex}}{103} -\entry {\code {.texi}}{103} -\entry {\code {.texinfo}}{103} -\entry {\code {.txinfo}}{103} -\entry {\code {.w}}{103} -\entry {\code {.web}}{103} -\entry {\code {.y}}{103} +\entry {\code {.a} (archives)}{123} +\entry {\code {.c}}{103} +\entry {\code {.C}}{103} +\entry {\code {.cc}}{103} +\entry {\code {.ch}}{105} +\entry {\code {.d}}{39} +\entry {\code {.def}}{104} +\entry {\code {.dvi}}{105} +\entry {\code {.f}}{103} +\entry {\code {.F}}{103} +\entry {\code {.info}}{105} +\entry {\code {.l}}{105} +\entry {\code {.ln}}{105} +\entry {\code {.mod}}{104} +\entry {\code {.o}}{103, 104} +\entry {\code {.p}}{103} +\entry {\code {.PRECIOUS} intermediate files}{109} +\entry {\code {.r}}{103} +\entry {\code {.s}}{104} +\entry {\code {.S}}{104} +\entry {\code {.sh}}{105} +\entry {\code {.sym}}{104} +\entry {\code {.tex}}{105} +\entry {\code {.texi}}{105} +\entry {\code {.texinfo}}{105} +\entry {\code {.txinfo}}{105} +\entry {\code {.w}}{105} +\entry {\code {.web}}{105} +\entry {\code {.y}}{105} \initial {:} -\entry {\code {::} rules (double-colon)}{35} -\entry {:=}{55, 61} +\entry {\code {::} rules (double-colon)}{36} +\entry {:=}{57, 63} \initial {=} -\entry {=}{54, 61} +\entry {=}{56, 63} \initial {?} -\entry {\code {?} (wildcard character)}{18} +\entry {\code {?} (wildcard character)}{20} \initial {[} -\entry {\code {[\dots {}]} (wildcard characters)}{18} +\entry {\code {[\dots {}]} (wildcard characters)}{20} \initial {{\_}} -\entry {\code {{\_}{\_}.SYMDEF}}{121} +\entry {\code {{\_}{\_}.SYMDEF}}{122} \initial {{\tt\char'100}} -\entry {\code {{\tt\char'100}} (in commands)}{39} -\entry {{\tt\char'100}, and \code {define}}{51} +\entry {\code {{\tt\char'100}} (in commands)}{41} +\entry {{\tt\char'100}, and \code {define}}{53} \initial {{\tt\char'176}} -\entry {\code {{\tt\char'176}} (tilde)}{18} +\entry {\code {{\tt\char'176}} (tilde)}{20} \initial {{\tt\char43}} -\entry {{\tt\char43}, and \code {define}}{51} -\entry {{\tt\char43}=}{62} +\entry {{\tt\char43}, and \code {define}}{53} +\entry {{\tt\char43}=}{64} \initial {{\tt\indexbackslash }} -\entry {\code {{\tt\indexbackslash }} (backslash), for continuation lines}{5} -\entry {\code {{\tt\indexbackslash }} (backslash), in commands}{40} -\entry {\code {{\tt\indexbackslash }} (backslash), to quote \code {%}}{23, 33, 76} +\entry {\code {{\tt\indexbackslash }} (backslash), for continuation lines}{7} +\entry {\code {{\tt\indexbackslash }} (backslash), in commands}{42} +\entry {\code {{\tt\indexbackslash }} (backslash), to quote \code {%}}{25, 34, 78} \initial {A} -\entry {\code {all} \r {(standard target)}}{89} -\entry {appending to variables}{62} -\entry {\code {ar}}{105} -\entry {archive}{119} -\entry {archive member targets}{119} -\entry {archive symbol directory updating}{121} -\entry {archive, suffix rule for}{121} -\entry {arguments of functions}{75} -\entry {\code {as}}{102, 105} -\entry {assembly, rule to compile}{102} -\entry {automatic generation of dependencies}{13, 35} -\entry {automatic variables}{110} +\entry {\code {all} \r {(standard target)}}{90} +\entry {appending to variables}{64} +\entry {\code {ar}}{107} +\entry {archive}{121} +\entry {archive member targets}{121} +\entry {archive symbol directory updating}{122} +\entry {archive, and \code {-j}}{123} +\entry {archive, and parallel execution}{123} +\entry {archive, suffix rule for}{123} +\entry {Arg list too long}{51} +\entry {arguments of functions}{77} +\entry {\code {as}}{104, 107} +\entry {assembly, rule to compile}{104} +\entry {automatic generation of dependencies}{15, 37} +\entry {automatic variables}{112} \initial {B} -\entry {backquotes}{85} -\entry {backslash (\code {{\tt\indexbackslash }}), for continuation lines}{5} -\entry {backslash (\code {{\tt\indexbackslash }}), in commands}{40} -\entry {backslash (\code {{\tt\indexbackslash }}), to quote \code {%}}{23, 33, 76} -\entry {basename}{80} -\entry {broken pipe}{41} +\entry {backquotes}{86} +\entry {backslash (\code {{\tt\indexbackslash }}), for continuation lines}{7} +\entry {backslash (\code {{\tt\indexbackslash }}), in commands}{42} +\entry {backslash (\code {{\tt\indexbackslash }}), to quote \code {%}}{25, 34, 78} +\entry {basename}{82} +\entry {broken pipe}{43} \entry {bugs, reporting}{2} -\entry {built-in special targets}{29} +\entry {built-in special targets}{30} \initial {C} -\entry {C, rule to compile}{101} -\entry {C{\tt\char43}{\tt\char43}, rule to compile}{101} -\entry {\code {cc}}{101, 105} -\entry {\code {cd} (shell command)}{40, 44} -\entry {chains of rules}{106} -\entry {\code {check} \r {(standard target)}}{89} -\entry {\code {clean} \r {(standard target)}}{89} -\entry {\code {clean} target}{6, 10} -\entry {cleaning up}{10} -\entry {\code {clobber} \r {(standard target)}}{89} -\entry {\code {co}}{103, 105} -\entry {combining rules by dependency}{9} -\entry {command line variables}{92} -\entry {commands}{17} -\entry {commands, backslash (\code {{\tt\indexbackslash }}) in}{40} -\entry {commands, comments in}{39} -\entry {commands, echoing}{39} -\entry {commands, empty}{52} -\entry {commands, errors in}{42} -\entry {commands, execution}{40} -\entry {commands, execution in parallel}{40} -\entry {commands, expansion}{85} -\entry {commands, how to write}{39} -\entry {commands, instead of executing}{89} -\entry {commands, introduction to}{3} -\entry {commands, quoting newlines in}{40} -\entry {commands, sequences of}{50} -\entry {comments, in commands}{39} -\entry {comments, in makefile}{11} -\entry {compatibility}{123} -\entry {compatibility in exporting}{47} -\entry {compilation, testing}{93} -\entry {computed variable name}{58} -\entry {conditionals}{69} -\entry {continuation lines}{5} -\entry {conventions for makefiles}{129} -\entry {\code {ctangle}}{103, 105} -\entry {\code {cweave}}{103, 105} +\entry {C, rule to compile}{103} +\entry {C{\tt\char43}{\tt\char43}, rule to compile}{103} +\entry {\code {cc}}{103, 107} +\entry {\code {cd} (shell command)}{42, 47} +\entry {chains of rules}{108} +\entry {\code {check} \r {(standard target)}}{91} +\entry {\code {clean} \r {(standard target)}}{91} +\entry {\code {clean} target}{8, 12} +\entry {cleaning up}{12} +\entry {\code {clobber} \r {(standard target)}}{91} +\entry {\code {co}}{105, 107} +\entry {combining rules by dependency}{11} +\entry {command line variable definitions, and recursion}{50} +\entry {command line variables}{94} +\entry {commands}{19} +\entry {commands, backslash (\code {{\tt\indexbackslash }}) in}{42} +\entry {commands, comments in}{41} +\entry {commands, echoing}{41} +\entry {commands, empty}{54} +\entry {commands, errors in}{44} +\entry {commands, execution}{42} +\entry {commands, execution in parallel}{42} +\entry {commands, expansion}{86} +\entry {commands, how to write}{41} +\entry {commands, instead of executing}{91} +\entry {commands, introduction to}{5} +\entry {commands, quoting newlines in}{42} +\entry {commands, sequences of}{52} +\entry {comments, in commands}{41} +\entry {comments, in makefile}{13} +\entry {compatibility}{125} +\entry {compatibility in exporting}{49} +\entry {compilation, testing}{95} +\entry {computed variable name}{60} +\entry {conditionals}{71} +\entry {continuation lines}{7} +\entry {conventions for makefiles}{131} +\entry {\code {ctangle}}{105, 107} +\entry {\code {cweave}}{105, 107} \initial {D} -\entry {deducing commands (implicit rules)}{8} -\entry {default goal}{6, 17} -\entry {default makefile name}{12} -\entry {default rules, last-resort}{114} -\entry {defining variables verbatim}{65} -\entry {deletion of target files}{43} -\entry {dependencies}{18} -\entry {dependencies, automatic generation}{13, 35} -\entry {dependencies, introduction to}{3} -\entry {dependencies, list of all}{110} -\entry {dependencies, list of changed}{110} -\entry {dependencies, varying (static pattern)}{32} -\entry {dependency}{17} -\entry {dependency pattern, implicit}{108} -\entry {dependency pattern, static (not implicit)}{33} -\entry {directive}{11} -\entry {directories, printing them}{49} -\entry {directories, updating archive symbol}{121} -\entry {directory part}{79} -\entry {directory search (\code {VPATH})}{21} -\entry {directory search (\code {VPATH}), and implicit rules}{25} -\entry {directory search (\code {VPATH}), and link libraries}{25} -\entry {directory search (\code {VPATH}), and shell commands}{24} -\entry {\code {dist} \r {(standard target)}}{89} -\entry {\code {distclean} \r {(standard target)}}{89} -\entry {dollar sign (\code {$}), in function call}{75} -\entry {dollar sign (\code {$}), in rules}{18} -\entry {dollar sign (\code {$}), in variable name}{58} -\entry {dollar sign (\code {$}), in variable reference}{53} -\entry {double-colon rules}{35} -\entry {duplicate words, removing}{78} +\entry {deducing commands (implicit rules)}{10} +\entry {default goal}{8, 19} +\entry {default makefile name}{13} +\entry {default rules, last-resort}{116} +\entry {defining variables verbatim}{67} +\entry {deletion of target files}{45} +\entry {dependencies}{20} +\entry {dependencies, automatic generation}{15, 37} +\entry {dependencies, introduction to}{5} +\entry {dependencies, list of all}{112} +\entry {dependencies, list of changed}{112} +\entry {dependencies, varying (static pattern)}{34} +\entry {dependency}{19} +\entry {dependency pattern, implicit}{110} +\entry {dependency pattern, static (not implicit)}{34} +\entry {directive}{13} +\entry {directories, printing them}{52} +\entry {directories, updating archive symbol}{122} +\entry {directory part}{81} +\entry {directory search (\code {VPATH})}{23} +\entry {directory search (\code {VPATH}), and implicit rules}{26} +\entry {directory search (\code {VPATH}), and link libraries}{27} +\entry {directory search (\code {VPATH}), and shell commands}{26} +\entry {\code {dist} \r {(standard target)}}{91} +\entry {\code {distclean} \r {(standard target)}}{91} +\entry {dollar sign (\code {$}), in function call}{77} +\entry {dollar sign (\code {$}), in rules}{20} +\entry {dollar sign (\code {$}), in variable name}{60} +\entry {dollar sign (\code {$}), in variable reference}{55} +\entry {double-colon rules}{36} +\entry {duplicate words, removing}{80} \initial {E} -\entry {echoing of commands}{39} -\entry {editor}{3} -\entry {Emacs (\code {M-x compile})}{43} -\entry {empty commands}{52} -\entry {empty targets}{28} -\entry {environment}{66} -\entry {environment, and recursion}{45} -\entry {environment, \code {SHELL} in}{40} -\entry {errors (in commands)}{42} -\entry {errors with wildcards}{20} -\entry {execution, in parallel}{40} -\entry {execution, instead of}{89} -\entry {execution, of commands}{40} -\entry {exit status (errors)}{42} -\entry {explicit rule, definition of}{11} -\entry {exporting variables}{45} +\entry {E2BIG}{51} +\entry {echoing of commands}{41} +\entry {editor}{5} +\entry {Emacs (\code {M-x compile})}{45} +\entry {empty commands}{54} +\entry {empty targets}{30} +\entry {environment}{68} +\entry {environment, and recursion}{47} +\entry {environment, \code {SHELL} in}{42} +\entry {errors (in commands)}{44} +\entry {errors with wildcards}{21} +\entry {execution, in parallel}{42} +\entry {execution, instead of}{91} +\entry {execution, of commands}{42} +\entry {exit status (errors)}{44} +\entry {explicit rule, definition of}{13} +\entry {exporting variables}{47} \initial {F} -\entry {\code {f77}}{101, 105} -\entry {features of GNU \code {make}}{123} -\entry {features, missing}{127} -\entry {file name functions}{79} -\entry {file name of makefile}{12} -\entry {file name of makefile, how to specify}{12} -\entry {file name prefix, adding}{80} -\entry {file name suffix}{80} -\entry {file name suffix, adding}{80} -\entry {file name with wildcards}{18} -\entry {file name, basename of}{80} -\entry {file name, directory part}{79} -\entry {file name, nondirectory part}{79} -\entry {files, assuming new}{90} -\entry {files, assuming old}{91} -\entry {files, avoiding recompilation of}{91} -\entry {files, intermediate}{106} -\entry {filtering out words}{78} -\entry {filtering words}{78} -\entry {finding strings}{77} -\entry {flags}{93} -\entry {flags for compilers}{104} -\entry {flavors of variables}{54} -\entry {\code {FORCE}}{28} -\entry {force targets}{28} -\entry {Fortran, rule to compile}{101} -\entry {functions}{75} -\entry {functions, for file names}{79} -\entry {functions, for text}{76} -\entry {functions, syntax of}{75} +\entry {\code {f77}}{103, 107} +\entry {features of GNU \code {make}}{125} +\entry {features, missing}{129} +\entry {file name functions}{81} +\entry {file name of makefile}{13} +\entry {file name of makefile, how to specify}{14} +\entry {file name prefix, adding}{82} +\entry {file name suffix}{82} +\entry {file name suffix, adding}{82} +\entry {file name with wildcards}{20} +\entry {file name, basename of}{82} +\entry {file name, directory part}{81} +\entry {file name, nondirectory part}{81} +\entry {files, assuming new}{92} +\entry {files, assuming old}{93} +\entry {files, avoiding recompilation of}{93} +\entry {files, intermediate}{108} +\entry {filtering out words}{80} +\entry {filtering words}{80} +\entry {finding strings}{79} +\entry {flags}{95} +\entry {flags for compilers}{106} +\entry {flavors of variables}{56} +\entry {\code {FORCE}}{29} +\entry {force targets}{29} +\entry {Fortran, rule to compile}{103} +\entry {functions}{77} +\entry {functions, for file names}{81} +\entry {functions, for text}{78} +\entry {functions, syntax of}{77} \initial {G} -\entry {\code {g{\tt\char43}{\tt\char43}}}{101, 105} -\entry {\code {gcc}}{101} -\entry {generating dependencies automatically}{13, 35} -\entry {\code {get}}{103, 105} -\entry {globbing (wildcards)}{18} -\entry {goal}{6} -\entry {goal, default}{6, 17} -\entry {goal, how to specify}{88} +\entry {\code {g{\tt\char43}{\tt\char43}}}{103, 107} +\entry {\code {gcc}}{103} +\entry {generating dependencies automatically}{15, 37} +\entry {\code {get}}{105, 107} +\entry {globbing (wildcards)}{20} +\entry {goal}{8} +\entry {goal, default}{8, 19} +\entry {goal, how to specify}{89} \initial {H} -\entry {home directory}{18} +\entry {home directory}{20} \initial {I} \entry {IEEE Standard 1003.2}{1} -\entry {implicit rule}{99} -\entry {implicit rule, and directory search}{25} -\entry {implicit rule, and \code {VPATH}}{25} -\entry {implicit rule, definition of}{11} -\entry {implicit rule, how to use}{99} -\entry {implicit rule, introduction to}{8} -\entry {implicit rule, predefined}{101} -\entry {implicit rule, search algorithm}{117} -\entry {including (\code {MAKEFILES} variable)}{14} -\entry {including other makefiles}{12} -\entry {incompatibilities}{127} -\entry {Info, rule to format}{103} -\entry {\code {install} \r {(standard target)}}{89} -\entry {intermediate files}{106} -\entry {intermediate files, preserving}{107} -\entry {interrupt}{43} +\entry {implicit rule}{101} +\entry {implicit rule, and directory search}{26} +\entry {implicit rule, and \code {VPATH}}{26} +\entry {implicit rule, definition of}{13} +\entry {implicit rule, how to use}{101} +\entry {implicit rule, introduction to}{10} +\entry {implicit rule, predefined}{103} +\entry {implicit rule, search algorithm}{119} +\entry {including (\code {MAKEFILES} variable)}{16} +\entry {including other makefiles}{14} +\entry {incompatibilities}{129} +\entry {Info, rule to format}{105} +\entry {\code {install} \r {(standard target)}}{91} +\entry {intermediate files}{108} +\entry {intermediate files, preserving}{109} +\entry {interrupt}{45} \initial {J} -\entry {job slots}{40} -\entry {job slots, and recursion}{48} -\entry {jobs, limiting based on load}{41} -\entry {joining lists of words}{80} +\entry {job slots}{42} +\entry {job slots, and recursion}{50} +\entry {jobs, limiting based on load}{43} +\entry {joining lists of words}{82} \initial {K} -\entry {killing (interruption)}{43} +\entry {killing (interruption)}{45} \initial {L} -\entry {last-resort default rules}{114} -\entry {\code {ld}}{102} -\entry {\code {lex}}{103, 105} -\entry {Lex, rule to run}{103} -\entry {libraries for linking, directory search}{25} -\entry {library archive, suffix rule for}{121} -\entry {limiting jobs based on load}{41} -\entry {link libraries, and directory search}{25} -\entry {linking, predefined rule for}{102} -\entry {\code {lint}}{103} -\entry {\code {lint}, rule to run}{103} -\entry {list of all dependencies}{110} -\entry {list of changed dependencies}{110} -\entry {load average}{41} -\entry {loops in variable expansion}{55} -\entry {\code {lpr} (shell command)}{19, 28} +\entry {last-resort default rules}{116} +\entry {\code {ld}}{104} +\entry {\code {lex}}{105, 107} +\entry {Lex, rule to run}{105} +\entry {libraries for linking, directory search}{27} +\entry {library archive, suffix rule for}{123} +\entry {limiting jobs based on load}{43} +\entry {link libraries, and directory search}{27} +\entry {linking, predefined rule for}{104} +\entry {\code {lint}}{105} +\entry {\code {lint}, rule to run}{105} +\entry {list of all dependencies}{112} +\entry {list of changed dependencies}{112} +\entry {load average}{43} +\entry {loops in variable expansion}{57} +\entry {\code {lpr} (shell command)}{21, 30} \initial {M} -\entry {\code {m2c}}{102} -\entry {macro}{53} -\entry {\code {make depend}}{36} -\entry {makefile}{3} -\entry {makefile name}{12} -\entry {makefile name, how to specify}{12} -\entry {makefile rule parts}{3} -\entry {makefile, and \code {MAKEFILES} variable}{14} -\entry {makefile, conventions for}{129} -\entry {makefile, how \code {make} processes}{6} -\entry {makefile, how to write}{11} -\entry {makefile, including}{12} -\entry {makefile, overriding}{16} -\entry {makefile, remaking of}{14} -\entry {makefile, simple}{4} -\entry {\code {makeinfo}}{103, 105} -\entry {match-anything rule}{112} -\entry {match-anything rule, used to override}{16} -\entry {missing features}{127} -\entry {mistakes with wildcards}{20} -\entry {modified variable reference}{57} -\entry {Modula-2, rule to compile}{102} -\entry {\code {mostlyclean} \r {(standard target)}}{89} -\entry {multiple rules for one target}{31} -\entry {multiple rules for one target (\code {::})}{35} -\entry {multiple targets}{30} -\entry {multiple targets, in pattern rule}{108} +\entry {\code {m2c}}{104} +\entry {macro}{55} +\entry {\code {make depend}}{38} +\entry {makefile}{5} +\entry {makefile name}{13} +\entry {makefile name, how to specify}{14} +\entry {makefile rule parts}{5} +\entry {makefile, and \code {MAKEFILES} variable}{16} +\entry {makefile, conventions for}{131} +\entry {makefile, how \code {make} processes}{8} +\entry {makefile, how to write}{13} +\entry {makefile, including}{14} +\entry {makefile, overriding}{18} +\entry {makefile, remaking of}{16} +\entry {makefile, simple}{6} +\entry {\code {makeinfo}}{105, 107} +\entry {match-anything rule}{114} +\entry {match-anything rule, used to override}{18} +\entry {missing features}{129} +\entry {mistakes with wildcards}{21} +\entry {modified variable reference}{59} +\entry {Modula-2, rule to compile}{104} +\entry {\code {mostlyclean} \r {(standard target)}}{91} +\entry {multiple rules for one target}{33} +\entry {multiple rules for one target (\code {::})}{36} +\entry {multiple targets}{32} +\entry {multiple targets, in pattern rule}{110} \initial {N} -\entry {name of makefile}{12} -\entry {name of makefile, how to specify}{12} -\entry {nested variable reference}{58} -\entry {newline, quoting, in commands}{40} -\entry {newline, quoting, in makefile}{5} -\entry {nondirectory part}{79} +\entry {name of makefile}{13} +\entry {name of makefile, how to specify}{14} +\entry {nested variable reference}{60} +\entry {newline, quoting, in commands}{42} +\entry {newline, quoting, in makefile}{7} +\entry {nondirectory part}{81} \initial {O} -\entry {\code {obj}}{7} -\entry {\code {OBJ}}{7} -\entry {\code {objects}}{7} -\entry {\code {OBJECTS}}{7} -\entry {\code {objs}}{7} -\entry {\code {OBJS}}{7} -\entry {old-fashioned suffix rules}{115} -\entry {options}{93} -\entry {options, and recursion}{48} -\entry {options, setting from environment}{49} -\entry {options, setting in makefiles}{49} -\entry {order of pattern rules}{109} -\entry {origin of variable}{83} -\entry {overriding makefiles}{16} -\entry {overriding variables with arguments}{92} -\entry {overriding with \code {override}}{64} +\entry {\code {obj}}{9} +\entry {\code {OBJ}}{9} +\entry {\code {objects}}{9} +\entry {\code {OBJECTS}}{9} +\entry {\code {objs}}{9} +\entry {\code {OBJS}}{9} +\entry {old-fashioned suffix rules}{117} +\entry {options}{95} +\entry {options, and recursion}{50} +\entry {options, setting from environment}{51} +\entry {options, setting in makefiles}{51} +\entry {order of pattern rules}{111} +\entry {origin of variable}{85} +\entry {overriding makefiles}{18} +\entry {overriding variables with arguments}{94} +\entry {overriding with \code {override}}{66} \initial {P} -\entry {parallel execution}{40} -\entry {parts of makefile rule}{3} -\entry {Pascal, rule to compile}{101} -\entry {pattern rule}{108} -\entry {pattern rules, order of}{109} -\entry {pattern rules, static (not implicit)}{32} -\entry {pattern rules, static, syntax of}{32} -\entry {\code {pc}}{101, 105} -\entry {phony targets}{26} -\entry {pitfalls of wildcards}{20} -\entry {portability}{123} +\entry {parallel execution}{42} +\entry {parallel execution, and archive update}{123} +\entry {parts of makefile rule}{5} +\entry {Pascal, rule to compile}{103} +\entry {pattern rule}{109} +\entry {pattern rules, order of}{111} +\entry {pattern rules, static (not implicit)}{34} +\entry {pattern rules, static, syntax of}{34} +\entry {\code {pc}}{103, 107} +\entry {phony targets}{27} +\entry {pitfalls of wildcards}{21} +\entry {portability}{125} \entry {POSIX}{1} -\entry {precious targets}{29} -\entry {prefix, adding}{80} -\entry {preserving intermediate files}{107} -\entry {preserving with \code {.PRECIOUS}}{29, 107} -\entry {\code {print} \r {(standard target)}}{89} -\entry {\code {print} target}{19, 28} -\entry {printing directories}{49} -\entry {printing of commands}{39} +\entry {POSIX.2}{51} +\entry {precious targets}{31} +\entry {prefix, adding}{82} +\entry {preserving intermediate files}{109} +\entry {preserving with \code {.PRECIOUS}}{31, 109} +\entry {\code {print} \r {(standard target)}}{91} +\entry {\code {print} target}{21, 30} +\entry {printing directories}{52} +\entry {printing of commands}{41} \entry {problems and bugs, reporting}{2} -\entry {problems with wildcards}{20} -\entry {processing a makefile}{6} +\entry {problems with wildcards}{21} +\entry {processing a makefile}{8} \initial {Q} -\entry {question mode}{90} -\entry {quoting \code {%}, in \code {patsubst}}{76} -\entry {quoting \code {%}, in static pattern}{33} -\entry {quoting \code {%}, in \code {vpath}}{23} -\entry {quoting newline, in commands}{40} -\entry {quoting newline, in makefile}{5} +\entry {question mode}{92} +\entry {quoting \code {%}, in \code {patsubst}}{78} +\entry {quoting \code {%}, in static pattern}{34} +\entry {quoting \code {%}, in \code {vpath}}{25} +\entry {quoting newline, in commands}{42} +\entry {quoting newline, in makefile}{7} \initial {R} -\entry {Ratfor, rule to compile}{101} -\entry {RCS, rule to extract from}{103} -\entry {\code {README}}{12} -\entry {\code {realclean} \r {(standard target)}}{89} -\entry {recompilation}{3} -\entry {recompilation, avoiding}{91} -\entry {recording events with empty targets}{28} -\entry {recursion}{44} -\entry {recursion, and \code {-C}}{48} -\entry {recursion, and \code {-f}}{48} -\entry {recursion, and \code {-I}}{48} -\entry {recursion, and \code {-j}}{48} -\entry {recursion, and \code {-o}}{48} -\entry {recursion, and \code {-t}}{45} -\entry {recursion, and \code {-w}}{50} -\entry {recursion, and \code {-W}}{48} -\entry {recursion, and environment}{45} -\entry {recursion, and \code {MAKE} variable}{44} -\entry {recursion, and \code {MAKEFILES} variable}{14} -\entry {recursion, and options}{48} -\entry {recursion, and printing directories}{49} -\entry {recursion, and variables}{45} -\entry {recursion, level of}{47} -\entry {recursive variable expansion}{53, 54} -\entry {recursively expanded variables}{54} -\entry {reference to variables}{53, 57} -\entry {relinking}{7} -\entry {remaking makefiles}{14} -\entry {removing duplicate words}{78} -\entry {removing, to clean up}{10} +\entry {Ratfor, rule to compile}{103} +\entry {RCS, rule to extract from}{105} +\entry {\code {README}}{14} +\entry {\code {realclean} \r {(standard target)}}{91} +\entry {recompilation}{5} +\entry {recompilation, avoiding}{93} +\entry {recording events with empty targets}{30} +\entry {recursion}{46} +\entry {recursion, and \code {-C}}{50} +\entry {recursion, and \code {-f}}{50} +\entry {recursion, and \code {-I}}{50} +\entry {recursion, and \code {-j}}{50} +\entry {recursion, and \code {-o}}{50} +\entry {recursion, and \code {-t}}{47} +\entry {recursion, and \code {-w}}{52} +\entry {recursion, and \code {-W}}{50} +\entry {recursion, and command line variable definitions}{50} +\entry {recursion, and environment}{47} +\entry {recursion, and \code {MAKE} variable}{46} +\entry {recursion, and \code {MAKEFILES} variable}{16} +\entry {recursion, and options}{50} +\entry {recursion, and printing directories}{52} +\entry {recursion, and variables}{47} +\entry {recursion, level of}{49} +\entry {recursive variable expansion}{55, 56} +\entry {recursively expanded variables}{56} +\entry {reference to variables}{55, 59} +\entry {relinking}{9} +\entry {remaking makefiles}{16} +\entry {removal of target files}{45} +\entry {removing duplicate words}{80} +\entry {removing, to clean up}{12} \entry {reporting bugs}{2} -\entry {\code {rm}}{105} -\entry {\code {rm} (shell command)}{6, 19, 26, 42} -\entry {rule commands}{39} -\entry {rule dependencies}{18} -\entry {rule syntax}{17} -\entry {rule targets}{17} -\entry {rule, and \code {$}}{18} -\entry {rule, double-colon (\code {::})}{35} -\entry {rule, explicit, definition of}{11} -\entry {rule, how to write}{17} -\entry {rule, implicit}{99} -\entry {rule, implicit, and directory search}{25} -\entry {rule, implicit, and \code {VPATH}}{25} -\entry {rule, implicit, chains of}{106} -\entry {rule, implicit, definition of}{11} -\entry {rule, implicit, how to use}{99} -\entry {rule, implicit, introduction to}{8} -\entry {rule, implicit, predefined}{101} -\entry {rule, introduction to}{3} -\entry {rule, multiple for one target}{31} -\entry {rule, no commands or dependencies}{28} -\entry {rule, pattern}{108} -\entry {rule, static pattern}{32} -\entry {rule, static pattern versus implicit}{34} -\entry {rule, with multiple targets}{30} +\entry {\code {rm}}{107} +\entry {\code {rm} (shell command)}{8, 21, 28, 44} +\entry {rule commands}{41} +\entry {rule dependencies}{20} +\entry {rule syntax}{19} +\entry {rule targets}{19} +\entry {rule, and \code {$}}{20} +\entry {rule, double-colon (\code {::})}{36} +\entry {rule, explicit, definition of}{13} +\entry {rule, how to write}{19} +\entry {rule, implicit}{101} +\entry {rule, implicit, and directory search}{26} +\entry {rule, implicit, and \code {VPATH}}{26} +\entry {rule, implicit, chains of}{108} +\entry {rule, implicit, definition of}{13} +\entry {rule, implicit, how to use}{101} +\entry {rule, implicit, introduction to}{10} +\entry {rule, implicit, predefined}{103} +\entry {rule, introduction to}{5} +\entry {rule, multiple for one target}{33} +\entry {rule, no commands or dependencies}{29} +\entry {rule, pattern}{109} +\entry {rule, static pattern}{34} +\entry {rule, static pattern versus implicit}{36} +\entry {rule, with multiple targets}{32} \initial {S} -\entry {\code {s. \r {(SCCS file prefix)}}}{103} -\entry {SCCS, rule to extract from}{103} -\entry {search algorithm, implicit rule}{117} -\entry {search path for dependencies (\code {VPATH})}{21} -\entry {search path for dependencies (\code {VPATH}), and implicit rules}{25} -\entry {search path for dependencies (\code {VPATH}), and link libraries}{25} -\entry {searching for strings}{77} -\entry {\code {sed} (shell command)}{37} -\entry {selecting words}{81} -\entry {sequences of commands}{50} -\entry {setting options from environment}{49} -\entry {setting options in makefiles}{49} -\entry {setting variables}{61} -\entry {several rules for one target}{31} -\entry {several targets in a rule}{30} -\entry {\code {shar} \r {(standard target)}}{89} -\entry {shell command}{6} -\entry {shell command, and directory search}{24} -\entry {shell command, execution}{40} -\entry {shell command, function for}{85} -\entry {shell file name pattern (in \code {include})}{12} -\entry {shell wildcards (in \code {include})}{12} -\entry {signal}{43} -\entry {silent operation}{39} -\entry {simple makefile}{4} -\entry {simple variable expansion}{53} -\entry {simplifying with variables}{7} -\entry {simply expanded variables}{55} -\entry {sorting words}{78} -\entry {spaces, in variable values}{56} -\entry {spaces, stripping}{77} -\entry {special targets}{29} -\entry {specifying makefile name}{12} -\entry {standard input}{41} +\entry {\code {s. \r {(SCCS file prefix)}}}{105} +\entry {SCCS, rule to extract from}{105} +\entry {search algorithm, implicit rule}{119} +\entry {search path for dependencies (\code {VPATH})}{23} +\entry {search path for dependencies (\code {VPATH}), and implicit rules}{26} +\entry {search path for dependencies (\code {VPATH}), and link libraries}{27} +\entry {searching for strings}{79} +\entry {\code {sed} (shell command)}{38} +\entry {selecting words}{83} +\entry {sequences of commands}{52} +\entry {setting options from environment}{51} +\entry {setting options in makefiles}{51} +\entry {setting variables}{63} +\entry {several rules for one target}{33} +\entry {several targets in a rule}{32} +\entry {\code {shar} \r {(standard target)}}{91} +\entry {shell command}{8} +\entry {shell command, and directory search}{26} +\entry {shell command, execution}{42} +\entry {shell command, function for}{86} +\entry {shell file name pattern (in \code {include})}{14} +\entry {shell wildcards (in \code {include})}{14} +\entry {signal}{45} +\entry {silent operation}{41} +\entry {simple makefile}{6} +\entry {simple variable expansion}{55} +\entry {simplifying with variables}{9} +\entry {simply expanded variables}{57} +\entry {sorting words}{80} +\entry {spaces, in variable values}{58} +\entry {spaces, stripping}{79} +\entry {special targets}{30} +\entry {specifying makefile name}{14} +\entry {standard input}{43} \entry {standards conformance}{1} -\entry {standards for makefiles}{129} -\entry {static pattern rule}{32} -\entry {static pattern rule, syntax of}{32} -\entry {static pattern rule, versus implicit}{34} -\entry {stem}{32, 112} -\entry {stem, variable for}{110} -\entry {strings, searching for}{77} -\entry {stripping whitespace}{77} -\entry {sub-\code {make}}{45} -\entry {subdirectories, recursion for}{44} -\entry {substitution variable reference}{57} -\entry {suffix rule}{115} -\entry {suffix rule, for archive}{121} -\entry {suffix, adding}{80} -\entry {suffix, function to find}{80} -\entry {suffix, substituting in variables}{57} -\entry {switches}{93} -\entry {symbol directories, updating archive}{121} -\entry {syntax of rules}{17} +\entry {standards for makefiles}{131} +\entry {static pattern rule}{34} +\entry {static pattern rule, syntax of}{34} +\entry {static pattern rule, versus implicit}{36} +\entry {stem}{34, 114} +\entry {stem, variable for}{112} +\entry {strings, searching for}{79} +\entry {stripping whitespace}{79} +\entry {sub-\code {make}}{47} +\entry {subdirectories, recursion for}{46} +\entry {substitution variable reference}{59} +\entry {suffix rule}{117} +\entry {suffix rule, for archive}{123} +\entry {suffix, adding}{82} +\entry {suffix, function to find}{82} +\entry {suffix, substituting in variables}{59} +\entry {switches}{95} +\entry {symbol directories, updating archive}{122} +\entry {syntax of rules}{19} \initial {T} -\entry {tab character (in commands)}{17} -\entry {tabs in rules}{3} -\entry {\code {TAGS} \r {(standard target)}}{89} -\entry {\code {tangle}}{103, 105} -\entry {\code {tar} \r {(standard target)}}{89} -\entry {target}{17} -\entry {target pattern, implicit}{108} -\entry {target pattern, static (not implicit)}{32} -\entry {target, deleting on interrupt}{43} -\entry {target, multiple in pattern rule}{108} -\entry {target, multiple rules for one}{31} -\entry {target, touching}{90} -\entry {targets}{17} -\entry {targets without a file}{26} -\entry {targets, built-in special}{29} -\entry {targets, empty}{28} -\entry {targets, force}{28} -\entry {targets, introduction to}{3} -\entry {targets, multiple}{30} -\entry {targets, phony}{26} -\entry {terminal rule}{112} -\entry {\code {test} \r {(standard target)}}{89} -\entry {testing compilation}{93} -\entry {\code {tex}}{103, 105} -\entry {\TeX{}, rule to run}{103} -\entry {\code {texi2dvi}}{103, 105} -\entry {Texinfo, rule to format}{103} -\entry {tilde (\code {{\tt\char'176}})}{18} -\entry {\code {touch} (shell command)}{19, 28} -\entry {touching files}{90} +\entry {tab character (in commands)}{19} +\entry {tabs in rules}{5} +\entry {\code {TAGS} \r {(standard target)}}{91} +\entry {\code {tangle}}{105, 107} +\entry {\code {tar} \r {(standard target)}}{91} +\entry {target}{19} +\entry {target pattern, implicit}{110} +\entry {target pattern, static (not implicit)}{34} +\entry {target, deleting on error}{45} +\entry {target, deleting on interrupt}{45} +\entry {target, multiple in pattern rule}{110} +\entry {target, multiple rules for one}{33} +\entry {target, touching}{92} +\entry {targets}{19} +\entry {targets without a file}{27} +\entry {targets, built-in special}{30} +\entry {targets, empty}{30} +\entry {targets, force}{29} +\entry {targets, introduction to}{5} +\entry {targets, multiple}{32} +\entry {targets, phony}{27} +\entry {terminal rule}{114} +\entry {\code {test} \r {(standard target)}}{91} +\entry {testing compilation}{95} +\entry {\code {tex}}{105, 107} +\entry {\TeX{}, rule to run}{105} +\entry {\code {texi2dvi}}{105, 107} +\entry {Texinfo, rule to format}{105} +\entry {tilde (\code {{\tt\char'176}})}{20} +\entry {\code {touch} (shell command)}{21, 30} +\entry {touching files}{92} \initial {U} -\entry {undefined variables, warning message}{97} -\entry {updating archive symbol directories}{121} -\entry {updating makefiles}{14} +\entry {undefined variables, warning message}{99} +\entry {updating archive symbol directories}{122} +\entry {updating makefiles}{16} \initial {V} -\entry {value}{53} -\entry {value, how a variable gets it}{61} -\entry {variable}{53} -\entry {variable definition}{11} -\entry {variables}{7} -\entry {variables, \samp {$} in name}{58} -\entry {variables, and implicit rule}{110} -\entry {variables, appending to}{62} -\entry {variables, automatic}{110} -\entry {variables, command line}{92} -\entry {variables, computed names}{58} -\entry {variables, defining verbatim}{65} -\entry {variables, environment}{45, 66} -\entry {variables, exporting}{45} -\entry {variables, flavors}{54} -\entry {variables, how they get their values}{61} -\entry {variables, how to reference}{53} -\entry {variables, loops in expansion}{55} -\entry {variables, modified reference}{57} -\entry {variables, nested references}{58} -\entry {variables, origin of}{83} -\entry {variables, overriding}{64} -\entry {variables, overriding with arguments}{92} -\entry {variables, recursively expanded}{54} -\entry {variables, setting}{61} -\entry {variables, simply expanded}{55} -\entry {variables, spaces in values}{56} -\entry {variables, substituting suffix in}{57} -\entry {variables, substitution reference}{57} -\entry {variables, warning for undefined}{97} -\entry {varying dependencies}{32} -\entry {verbatim variable definition}{65} -\entry {vpath}{21} -\entry {\code {VPATH}, and implicit rules}{25} -\entry {\code {VPATH}, and link libraries}{25} +\entry {value}{55} +\entry {value, how a variable gets it}{63} +\entry {variable}{55} +\entry {variable definition}{13} +\entry {variables}{9} +\entry {variables, \samp {$} in name}{60} +\entry {variables, and implicit rule}{112} +\entry {variables, appending to}{64} +\entry {variables, automatic}{112} +\entry {variables, command line}{94} +\entry {variables, command line, and recursion}{50} +\entry {variables, computed names}{60} +\entry {variables, defining verbatim}{67} +\entry {variables, environment}{47, 68} +\entry {variables, exporting}{47} +\entry {variables, flavors}{56} +\entry {variables, how they get their values}{63} +\entry {variables, how to reference}{55} +\entry {variables, loops in expansion}{57} +\entry {variables, modified reference}{59} +\entry {variables, nested references}{60} +\entry {variables, origin of}{85} +\entry {variables, overriding}{66} +\entry {variables, overriding with arguments}{94} +\entry {variables, recursively expanded}{56} +\entry {variables, setting}{63} +\entry {variables, simply expanded}{57} +\entry {variables, spaces in values}{58} +\entry {variables, substituting suffix in}{59} +\entry {variables, substitution reference}{59} +\entry {variables, warning for undefined}{99} +\entry {varying dependencies}{34} +\entry {verbatim variable definition}{67} +\entry {vpath}{23} +\entry {\code {VPATH}, and implicit rules}{26} +\entry {\code {VPATH}, and link libraries}{27} \initial {W} -\entry {\code {weave}}{103, 105} -\entry {Web, rule to run}{103} -\entry {what if}{90} -\entry {whitespace, in variable values}{56} -\entry {whitespace, stripping}{77} -\entry {wildcard}{18} -\entry {wildcard pitfalls}{20} -\entry {wildcard, function}{81} -\entry {wildcard, in archive member}{119} -\entry {wildcard, in \code {include}}{12} -\entry {words, extracting first}{81} -\entry {words, filtering}{78} -\entry {words, filtering out}{78} -\entry {words, finding number}{81} -\entry {words, iterating over}{81} -\entry {words, joining lists}{80} -\entry {words, removing duplicates}{78} -\entry {words, selecting}{81} -\entry {writing rule commands}{39} -\entry {writing rules}{17} +\entry {\code {weave}}{105, 107} +\entry {Web, rule to run}{105} +\entry {what if}{92} +\entry {whitespace, in variable values}{58} +\entry {whitespace, stripping}{79} +\entry {wildcard}{20} +\entry {wildcard pitfalls}{21} +\entry {wildcard, function}{83} +\entry {wildcard, in archive member}{121} +\entry {wildcard, in \code {include}}{14} +\entry {words, extracting first}{83} +\entry {words, filtering}{80} +\entry {words, filtering out}{80} +\entry {words, finding number}{83} +\entry {words, iterating over}{83} +\entry {words, joining lists}{82} +\entry {words, removing duplicates}{80} +\entry {words, selecting}{83} +\entry {writing rule commands}{41} +\entry {writing rules}{19} \initial {Y} -\entry {\code {yacc}}{50, 103, 105} -\entry {Yacc, rule to run}{103} +\entry {\code {yacc}}{53, 105, 107} +\entry {Yacc, rule to run}{105} diff -ruN make-3.71/make.fn make-3.72.1/make.fn --- make-3.71/make.fn Mon May 16 23:55:41 1994 +++ make-3.72.1/make.fn Fri Nov 4 15:28:17 1994 @@ -12,23 +12,22 @@ \entry {VPATH}{23}{\code {VPATH}} \entry {vpath}{24}{\code {vpath}} \entry {.PHONY}{28}{\code {.PHONY}} -\entry {.PHONY}{31}{\code {.PHONY}} -\entry {.SUFFIXES}{31}{\code {.SUFFIXES}} +\entry {.PHONY}{30}{\code {.PHONY}} +\entry {.SUFFIXES}{30}{\code {.SUFFIXES}} \entry {.DEFAULT}{31}{\code {.DEFAULT}} \entry {.PRECIOUS}{31}{\code {.PRECIOUS}} \entry {.IGNORE}{31}{\code {.IGNORE}} \entry {.SILENT}{31}{\code {.SILENT}} -\entry {.EXPORT{\_}ALL{\_}VARIABLES}{32}{\code {.EXPORT{\_}ALL{\_}VARIABLES}} +\entry {.EXPORT{\_}ALL{\_}VARIABLES}{31}{\code {.EXPORT{\_}ALL{\_}VARIABLES}} \entry {subst}{32}{\code {subst}} -\entry {$*, and static pattern}{36}{\code {$*\r {, and static pattern}}} +\entry {$*, and static pattern}{35}{\code {$*\r {, and static pattern}}} \entry {.SILENT}{41}{\code {.SILENT}} \entry {SHELL (command execution)}{42}{\code {SHELL \r {(command execution)}}} \entry {SHELL}{42}{\code {SHELL}} \entry {.IGNORE}{44}{\code {.IGNORE}} -\entry {.PRECIOUS}{45}{\code {.PRECIOUS}} +\entry {.DELETE{\_}ON{\_}ERROR}{45}{\code {.DELETE{\_}ON{\_}ERROR}} +\entry {.PRECIOUS}{46}{\code {.PRECIOUS}} \entry {MAKE}{46}{\code {MAKE}} -\entry {MAKE{\_}COMMAND}{46}{\code {MAKE{\_}COMMAND}} -\entry {MAKEOVERRIDES}{46}{\code {MAKEOVERRIDES}} \entry {export}{48}{\code {export}} \entry {unexport}{48}{\code {unexport}} \entry {.EXPORT{\_}ALL{\_}VARIABLES}{49}{\code {.EXPORT{\_}ALL{\_}VARIABLES}} @@ -35,6 +34,8 @@ \entry {MAKELEVEL}{49}{\code {MAKELEVEL}} \entry {MAKEFILES}{50}{\code {MAKEFILES}} \entry {MAKEFLAGS}{50}{\code {MAKEFLAGS}} +\entry {MAKEOVERRIDES}{51}{\code {MAKEOVERRIDES}} +\entry {.POSIX}{51}{\code {.POSIX}} \entry {MFLAGS}{51}{\code {MFLAGS}} \entry {.DEFAULT, and empty commands}{54}{\code {.DEFAULT\r {, and empty commands}}} \entry {MAKELEVEL}{58}{\code {MAKELEVEL}} @@ -69,7 +70,7 @@ \entry {wildcard}{83}{\code {wildcard}} \entry {foreach}{83}{\code {foreach}} \entry {origin}{85}{\code {origin}} -\entry {shell}{87}{\code {shell}} +\entry {shell}{86}{\code {shell}} \entry {OUTPUT{\_}OPTION}{106}{\code {OUTPUT{\_}OPTION}} \entry {AR}{107}{\code {AR}} \entry {AS}{107}{\code {AS}} @@ -114,6 +115,8 @@ \entry {? (automatic variable)}{112}{\code {? \r {(automatic variable)}}} \entry {${\tt\hat}}{112}{\code {${\tt\hat}}} \entry {{\tt\hat} (automatic variable)}{112}{\code {{\tt\hat} \r {(automatic variable)}}} +\entry {${\tt\char43}}{112}{\code {${\tt\char43}}} +\entry {{\tt\char43} (automatic variable)}{112}{\code {{\tt\char43} \r {(automatic variable)}}} \entry {$*}{112}{\code {$*}} \entry {* (automatic variable)}{112}{\code {* \r {(automatic variable)}}} \entry {$({\tt\char'100}D)}{113}{\code {$({\tt\char'100}D)}} @@ -130,8 +133,8 @@ \entry {%F (automatic variable)}{113}{\code {%F \r {(automatic variable)}}} \entry {$({\tt\less}D)}{113}{\code {$({\tt\less}D)}} \entry {{\tt\less}D (automatic variable)}{113}{\code {{\tt\less}D \r {(automatic variable)}}} -\entry {$({\tt\less}F)}{114}{\code {$({\tt\less}F)}} -\entry {{\tt\less}F (automatic variable)}{114}{\code {{\tt\less}F \r {(automatic variable)}}} +\entry {$({\tt\less}F)}{113}{\code {$({\tt\less}F)}} +\entry {{\tt\less}F (automatic variable)}{113}{\code {{\tt\less}F \r {(automatic variable)}}} \entry {$({\tt\hat}D)}{114}{\code {$({\tt\hat}D)}} \entry {{\tt\hat}D (automatic variable)}{114}{\code {{\tt\hat}D \r {(automatic variable)}}} \entry {$({\tt\hat}F)}{114}{\code {$({\tt\hat}F)}} diff -ruN make-3.71/make.fns make-3.72.1/make.fns --- make-3.71/make.fns Mon May 16 23:53:43 1994 +++ make-3.72.1/make.fns Fri Nov 4 15:27:01 1994 @@ -1,161 +1,165 @@ \initial {$} -\entry {\code {$%}}{110} -\entry {\code {$(%D)}}{111} -\entry {\code {$(%F)}}{111} -\entry {\code {$(*D)}}{111} -\entry {\code {$(*F)}}{111} -\entry {\code {$(?D)}}{112} -\entry {\code {$(?F)}}{112} -\entry {\code {$({\tt\char'100}D)}}{111} -\entry {\code {$({\tt\char'100}F)}}{111} -\entry {\code {$({\tt\hat}D)}}{112} -\entry {\code {$({\tt\hat}F)}}{112} -\entry {\code {$({\tt\less}D)}}{111} -\entry {\code {$({\tt\less}F)}}{112} -\entry {\code {$*}}{110} -\entry {\code {$*\r {, and static pattern}}}{34} -\entry {\code {$?}}{110} -\entry {\code {${\tt\char'100}}}{110} -\entry {\code {${\tt\hat}}}{110} -\entry {\code {${\tt\less}}}{110} +\entry {\code {$%}}{112} +\entry {\code {$(%D)}}{113} +\entry {\code {$(%F)}}{113} +\entry {\code {$(*D)}}{113} +\entry {\code {$(*F)}}{113} +\entry {\code {$(?D)}}{114} +\entry {\code {$(?F)}}{114} +\entry {\code {$({\tt\char'100}D)}}{113} +\entry {\code {$({\tt\char'100}F)}}{113} +\entry {\code {$({\tt\hat}D)}}{114} +\entry {\code {$({\tt\hat}F)}}{114} +\entry {\code {$({\tt\less}D)}}{113} +\entry {\code {$({\tt\less}F)}}{113} +\entry {\code {$*}}{112} +\entry {\code {$*\r {, and static pattern}}}{35} +\entry {\code {$?}}{112} +\entry {\code {${\tt\char'100}}}{112} +\entry {\code {${\tt\char43}}}{112} +\entry {\code {${\tt\hat}}}{112} +\entry {\code {${\tt\less}}}{112} \initial {%} -\entry {\code {% \r {(automatic variable)}}}{110} -\entry {\code {%D \r {(automatic variable)}}}{111} -\entry {\code {%F \r {(automatic variable)}}}{111} +\entry {\code {% \r {(automatic variable)}}}{112} +\entry {\code {%D \r {(automatic variable)}}}{113} +\entry {\code {%F \r {(automatic variable)}}}{113} \initial {*} -\entry {\code {* \r {(automatic variable)}}}{110} -\entry {\code {* \r {(automatic variable), unsupported bizarre usage}}}{127} -\entry {\code {*D \r {(automatic variable)}}}{111} -\entry {\code {*F \r {(automatic variable)}}}{111} +\entry {\code {* \r {(automatic variable)}}}{112} +\entry {\code {* \r {(automatic variable), unsupported bizarre usage}}}{129} +\entry {\code {*D \r {(automatic variable)}}}{113} +\entry {\code {*F \r {(automatic variable)}}}{113} \initial {.} -\entry {\code {.DEFAULT}}{29, 115} -\entry {\code {.DEFAULT\r {, and empty commands}}}{52} -\entry {\code {.EXPORT{\_}ALL{\_}VARIABLES}}{30, 47} -\entry {\code {.IGNORE}}{29, 42} -\entry {\code {.PHONY}}{26, 29} -\entry {\code {.PRECIOUS}}{29, 43} -\entry {\code {.SILENT}}{30, 39} -\entry {\code {.SUFFIXES}}{29, 116} +\entry {\code {.DEFAULT}}{31, 117} +\entry {\code {.DEFAULT\r {, and empty commands}}}{54} +\entry {\code {.DELETE{\_}ON{\_}ERROR}}{45} +\entry {\code {.EXPORT{\_}ALL{\_}VARIABLES}}{31, 49} +\entry {\code {.IGNORE}}{31, 44} +\entry {\code {.PHONY}}{28, 30} +\entry {\code {.POSIX}}{51} +\entry {\code {.PRECIOUS}}{31, 46} +\entry {\code {.SILENT}}{31, 41} +\entry {\code {.SUFFIXES}}{30, 118} \initial {/} -\entry {\code {/usr/gnu/include}}{13} -\entry {\code {/usr/include}}{13} -\entry {\code {/usr/local/include}}{13} +\entry {\code {/usr/gnu/include}}{15} +\entry {\code {/usr/include}}{15} +\entry {\code {/usr/local/include}}{15} \initial {?} -\entry {\code {? \r {(automatic variable)}}}{110} -\entry {\code {?D \r {(automatic variable)}}}{112} -\entry {\code {?F \r {(automatic variable)}}}{112} +\entry {\code {? \r {(automatic variable)}}}{112} +\entry {\code {?D \r {(automatic variable)}}}{114} +\entry {\code {?F \r {(automatic variable)}}}{114} \initial {{\tt\char'100}} -\entry {\code {{\tt\char'100} \r {(automatic variable)}}}{110} -\entry {\code {{\tt\char'100}D \r {(automatic variable)}}}{111} -\entry {\code {{\tt\char'100}F \r {(automatic variable)}}}{111} +\entry {\code {{\tt\char'100} \r {(automatic variable)}}}{112} +\entry {\code {{\tt\char'100}D \r {(automatic variable)}}}{113} +\entry {\code {{\tt\char'100}F \r {(automatic variable)}}}{113} +\initial {{\tt\char43}} +\entry {\code {{\tt\char43} \r {(automatic variable)}}}{112} \initial {{\tt\hat}} -\entry {\code {{\tt\hat} \r {(automatic variable)}}}{110} -\entry {\code {{\tt\hat}D \r {(automatic variable)}}}{112} -\entry {\code {{\tt\hat}F \r {(automatic variable)}}}{112} +\entry {\code {{\tt\hat} \r {(automatic variable)}}}{112} +\entry {\code {{\tt\hat}D \r {(automatic variable)}}}{114} +\entry {\code {{\tt\hat}F \r {(automatic variable)}}}{114} \initial {{\tt\less}} -\entry {\code {{\tt\less} \r {(automatic variable)}}}{110} -\entry {\code {{\tt\less}D \r {(automatic variable)}}}{111} -\entry {\code {{\tt\less}F \r {(automatic variable)}}}{112} +\entry {\code {{\tt\less} \r {(automatic variable)}}}{112} +\entry {\code {{\tt\less}D \r {(automatic variable)}}}{113} +\entry {\code {{\tt\less}F \r {(automatic variable)}}}{113} \initial {A} -\entry {\code {addprefix}}{80} -\entry {\code {addsuffix}}{80} -\entry {\code {AR}}{105} -\entry {\code {ARFLAGS}}{106} -\entry {\code {AS}}{105} -\entry {\code {ASFLAGS}}{106} +\entry {\code {addprefix}}{82} +\entry {\code {addsuffix}}{82} +\entry {\code {AR}}{107} +\entry {\code {ARFLAGS}}{108} +\entry {\code {AS}}{107} +\entry {\code {ASFLAGS}}{108} \initial {B} -\entry {\code {basename}}{80} +\entry {\code {basename}}{82} \initial {C} -\entry {\code {CC}}{105} -\entry {\code {CFLAGS}}{106} -\entry {\code {CO}}{105} -\entry {\code {COFLAGS}}{106} -\entry {\code {CPP}}{105} -\entry {\code {CPPFLAGS}}{106} -\entry {\code {CTANGLE}}{105} -\entry {\code {CWEAVE}}{105} -\entry {\code {CXX}}{105} -\entry {\code {CXXFLAGS}}{106} +\entry {\code {CC}}{107} +\entry {\code {CFLAGS}}{108} +\entry {\code {CO}}{107} +\entry {\code {COFLAGS}}{108} +\entry {\code {CPP}}{107} +\entry {\code {CPPFLAGS}}{108} +\entry {\code {CTANGLE}}{107} +\entry {\code {CWEAVE}}{107} +\entry {\code {CXX}}{107} +\entry {\code {CXXFLAGS}}{108} \initial {D} -\entry {\code {define}}{65} -\entry {\code {dir}}{79} +\entry {\code {define}}{67} +\entry {\code {dir}}{81} \initial {E} -\entry {\code {else}}{70} -\entry {\code {endef}}{65} -\entry {\code {endif}}{70} -\entry {\code {export}}{46} +\entry {\code {else}}{72} +\entry {\code {endef}}{67} +\entry {\code {endif}}{72} +\entry {\code {export}}{48} \initial {F} -\entry {\code {FC}}{105} -\entry {\code {FFLAGS}}{106} -\entry {\code {filter}}{78} -\entry {\code {filter-out}}{78} -\entry {\code {findstring}}{77} -\entry {\code {firstword}}{81} -\entry {\code {foreach}}{81} +\entry {\code {FC}}{107} +\entry {\code {FFLAGS}}{108} +\entry {\code {filter}}{80} +\entry {\code {filter-out}}{80} +\entry {\code {findstring}}{79} +\entry {\code {firstword}}{83} +\entry {\code {foreach}}{83} \initial {G} -\entry {\code {GET}}{105} -\entry {\code {GFLAGS}}{106} -\entry {\code {GNUmakefile}}{12} +\entry {\code {GET}}{107} +\entry {\code {GFLAGS}}{108} +\entry {\code {GNUmakefile}}{14} \initial {I} -\entry {\code {ifdef}}{70} -\entry {\code {ifeq}}{70} -\entry {\code {ifndef}}{70} -\entry {\code {ifneq}}{70} -\entry {\code {include}}{12} +\entry {\code {ifdef}}{72} +\entry {\code {ifeq}}{72} +\entry {\code {ifndef}}{72} +\entry {\code {ifneq}}{72} +\entry {\code {include}}{14} \initial {J} -\entry {\code {join}}{80} +\entry {\code {join}}{82} \initial {L} -\entry {\code {LDFLAGS}}{106} -\entry {\code {LEX}}{105} -\entry {\code {LFLAGS}}{106} +\entry {\code {LDFLAGS}}{108} +\entry {\code {LEX}}{107} +\entry {\code {LFLAGS}}{108} \initial {M} -\entry {\code {MAKE}}{44, 56} -\entry {\code {MAKE{\_}COMMAND}}{44} -\entry {\code {makefile}}{12} -\entry {\code {Makefile}}{12} -\entry {\code {MAKEFILES}}{14, 48} -\entry {\code {MAKEFLAGS}}{48} -\entry {\code {MAKEINFO}}{105} -\entry {\code {MAKELEVEL}}{47, 56} -\entry {\code {MAKEOVERRIDES}}{44} -\entry {\code {MFLAGS}}{49} +\entry {\code {MAKE}}{46, 58} +\entry {\code {makefile}}{14} +\entry {\code {Makefile}}{14} +\entry {\code {MAKEFILES}}{16, 50} +\entry {\code {MAKEFLAGS}}{50} +\entry {\code {MAKEINFO}}{107} +\entry {\code {MAKELEVEL}}{49, 58} +\entry {\code {MAKEOVERRIDES}}{51} +\entry {\code {MFLAGS}}{51} \initial {N} -\entry {\code {notdir}}{79} +\entry {\code {notdir}}{81} \initial {O} -\entry {\code {origin}}{83} -\entry {\code {OUTPUT{\_}OPTION}}{104} -\entry {\code {override}}{64} +\entry {\code {origin}}{85} +\entry {\code {OUTPUT{\_}OPTION}}{106} +\entry {\code {override}}{66} \initial {P} -\entry {\code {patsubst}}{57, 76} -\entry {\code {PC}}{105} -\entry {\code {PFLAGS}}{106} +\entry {\code {patsubst}}{59, 78} +\entry {\code {PC}}{107} +\entry {\code {PFLAGS}}{108} \initial {R} -\entry {\code {RFLAGS}}{106} -\entry {\code {RM}}{105} +\entry {\code {RFLAGS}}{108} +\entry {\code {RM}}{107} \initial {S} -\entry {\code {shell}}{85} -\entry {\code {SHELL}}{40} -\entry {\code {SHELL \r {(command execution)}}}{40} -\entry {\code {sort}}{78} -\entry {\code {strip}}{77} -\entry {\code {subst}}{31, 76} -\entry {\code {suffix}}{80} -\entry {\code {SUFFIXES}}{117} +\entry {\code {shell}}{86} +\entry {\code {SHELL}}{42} +\entry {\code {SHELL \r {(command execution)}}}{42} +\entry {\code {sort}}{80} +\entry {\code {strip}}{79} +\entry {\code {subst}}{32, 78} +\entry {\code {suffix}}{82} +\entry {\code {SUFFIXES}}{119} \initial {T} -\entry {\code {TANGLE}}{105} -\entry {\code {TEX}}{105} -\entry {\code {TEXI2DVI}}{105} +\entry {\code {TANGLE}}{107} +\entry {\code {TEX}}{107} +\entry {\code {TEXI2DVI}}{107} \initial {U} -\entry {\code {unexport}}{46} +\entry {\code {unexport}}{48} \initial {V} -\entry {\code {vpath}}{21, 22} -\entry {\code {VPATH}}{21} +\entry {\code {vpath}}{23, 24} +\entry {\code {VPATH}}{23} \initial {W} -\entry {\code {WEAVE}}{105} -\entry {\code {wildcard}}{20, 81} -\entry {\code {word}}{81} -\entry {\code {words}}{81} +\entry {\code {WEAVE}}{107} +\entry {\code {wildcard}}{22, 83} +\entry {\code {word}}{83} +\entry {\code {words}}{83} \initial {Y} -\entry {\code {YACC}}{105} -\entry {\code {YACCR}}{105} -\entry {\code {YFLAGS}}{106} +\entry {\code {YACC}}{107} +\entry {\code {YACCR}}{107} +\entry {\code {YFLAGS}}{108} diff -ruN make-3.71/make.h make-3.72.1/make.h --- make-3.71/make.h Sat May 21 16:23:48 1994 +++ make-3.72.1/make.h Mon Oct 24 19:11:57 1994 @@ -67,7 +67,7 @@ #endif /* Some systems define _POSIX_VERSION but are not really POSIX.1. */ -#if (defined (butterfly) || \ +#if (defined (butterfly) || defined (__arm) || \ (defined (__mips) && defined (_SYSTYPE_SVR3)) || \ (defined (sequent) && defined (i386))) #undef POSIX @@ -252,6 +252,12 @@ #define ENUM_BITFIELD(bits) #endif +#ifdef __MSDOS__ +#define PATH_SEPARATOR_CHAR ';' +#else +#define PATH_SEPARATOR_CHAR ':' +#endif + extern void die (); extern void message (), fatal (), error (); extern void makefile_error (), makefile_fatal (); @@ -299,17 +305,12 @@ #include #endif -#if !defined (__GNU_LIBRARY__) && !defined (POSIX) +/* We omit these declarations on non-POSIX systems which define _POSIX_VERSION, + because such systems often declare the in header files anyway. */ -#ifdef HAVE_SIGSETMASK -extern int sigsetmask (); -extern int sigblock (); -#endif -extern int kill (); -extern int atoi (); +#if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) + extern long int atol (); -extern int unlink (), stat (), fstat (); -extern int pipe (), close (), read (), write (), open (); extern long int lseek (); #endif /* Not GNU C library or POSIX. */ @@ -330,6 +331,7 @@ extern int debug_flag, print_data_base_flag, question_flag, touch_flag; extern int env_overrides, no_builtin_rules_flag, print_version_flag; extern int print_directory_flag, warn_undefined_variables_flag; +extern int posix_pedantic; extern unsigned int job_slots; extern double max_load_average; diff -ruN make-3.71/make.texinfo make-3.72.1/make.texinfo --- make-3.71/make.texinfo Mon May 16 23:52:07 1994 +++ make-3.72.1/make.texinfo Fri Nov 4 15:23:23 1994 @@ -7,11 +7,12 @@ @c FSF publishers: format makebook.texi instead of using this file directly. -@set RCSID $Id: make.texinfo,v 2.139 1994/05/17 03:50:09 roland Alpha $ -@set EDITION 0.45 -@set VERSION 3.71 Beta -@set UPDATED 11 May 1994 -@set UPDATE-MONTH May 1994 +@set RCSID $Id: make.texinfo,v 2.149 1994/11/04 20:23:23 roland Beta $ +@set EDITION 0.47 +@set VERSION 3.72 Beta +@set UPDATED 1 November 1994 +@set UPDATE-MONTH November 1994 +@set ISBN 1-882114-50-7 @c finalout @@ -71,7 +72,7 @@ 675 Massachusetts Avenue, @* Cambridge, MA 02139 USA @* Printed copies are available for $20 each. @* -ISBN 1-882114-16-7 @* +ISBN @value{ISBN} @* Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -2140,24 +2141,28 @@ @findex .IGNORE @item .IGNORE -Simply by being mentioned as a target, @code{.IGNORE} says to ignore -errors in execution of commands. The dependencies and commands for -@code{.IGNORE} are not meaningful. - -@samp{.IGNORE} exists for historical compatibility. Since -@code{.IGNORE} affects every command in the makefile, it is not very -useful; we recommend you use the more selective ways to ignore errors -in specific commands. @xref{Errors, ,Errors in Commands}. +If you specify dependencies for @code{.IGNORE}, then @code{make} will +ignore errors in execution of the commands run for those particular +files. The commands for @code{.IGNORE} are not meaningful. + +If mentioned as a target with no dependencies, @code{.IGNORE} says to +ignore errors in execution of commands for all files. This usage of +@samp{.IGNORE} is supported only for historical compatibility. Since +this affects every command in the makefile, it is not very useful; we +recommend you use the more selective ways to ignore errors in specific +commands. @xref{Errors, ,Errors in Commands}. @findex .SILENT @item .SILENT -Simply by being mentioned as a target, @code{.SILENT} says not to -print commands before executing them. The dependencies and commands -for @code{.SILENT} are not meaningful. - -@samp{.SILENT} exists for historical compatibility. We recommend you -use the more selective ways to silence specific commands. +If you specify dependencies for @code{.SILENT}, then @code{make} will +not the print commands to remake those particular files before executing +them. The commands for @code{.SILENT} are not meaningful. + +If mentioned as a target with no dependencies, @code{.SILENT} says not +to print any commands before executing them. This usage of +@samp{.SILENT} is supported only for historical compatibility. We +recommend you use the more selective ways to silence specific commands. @xref{Echoing, ,Command Echoing}. If you want to silence all commands for a particular run of @code{make}, use the @samp{-s} or @w{@samp{--silent}} option (@pxref{Options Summary}). @@ -2581,7 +2586,8 @@ @example @group %.d: %.c - $(SHELL) -ec '$(CC) -M $(CPPFLAGS) $< | sed '\''s/$*.o/& $@@/g'\'' > $@@' + $(SHELL) -ec '$(CC) -M $(CPPFLAGS) $< \ + | sed '\''s/$*\\.o[ :]*/& $@@/g'\'' > $@@' @end group @end example @@ -2594,6 +2600,12 @@ status from the compiler. @cindex @code{-e} (shell flag) +@cindex @code{-MM} (to GNU compiler) +With the GNU C compiler, you may wish to use the @samp{-MM} flag instead +of @samp{-M}. This omits dependencies on system header files. +@xref{Preprocessor Options, , Options Controlling the Preprocessor, +gcc.info, Using GNU CC}, for details. + @cindex @code{sed} (shell command) The purpose of the @code{sed} command is to translate (for example): @@ -2641,11 +2653,13 @@ @cindex rule commands @cindex writing rule commands -The commands of a rule consist of shell command lines to be executed one by -one. Each command line must start with a tab, except that the first +The commands of a rule consist of shell command lines to be executed one +by one. Each command line must start with a tab, except that the first command line may be attached to the target-and-dependencies line with a semicolon in between. Blank lines and lines of just comments may appear -among the command lines; they are ignored. +among the command lines; they are ignored. (But beware, an apparently +``blank'' line that begins with a tab is @emph{not} blank! It is an +empty command; @pxref{Empty Commands}.) Users use many different shell programs, but commands in makefiles are always interpreted by @file{/bin/sh} unless the makefile specifies @@ -2711,7 +2725,7 @@ The @samp{-s} or @samp{--silent} flag to @code{make} prevents all echoing, as if all commands started with @samp{@@}. A rule in the makefile for the special target -@code{.SILENT} has the same effect +@code{.SILENT} without dependencies has the same effect (@pxref{Special Targets, ,Special Built-in Target Names}). @code{.SILENT} is essentially obsolete since @samp{@@} is more flexible.@refill @@ -2900,10 +2914,10 @@ @cindex @code{--ignore-errors} @findex .IGNORE When you run @code{make} with the @samp{-i} or @samp{--ignore-errors} -flag, errors are ignored in -all commands of all rules. A rule in the makefile for the special target -@code{.IGNORE} has the same effect. These ways of ignoring errors are -obsolete because @samp{-} is more flexible. +flag, errors are ignored in all commands of all rules. A rule in the +makefile for the special target @code{.IGNORE} has the same effect, if +there are no dependencies. These ways of ignoring errors are obsolete +because @samp{-} is more flexible. When errors are to be ignored, because of either a @samp{-} or the @samp{-i} flag, @code{make} treats an error return just like success, @@ -2916,6 +2930,7 @@ commands will be executed for these targets, since their preconditions have not been achieved. + @cindex @code{-k} @cindex @code{--keep-going} Normally @code{make} gives up immediately in this circumstance, returning a @@ -2937,11 +2952,28 @@ default. @cindex Emacs (@code{M-x compile}) +@findex .DELETE_ON_ERROR +@cindex deletion of target files +@cindex removal of target files +@cindex target, deleting on error +Usually when a command fails, if it has changed the target file at all, +the file is corrupted and cannot be used---or at least it is not +completely updated. Yet the file's timestamp says that it is now up to +date, so the next time @code{make} runs, it will not try to update that +file. The situation is just the same as when the command is killed by a +signal; @pxref{Interrupts}. So generally the right thing to do is to +delete the target file if the command fails after beginning to change +the file. @code{make} will do this if @code{.DELETE_ON_ERROR} appears +as a target. This is almost always what you want @code{make} to do, but +it is not historical practice; so for compatibility, you must explicitly +request it. + @node Interrupts, Recursion, Errors, Commands @section Interrupting or Killing @code{make} @cindex interrupt @cindex signal @cindex deletion of target files +@cindex removal of target files @cindex target, deleting on interrupt @cindex killing (interruption) @@ -3032,28 +3064,6 @@ executed for recursive invocations. @cindex @code{cd} (shell command) -Also, any arguments that define variable values are added to @code{MAKE}, -so the sub-@code{make} gets them too. Thus, if you do @samp{make -CFLAGS=-O}, so that all C compilations will be optimized, the -sub-@code{make} is run with @samp{cd subdir; /bin/make CFLAGS=-O}.@refill - -@vindex MAKE_COMMAND -@vindex MAKEOVERRIDES -The @code{MAKE} variable actually just refers to two other variables -which contain these special values. In fact, @code{MAKE} is always -defined as @samp{$(MAKE_COMMAND) $(MAKEOVERRIDES)}. The variable -@code{MAKE_COMMAND} is the file name with which @code{make} was invoked -(such as @file{/bin/make}, above). The variable @code{MAKEOVERRIDES} -contains definitions for the variables defined on the command line; in -the above example, its value is @samp{CFLAGS=-O}. If you @emph{do not} -want these variable definitions done in all recursive @code{make} -invocations, you can redefine the @code{MAKEOVERRIDES} variable to -remove them. You do this in any of the normal ways for defining -variables: in a makefile (@pxref{Setting, ,Setting Variables}); on the command -line with an argument like @samp{MAKEOVERRIDES=} -(@pxref{Overriding, ,Overriding Variables}); or with an environment variable -(@pxref{Environment, ,Variables from the Environment}). - As a special feature, using the variable @code{MAKE} in the commands of a rule alters the effects of the @samp{-t} (@samp{--touch}), @samp{-n} (@samp{--just-print}), or @samp{-q} (@w{@samp{--question}}) option. @@ -3096,9 +3106,9 @@ Variable values of the top-level @code{make} can be passed to the sub-@code{make} through the environment by explicit request. These variables are defined in the sub-@code{make} as defaults, but do not -override what is specified in the sub-@code{make}'s makefile unless -you use the @samp{-e} switch -(@pxref{Options Summary, ,Summary of Options}).@refill +override what is specified in the makefile used by the sub-@code{make} +makefile unless you use the @samp{-e} switch (@pxref{Options Summary, +,Summary of Options}).@refill To pass down, or @dfn{export}, a variable, @code{make} adds the variable and its value to the environment for running each command. The @@ -3116,6 +3126,15 @@ exported (unless you unexport them). @code{MAKEFILES} is exported if you set it to anything. +@code{make} automatically passes down variable values that were defined +on the command line, by putting them in the @code{MAKEFLAGS} variable. +@iftex +See the next section. +@end iftex +@ifinfo +@xref{Options/Recursion}. +@end ifinfo + Variables are @emph{not} normally passed down if they were created by default by @code{make} (@pxref{Implicit Variables, ,Variables Used by Implicit Rules}). The sub-@code{make} will define these for @@ -3264,6 +3283,15 @@ processes them as if they had been given as arguments. @xref{Options Summary, ,Summary of Options}. +@cindex command line variable definitions, and recursion +@cindex variables, command line, and recursion +@cindex recursion, and command line variable definitions +Likewise variables defined on the command line are passed to the +sub-@code{make} through @code{MAKEFLAGS}. Words in the value of +@code{MAKEFLAGS} that contain @samp{=}, @code{make} treats as variable +definitions just as if they appeared on the command line. +@xref{Overriding, ,Overriding Variables}. + @cindex @code{-C}, and recursion @cindex @code{-f}, and recursion @cindex @code{-I}, and recursion @@ -3313,13 +3341,39 @@ cd subdir; $(MAKE) MAKEFLAGS= @end example +@vindex MAKEOVERRIDES +The command line variable definitions really appear in the variable +@code{MAKEOVERRIDES}, and @code{MAKEFLAGS} contains a reference to this +variable. If you do want to pass flags down normally, but don't want to +pass down the command line variable definitions, you can reset +@code{MAKEOVERRIDES} to empty, like this: + +@example +MAKEOVERRIDES = +@end example + +@noindent +@cindex Arg list too long +@cindex E2BIG +This is not usually useful to do. However, some systems have a small +fixed limit on the size of the environment, and putting so much +information in into the value of @code{MAKEFLAGS} can exceed it. +If you see the error message @samp{Arg list too long}, this may be the problem. +@findex .POSIX +@cindex POSIX.2 +(For strict compliance with POSIX.2, changing @code{MAKEOVERRIDES} does +not affect @code{MAKEFLAGS} if the special target @samp{.POSIX} appears +in the makefile. You probably do not care about this.) + @vindex MFLAGS -A similar variable @code{MFLAGS} exists also, for historical compatibility. -It has the same value as @code{MAKEFLAGS} except that it always begins with -a hyphen unless it is empty (@code{MAKEFLAGS} begins with a hyphen only when -it begins with an option that has no single-letter version, such as -@samp{--warn-undefined-variables}). @code{MFLAGS} was traditionally used -explicitly in the recursive @code{make} command, like this: +A similar variable @code{MFLAGS} exists also, for historical +compatibility. It has the same value as @code{MAKEFLAGS} except that it +does not contain the command line variable definitions, and it always +begins with a hyphen unless it is empty (@code{MAKEFLAGS} begins with a +hyphen only when it begins with an option that has no single-letter +version, such as @samp{--warn-undefined-variables}). @code{MFLAGS} was +traditionally used explicitly in the recursive @code{make} command, like +this: @example subsystem: @@ -5581,7 +5635,9 @@ By default, the goal is the first target in the makefile (not counting targets that start with a period). Therefore, makefiles are usually written so that the first target is for compiling the entire program or -programs they describe. +programs they describe. If the first rule in the makefile has several +targets, only the first target in the rule becomes the default goal, not +the whole list. You can specify a different goal or goals with arguments to @code{make}. Use the name of the goal as an argument. If you specify several goals, @@ -7106,6 +7162,14 @@ @cindex dependencies, list of all @cindex list of all dependencies +@vindex $+ +@vindex + @r{(automatic variable)} +@item $+ +This is like @samp{$^}, but dependencies listed more than once are +duplicated in the order they were listed in the makefile. This is +primarily useful for use in linking commands where it is meaningful to +repeat library file names in a particular order. + @vindex $* @vindex * @r{(automatic variable)} @item $* @@ -7620,6 +7684,7 @@ @menu * Archive Members:: Archive members as targets. * Archive Update:: The implicit rule for archive member targets. +* Archive Pitfalls:: Dangers to watch out for when using archives. * Archive Suffix Rules:: You can write a special kind of suffix rule for updating archives. @end menu @@ -7676,7 +7741,7 @@ @file{foolib} archive whose names end in @samp{.o}; perhaps @samp{@w{foolib(hack.o)} @w{foolib(kludge.o)}}. -@node Archive Update, Archive Suffix Rules, Archive Members, Archives +@node Archive Update @section Implicit Rule for Archive Member Targets Recall that a target that looks like @file{@var{a}(@var{m})} stands for the @@ -7766,7 +7831,24 @@ This is not necessary when using the GNU @code{ar} program, which updates the @file{__.SYMDEF} member automatically. -@node Archive Suffix Rules, , Archive Update, Archives +@node Archive Pitfalls +@section Dangers When Using Archives +@cindex archive, and parallel execution +@cindex parallel execution, and archive update +@cindex archive, and @code{-j} +@cindex @code{-j}, and archive update + +It is important to be careful when using parallel execution (the +@code{-j} switch; @pxref{Parallel, ,Parallel Execution}) and archives. +If multiple @code{ar} commands run at the same time on the same archive +file, they will not know about each other and can corrupt the file. + +Possibly a future version of @code{make} will provide a mechanism to +circumvent this problem by serializing all commands that operate on the +same archive file. But for the time being, you must either write your +makefiles to avoid this problem in some other way, or not use @code{-j}. + +@node Archive Suffix Rules, , Archive Pitfalls, Archives @section Suffix Rules for Archive Files @cindex suffix rule, for archive @cindex archive, suffix rule for @@ -7912,8 +7994,9 @@ @item The automatic variable @code{$^} containing a list of all dependencies -of the current target. We did not invent this, but we have no idea who did. -@xref{Automatic, ,Automatic Variables}. +of the current target. We did not invent this, but we have no idea who +did. @xref{Automatic, ,Automatic Variables}. The automatic variable +@code{$+} is a simple extension of @code{$^}. @item The ``what if'' flag (@samp{-W} in GNU @code{make}) was (as far as we know) @@ -8381,9 +8464,11 @@ the member named is used (@pxref{Archives}). @item $^ +@itemx $+ The names of all the dependencies, with spaces between them. For dependencies which are archive members, only the member named is used -(@pxref{Archives}). +(@pxref{Archives}). The value of @code{$^} omits duplicate +dependencies, while @code{$+} retains them and preserves their order. @item $* The stem with which an implicit rule matches @@ -8408,6 +8493,10 @@ @item $(^D) @itemx $(^F) The directory part and the file-within-directory part of @code{$^}. + +@item $(+D) +@itemx $(+F) +The directory part and the file-within-directory part of @code{$+}. @item $(?D) @itemx $(?F) diff -ruN make-3.71/misc.c make-3.72.1/misc.c --- make-3.71/misc.c Sat May 21 16:27:33 1994 +++ make-3.72.1/misc.c Mon Jul 4 17:46:58 1994 @@ -461,12 +461,8 @@ setregid functions, but they don't work as in BSD and only the POSIX.1 way works. */ -#ifndef HAVE_SETREUID #undef HAVE_SETREUID -#endif -#ifndef HAVE_SETREGID #undef HAVE_SETREGID -#endif #else /* Not POSIX. */ @@ -720,3 +716,23 @@ return value; } #endif + +/* On some systems, stat can return EINTR. */ + +int +safe_stat (name, buf) + char *name; + struct stat *buf; +{ + int ret; + +#ifdef EINTR + do +#endif + ret = stat (name, buf); +#ifdef EINTR + while (ret < 0 && errno == EINTR); +#endif + + return ret; +} diff -ruN make-3.71/read.c make-3.72.1/read.c --- make-3.71/read.c Mon May 2 18:35:24 1994 +++ make-3.72.1/read.c Mon Jul 25 18:07:41 1994 @@ -240,6 +240,7 @@ char *p2; int ignoring = 0, in_ignored_define = 0; int no_targets = 0; /* Set when reading a rule without targets. */ + char *passed_filename = filename; struct nameseq *filenames = 0; struct dep *deps; @@ -288,7 +289,6 @@ if (!(flags & RM_NO_TILDE) && filename[0] == '~') { char *expanded = tilde_expand (filename); - /* This is a possible memory leak, but I don't care. */ if (expanded != 0) filename = expanded; } @@ -330,6 +330,8 @@ if (flags & RM_DONTCARE) deps->file->dontcare = 1; } + if (filename != passed_filename) + free (filename); filename = deps->file->name; deps->changed = flags; deps = 0; @@ -360,6 +362,47 @@ lineno += nlines; nlines = readline (&lb, infile, filename, lineno); + /* Check for a shell command line first. + If it is not one, we can stop treating tab specially. */ + if (lb.buffer[0] == '\t') + { + /* This line is a probably shell command. */ + unsigned int len; + + if (no_targets) + /* Ignore the commands in a rule with no targets. */ + continue; + + /* If there is no preceding rule line, don't treat this line + as a command, even though it begins with a tab character. + SunOS 4 make appears to behave this way. */ + + if (filenames != 0) + { + if (ignoring) + /* Yep, this is a shell command, and we don't care. */ + continue; + + /* Append this command line to the line being accumulated. */ + p = lb.buffer; + if (commands_idx == 0) + commands_started = lineno; + len = strlen (p); + if (len + 1 + commands_idx > commands_len) + { + commands_len = (len + 1 + commands_idx) * 2; + commands = (char *) xrealloc (commands, commands_len); + } + bcopy (p, &commands[commands_idx], len); + commands_idx += len; + commands[commands_idx++] = '\n'; + + continue; + } + } + + /* This line is not a shell command line. Don't worry about tabs. */ + if (collapsed_length < lb.size) { collapsed_length = lb.size; @@ -372,17 +415,20 @@ collapse_continuations (collapsed); remove_comments (collapsed); + /* strncmp is first to avoid dereferencing out into space. */ +#define word1eq(s, l) (!strncmp (s, p, l) \ + && (p[l] == '\0' || isblank (p[l]))) p = collapsed; - while (isspace (*p) && *p != '\t') + while (isspace (*p)) ++p; - /* We cannot consider a line containing just a tab to be empty - because it might constitute an empty command for a target. */ - if (*p == '\0' && lb.buffer[0] != '\t') + if (*p == '\0') + /* This line is completely empty. */ continue; - /* strncmp is first to avoid dereferencing out into space. */ -#define word1eq(s, l) (!strncmp (s, p, l) \ - && (p[l] == '\0' || isblank (p[l]))) + /* We must first check for conditional and `define' directives before + ignoring anything, since they control what we will do with + following lines. */ + if (!in_ignored_define && (word1eq ("ifdef", 5) || word1eq ("ifndef", 6) || word1eq ("ifeq", 4) || word1eq ("ifneq", 5) @@ -458,40 +504,7 @@ /* Ignore the line. We continue here so conditionals can appear in the middle of a rule. */ continue; - else if (lb.buffer[0] == '\t') - { - /* This line is a shell command. */ - unsigned int len; - - if (no_targets) - /* Ignore the commands in a rule with no targets. */ - continue; - - /* If there is no preceding rule line, don't treat this line - as a command, even though it begins with a tab character. - SunOS 4 make appears to behave this way. */ - - if (filenames != 0) - { - /* Append this command line to the line being accumulated. */ - p = lb.buffer; - if (commands_idx == 0) - commands_started = lineno; - len = strlen (p); - if (len + 1 + commands_idx > commands_len) - { - commands_len = (len + 1 + commands_idx) * 2; - commands = (char *) xrealloc (commands, commands_len); - } - bcopy (p, &commands[commands_idx], len); - commands_idx += len; - commands[commands_idx++] = '\n'; - - continue; - } - } - - if (word1eq ("export", 6)) + else if (word1eq ("export", 6)) { struct variable *v; p2 = next_token (p + 6); @@ -1788,7 +1801,7 @@ dir = expanded; } - if (stat (dir, &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) + if (safe_stat (dir, &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) { if (idx == max - 1) { @@ -1805,7 +1818,7 @@ /* Now add at the end the standard default dirs. */ for (i = 0; default_include_directories[i] != 0; ++i) - if (stat (default_include_directories[i], &stbuf) == 0 + if (safe_stat (default_include_directories[i], &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) dirs[idx++] = default_include_directories[i]; diff -ruN make-3.71/remake.c make-3.72.1/remake.c --- make-3.71/remake.c Fri Apr 22 17:53:53 1994 +++ make-3.72.1/remake.c Sat Sep 10 11:04:57 1994 @@ -21,6 +21,7 @@ #include "job.h" #include "dep.h" #include "file.h" +#include #ifdef HAVE_FCNTL_H #include @@ -277,9 +278,7 @@ return 0; default: - error ("internal error: `%s' command_state == %d in update_file", - f->name, (int) f->command_state); - abort (); + assert (f->command_state == cs_running); break; } } @@ -468,7 +467,7 @@ if (running) { - file->command_state = cs_deps_running; + set_command_state (file, cs_deps_running); --depth; DEBUGPR ("The dependencies of `%s' are being made.\n"); return 0; @@ -478,9 +477,8 @@ if (dep_status != 0) { - file->command_state = cs_finished; file->update_status = dep_status; - file->updated = 1; + notice_finished_file (file); depth--; @@ -493,7 +491,7 @@ return dep_status; } - file->command_state = cs_not_started; + set_command_state (file, cs_not_started); /* Now record which dependencies are more recent than this file, so we can define $?. */ @@ -549,9 +547,8 @@ if (!must_make) { DEBUGPR ("No need to remake target `%s'.\n"); - file->command_state = cs_finished; file->update_status = 0; - file->updated = 1; + notice_finished_file (file); return 0; } @@ -574,13 +571,9 @@ case 0: DEBUGPR ("Successfully remade target file `%s'.\n"); break; - case -1: - error ("internal error: `%s' update_status is -1 at cs_finished!", - file->name); - abort (); default: - error ("internal error: `%s' update_status invalid!", file->name); - abort (); + assert (file->update_status == 0 || file->update_status == 1); + break; } file->updated = 1; @@ -596,6 +589,7 @@ register struct file *file; { struct dep *d; + int ran = file->command_state == cs_running; file->command_state = cs_finished; file->updated = 1; @@ -629,7 +623,7 @@ } } - if (!file->phony) + if (ran && !file->phony) { struct file *f; @@ -656,7 +650,7 @@ d->file->updated = 1; d->file->update_status = file->update_status; - if (!d->file->phony) + if (ran && !d->file->phony) /* Fetch the new modification time. We do this instead of just invalidating the cached time so that a vpath_search can happen. Otherwise, it would @@ -738,7 +732,7 @@ /* Record that some of FILE's dependencies are still being made. This tells the upper levels to wait on processing it until the commands are finished. */ - file->command_state = cs_deps_running; + set_command_state (file, cs_deps_running); lastd = d; d = d->next; @@ -777,8 +771,16 @@ { struct stat statbuf; char buf; + int status; - if (fstat (fd, &statbuf) < 0) +#ifdef EINTR + do +#endif + status = fstat (fd, &statbuf); +#ifdef EINTR + while (status < 0 && errno == EINTR); +#endif + if (status < 0) TOUCH_ERROR ("touch: fstat: "); /* Rewrite character 0 same as it already is. */ if (read (fd, &buf, 1) < 0) @@ -971,7 +973,7 @@ { struct stat st; - if (stat (name, &st) < 0) + if (safe_stat (name, &st) < 0) return (time_t) -1; return (time_t) st.st_mtime; diff -ruN make-3.71/signame.c make-3.72.1/signame.c --- make-3.71/signame.c Mon May 9 22:12:40 1994 +++ make-3.72.1/signame.c Mon Sep 26 17:57:40 1994 @@ -20,14 +20,7 @@ #include #ifdef HAVE_CONFIG_H -#if defined (emacs) || defined (CONFIG_BROKETS) -/* We use instead of "config.h" so that a compilation - using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h - (which it would do because it found this file in $srcdir). */ #include -#else -#include "config.h" -#endif #endif /* Some systems do not define NSIG in . */ diff -ruN make-3.71/texinfo.tex make-3.72.1/texinfo.tex --- make-3.71/texinfo.tex Tue May 10 02:30:20 1994 +++ make-3.72.1/texinfo.tex Mon Oct 31 22:24:22 1994 @@ -24,7 +24,7 @@ % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision: 2.126 $ +\deftexinfoversion$Revision: 2.136 $ \message{Loading texinfo package [Version \texinfoversion]:} % Print the version number if in a .fmt file. @@ -47,7 +47,14 @@ \let\ptexl=\l \let\ptexL=\L -\def\tie{\penalty 10000\ } % Save plain tex definition of ~. +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + \gdef\tie{\leavevmode\penalty\@M\ } +} \let\~ = \tie % And make it available as @~. \message{Basics,} @@ -161,9 +168,14 @@ % Do @cropmarks to get crop marks \def\cropmarks{\let\onepageout=\croppageout } +\newinsert\margin \dimen\margin=\maxdimen + \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} @@ -352,6 +364,15 @@ % @. is an end-of-sentence period. \def\.{.\spacefactor=3000 } +% @enddots{} is an end-of-sentence ellipsis. +\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000} + +% @! is an end-of-sentence bang. +\gdef\!{!\spacefactor=3000 } + +% @? is an end-of-sentence query. +\gdef\?{?\spacefactor=3000 } + % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. @@ -609,9 +630,11 @@ % \def\ignore{\doignore{ignore}} -% Also ignore @ifinfo, @menu, and @direntry text. +% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text. % \def\ifinfo{\doignore{ifinfo}} +\def\ifhtml{\doignore{ifhtml}} +\def\html{\doignore{html}} \def\menu{\doignore{menu}} \def\direntry{\doignore{direntry}} @@ -881,28 +904,39 @@ %% Try out Computer Modern fonts at \magstephalf \let\mainmagstep=\magstephalf +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +\def\setfont#1#2{\font#1=\fontprefix#2} + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi + \ifx\bigger\relax \let\mainmagstep=\magstep1 -\font\textrm=cmr12 -\font\texttt=cmtt12 +\setfont\textrm{r12} +\setfont\texttt{tt12} \else -\font\textrm=cmr10 scaled \mainmagstep -\font\texttt=cmtt10 scaled \mainmagstep +\setfont\textrm{r10 scaled \mainmagstep} +\setfont\texttt{tt10 scaled \mainmagstep} \fi % Instead of cmb10, you many want to use cmbx10. % cmbx10 is a prettier font on its own, but cmb10 % looks better when embedded in a line with cmr10. -\font\textbf=cmb10 scaled \mainmagstep -\font\textit=cmti10 scaled \mainmagstep -\font\textsl=cmsl10 scaled \mainmagstep -\font\textsf=cmss10 scaled \mainmagstep -\font\textsc=cmcsc10 scaled \mainmagstep +\setfont\textbf{b10 scaled \mainmagstep} +\setfont\textit{ti10 scaled \mainmagstep} +\setfont\textsl{sl10 scaled \mainmagstep} +\setfont\textsf{ss10 scaled \mainmagstep} +\setfont\textsc{csc10 scaled \mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun, etc. -\font\defbf=cmbx10 scaled \magstep1 %was 1314 -\font\deftt=cmtt10 scaled \magstep1 +\setfont\defbf{bx10 scaled \magstep1} %was 1314 +\setfont\deftt{tt10 scaled \magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} % Fonts for indices and small examples. @@ -910,9 +944,9 @@ % because texinfo normally uses the slanted fonts for that. % Do not make many font distinctions in general in the index, since they % aren't very useful. -\font\ninett=cmtt9 -\font\indrm=cmr9 -\font\indit=cmsl9 +\setfont\ninett{tt9} +\setfont\indrm{r9} +\setfont\indit{sl9} \let\indsl=\indit \let\indtt=\ninett \let\indsf=\indrm @@ -922,47 +956,47 @@ \font\indsy=cmsy9 % Fonts for headings -\font\chaprm=cmbx12 scaled \magstep2 -\font\chapit=cmti12 scaled \magstep2 -\font\chapsl=cmsl12 scaled \magstep2 -\font\chaptt=cmtt12 scaled \magstep2 -\font\chapsf=cmss12 scaled \magstep2 +\setfont\chaprm{bx12 scaled \magstep2} +\setfont\chapit{ti12 scaled \magstep2} +\setfont\chapsl{sl12 scaled \magstep2} +\setfont\chaptt{tt12 scaled \magstep2} +\setfont\chapsf{ss12 scaled \magstep2} \let\chapbf=\chaprm -\font\chapsc=cmcsc10 scaled\magstep3 +\setfont\chapsc{csc10 scaled\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 -\font\secrm=cmbx12 scaled \magstep1 -\font\secit=cmti12 scaled \magstep1 -\font\secsl=cmsl12 scaled \magstep1 -\font\sectt=cmtt12 scaled \magstep1 -\font\secsf=cmss12 scaled \magstep1 -\font\secbf=cmbx12 scaled \magstep1 -\font\secsc=cmcsc10 scaled\magstep2 +\setfont\secrm{bx12 scaled \magstep1} +\setfont\secit{ti12 scaled \magstep1} +\setfont\secsl{sl12 scaled \magstep1} +\setfont\sectt{tt12 scaled \magstep1} +\setfont\secsf{ss12 scaled \magstep1} +\setfont\secbf{bx12 scaled \magstep1} +\setfont\secsc{csc10 scaled\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 -% \font\ssecrm=cmbx10 scaled \magstep1 % This size an font looked bad. -% \font\ssecit=cmti10 scaled \magstep1 % The letters were too crowded. -% \font\ssecsl=cmsl10 scaled \magstep1 -% \font\ssectt=cmtt10 scaled \magstep1 -% \font\ssecsf=cmss10 scaled \magstep1 - -%\font\ssecrm=cmb10 scaled 1315 % Note the use of cmb rather than cmbx. -%\font\ssecit=cmti10 scaled 1315 % Also, the size is a little larger than -%\font\ssecsl=cmsl10 scaled 1315 % being scaled magstep1. -%\font\ssectt=cmtt10 scaled 1315 -%\font\ssecsf=cmss10 scaled 1315 +% \setfont\ssecrm{bx10 scaled \magstep1} % This size an font looked bad. +% \setfont\ssecit{cmti10 scaled \magstep1} % The letters were too crowded. +% \setfont\ssecsl{sl10 scaled \magstep1} +% \setfont\ssectt{tt10 scaled \magstep1} +% \setfont\ssecsf{ss10 scaled \magstep1} + +%\setfont\ssecrm{b10 scaled 1315} % Note the use of cmb rather than cmbx. +%\setfont\ssecit{ti10 scaled 1315} % Also, the size is a little larger than +%\setfont\ssecsl{sl10 scaled 1315} % being scaled magstep1. +%\setfont\ssectt{tt10 scaled 1315} +%\setfont\ssecsf{ss10 scaled 1315} %\let\ssecbf=\ssecrm -\font\ssecrm=cmbx12 scaled \magstephalf -\font\ssecit=cmti12 scaled \magstephalf -\font\ssecsl=cmsl12 scaled \magstephalf -\font\ssectt=cmtt12 scaled \magstephalf -\font\ssecsf=cmss12 scaled \magstephalf -\font\ssecbf=cmbx12 scaled \magstephalf -\font\ssecsc=cmcsc10 scaled \magstep1 +\setfont\ssecrm{bx12 scaled \magstephalf} +\setfont\ssecit{ti12 scaled \magstephalf} +\setfont\ssecsl{sl12 scaled \magstephalf} +\setfont\ssectt{tt12 scaled \magstephalf} +\setfont\ssecsf{ss12 scaled \magstephalf} +\setfont\ssecbf{bx12 scaled \magstephalf} +\setfont\ssecsc{csc10 scaled \magstep1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled \magstep1 % The smallcaps and symbol fonts should actually be scaled \magstep1.5, @@ -969,7 +1003,7 @@ % but that is not a standard magnification. % Fonts for title page: -\font\titlerm = cmbx12 scaled \magstep3 +\setfont\titlerm{bx12 scaled \magstep3} \let\authorrm = \secrm % In order for the font changes to affect most math symbols and letters, @@ -1025,9 +1059,9 @@ \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. -\font\shortcontrm=cmr12 -\font\shortcontbf=cmbx12 -\font\shortcontsl=cmsl12 +\setfont\shortcontrm{r12} +\setfont\shortcontbf{bx12} +\setfont\shortcontsl{sl12} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic @@ -1657,6 +1691,159 @@ \vadjust{\penalty 1200}}% \flushcr} +% @multitable macros +% Amy Hendrickson, 8/18/94 +% +% @multitable ... @endmultitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @percentofhsize .2 .3 .5 +% @item ... +% +% Numbers following @percentofhsize are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab, @multicolumn or @endmulticolumn do not need to be on their +% own lines, but it will not hurt if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @endmultitable + +% Default dimensions may be reset by user. +% @intableparskip will set vertical space between paragraphs in table. +% @intableparindent will set paragraph indent in table. +% @spacebetweencols will set horizontal space to be left between columns. +% @spacebetweenlines will set vertical space to be left between lines. + +%%%% +% Dimensions + +\newdimen\intableparskip +\newdimen\intableparindent +\newdimen\spacebetweencols +\newdimen\spacebetweenlines +\intableparskip=0pt +\intableparindent=6pt +\spacebetweencols=12pt +\spacebetweenlines=12pt + +%%%% +% Macros used to set up halign preamble: +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\percentofhsize\relax +\def\xpercentofhsize{\percentofhsize} +\newif\ifsetpercent + +\newcount\colcount +\def\setuptable#1{\def\firstarg{#1}% +\ifx\firstarg\xendsetuptable\let\go\relax% +\else + \ifx\firstarg\xpercentofhsize\global\setpercenttrue% + \else + \ifsetpercent + \if#1.\else% + \global\advance\colcount by1 % + \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% + \fi + \else + \global\advance\colcount by1 + \setbox0=\hbox{#1}% + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi% + \fi% + \let\go\setuptable% +\fi\go} +%%%% +% multitable syntax +\def\tab{&} + +%%%% +% @multitable ... @endmultitable definitions: + +\def\multitable#1\item{\bgroup +\let\item\cr +\tolerance=9500 +\hbadness=9500 +\parskip=\intableparskip +\parindent=\intableparindent +\overfullrule=0pt +\global\colcount=0\relax% +\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% + % To parse everything between @multitable and @item : +\def\one{#1}\expandafter\setuptable\one\endsetuptable + % Need to reset this to 0 after \setuptable. +\global\colcount=0\relax% + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. +\halign\bgroup&\global\advance\colcount by 1\relax% +\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname + % In order to keep entries from bumping into each other + % we will add a \leftskip of \spacebetweencols to all columns after + % the first one. + % If a template has been used, we will add \spacebetweencols + % to the width of each template entry. + % If user has set preamble in terms of percent of \hsize + % we will use that dimension as the width of the column, and + % the \leftskip will keep entries from bumping into each other. + % Table will start at left margin and final column will justify at + % right margin. +\ifnum\colcount=1 +\else + \ifsetpercent + \else + % If user has set preamble in terms of percent of \hsize + % we will advance \hsize by \spacebetweencols + \advance\hsize by \spacebetweencols + \fi + % In either case we will make \leftskip=\spacebetweencols: +\leftskip=\spacebetweencols +\fi +\noindent##}\cr% + % \everycr will reset column counter, \colcount, at the end of + % each line. Every column entry will cause \colcount to advance by one. + % The table preamble + % looks at the current \colcount to find the correct column width. +\global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines +\filbreak%% keeps underfull box messages off when table breaks over pages. +\global\colcount=0\relax}}} + \message{indexing,} % Index generation facilities @@ -1851,7 +2038,13 @@ \let\indexbackslash=0 %overridden during \printindex. +% workhorse for all \fooindexes +% #1 is name of index, #2 is stuff to put there \def\doind #1#2{% +% Put the index entry in the margin if desired. +\ifx\SETmarginindex\relax\else% +\insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% +\fi% {\count10=\lastpenalty % {\indexdummies % Must do this here, since \bf, etc expand at this stage \escapechar=`\\% @@ -2287,7 +2480,7 @@ \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz #1{\seccheck{chapter}% \secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \chapno by 1 \message{Chapter \the\chapno}% +\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}% \chapmacro {#1}{\the\chapno}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% @@ -2674,6 +2867,7 @@ \unnumbchapmacro{#1}\def\thischapter{}% \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 + \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. } @@ -3095,23 +3289,26 @@ \advance\leftskip by 0pt plus 1fill \gobble} -% @quotation does normal linebreaking and narrows the margins. +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. % \def\quotation{% -\begingroup\inENV %This group ends at the end of the @quotation body -{\parskip=0pt % because we will skip by \parskip too, later -\aboveenvbreak}% -\singlespace -\parindent=0pt -\let\Equotation = \nonfillfinish -% @cartouche defines \nonarrowing to inhibit narrowing -% at next level down. -\ifx\nonarrowing\relax -\advance \leftskip by \lispnarrowing -\advance \rightskip by \lispnarrowing -\exdentamount=\lispnarrowing -\let\nonarrowing=\relax -\fi} + \begingroup\inENV %This group ends at the end of the @quotation body + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \singlespace + \parindent=0pt + % We have retained a nonzero parskip for the environment, since we're + % doing normal filling. So to avoid extra space below the environment... + \def\Equotation{\parskip = 0pt \nonfillfinish}% + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \let\nonarrowing = \relax + \fi +} \message{defuns,} % Define formatter for defuns @@ -3388,7 +3585,7 @@ % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\code{#1} #2}{Function}% +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } @@ -3397,6 +3594,10 @@ \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} +% \defheaderxcond#1\relax$$$ +% puts #1 in @code, followed by a space, but does nothing if #1 is null. +\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} + % #1 is the classification. #2 is the data type. #3 is the name and args. \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} % #1 is the classification, #2 the data type, #3 the name, #4 the args. @@ -3405,7 +3606,7 @@ \begingroup \normalparens % notably, turn off `&' magic, which prevents % at least some C++ text from working -\defname {\code{#2} #3}{#1}% +\defname {\defheaderxcond#2\relax$$$#3}{#1}% \deftypefunargs {#4}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } @@ -3533,7 +3734,7 @@ % #1 is the data type. #2 is the name. \def\deftypevarheader #1#2{% \doind {vr}{\code{#2}}% Make entry in variables index -\begingroup\defname {\code{#1} #2}{Variable}% +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% \interlinepenalty=10000 \endgraf\penalty 10000\vskip -\parskip\penalty 10000 \endgroup} @@ -3543,7 +3744,7 @@ \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} \def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}% -\begingroup\defname {\code{#2} #3}{#1} +\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} \interlinepenalty=10000 \endgraf\penalty 10000\vskip -\parskip\penalty 10000 \endgroup} @@ -3607,44 +3808,53 @@ \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup% -\def\printedmanual{\ignorespaces #5}% -\def\printednodename{\ignorespaces #3}% -\def\correctnodename{{\normalturnoffactive\printednodename}}% -\setbox1=\hbox{\printedmanual}% -\setbox0=\hbox{\printednodename}% -\ifdim \wd0=0pt% -% No printed node name was explicitly given. -\ifx SETxref-automatic-section-title % -% This line should make the actual chapter or section title appear inside -% the square brackets. Use the real section title if we have it. -\ifdim \wd1>0pt% -% It is in another manual, so we don't have it. -\def\printednodename{\ignorespaces #1} \else% -% We know the real title if we have the xref values. -\ifhavexrefs \def\printednodename{\refx{#1-title}}% -% Otherwise just copy the Info node name. -\else \def\printednodename{\ignorespaces #1} \fi% -\fi\def\printednodename{#1-title}% -\else% This line just uses the node name. -\def\printednodename{\ignorespaces #1}% -\fi% ends \ifx SETxref-automatic-section-title -\fi% ends \ifdim \wd0 -% -% -% If we use \unhbox0 and \unhbox1 to print the node names, TeX does -% not insert empty discretionaries after hyphens, which means that it -% will not find a line break at a hyphen in a node names. Since some -% manuals are best written with fairly long node names, containing -% hyphens, this is a loss. Therefore, we simply give the text of -% the node name again, so it is as if TeX is seeing it for the first -% time. -\ifdim \wd1>0pt -\putwordsection{} ``\correctnodename'' in \cite{\printedmanual}% -\else% -\turnoffactive% -\refx{#1-snt}{} [\correctnodename], \putwordpage\tie\refx{#1-pg}{}% -\fi +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \def\printedmanual{\ignorespaces #5}% + \def\printednodename{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual}% + \setbox0=\hbox{\printednodename}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \ifx\SETxref-automatic-section-title\relax % + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1>0pt% + % It is in another manual, so we don't have it. + \def\printednodename{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printednodename{\refx{#1-title}}% + \else + % Otherwise just copy the Info node name. + \def\printednodename{\ignorespaces #1}% + \fi% + \fi + \def\printednodename{#1-title}% + \else + % Use the node name inside the square brackets. + \def\printednodename{\ignorespaces #1}% + \fi + \fi + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordsection{} ``\printednodename'' in \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive \refx{#1-snt}{}}% + \space [\printednodename],\space + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi \endgroup} % \dosetq is the interface for calls from other macros @@ -3651,7 +3861,7 @@ % Use \turnoffactive so that punctuation chars such as underscore % work in node names. -\def\dosetq #1#2{{\let\folio=0 \turnoffactive% +\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat% \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% \next}} @@ -3772,6 +3982,15 @@ \catcode `\&=\other % `\+ does not work, so use 43. \catcode 43=\other +% Make the characters 128-255 be printing characters +{% + \count 1=128 + \def\loop{% + \catcode\count 1=\other + \advance\count 1 by 1 + \ifnum \count 1<256 \loop \fi + }% +}% % the aux file uses ' as the escape. % Turn off \ as an escape so we do not lose on % entries which were dumped with control sequences in their names. @@ -3781,6 +4000,7 @@ \catcode `\{=1 \catcode `\}=2 \catcode `\%=\other \catcode `\'=0 +\catcode`\^=7 % to make ^^e4 etc usable in xref tags \catcode `\\=\other \openin 1 \jobname.aux \ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue @@ -3998,6 +4218,28 @@ \global\pageheight=\vsize } +% Allow control of the text dimensions. Parameters in order: textheight; +% textwidth; \voffset; \hoffset (!); binding offset. All require a dimension; +% header is additional; added length extends the bottom of the page. + +\def\changepagesizes#1#2#3#4#5{ + \global\vsize= #1 + \advance\vsize by \topskip + \global\voffset= #3 + \global\hsize= #2 + \global\outerhsize=\hsize + \global\advance\outerhsize by 0.5in + \global\outervsize=\vsize + \global\advance\outervsize by 0.6in + \global\pagewidth=\hsize + \global\pageheight=\vsize + \global\normaloffset= #4 + \global\bindingoffset= #5} + +% This layout is compatible with Latex on A4 paper. + +\def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}} + % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other @@ -4039,6 +4281,7 @@ \def~{{\tt \char '176}} \chardef\hat=`\^ \catcode`\^=\active +\def\auxhat{\def^{'hat}} \def^{{\tt \hat}} \catcode`\_=\active diff -ruN make-3.71/variable.c make-3.72.1/variable.c --- make-3.71/variable.c Tue Apr 5 06:09:14 1994 +++ make-3.72.1/variable.c Mon Oct 10 04:08:58 1994 @@ -387,6 +387,7 @@ define_variable ("searchpath[i] != 0; ++i) printf ("%s%c", v->searchpath[i], - v->searchpath[i + 1] == 0 ? '\n' : ':'); + v->searchpath[i + 1] == 0 ? '\n' : PATH_SEPARATOR_CHAR); } if (vpaths == 0) @@ -479,6 +481,7 @@ fputs ("\n# General (`VPATH' variable) search path:\n# ", stdout); for (i = 0; path[i] != 0; ++i) - printf ("%s%c", path[i], path[i + 1] == 0 ? '\n' : ':'); + printf ("%s%c", path[i], + path[i + 1] == 0 ? '\n' : PATH_SEPARATOR_CHAR); } }