Numerous fixes: patches for OS/2; core for -f ''; makefile updates.

This commit is contained in:
Paul Smith 2004-02-23 06:25:54 +00:00
parent fafeb87027
commit be8c3dbc97
13 changed files with 175 additions and 97 deletions

View File

@ -1,3 +1,40 @@
2004-02-22 Paul D. Smith <psmith@gnu.org>
* main.c (decode_switches): Require non-empty strings for all our
string command-line options. Fixes Debian bug # 164165.
* configure.in: Check for stdarg.h and varargs.h.
* make.h (USE_VARIADIC): Set this if we can use variadic functions
for printing messages.
* misc.c: Check USE_VARIADIC instead of (obsolete) HAVE_STDVARARGS.
(message): Ditto.
(error): Ditto.
(fatal): Ditto.
A number of patches for OS/2 support from Andreas Buening
<andreas.buening@nexgo.de>:
* job.c (child_handler) [OS/2]: Allow this on OS/2 but we have to
disable the SIGCHLD handler.
(reap_children) [OS/2]: Remove special handling of job_rfd.
(set_child_handler_action_flags) [OS/2]: Use this function in OS/2.
(new_job) [OS/2]: Disable the SIGCHLD handler on OS/2.
* main.c (main) [OS/2]: Special handling for paths in OS/2.
* configure.in [OS/2]: Force SA_RESTART for OS/2.
* Makefile.am (check-regression): Use $(EXEEXT) for Windows-type
systems.
2004-02-21 Paul D. Smith <psmith@gnu.org>
* w32/subproc/sub_proc.c (process_easy) [W32]: Christoph Schulz
<mail@kristov.de> reports that if process_begin() fails we don't
handle the error condition correctly in all cases.
* w32/subproc/w32err.c (map_windows32_error_to_string): Make sure
to have a newline on the message.
* job.c (construct_command_argv_internal): Add "test" to UNIX
sh_cmds[]. Fixes Savannah bug # 7606.
2004-02-04 Paul D. Smith <psmith@gnu.org> 2004-02-04 Paul D. Smith <psmith@gnu.org>
* job.c (vms_handle_apos) [VMS]: Fix various string handling * job.c (vms_handle_apos) [VMS]: Fix various string handling

View File

@ -145,8 +145,8 @@ check-regression:
rm -f tests/$$f; ln -s ../srctests/$$f tests; \ rm -f tests/$$f; ln -s ../srctests/$$f tests; \
done; fi ;; \ done; fi ;; \
esac; \ esac; \
echo "cd tests && $(PERL) ./run_make_tests.pl -make ../make $(MAKETESTFLAGS)"; \ echo "cd tests && $(PERL) ./run_make_tests.pl -make ../make$(EXEEXT) $(MAKETESTFLAGS)"; \
cd tests && $(PERL) ./run_make_tests.pl -make ../make $(MAKETESTFLAGS); \ cd tests && $(PERL) ./run_make_tests.pl -make ../make$(EXEEXT) $(MAKETESTFLAGS); \
else \ else \
echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \ echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \
fi; \ fi; \

View File

@ -52,6 +52,9 @@ AC_HEADER_TIME
AC_CHECK_HEADERS(stdlib.h locale.h unistd.h limits.h fcntl.h string.h \ AC_CHECK_HEADERS(stdlib.h locale.h unistd.h limits.h fcntl.h string.h \
memory.h sys/param.h sys/time.h sys/timeb.h) memory.h sys/param.h sys/time.h sys/timeb.h)
# Determine what kind of variadic function calls we support
AC_CHECK_HEADERS(stdarg.h varargs.h, break)
AM_PROG_CC_C_O AM_PROG_CC_C_O
AM_PROG_CC_STDC AM_PROG_CC_STDC
AC_C_CONST AC_C_CONST
@ -244,6 +247,12 @@ AC_CACHE_CHECK(for SA_RESTART, make_cv_sa_restart, [
[[return SA_RESTART;]])], [[return SA_RESTART;]])],
[make_cv_sa_restart=yes], [make_cv_sa_restart=yes],
[make_cv_sa_restart=no])]) [make_cv_sa_restart=no])])
# enable make_cv_sa_restart for OS/2
case "$host_os" in
os2*) make_cv_sa_restart=yes ;;
esac
if test "$make_cv_sa_restart" != no; then if test "$make_cv_sa_restart" != no; then
AC_DEFINE(HAVE_SA_RESTART, 1, AC_DEFINE(HAVE_SA_RESTART, 1,
[Define if <signal.h> defines the SA_RESTART constant.]) [Define if <signal.h> defines the SA_RESTART constant.])

