mirror of
https://github.com/mirror/make.git
synced 2026-08-20 00:43:29 +08:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6d5cdba19 | ||
|
|
fcb29e5e96 | ||
|
|
d7a043b46c | ||
|
|
d85ab5953a | ||
|
|
93dd485ab6 | ||
|
|
5c350f4fd5 | ||
|
|
514c4bac33 | ||
|
|
8f24715a10 | ||
|
|
4c7f18cd09 | ||
|
|
c5af4810ff | ||
|
|
551c4322cb | ||
|
|
e33c50b1e2 | ||
|
|
bc1e6b66f1 | ||
|
|
bbd5e695f5 | ||
|
|
f3cfccf0b8 | ||
|
|
016e1beef5 | ||
|
|
21a8ec0d72 | ||
|
|
fecd9e661a | ||
|
|
2914c705e5 | ||
|
|
3f506aaf90 | ||
|
|
75ea6c3ce2 | ||
|
|
3fb9ebf83f | ||
|
|
b4890bdb1c |
@@ -12,3 +12,6 @@
|
||||
|
||||
/* Define this if you have the `union wait' type in <sys/wait.h>. */
|
||||
#undef HAVE_UNION_WAIT
|
||||
|
||||
/* Define this if the POSIX.1 call `sysconf (_SC_OPEN_MAX)' works properly. */
|
||||
#undef HAVE_SYSCONF_OPEN_MAX
|
||||
|
||||
@@ -249,6 +249,7 @@ distclean: clean glob-realclean
|
||||
-rm -f make.?? make.??s make.log make.toc make.*aux
|
||||
-rm -f loadavg.c
|
||||
realclean: distclean
|
||||
-rm -f make.info*
|
||||
mostlyclean: clean
|
||||
|
||||
.PHONY: glob-clean glob-realclean
|
||||
|
||||
19
configure.in
19
configure.in
@@ -5,10 +5,6 @@ AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir.
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
AC_CONFIG_SUBDIRS(glob) dnl Run configure in glob subdirectory.
|
||||
|
||||
# We want these before the checks, so the checks can modify their values.
|
||||
test -z "$CFLAGS" && CFLAGS=-g AC_SUBST(CFLAGS)
|
||||
test -z "$LDFLAGS" && LDFLAGS=-g AC_SUBST(LDFLAGS)
|
||||
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
@@ -43,9 +39,9 @@ changequote([,])dnl
|
||||
fi
|
||||
AC_MSG_RESULT($ac_cv_check_symbol_$1)])dnl
|
||||
|
||||
AC_CHECK_FUNCS(getdtablesize psignal \
|
||||
AC_CHECK_FUNCS(getdtablesize psignal mktemp \
|
||||
dup2 getcwd sigsetmask getgroups setlinebuf \
|
||||
seteuid setegid setreuid setregid strerror)
|
||||
seteuid setegid setreuid setregid strerror strsignal)
|
||||
AC_CHECK_SYMBOL(sys_siglist)
|
||||
AC_CHECK_SYMBOL(_sys_siglist)
|
||||
AC_FUNC_ALLOCA
|
||||
@@ -54,6 +50,17 @@ AC_FUNC_SETVBUF_REVERSED
|
||||
AC_FUNC_GETLOADAVG
|
||||
AC_FUNC_STRCOLL
|
||||
|
||||
if test $ac_cv_func_getdtablesize = no; then
|
||||
AC_MSG_CHECKING(for sysconf (_SC_OPEN_MAX))
|
||||
AC_CACHE_VAL(make_cv_sysconf_open_max, [dnl
|
||||
AC_TRY_LINK([#include <unistd.h>], [int max = sysconf (_SC_OPEN_MAX);],
|
||||
[make_cv_sysconf_open_max=yes], [make_cv_sysconf_open_max=no])])
|
||||
if test $make_cv_sysconf_open_max = yes; then
|
||||
AC_DEFINE(HAVE_SYSCONF_OPEN_MAX)
|
||||
fi
|
||||
AC_MSG_RESULT($make_cv_sysconf_open_max)
|
||||
fi
|
||||
|
||||
# Check out the wait reality.
|
||||
AC_CHECK_HEADERS(sys/wait.h) AC_CHECK_FUNCS(waitpid wait3)
|
||||
AC_MSG_CHECKING(for union wait)
|
||||
|
||||
8
expand.c
8
expand.c
@@ -292,7 +292,8 @@ variable_expand (line)
|
||||
}
|
||||
else
|
||||
{
|
||||
pattern = alloca (subst_end - subst_beg + 1);
|
||||
pattern = (char *) alloca (subst_end - subst_beg
|
||||
+ 1);
|
||||
bcopy (subst_beg, pattern, subst_end - subst_beg);
|
||||
pattern[subst_end - subst_beg] = '\0';
|
||||
}
|
||||
@@ -307,8 +308,9 @@ variable_expand (line)
|
||||
}
|
||||
else
|
||||
{
|
||||
replace = alloca (replace_end - replace_beg
|
||||
+ 1);
|
||||
replace = (char *) alloca (replace_end
|
||||
- replace_beg
|
||||
+ 1);
|
||||
bcopy (replace_beg, replace,
|
||||
replace_end - replace_beg);
|
||||
replace[replace_end - replace_beg] = '\0';
|
||||
|
||||
21
job.c
21
job.c
@@ -122,6 +122,9 @@ extern int setgid (), getgid ();
|
||||
#ifdef HAVE_GETDTABLESIZE
|
||||
extern int getdtablesize ();
|
||||
#else
|
||||
#ifdef HAVE_SYSCONF_OPEN_MAX
|
||||
#define getdtablesize() ((int) sysconf (_SC_OPEN_MAX))
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
#define getdtablesize() NOFILE
|
||||
#if !defined (NOFILE) && defined (NOFILES_MAX)
|
||||
@@ -130,6 +133,7 @@ extern int getdtablesize ();
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern int getloadavg ();
|
||||
extern int start_remote_job_p ();
|
||||
@@ -170,14 +174,9 @@ child_error (target_name, exit_code, exit_sig, coredump, ignored)
|
||||
"*** [%s] Error %d",
|
||||
target_name, exit_code);
|
||||
else
|
||||
{
|
||||
char *coredump_string = coredump ? " (core dumped)" : "";
|
||||
if (exit_sig > 0 && exit_sig < NSIG)
|
||||
error ("*** [%s] %s%s",
|
||||
target_name, sys_siglist[exit_sig], coredump_string);
|
||||
else
|
||||
error ("*** [%s] Signal %d%s", target_name, exit_sig, coredump_string);
|
||||
}
|
||||
error ("*** [%s] %s%s",
|
||||
target_name, strsignal (exit_sig),
|
||||
coredump ? " (core dumped)" : "");
|
||||
}
|
||||
|
||||
static unsigned int dead_children = 0;
|
||||
@@ -588,6 +587,7 @@ start_job_command (child)
|
||||
|
||||
if (argv == 0)
|
||||
{
|
||||
next_command:
|
||||
/* This line has no commands. Go to the next. */
|
||||
if (job_next_command (child))
|
||||
start_job_command (child);
|
||||
@@ -620,10 +620,7 @@ start_job_command (child)
|
||||
{
|
||||
free (argv[0]);
|
||||
free ((char *) argv);
|
||||
if (job_next_command (child))
|
||||
start_job_command (child);
|
||||
child->file->update_status = 0;
|
||||
return;
|
||||
goto next_command;
|
||||
}
|
||||
|
||||
/* Flush the output streams so they won't have things written twice. */
|
||||
|
||||
27
main.c
27
main.c
@@ -397,6 +397,15 @@ enter_command_line_file (name)
|
||||
return enter_file (savestring (name, strlen (name)));
|
||||
}
|
||||
|
||||
/* Toggle -d on receipt of SIGUSR1. */
|
||||
|
||||
static RETSIGTYPE
|
||||
debug_signal_handler (sig)
|
||||
int sig;
|
||||
{
|
||||
debug_flag = ! debug_flag;
|
||||
}
|
||||
|
||||
int
|
||||
main (argc, argv, envp)
|
||||
int argc;
|
||||
@@ -415,7 +424,7 @@ main (argc, argv, envp)
|
||||
reading_filename = 0;
|
||||
reading_lineno_ptr = 0;
|
||||
|
||||
#ifndef HAVE_SYS_SIGLIST
|
||||
#if !defined (HAVE_STRSIGNAL) && !defined (HAVE_SYS_SIGLIST)
|
||||
signame_init ();
|
||||
#endif
|
||||
|
||||
@@ -589,7 +598,7 @@ main (argc, argv, envp)
|
||||
}
|
||||
|
||||
/* Now allocate a buffer big enough and fill it. */
|
||||
p = value = alloca (len);
|
||||
p = value = (char *) alloca (len);
|
||||
for (cv = command_variables; cv != 0; cv = cv->next)
|
||||
{
|
||||
v = cv->variable;
|
||||
@@ -691,11 +700,16 @@ main (argc, argv, envp)
|
||||
/* This makefile is standard input. Since we may re-exec
|
||||
and thus re-read the makefiles, we read standard input
|
||||
into a temporary file and read from that. */
|
||||
static char name[] = "/tmp/GmXXXXXX";
|
||||
FILE *outfile;
|
||||
|
||||
/* Make a unique filename. */
|
||||
#ifdef HAVE_MKTEMP
|
||||
static char name[] = "/tmp/GmXXXXXX";
|
||||
(void) mktemp (name);
|
||||
#else
|
||||
static char name[L_tmpnam];
|
||||
(void) tmpnam (name);
|
||||
#endif
|
||||
|
||||
outfile = fopen (name, "w");
|
||||
if (outfile == 0)
|
||||
@@ -744,6 +758,11 @@ main (argc, argv, envp)
|
||||
(void) signal (SIGCLD, child_handler);
|
||||
#endif
|
||||
|
||||
/* Let the user send us SIGUSR1 to toggle the -d flag during the run. */
|
||||
#ifdef SIGUSR1
|
||||
(void) signal (SIGUSR1, debug_signal_handler);
|
||||
#endif
|
||||
|
||||
/* Define the initial list of suffixes for old-style rules. */
|
||||
|
||||
set_default_suffixes ();
|
||||
@@ -1837,7 +1856,7 @@ print_version ()
|
||||
printf ("-%s", remote_description);
|
||||
|
||||
printf (", by Richard Stallman and Roland McGrath.\n\
|
||||
%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.\n\
|
||||
%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95 Free Software Foundation, Inc.\n\
|
||||
%sThis is free software; see the source for copying conditions.\n\
|
||||
%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
|
||||
%sPARTICULAR PURPOSE.\n\n", precede, precede, precede, precede);
|
||||
|
||||
@@ -236,17 +236,34 @@ normally don't want to recompile. For example, the @samp{mostlyclean}
|
||||
target for GCC does not delete @file{libgcc.a}, because recompiling it
|
||||
is rarely necessary and takes a lot of time.
|
||||
|
||||
@item realclean
|
||||
Delete everything from the current directory that can be reconstructed
|
||||
with this Makefile. This typically includes everything deleted by
|
||||
@code{distclean}, plus more: C source files produced by Bison, tags tables,
|
||||
Info files, and so on.
|
||||
@item maintainer-clean
|
||||
Delete almost everything from the current directory that can be
|
||||
reconstructed with this Makefile. This typically includes everything
|
||||
deleted by @code{distclean}, plus more: C source files produced by
|
||||
Bison, tags tables, Info files, and so on.
|
||||
|
||||
One exception, however: @samp{make realclean} should not delete
|
||||
@file{configure} even if @file{configure} can be remade using a rule in
|
||||
the Makefile. More generally, @samp{make realclean} should not delete
|
||||
anything that needs to exist in order to run @file{configure}
|
||||
and then begin to build the program.
|
||||
The reason we say ``almost everything'' is that @samp{make
|
||||
maintainer-clean} should not delete @file{configure} even if
|
||||
@file{configure} can be remade using a rule in the Makefile. More
|
||||
generally, @samp{make maintainer-clean} should not delete anything that
|
||||
needs to exist in order to run @file{configure} and then begin to build
|
||||
the program. This is the only exception; @code{maintainer-clean} should
|
||||
delete everything else that can be rebuilt.
|
||||
|
||||
The @samp{maintainer-clean} is intended to be used by a maintainer of
|
||||
the package, not by ordinary users. You may need special tools to
|
||||
reconstruct some of the files that @samp{make maintainer-clean} deletes.
|
||||
Since these files are normally included in the distribution, we don't
|
||||
take care to make them easy to reconstruct. If you find you need to
|
||||
unpack the full distribution again, don't blame us.
|
||||
|
||||
To help make users aware of this, the commands for
|
||||
@code{maintainer-clean} should start with these two:
|
||||
|
||||
@example
|
||||
@@echo "This command is intended for maintainers to use;"
|
||||
@@echo "it deletes files that may require special tools to rebuild."
|
||||
@end example
|
||||
|
||||
@item TAGS
|
||||
Update a tags table for this program.
|
||||
|
||||
3
make.h
3
make.h
@@ -1,5 +1,5 @@
|
||||
/* Miscellaneous global declarations and portability cruft for GNU Make.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95 Free Software Foundation, Inc.
|
||||
This file is part of GNU Make.
|
||||
|
||||
GNU Make is free software; you can redistribute it and/or modify
|
||||
@@ -173,7 +173,6 @@ extern unsigned int get_path_max ();
|
||||
extern char *malloc (), *realloc ();
|
||||
extern void free ();
|
||||
|
||||
extern void qsort ();
|
||||
extern void abort (), exit ();
|
||||
|
||||
#endif /* Standard headers. */
|
||||
|
||||
4
misc.c
4
misc.c
@@ -1,5 +1,5 @@
|
||||
/* Miscellaneous generic support functions for GNU Make.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
This file is part of GNU Make.
|
||||
|
||||
GNU Make is free software; you can redistribute it and/or modify
|
||||
@@ -260,7 +260,7 @@ strerror (errnum)
|
||||
if (errno < sys_nerr)
|
||||
return sys_errlist[errnum];
|
||||
|
||||
sprintf ("Unknown error %d", buf, errnum);
|
||||
sprintf (buf, "Unknown error %d", errnum);
|
||||
return buf;
|
||||
}
|
||||
#endif
|
||||
|
||||
4
read.c
4
read.c
@@ -1,5 +1,5 @@
|
||||
/* Reading and parsing of makefiles for GNU Make.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
This file is part of GNU Make.
|
||||
|
||||
GNU Make is free software; you can redistribute it and/or modify
|
||||
@@ -631,7 +631,7 @@ read_makefile (filename, flags)
|
||||
;
|
||||
else if (lb.buffer[0] == '\t')
|
||||
{
|
||||
p = lb.buffer;
|
||||
p = collapsed; /* Ignore comments. */
|
||||
while (isblank (*p))
|
||||
++p;
|
||||
if (*p == '\0')
|
||||
|
||||
16
remake.c
16
remake.c
@@ -1,5 +1,5 @@
|
||||
/* Basic dependency engine for GNU Make.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
|
||||
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
This file is part of GNU Make.
|
||||
|
||||
GNU Make is free software; you can redistribute it and/or modify
|
||||
@@ -556,7 +556,6 @@ update_file_1 (file, depth)
|
||||
if (!must_make)
|
||||
{
|
||||
DEBUGPR ("No need to remake target `%s'.\n");
|
||||
file->update_status = 0;
|
||||
notice_finished_file (file);
|
||||
return 0;
|
||||
}
|
||||
@@ -605,12 +604,12 @@ notice_finished_file (file)
|
||||
|
||||
if (touch_flag
|
||||
/* The update status will be:
|
||||
-1 if no commands were run;
|
||||
0 if some commands (+ or ${MAKE}) were run and won;
|
||||
-1 if this target was not remade;
|
||||
0 if 0 or more commands (+ or ${MAKE}) were run and won;
|
||||
1 if some commands were run and lost.
|
||||
The only time we don't want to touch the target is if
|
||||
it had some recursive commands, and they lost. */
|
||||
&& file->update_status != 1)
|
||||
We touch the target if it has commands which either were not run
|
||||
or won when they ran (i.e. status is 0). */
|
||||
&& file->update_status == 0)
|
||||
{
|
||||
if (file->cmds != 0 && file->cmds->any_recurse)
|
||||
{
|
||||
@@ -854,6 +853,9 @@ remake_file (file)
|
||||
execute_file_commands (file);
|
||||
return;
|
||||
}
|
||||
else
|
||||
/* This tells notice_finished_file it is ok to touch the file. */
|
||||
file->update_status = 0;
|
||||
}
|
||||
|
||||
/* This does the touching under -t. */
|
||||
|
||||
19
signame.c
19
signame.c
@@ -1,5 +1,5 @@
|
||||
/* Convert between signal names and numbers.
|
||||
Copyright (C) 1990, 1992, 1993 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1992, 1993, 1995 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
|
||||
@@ -273,3 +273,20 @@ psignal (signal, message)
|
||||
fprintf (stderr, "%s: %s\n", message, sys_siglist[signal]);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRSIGNAL
|
||||
/* Return the string associated with the signal number. */
|
||||
|
||||
char *
|
||||
strsignal (signal)
|
||||
int signal;
|
||||
{
|
||||
static char buf[] = "Signal 12345678901234567890";
|
||||
|
||||
if (signal > 0 || signal < NSIG)
|
||||
return sys_siglist[signal];
|
||||
|
||||
sprintf (buf, "Signal %d", signal);
|
||||
return buf;
|
||||
}
|
||||
#endif
|
||||
|
||||
12
signame.h
12
signame.h
@@ -1,5 +1,5 @@
|
||||
/* Convert between signal names and numbers.
|
||||
Copyright (C) 1990, 1992, 1993 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1992, 1993, 1995 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
|
||||
@@ -29,7 +29,7 @@ char *sig_abbrev (int number);
|
||||
signal by that name. */
|
||||
int sig_number (const char *abbrev);
|
||||
|
||||
/* Avoid conflicts with a system header file that might define these two. */
|
||||
/* Avoid conflicts with a system header file that might define these three. */
|
||||
|
||||
#ifndef HAVE_PSIGNAL
|
||||
/* Print to standard error the name of SIGNAL, preceded by MESSAGE and
|
||||
@@ -37,6 +37,11 @@ int sig_number (const char *abbrev);
|
||||
void psignal (int signal, const char *message);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRSIGNAL
|
||||
/* Return the name of SIGNAL. */
|
||||
char *strsignal (int signal);
|
||||
#endif
|
||||
|
||||
#if !defined (HAVE_SYS_SIGLIST)
|
||||
/* Names for signals from 0 to NSIG-1. */
|
||||
extern const char *sys_siglist[];
|
||||
@@ -50,6 +55,9 @@ int sig_number ();
|
||||
#if !defined (HAVE_SYS_SIGLIST) && !defined (HAVE_PSIGNAL)
|
||||
void psignal ();
|
||||
#endif
|
||||
#ifndef HAVE_STRSIGNAL
|
||||
char *strsignal (int signal);
|
||||
#endif
|
||||
#if !defined (HAVE_SYS_SIGLIST)
|
||||
extern char *sys_siglist[];
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user