summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.in16
-rw-r--r--job.c255
-rw-r--r--maintMakefile6
3 files changed, 138 insertions, 139 deletions
diff --git a/configure.in b/configure.in
index f2fb61b..096df54 100644
--- a/configure.in
+++ b/configure.in
@@ -3,7 +3,7 @@ AC_REVISION([$Id$])
AC_PREREQ(2.13)dnl dnl Minimum Autoconf version required.
AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir.
-AM_INIT_AUTOMAKE(make, 3.77.90)
+AM_INIT_AUTOMAKE(make, 3.77.91)
AM_CONFIG_HEADER(config.h)
dnl Regular configure stuff
@@ -57,8 +57,8 @@ AC_CHECK_LIB(posix4, clock_gettime)
AC_CHECK_FUNCS(memmove strdup psignal mktemp pstat_getdynamic \
clock_gettime dup2 getcwd sigsetmask sigaction getgroups \
- setlinebuf seteuid setegid setreuid setregid \
- strerror strsignal pipe)
+ setlinebuf seteuid setegid setreuid setregid pipe \
+ strerror strsignal)
AC_CHECK_SYMBOL(sys_siglist)
AC_FUNC_ALLOCA
AC_FUNC_VFORK
@@ -212,12 +212,14 @@ if test -r $srcdir/maintMakefile; then
fi
AC_SUBST_FILE(MAINT_MAKEFILE)
-dnl build.sh is also an AC_OUTPUT, but we can't specify it here because
-dnl it's built from build.template and autoconf will crap out. So, we
-dnl build it in the makefiles themselves.
-
AC_OUTPUT(build.sh Makefile glob/Makefile)
+dnl If we don't yet have build.sh.in, build.sh is a bogus 0-length file
+dnl so remove it.
+
+test -f build.sh.in || rm -f build.sh
+
+
case "$make_badcust" in
yes) echo
echo "WARNING: --with-customs specified but no customs.h could be found;"
diff --git a/job.c b/job.c
index ed8f64b..2695bea 100644
--- a/job.c
+++ b/job.c
@@ -542,153 +542,150 @@ reap_children (block, err)
break;
if (c == 0)
- {
- /* An unknown child died.
- Ignore it; it was inherited from our invoker. */
- continue;
- }
- else
- {
- if (debug_flag)
- printf ("Reaping %s child 0x%08lx PID %ld token %c%s\n",
- child_failed ? "losing" : "winning",
- (unsigned long int) c, (long) c->pid, c->job_token,
- c->remote ? " (remote)" : "");
-
- if (c->sh_batch_file) {
- if (debug_flag)
- printf("Cleaning up temp batch file %s\n", c->sh_batch_file);
+ /* An unknown child died.
+ Ignore it; it was inherited from our invoker. */
+ continue;
- /* just try and remove, don't care if this fails */
- remove(c->sh_batch_file);
+ if (debug_flag)
+ printf ("Reaping %s child 0x%08lx PID %ld token %c%s\n",
+ child_failed ? "losing" : "winning",
+ (unsigned long int) c, (long) c->pid, c->job_token,
+ c->remote ? " (remote)" : "");
- /* all done with memory */
- free(c->sh_batch_file);
- c->sh_batch_file = NULL;
- }
+ if (c->sh_batch_file) {
+ if (debug_flag)
+ printf ("Cleaning up temp batch file %s\n", c->sh_batch_file);
- /* If this child had the good stdin, say it is now free. */
- if (c->good_stdin)
- good_stdin_used = 0;
+ /* just try and remove, don't care if this fails */
+ remove (c->sh_batch_file);
- if (child_failed && !c->noerror && !ignore_errors_flag)
- {
- /* 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 = 2;
- 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
- {
- if (child_failed)
- {
- /* The commands failed, but we don't care. */
- child_error (c->file->name,
- exit_code, exit_sig, coredump, 1);
- child_failed = 0;
- }
-
- /* If there are more commands to run, try to start them. */
- if (job_next_command (c))
- {
- if (handling_fatal_signal)
- {
- /* Never start new commands while we are dying.
- 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->update_status = 2;
- }
- else
- {
- /* Check again whether to start remotely.
- Whether or not we want to changes over time.
- Also, start_remote_job may need state set up
- by start_remote_job_p. */
- c->remote = start_remote_job_p (0);
- start_job_command (c);
- /* Fatal signals are left blocked in case we were
- about to put that child on the chain. But it is
- already there, so it is safe for a fatal signal to
- arrive now; it will clean up this child's targets. */
- unblock_sigs ();
- if (c->file->command_state == cs_running)
- /* We successfully started the new command.
- Loop to reap more children. */
- continue;
- }
+ /* all done with memory */
+ free (c->sh_batch_file);
+ c->sh_batch_file = NULL;
+ }
- if (c->file->update_status != 0)
- /* We failed to start the commands. */
- delete_child_targets (c);
- }
- 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;
- }
+ /* If this child had the good stdin, say it is now free. */
+ if (c->good_stdin)
+ good_stdin_used = 0;
- /* When we get here, all the commands for C->file are finished
- (or aborted) and C->file->update_status contains 0 or 2. 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 (child_failed && !c->noerror && !ignore_errors_flag)
+ {
+ /* 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 = 2;
+ 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
+ {
+ if (child_failed)
+ {
+ /* The commands failed, but we don't care. */
+ child_error (c->file->name,
+ exit_code, exit_sig, coredump, 1);
+ child_failed = 0;
+ }
- if (! handling_fatal_signal)
- /* 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 there are more commands to run, try to start them. */
+ if (job_next_command (c))
+ {
+ if (handling_fatal_signal)
+ {
+ /* Never start new commands while we are dying.
+ 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->update_status = 2;
+ }
+ else
+ {
+ /* Check again whether to start remotely.
+ Whether or not we want to changes over time.
+ Also, start_remote_job may need state set up
+ by start_remote_job_p. */
+ c->remote = start_remote_job_p (0);
+ start_job_command (c);
+ /* Fatal signals are left blocked in case we were
+ about to put that child on the chain. But it is
+ already there, so it is safe for a fatal signal to
+ arrive now; it will clean up this child's targets. */
+ unblock_sigs ();
+ if (c->file->command_state == cs_running)
+ /* We successfully started the new command.
+ Loop to reap more children. */
+ continue;
+ }
+
+ if (c->file->update_status != 0)
+ /* We failed to start the commands. */
+ delete_child_targets (c);
+ }
+ 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 2. 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.
+ This also propagates its values for command_state and
+ update_status to its also_make files. */
+ notice_finished_file (c->file);
- if (debug_flag)
- printf ("Removing child 0x%08lx PID %ld token %c%s from chain.\n",
- (unsigned long int) c, (long) c->pid, c->job_token,
- c->remote ? " (remote)" : "");
+ if (debug_flag)
+ printf ("Removing child 0x%08lx PID %ld token %c%s from chain.\n",
+ (unsigned long int) c, (long) c->pid, c->job_token,
+ c->remote ? " (remote)" : "");
- /* Block fatal signals while frobnicating the list, so that
- children and job_slots_used are always consistent. Otherwise
- a fatal signal arriving after the child is off the chain and
- before job_slots_used is decremented would believe a child was
- live and call reap_children again. */
- block_sigs ();
+ /* Block fatal signals while frobnicating the list, so that
+ children and job_slots_used are always consistent. Otherwise
+ a fatal signal arriving after the child is off the chain and
+ before job_slots_used is decremented would believe a child was
+ live and call reap_children again. */
+ block_sigs ();
- /* If this job has a token out, return it. */
- free_job_token(c);
+ /* If this job has a token out, return it. */
+ free_job_token(c);
- /* There is now another slot open. */
- if (job_slots_used > 0)
- --job_slots_used;
+ /* There is now another slot open. */
+ if (job_slots_used > 0)
+ --job_slots_used;
- /* Remove the child from the chain and free it. */
- if (lastc == 0)
- children = c->next;
- else
- lastc->next = c->next;
- if (! handling_fatal_signal) /* Don't bother if about to die. */
- free_child (c);
+ /* Remove the child from the chain and free it. */
+ if (lastc == 0)
+ children = c->next;
+ else
+ lastc->next = c->next;
+ if (! handling_fatal_signal) /* Don't bother if about to die. */
+ free_child (c);
- unblock_sigs ();
+ unblock_sigs ();
- /* If the job failed, and the -k flag was not given, die,
- unless we are already in the process of dying. */
- if (!err && child_failed && !keep_going_flag &&
- /* fatal_error_signal will die with the right signal. */
- !handling_fatal_signal)
- die (2);
- }
+ /* If the job failed, and the -k flag was not given, die,
+ unless we are already in the process of dying. */
+ if (!err && child_failed && !keep_going_flag &&
+ /* fatal_error_signal will die with the right signal. */
+ !handling_fatal_signal)
+ die (2);
/* Only block for one child. */
block = 0;
}
+
return;
}
diff --git a/maintMakefile b/maintMakefile
index 939e19f..50fc396 100644
--- a/maintMakefile
+++ b/maintMakefile
@@ -11,10 +11,10 @@ globhdr := $(wildcard glob/*.h)
TEMPLATES = README README.DOS config.ami configh.dos config.h.W32 config.h-vms
MTEMPLATES = Makefile.DOS SMakefile
-# We need this to ensure that README is created on time to avoid errors
-# by automake.
+# We need this to ensure that README and build.sh.in are created on time to
+# avoid errors by automake.
#
-Makefile.in: README
+#Makefile.in: README build.sh.in
# General rule for turning a .template into a regular file.
#