View File

@ -1949,9 +1949,8 @@ just the search paths.
The value of the @code{make} variable @code{VPATH} specifies a list of The value of the @code{make} variable @code{VPATH} specifies a list of
directories that @code{make} should search. Most often, the directories that @code{make} should search. Most often, the
directories are expected to contain prerequisite files that are not in the directories are expected to contain prerequisite files that are not in the
current directory; however, @code{VPATH} specifies a search list that current directory; however, @code{make} uses @code{VPATH} as a search
@code{make} applies for all files, including files which are targets of list for both prerequisites and targets of rules.
rules.
Thus, if a file that is listed as a target or prerequisite does not exist Thus, if a file that is listed as a target or prerequisite does not exist
in the current directory, @code{make} searches the directories listed in in the current directory, @code{make} searches the directories listed in
@ -6470,7 +6469,7 @@ client_LIBS = protocol
all: $(PROGRAMS) all: $(PROGRAMS)
define PROGRAM_template define PROGRAM_template
$(1): $$($(1)_OBJ) $$($(1)_LIBS:%=-l%) $(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)
ALL_OBJS += $$($(1)_OBJS) ALL_OBJS += $$($(1)_OBJS)
endef endef
@ -6600,19 +6599,18 @@ Here the redefinition takes place if @samp{$(origin bletch)} returns either
@cindex backquotes @cindex backquotes
@cindex shell command, function for @cindex shell command, function for
The @code{shell} function is unlike any other function except the The @code{shell} function is unlike any other function other than the
@code{wildcard} function @code{wildcard} function
(@pxref{Wildcard Function, ,The Function @code{wildcard}}) in that it (@pxref{Wildcard Function, ,The Function @code{wildcard}}) in that it
communicates with the world outside of @code{make}. communicates with the world outside of @code{make}.
The @code{shell} function performs the same function that backquotes The @code{shell} function performs the same function that backquotes
(@samp{`}) perform in most shells: it does @dfn{command expansion}. This (@samp{`}) perform in most shells: it does @dfn{command expansion}.
means that it takes an argument that is a shell command and returns the This means that it takes as an argument a shell command and evaluates
output of the command. The only processing @code{make} does on the result, to the output of the command. The only processing @code{make} does on
before substituting it into the surrounding text, is to convert each the result is to convert each newline (or carriage-return / newline
newline or carriage-return / newline pair to a single space. It also pair) to a single space. If there is a trailing (carriage-return
removes the trailing (carriage-return and) newline, if it's the last and) newline it will simply be removed.@refill
thing in the result.@refill
The commands run by calls to the @code{shell} function are run when the The commands run by calls to the @code{shell} function are run when the
function calls are expanded (@pxref{Reading Makefiles, , How function calls are expanded (@pxref{Reading Makefiles, , How

44
job.c
View File

@ -54,7 +54,7 @@ int batch_mode_shell = 0;
#elif defined (__EMX__) #elif defined (__EMX__)
const char *default_shell = "/bin/sh"; char *default_shell = "/bin/sh";
int batch_mode_shell = 0; int batch_mode_shell = 0;
#elif defined (VMS) #elif defined (VMS)
@ -414,7 +414,6 @@ vms_handle_apos (char *p)
static unsigned int dead_children = 0; static unsigned int dead_children = 0;
#ifndef __EMX__ /* Don't use SIGCHLD handler on OS/2. */
RETSIGTYPE RETSIGTYPE
child_handler (int sig) child_handler (int sig)
{ {
@ -426,9 +425,15 @@ child_handler (int sig)
job_rfd = -1; job_rfd = -1;
} }
#ifdef __EMX__
/* The signal handler must called only once! */
signal (SIGCHLD, SIG_DFL);
#endif
/* This causes problems if the SIGCHLD interrupts a printf().
DB (DB_JOBS, (_("Got a SIGCHLD; %u unreaped children.\n"), dead_children)); DB (DB_JOBS, (_("Got a SIGCHLD; %u unreaped children.\n"), dead_children));
*/
} }
#endif /* !__EMX__ */
extern int shell_function_pid, shell_function_completed; extern int shell_function_pid, shell_function_completed;
@ -562,18 +567,6 @@ reap_children (int block, int err)
/* If we have started jobs in this second, remove one. */ /* If we have started jobs in this second, remove one. */
if (job_counter) if (job_counter)
--job_counter; --job_counter;
#ifdef __EMX__
/* the SIGCHLD handler must not be used on OS/2 because, unlike
on UNIX systems, it had to call wait() itself. Therefore
job_rfd has to be closed here. */
if (job_rfd >= 0)
{
close (job_rfd);
job_rfd = -1;
}
#endif
} }
else else
{ {
@ -881,10 +874,6 @@ unblock_sigs (void)
#endif #endif
#ifdef MAKE_JOBSERVER #ifdef MAKE_JOBSERVER
# ifdef __EMX__
/* Never install the SIGCHLD handler for EMX!!! */
# define set_child_handler_action_flags(x)
# else
/* Set the child handler action flags to FLAGS. */ /* Set the child handler action flags to FLAGS. */
static void static void
set_child_handler_action_flags (int flags) set_child_handler_action_flags (int flags)
@ -900,7 +889,6 @@ set_child_handler_action_flags (int flags)
sigaction (SIGCLD, &sa, NULL); sigaction (SIGCLD, &sa, NULL);
#endif #endif
} }
#endif /* !__EMX__ */
#endif #endif
@ -1630,6 +1618,10 @@ new_job (struct file *file)
set_child_handler_action_flags (0); set_child_handler_action_flags (0);
got_token = read (job_rfd, &token, 1); got_token = read (job_rfd, &token, 1);
saved_errno = errno; saved_errno = errno;
#ifdef __EMX__
/* The child handler must be turned off here. */
signal (SIGCHLD, SIG_DFL);
#endif
set_child_handler_action_flags (SA_RESTART); set_child_handler_action_flags (SA_RESTART);
/* If we got one, we're done here. */ /* If we got one, we're done here. */
@ -2750,12 +2742,12 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
char** sh_cmds; char** sh_cmds;
#else /* must be UNIX-ish */ #else /* must be UNIX-ish */
static char sh_chars[] = "#;\"*?[]&|<>(){}$`^~!"; static char sh_chars[] = "#;\"*?[]&|<>(){}$`^~!";
static char *sh_cmds[] = { "cd", "eval", "exec", "exit", "login", static char *sh_cmds[] = { ".", ":", "break", "case", "cd", "continue",
"logout", "set", "umask", "wait", "while", "for", "eval", "exec", "exit", "export", "for", "if",
"case", "if", ":", ".", "break", "continue", "login", "logout", "read", "readonly", "set",
"export", "read", "readonly", "shift", "times", "shift", "switch", "test", "times", "trap",
"trap", "switch", 0 }; "umask", "wait", "while", 0 };
#endif /* __MSDOS__ */ #endif
register int i; register int i;
register char *p; register char *p;
register char *ap; register char *ap;

13
main.c
View File

@ -1158,7 +1158,12 @@ main (int argc, char **argv, char **envp)
program that uses a non-absolute name. */ program that uses a non-absolute name. */
if (current_directory[0] != '\0' if (current_directory[0] != '\0'
&& argv[0] != 0 && argv[0] != 0
&& (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':'))) && (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':'))
#ifdef __EMX__
/* do not prepend cwd if argv[0] contains no '/', e.g. "make" */
&& (strchr (argv[0], '/') != 0 || strchr (argv[0], '\\') != 0)
# endif
)
argv[0] = concat (current_directory, "/", argv[0]); argv[0] = concat (current_directory, "/", argv[0]);
#else /* !__MSDOS__ */ #else /* !__MSDOS__ */
if (current_directory[0] != '\0' if (current_directory[0] != '\0'
@ -2230,6 +2235,12 @@ decode_switches (int argc, char **argv, int env)
if (optarg == 0) if (optarg == 0)
optarg = cs->noarg_value; optarg = cs->noarg_value;
else if (*optarg == '\0')
{
error (NILF, _("the `-%c' option requires a non-empty string argument"),
cs->c);
bad = 1;
}
sl = *(struct stringlist **) cs->value_ptr; sl = *(struct stringlist **) cs->value_ptr;
if (sl == 0) if (sl == 0)

View File

@ -80,20 +80,24 @@ build.sh.in: build.template Makefile
maintFILES = configure aclocal.m4 config.h.in Makefile.in stamp-h.in maintFILES = configure aclocal.m4 config.h.in Makefile.in stamp-h.in
CVS-CLEAN-FILES += $(maintFILES) $(TEMPLATES) $(MTEMPLATES) NMakefile \ CVS-CLEAN-FILES += $(maintFILES) $(TEMPLATES) $(MTEMPLATES) NMakefile \
missing build.sh.in .dep_segment po-check-? build.sh.in .deps .dep_segment ABOUT-NLS
# This rule tries to clean the tree right down to how it looks when you do a # This rule tries to clean the tree right down to how it looks when you do a
# virgin CVS checkout. # virgin CVS checkout.
# This is potentially dangerous since it removes _ANY FILE_ that is not in
# CVS. Including files you might mean to add to CVS but haven't yet...
# I only use this in subdirectories where it's unlikely we have any new
# files. Stil...
cvsclean = perl -e '$$k{CVS} = 1; open(E,"< CVS/Entries") || die "CVS/Entries: $$!\n"; while (defined ($$_ = <E>)) { m%^/([^/]*)% or next; $$k{$$1} = 1; } close(E) || die "CVS/Entries: $$!\n"; opendir(D, ".") || die ".: $$!\n"; while (defined ($$_ = readdir(D))) { -f $$_ && ! exists $$k{$$_} && unlink($$_); } closedir(D) || die ".: $$!\n";'
.PHONY: cvs-clean .PHONY: cvs-clean
cvs-clean: maintainer-clean cvs-clean: maintainer-clean
-rm -f *~ -rm -rf *~ $(CVS-CLEAN-FILES)
-rm -f config/*~ config/Makefile.in config/[a-z]* -cd config && $(cvsclean)
-rm -f po/*~ po/Makefile.in.in po/Rules-quot po/[a-z]* -cd po && $(cvsclean)
-rm -f doc/*~ doc/Makefile.in doc/fdl.texi doc/make-stds.texi \ -cd doc && $(cvsclean)
doc/texinfo.tex -cd glob && $(cvsclean)
-rm -f glob/*~ glob/Makefile.in
-rm -f ABOUT-NLS $(CVS-CLEAN-FILES)
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
@ -142,18 +146,13 @@ po-update:
# The following pseudo table associates a local directory and a URL # The following pseudo table associates a local directory and a URL
# with each of the files that belongs to some other package and is # with each of the files that belongs to some other package and is
# regularly updated from the specified URL. # regularly updated from the specified URL.
# $(srcdir)/src/ansi2knr.c
wget_files ?= $(srcdir)/doc/make-stds.texi $(srcdir)/doc/fdl.texi
wget_files ?= $(srcdir)/doc/texinfo.tex $(srcdir)/doc/make-stds.texi \
$(srcdir)/doc/fdl.texi
wget-targets = $(patsubst %, get-%, $(wget_files)) wget-targets = $(patsubst %, get-%, $(wget_files))
ansi2knr.c-url_prefix = ftp://ftp.cs.wisc.edu/ghost/ ansi2knr.c-url_prefix = ftp://ftp.cs.wisc.edu/ghost/
texinfo.tex-url_prefix = $(ftp-gnu)/texinfo/
standards.texi-url_prefix = $(ftp-gnu)/GNUinfo/ standards.texi-url_prefix = $(ftp-gnu)/GNUinfo/
make-stds.texi-url_prefix = $(ftp-gnu)/GNUinfo/ make-stds.texi-url_prefix = $(ftp-gnu)/GNUinfo/
fdl.texi-url_prefix = $(ftp-gnu)/GNUinfo/ fdl.texi-url_prefix = $(ftp-gnu)/GNUinfo/
@ -167,32 +166,42 @@ $(wget-targets):
&& $(WGET) $(url) -O $(target).t \ && $(WGET) $(url) -O $(target).t \
&& $(move_if_change) && $(move_if_change)
config-prefix = http://savannah.gnu.org/cgi-bin/viewcvs/config savannah-url = http://savannah.gnu.org/cgi-bin/viewcvs
config-url = $(config-prefix)/$(patsubst get-%,%,$@)?rev=HEAD viewcvs-suffix = \?rev=HEAD\&content-type=text/plain
config-url = $(savannah-url)/config/config/$(patsubst get-config/%,%,$@)$(viewcvs-suffix)
get-config/config.guess get-config/config.sub: get-config/config.guess get-config/config.sub:
@echo $(WGET) $(config-url) -O $(target) \ @echo $(WGET) $(config-url) -O $(target) \
&& $(WGET) $(config-url) -O $(target).t \ && $(WGET) $(config-url) -O $(target).t \
&& $(move_if_change) && $(move_if_change)
gnulib-url = $(savannah-url)/gnulib/gnulib/config/$(patsubst get-config/%,%,$@)$(viewcvs-suffix)
get-config/texinfo.tex:
@echo $(WGET) $(gnulib-url) -O $(target) \
&& $(WGET) $(gnulib-url) -O $(target).t \
&& $(move_if_change)
.PHONY: wget-update .PHONY: wget-update
wget-update: $(wget-targets) wget-update: $(wget-targets)
# Updating tools via CVS. # Updating tools via CVS.
cvs_files ?= depcomp missing # cvs_files ?= depcomp missing
# config/config.guess config/config.sub # cvs-targets = $(patsubst %, get-%, $(cvs_files))
cvs-targets = $(patsubst %, get-%, $(cvs_files))
automake_repo = :pserver:anoncvs@anoncvs.cygnus.com:/cvs/automake # automake_repo = :pserver:anoncvs@anoncvs.cygnus.com:/cvs/automake
.PHONY: $(cvs-targets) # .PHONY: $(cvs-targets)
$(cvs-targets): # $(cvs-targets):
$(CVS) -d $(automake_repo) co -p automake/lib/$(notdir $(target)) \ # $(CVS) -d $(automake_repo) co -p automake/lib/$(notdir $(target)) \
>$(target).t \ # >$(target).t \
&& $(move_if_change) # && $(move_if_change)
# $(cvs-targets)
.PHONY: cvs-update .PHONY: cvs-update
cvs-update: $(cvs-targets) get-config/config.guess get-config/config.sub cvs-update: get-config/texinfo.tex get-config/config.guess get-config/config.sub
# --------------------- # # --------------------- #
@ -200,9 +209,7 @@ cvs-update: $(cvs-targets) get-config/config.guess get-config/config.sub
# --------------------- # # --------------------- #
.PHONY: update .PHONY: update
update: wget-update po-update update: wget-update po-update cvs-update
# cvs-update
## --------------- ## ## --------------- ##

24
make.h
View File

@ -388,7 +388,29 @@ struct floc
/* Fancy processing for variadic functions in both ANSI and pre-ANSI /* Fancy processing for variadic functions in both ANSI and pre-ANSI
compilers. */ compilers. */
#if defined __STDC__ && __STDC__ #if HAVE_STDARG_H
# include <stdarg.h>
# define VA_START(a, f) va_start(a, f)
#else
# if HAVE_VARARGS_H
# include <varargs.h>
# define VA_START(a, f) va_start(a)
# endif
#endif
#ifndef VA_START
error no variadic api
#endif
/* We have to have both stdarg.h or varargs.h AND v*printf or doprnt to use
variadic versions of these functions. */
#if HAVE_STDARG_H || HAVE_VARARGS_H
# if HAVE_VPRINTF || HAVE_DOPRNT
# define USE_VARIADIC 1
# endif
#endif
#if __STDC__ && USE_VARIADIC
extern void message (int prefix, const char *fmt, ...) extern void message (int prefix, const char *fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3))); __attribute__ ((__format__ (__printf__, 2, 3)));
extern void error (const struct floc *flocp, const char *fmt, ...) extern void error (const struct floc *flocp, const char *fmt, ...)

19
misc.c
View File

@ -30,9 +30,8 @@ Boston, MA 02111-1307, USA. */
This fancy stuff all came from GNU fileutils, except for the VA_PRINTF and This fancy stuff all came from GNU fileutils, except for the VA_PRINTF and
VA_END macros used here since we have multiple print functions. */ VA_END macros used here since we have multiple print functions. */
#if HAVE_VPRINTF || HAVE_DOPRNT #if USE_VARIADIC
# define HAVE_STDVARARGS 1 # if HAVE_STDARG_H
# if __STDC__
# include <stdarg.h> # include <stdarg.h>
# define VA_START(args, lastarg) va_start(args, lastarg) # define VA_START(args, lastarg) va_start(args, lastarg)
# else # else
@ -46,7 +45,7 @@ Boston, MA 02111-1307, USA. */
# endif # endif
# define VA_END(args) va_end(args) # define VA_END(args) va_end(args)
#else #else
/* # undef HAVE_STDVARARGS */ /* We can't use any variadic interface! */
# define va_alist a1, a2, a3, a4, a5, a6, a7, a8 # define va_alist a1, a2, a3, a4, a5, a6, a7, a8
# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; # define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
# define VA_START(args, lastarg) # define VA_START(args, lastarg)
@ -206,7 +205,7 @@ concat (const char *s1, const char *s2, const char *s3)
/* Print a message on stdout. */ /* Print a message on stdout. */
void void
#if __STDC__ && HAVE_STDVARARGS #if USE_VARIADIC
message (int prefix, const char *fmt, ...) message (int prefix, const char *fmt, ...)
#else #else
message (prefix, fmt, va_alist) message (prefix, fmt, va_alist)
@ -215,7 +214,7 @@ message (prefix, fmt, va_alist)
va_dcl va_dcl
#endif #endif
{ {
#if HAVE_STDVARARGS #if USE_VARIADIC
va_list args; va_list args;
#endif #endif
@ -242,7 +241,7 @@ message (prefix, fmt, va_alist)
/* Print an error message. */ /* Print an error message. */
void void
#if __STDC__ && HAVE_STDVARARGS #if USE_VARIADIC
error (const struct floc *flocp, const char *fmt, ...) error (const struct floc *flocp, const char *fmt, ...)
#else #else
error (flocp, fmt, va_alist) error (flocp, fmt, va_alist)
@ -251,7 +250,7 @@ error (flocp, fmt, va_alist)
va_dcl va_dcl
#endif #endif
{ {
#if HAVE_STDVARARGS #if USE_VARIADIC
va_list args; va_list args;
#endif #endif
@ -275,7 +274,7 @@ error (flocp, fmt, va_alist)
/* Print an error message and exit. */ /* Print an error message and exit. */
void void
#if __STDC__ && HAVE_STDVARARGS #if USE_VARIADIC
fatal (const struct floc *flocp, const char *fmt, ...) fatal (const struct floc *flocp, const char *fmt, ...)
#else #else
fatal (flocp, fmt, va_alist) fatal (flocp, fmt, va_alist)
@ -284,7 +283,7 @@ fatal (flocp, fmt, va_alist)
va_dcl va_dcl
#endif #endif
{ {
#if HAVE_STDVARARGS #if USE_VARIADIC
va_list args; va_list args;
#endif #endif

View File

@ -1,3 +1,8 @@
2004-02-21 Paul D. Smith <psmith@gnu.org>
* scripts/functions/origin: Set our own environment variable
rather than relying on $HOME.
2004-01-21 Paul D. Smith <psmith@gnu.org> 2004-01-21 Paul D. Smith <psmith@gnu.org>
* scripts/features/conditionals: Test arguments to ifn?def which * scripts/features/conditionals: Test arguments to ifn?def which

View File

@ -15,13 +15,8 @@ defined per the following list:
'override' defined by override in makefile 'override' defined by override in makefile
'automatic' Automatic variable\n"; 'automatic' Automatic variable\n";
# On WIN32 systems, HOME is meaningless. SystemRoot should be defined # Set an environment variable
# though. With DJGPP, HOME is not guaranteed to be defined. Use DJDIR $ENV{MAKETEST} = 1;
# instead.
#
$homevar = (($port_type eq 'Windows') ? "SystemRoot"
: (($port_type eq 'DOS') ? "DJDIR"
: "HOME"));
open(MAKEFILE,"> $makefile"); open(MAKEFILE,"> $makefile");
@ -33,7 +28,7 @@ override WHITE := BLACK
all: auto all: auto
\t\@echo \$(origin undefined) \t\@echo \$(origin undefined)
\t\@echo \$(origin CC) \t\@echo \$(origin CC)
\t\@echo \$(origin $homevar) \t\@echo \$(origin MAKETEST)
\t\@echo \$(origin MAKE) \t\@echo \$(origin MAKE)
\t\@echo \$(origin foo) \t\@echo \$(origin foo)
\t\@echo \$(origin CFLAGS) \t\@echo \$(origin CFLAGS)

View File

@ -1193,6 +1193,9 @@ process_easy(
if (process_begin(hProcess, argv, envp, argv[0], NULL)) { if (process_begin(hProcess, argv, envp, argv[0], NULL)) {
fake_exits_pending++; fake_exits_pending++;
/* process_begin() failed: make a note of that. */
if (!((sub_process*) hProcess)->last_err)
((sub_process*) hProcess)->last_err = -1;
((sub_process*) hProcess)->exit_code = process_last_err(hProcess); ((sub_process*) hProcess)->exit_code = process_last_err(hProcess);
/* close up unused handles */ /* close up unused handles */

View File

@ -6,18 +6,18 @@
* *
* Returns: a pointer to a static error * Returns: a pointer to a static error
* *
* Notes/Dependencies: I got this from * Notes/Dependencies: I got this from
* comp.os.ms-windows.programmer.win32 * comp.os.ms-windows.programmer.win32
*/ */
char * char *
map_windows32_error_to_string (DWORD ercode) { map_windows32_error_to_string (DWORD ercode) {
/* __declspec (thread) necessary if you will use multiple threads */ /* __declspec (thread) necessary if you will use multiple threads */
__declspec (thread) static char szMessageBuffer[128]; __declspec (thread) static char szMessageBuffer[128];
/* Fill message buffer with a default message in /* Fill message buffer with a default message in
* case FormatMessage fails * case FormatMessage fails
*/ */
wsprintf (szMessageBuffer, "Error %ld", ercode); wsprintf (szMessageBuffer, "Error %ld\n", ercode);
/* /*
* Special code for winsock error handling. * Special code for winsock error handling.
@ -33,7 +33,7 @@ __declspec (thread) static char szMessageBuffer[128];
sizeof(szMessageBuffer), sizeof(szMessageBuffer),
NULL); NULL);
FreeLibrary(hModule); FreeLibrary(hModule);
} }
} else { } else {
/* /*
* Default system message handling * Default system message handling
@ -48,4 +48,4 @@ __declspec (thread) static char szMessageBuffer[128];
} }
return szMessageBuffer; return szMessageBuffer;
} }