Compare commits

...

6 Commits

Author SHA1 Message Date
Paul Smith
c67266ceac * New config.sub and config.guess
* Update version number for release
* Fixes to the build.sh to handle i18n/gettext
* Make dash-n more robust.
2000-03-29 03:23:18 +00:00
Paul Smith
4145bcbcda * Handle case of empty static pattern rule prerequisites.
* Fix linenumbers in error messages for rule definitions.
2000-03-27 20:53:50 +00:00
Paul Smith
c637af71d9 * A large number of fixes/enhancements. See the ChangeLog.
* Added a new version of the German translation file.
2000-03-27 06:54:37 +00:00
Paul Smith
a81013175c * Ignore attempt to change a file into itself.
* Define COFLAGS to avoid unknown variable warning.
* Fix some usec problems on UnixWare.
* Don't remove .INTERMEDIATE targets specified on the command line.
2000-03-26 06:56:54 +00:00
Paul Smith
75f879f37f * Fix backslash-escape in targets.
* Release 3.78.91.
2000-02-09 19:57:15 +00:00
Paul Smith
e68a27ec7b * Fix some warnings in gettext.c and function.c
* Don't try to execute tests which are actually directories.
2000-02-09 07:02:18 +00:00
31 changed files with 2441 additions and 1972 deletions

144
ChangeLog
View File

@@ -1,12 +1,131 @@
2000-03-28 Paul D. Smith <psmith@gnu.org>
* Version 3.78.92 released.
* build.template: Updates for gettext support; some bugs fixed.
2000-03-27 Paul D. Smith <psmith@gnu.org>
* config.guess, config.sub: Updated from config CVS archive at
:pserver:anoncvs@subversions.gnu.org:/home/cvs as of today.
* read.c (record_files): Check if expanding a static pattern
rule's prerequisite pattern leaves an empty string as the
prerequisite, and issue an error if so. Fixes PR/1670.
(read_makefile): Store the starting linenumber for a rule in
TGTS_STARTED.
(record_waiting_files): Use the TGTS_STARTED value for the file
location passed to record_file() instead of the current
linenumber, so error messages list the line where the target was
defined instead of the line after the end of the rule definition.
* remake.c (start_updating, finish_updating, is_updating): Fix
PR/1671; circular dependencies in double-colon rules are not
diagnosed. These macros set the updating flag in the root
double-colon file instead of the current one, if it's part of a
double-colon list. This solution provided by Tim Magill
<magill@gate.net>; I just changed the macro names :).
(update_file_1): Call them.
(check_dep): Call them.
The change to not automatically evaluate the $(call ...)
function's arguments breaks recursive use of call. Although using
$(if ...) and $(foreach ...) in $(call ...) macros is important,
the error conditions generated are simply to obscure for me to
feel comfortable with. If a method is devised to get both
working, we'll revisit. For now, remove this change.
* function.c (function_table): Turn on the expand bit for func_call.
(func_call): Don't expand arguments for builtin functions; that
will have already been done.
2000-03-26 Paul D. Smith <psmith@gnu.org>
* file.c (remove_intermediates): Never remove targets explicitly
requested on the command-line by checking the cmd_target flag.
Fixed PR/1669.
2000-03-23 Paul Eggert <eggert@twinsun.com>
* filedef.h (FILE_TIMESTAMP_STAT_MODTIME): Use st_mtime instead of
st_mtim.tv_sec; the latter doesn't work on Unixware.
2000-03-18 Paul D. Smith <psmith@gnu.org>
* file.c (file_hash_enter): If we're trying to change a file into
itself, just return. We used to assert this wasn't true, but
someone came up with a weird case involving archives. After
playing with it for a while I decided it was OK to ignore it.
* default.c: Define COFLAGS to empty to avoid spurious warnings.
* filedef.h: Change #if ST_MTIM_NSEC to #ifdef; this is a macro
containing the name of the nsec field, not true/false.
* make.h: Ditto.
Reported by Marco Franzen <Marco.Franzen@Thyron.com>.
2000-03-08 Tim Magill <magill@gate.net>
* remake.c (update_file): Return the exit status of the pruned
file when pruning, not just 0. Fixes PR/1634.
2000-02-24 Paul D. Smith <psmith@gnu.org>
* configure.in: Close a minor potential security hole; if you're
reading makefiles from stdin (who does that?) you could run into a
race condition with the temp file using mktemp() or tmpnam(). Add
a check for mkstemp() and fdopen().
* main.c (open_tmpfile): New function to open a temporary file.
If we have mkstemp() (and fdopen()), use that. If not use
mktemp() or tmpnam(). If we have fdopen(), use open() to open the
file O_CREAT|O_EXCL. If not, fall back to normal fopen() (insecure).
(main): Call it.
* job.c (child_execute_job) [VMS]: Call it.
* variable.c (lookup_variable): If we find a variable which is
being expanded, then note it but keep looking through the rest of
the set list to see if we can find one that isn't. If we do,
return that. If we don't, return the original. Fix for PR/1610.
While implementing this I realized that it also solves PR/1380 in
a much more elegant way. I don't know what I was smoking before.
So, remove the hackage surrounding the original fix for that (see
below). Change this function back to lookup_variable and remove
the extra setlist argument.
* variable.h (recursively_expand_setlist): Remove the macro,
rename the prototype, and remove the extra setlist argument.
(lookup_variable): Ditto.
* expand.c (recursively_expand): Rename and remove the extra
setlist argument.
(reference_variable): Use lookup_variable() again.
(allocated_variable_append): Remove the extra setlist argument.
2000-02-21 Paul D. Smith <psmith@gnu.org>
* README.template: A few updates.
* i18n/de.po: New version from the German translation team.
2000-02-09 Paul D. Smith <psmith@gnu.org>
* Version 3.78.91 released.
2000-02-07 Paul D. Smith <psmith@gnu.org> 2000-02-07 Paul D. Smith <psmith@gnu.org>
* read.c (read_makefile): Reset *p2 to ':', not *colonp. If any
filenames contained backslashes the resulting output (without
backslashes) will be shorter, so setting *colonp doesn't change
the right character. Fix for PR/1586.
For += target-specific variables we need to remember which For += target-specific variables we need to remember which
variable set we found the variable in, so we can start looking variable set we found the variable in, so we can start looking
there in the next iteration (otherwise we'll see it again in from there in the next iteration (otherwise we might see it again
recursively_expand and fail!). This is getting to be a hack; if in recursively_expand and fail!). This is turning into a hack; if
it gets any worse we'll have to rethink this entire algorithm; it gets any worse we'll have to rethink this entire algorithm...
probably implementing expansion of these separately from the implementing expansion of these references separately from the
"normal" expansion, instead of alongside. "normal" expansion, say, instead of using the same codepath.
Actually, it's already "worse enough" :-/.
Fix for PR/1380.
* variable.h (recursively_expand_setlist): Rename * variable.h (recursively_expand_setlist): Rename
recursively_expand to add a struct variable_set_list argument, and recursively_expand to add a struct variable_set_list argument, and
@@ -15,8 +134,7 @@
variable_set_list argument, and make a macro for lookup_variable. variable_set_list argument, and make a macro for lookup_variable.
* expand.c (recursively_expand_setlist): Take an extra struct * expand.c (recursively_expand_setlist): Take an extra struct
variable_set_list argument and pass it to variable_set_list argument and pass it to allocated_variable_append().
allocated_variable_append().
(reference_variable): Use lookup_variable_setlist() and pass the (reference_variable): Use lookup_variable_setlist() and pass the
returned variable_set_list to recursively_expand_setlist. returned variable_set_list to recursively_expand_setlist.
(allocated_variable_append): Take an extra setlist argument and (allocated_variable_append): Take an extra setlist argument and
@@ -24,7 +142,7 @@
expansion. If it's null, use current_variable_set_list as before. expansion. If it's null, use current_variable_set_list as before.
* variable.c (lookup_variable_setlist): If the LISTP argument is * variable.c (lookup_variable_setlist): If the LISTP argument is
not nil, return the list where we found the variable in it. not nil, set it to the list containing the variable we found.
2000-02-04 Paul D. Smith <psmith@gnu.org> 2000-02-04 Paul D. Smith <psmith@gnu.org>
@@ -87,6 +205,16 @@
* default.c (default_variables) [__MSDOS__]: Define CXX to gpp. * default.c (default_variables) [__MSDOS__]: Define CXX to gpp.
2000-01-27 Paul D. Smith <psmith@gnu.org>
* gettext.c: Some warning cleanups, and a fix for systems which
don't define HAVE_ALLOCA (the workaround code was included
twice).
2000-01-26 Paul D. Smith <psmith@gnu.org>
* Version 3.78.90 released.
2000-01-25 Paul D. Smith <psmith@gnu.org> 2000-01-25 Paul D. Smith <psmith@gnu.org>
Change gettext support to use the simplified version in libit 0.7. Change gettext support to use the simplified version in libit 0.7.

8
NEWS
View File

@@ -1,6 +1,6 @@
GNU make NEWS -*-indented-text-*- GNU make NEWS -*-indented-text-*-
History of user-visible changes. History of user-visible changes.
25 Jan 2000 27 Mar 2000
Copyright (C) 1992,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc. Copyright (C) 1992,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
See the end for copying conditions. See the end for copying conditions.
@@ -36,12 +36,6 @@ Version 3.79
current makefile is run serially regardless of the value of -j. current makefile is run serially regardless of the value of -j.
However, submakes are still eligible for parallel execution. However, submakes are still eligible for parallel execution.
* The $(call ...) function doesn't expand its arguments automatically
anymore. This allows you to put builtin functions like "if" and
"foreach", which also have special expansion rules, in a $(call ...)
function and have it work properly. This was suggested by Damien
GIBOU <damien.gibou@st.com>.
* The --debug option has changed: it now allows optional flags * The --debug option has changed: it now allows optional flags
controlling the amount and type of debugging output. By default only controlling the amount and type of debugging output. By default only
a minimal amount information is generated, displaying the names of a minimal amount information is generated, displaying the names of

View File

@@ -19,6 +19,13 @@ Some systems' Make programs are broken and cannot process the Makefile for
GNU Make. If you get errors from your system's Make when building GNU GNU Make. If you get errors from your system's Make when building GNU
Make, try using `build.sh' instead. Make, try using `build.sh' instead.
GNU Make is free software. See the file COPYING for copying conditions.
Documentation
-------------
GNU make is fully documented in the GNU Make manual, which is contained GNU make is fully documented in the GNU Make manual, which is contained
in this distribution as the file make.texinfo. You can also find in this distribution as the file make.texinfo. You can also find
on-line and preformatted (PostScript and DVI) versions at the FSF's web on-line and preformatted (PostScript and DVI) versions at the FSF's web
@@ -30,10 +37,22 @@ site. There is information there about ordering hardcopy documentation.
You can also find the latest versions of GNU Make from there. You can also find the latest versions of GNU Make from there.
You can send GNU make bug reports to bug-make@gnu.org. Please see the
Bug Reporting
-------------
You can send GNU make bug reports to <bug-make@gnu.org>. Please see the
section of the GNU make manual entitled `Problems and Bugs' for section of the GNU make manual entitled `Problems and Bugs' for
information on submitting useful and complete bug reports. information on submitting useful and complete bug reports.
You can also use the FSF's online bug tracking system to submit new
problem reports or search for existing ones. A web interface is
available here:
http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl
Use the Category "make".
If you need help using GNU make, try these forums: If you need help using GNU make, try these forums:
help-make@gnu.org help-make@gnu.org
@@ -41,15 +60,36 @@ If you need help using GNU make, try these forums:
news:gnu.utils.help news:gnu.utils.help
news:gnu.utils.bug news:gnu.utils.bug
Also:
CVS Access
----------
The GNU make source repository is available via anonymous CVS from the
GNU Subversions CVS server; look here for details:
http://www.gnu.org/software/devel.html
Please note: you won't be able to build GNU make from CVS without
installing appropriate maintainer's tools, such as automake, autoconf,
GNU make, and GCC. There are no instructions on this included with the
tree, so you must be familiar with the installation and use of these
tools. We make no guarantees about the contents or quality of the
latest code in the CVS repository: it is not unheard of for code that is
known to be broken to be checked in. Use at your own risk.
Ports
-----
- See README.customs for details on integrating GNU make with the - See README.customs for details on integrating GNU make with the
Customs distributed build environment from the Pmake distribution. Customs distributed build environment from the Pmake distribution.
- See README.W32 for details about GNU Make on Windows NT, 95, or 98. - See readme.vms for details about GNU Make on OpenVMS.
- See README.Amiga for details about GNU Make on AmigaDOS. - See README.Amiga for details about GNU Make on AmigaDOS.
- See README.W32 for details about GNU Make on Windows NT, 95, or 98.
- See README.DOS for compilation instructions on MS-DOS and MS-Windows - See README.DOS for compilation instructions on MS-DOS and MS-Windows
using DJGPP tools. using DJGPP tools.
@@ -57,8 +97,10 @@ Also:
of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more
information. information.
Please note there are two _separate_ ports of GNU make for Microsoft
GNU Make is free software. See the file COPYING for copying conditions. systems: a native Windows tool built with (for example) MSVC or Cygwin,
and a DOS-based tool built with DJGPP. Please be sure you are looking
at the right README!
System-specific Notes System-specific Notes

View File

@@ -27,7 +27,6 @@ CC='@CC@'
CFLAGS='@CFLAGS@' CFLAGS='@CFLAGS@'
CPPFLAGS='@CPPFLAGS@' CPPFLAGS='@CPPFLAGS@'
LDFLAGS='@LDFLAGS@' LDFLAGS='@LDFLAGS@'
defines='@DEFS@ -DLIBDIR="${libdir}" -DINCLUDEDIR="${includedir}"'
ALLOCA='@ALLOCA@' ALLOCA='@ALLOCA@'
LOADLIBES='@LIBS@' LOADLIBES='@LIBS@'
extras='@LIBOBJS@' extras='@LIBOBJS@'
@@ -37,12 +36,17 @@ GLOBLIB='@GLOBLIB@'
# Common prefix for machine-independent installed files. # Common prefix for machine-independent installed files.
prefix='@prefix@' prefix='@prefix@'
# Common prefix for machine-dependent installed files. # Common prefix for machine-dependent installed files.
exec_prefix='@exec_prefix@' exec_prefix=`eval echo @exec_prefix@`
# Directory to find libraries in for `-lXXX'. # Directory to find libraries in for `-lXXX'.
libdir=${exec_prefix}/lib libdir=${exec_prefix}/lib
# Directory to search by default for included makefiles. # Directory to search by default for included makefiles.
includedir=${prefix}/include includedir=${prefix}/include
localedir=${prefix}/share/locale
aliaspath=${localedir}:.
defines="-DALIASPATH=\"${aliaspath}\" -DLOCALEDIR=\"${localedir}\" -DLIBDIR=\"${libdir}\" -DINCLUDEDIR=\"${includedir}\""' @DEFS@'
# Exit as soon as any command fails. # Exit as soon as any command fails.
set -e set -e
@@ -51,13 +55,14 @@ objs="%objs% remote-${REMOTE}.o ${extras} ${ALLOCA}"
if [ x"$GLOBLIB" != x ]; then if [ x"$GLOBLIB" != x ]; then
objs="$objs %globobjs%" objs="$objs %globobjs%"
globinc=-I${srcdir}/glob
fi fi
# Compile the source files into those objects. # Compile the source files into those objects.
for file in `echo ${objs} | sed 's/\.o/.c/g'`; do for file in `echo ${objs} | sed 's/\.o/.c/g'`; do
echo compiling ${file}... echo compiling ${file}...
$CC $defines $CPPFLAGS $CFLAGS \ $CC $defines $CPPFLAGS $CFLAGS \
-c -I. -I${srcdir} ${srcdir}/$file -c -I. -I${srcdir} ${globinc} ${srcdir}/$file
done done
# The object files were actually all put in the current directory. # The object files were actually all put in the current directory.

292
config.guess vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Attempt to guess a canonical system name. # Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
# #
# This file is free software; you can redistribute it and/or modify it # This file is free software; you can redistribute it and/or modify it
@@ -23,8 +23,7 @@
# the same distribution terms that you use for the rest of that program. # the same distribution terms that you use for the rest of that program.
# Written by Per Bothner <bothner@cygnus.com>. # Written by Per Bothner <bothner@cygnus.com>.
# The master version of this file is at the FSF in /home/gd/gnu/lib. # Please send patches to <config-patches@gnu.org>.
# Please send patches to <autoconf-patches@gnu.org>.
# #
# This script attempts to guess a canonical system name similar to # This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and # config.sub. If it succeeds, it prints the system name on stdout, and
@@ -68,6 +67,43 @@ trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
# Note: order is significant - the case branches are not exclusive. # Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:NetBSD:*:*)
# Netbsd (nbsd) targets should (where applicable) match one or
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
# switched to ELF, *-*-netbsd* would select the old
# object file format. This provides both forward
# compatibility and a consistent mechanism for selecting the
# object file format.
# Determine the machine/vendor (is the vendor relevant).
case "${UNAME_MACHINE}" in
amiga) machine=m68k-cbm ;;
arm32) machine=arm-unknown ;;
atari*) machine=m68k-atari ;;
sun3*) machine=m68k-sun ;;
mac68k) machine=m68k-apple ;;
macppc) machine=powerpc-apple ;;
hp3[0-9][05]) machine=m68k-hp ;;
ibmrt|romp-ibm) machine=romp-ibm ;;
*) machine=${UNAME_MACHINE}-unknown ;;
esac
# The Operating System including object format.
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep __ELF__ >/dev/null
then
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
# Return netbsd for either. FIX?
os=netbsd
else
os=netbsdelf
fi
# The OS release
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "${machine}-${os}${release}"
exit 0 ;;
alpha:OSF1:*:*) alpha:OSF1:*:*)
if test $UNAME_RELEASE = "V4.0"; then if test $UNAME_RELEASE = "V4.0"; then
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -77,41 +113,51 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# A Xn.n version is an unreleased experimental baselevel. # A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r. # 1.2 uses "1.2" for uname -r.
cat <<EOF >$dummy.s cat <<EOF >$dummy.s
.data
\$Lformat:
.byte 37,100,45,37,120,10,0 # "%d-%x\n"
.text
.globl main .globl main
.align 4
.ent main .ent main
main: main:
.frame \$30,0,\$26,0 .frame \$30,16,\$26,0
.prologue 0 ldgp \$29,0(\$27)
.long 0x47e03d80 # implver $0 .prologue 1
lda \$2,259 .long 0x47e03d80 # implver \$0
.long 0x47e20c21 # amask $2,$1 lda \$2,-1
srl \$1,8,\$2 .long 0x47e20c21 # amask \$2,\$1
sll \$2,2,\$2 lda \$16,\$Lformat
sll \$0,3,\$0 mov \$0,\$17
addl \$1,\$0,\$0 not \$1,\$18
addl \$2,\$0,\$0 jsr \$26,printf
ret \$31,(\$26),1 ldgp \$29,0(\$26)
mov 0,\$16
jsr \$26,exit
.end main .end main
EOF EOF
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then if test "$?" = 0 ; then
./$dummy case `./$dummy` in
case "$?" in 0-0)
7)
UNAME_MACHINE="alpha" UNAME_MACHINE="alpha"
;; ;;
15) 1-0)
UNAME_MACHINE="alphaev5" UNAME_MACHINE="alphaev5"
;; ;;
14) 1-1)
UNAME_MACHINE="alphaev56" UNAME_MACHINE="alphaev56"
;; ;;
10) 1-101)
UNAME_MACHINE="alphapca56" UNAME_MACHINE="alphapca56"
;; ;;
16) 2-303)
UNAME_MACHINE="alphaev6" UNAME_MACHINE="alphaev6"
;; ;;
2-307)
UNAME_MACHINE="alphaev67"
;;
esac esac
fi fi
rm -f $dummy.s $dummy rm -f $dummy.s $dummy
@@ -129,9 +175,6 @@ EOF
Amiga*:UNIX_System_V:4.0:*) Amiga*:UNIX_System_V:4.0:*)
echo m68k-cbm-sysv4 echo m68k-cbm-sysv4
exit 0;; exit 0;;
amiga:NetBSD:*:*)
echo m68k-cbm-netbsd${UNAME_RELEASE}
exit 0 ;;
amiga:OpenBSD:*:*) amiga:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE} echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
@@ -156,12 +199,12 @@ EOF
wgrisc:OpenBSD:*:*) wgrisc:OpenBSD:*:*)
echo mipsel-unknown-openbsd${UNAME_RELEASE} echo mipsel-unknown-openbsd${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
*:OS/390:*:*)
echo i370-ibm-openedition
exit 0 ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE} echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;; exit 0;;
arm32:NetBSD:*:*)
echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
SR2?01:HI-UX/MPP:*:*) SR2?01:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp echo hppa1.1-hitachi-hiuxmpp
exit 0;; exit 0;;
@@ -218,9 +261,6 @@ EOF
aushp:SunOS:*:*) aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE} echo sparc-auspex-sunos${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
atari*:NetBSD:*:*)
echo m68k-atari-netbsd${UNAME_RELEASE}
exit 0 ;;
atari*:OpenBSD:*:*) atari*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE} echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
@@ -250,15 +290,9 @@ EOF
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
echo m68k-unknown-mint${UNAME_RELEASE} echo m68k-unknown-mint${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
sun3*:NetBSD:*:*)
echo m68k-sun-netbsd${UNAME_RELEASE}
exit 0 ;;
sun3*:OpenBSD:*:*) sun3*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE} echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
mac68k:NetBSD:*:*)
echo m68k-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
mac68k:OpenBSD:*:*) mac68k:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE} echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
@@ -271,9 +305,6 @@ EOF
powerpc:machten:*:*) powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE} echo powerpc-apple-machten${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
macppc:NetBSD:*:*)
echo powerpc-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
RISC*:Mach:*:*) RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3 echo mips-dec-mach_bsd4.3
exit 0 ;; exit 0 ;;
@@ -289,6 +320,7 @@ EOF
mips:*:*:UMIPS | mips:*:*:RISCos) mips:*:*:UMIPS | mips:*:*:RISCos)
sed 's/^ //' << EOF >$dummy.c sed 's/^ //' << EOF >$dummy.c
#ifdef __cplusplus #ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
int main (int argc, char *argv[]) { int main (int argc, char *argv[]) {
#else #else
int main (argc, argv) int argc; char *argv[]; { int main (argc, argv) int argc; char *argv[]; {
@@ -328,15 +360,18 @@ EOF
AViiON:dgux:*:*) AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures # DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p` UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110]
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ then
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
[ ${TARGET_BINARY_INTERFACE}x = x ]
then
echo m88k-dg-dgux${UNAME_RELEASE} echo m88k-dg-dgux${UNAME_RELEASE}
else else
echo m88k-dg-dguxbcs${UNAME_RELEASE} echo m88k-dg-dguxbcs${UNAME_RELEASE}
fi
else
echo i586-dg-dgux${UNAME_RELEASE}
fi fi
else echo i586-dg-dgux${UNAME_RELEASE}
fi
exit 0 ;; exit 0 ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3) M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3 echo m88k-dolphin-sysv3
@@ -402,7 +437,7 @@ EOF
ibmrt:4.4BSD:*|romp-ibm:BSD:*) ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4 echo romp-ibm-bsd4.4
exit 0 ;; exit 0 ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit 0 ;; # report: romp-ibm BSD 4.3 exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*) *:BOSX:*:*)
@@ -453,7 +488,7 @@ EOF
exit (0); exit (0);
} }
EOF EOF
($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
esac esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
@@ -547,10 +582,13 @@ EOF
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
exit 0 ;; exit 0 ;;
CRAY*TS:*:*:*) CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;; exit 0 ;;
CRAY*T3E:*:*:*) CRAY*T3E:*:*:*)
echo alpha-cray-unicosmk${UNAME_RELEASE} echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;; exit 0 ;;
CRAY-2:*:*:*) CRAY-2:*:*:*)
echo cray2-cray-unicos echo cray2-cray-unicos
@@ -563,13 +601,10 @@ EOF
F301:UNIX_System_V:*:*) F301:UNIX_System_V:*:*)
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
exit 0 ;; exit 0 ;;
hp3[0-9][05]:NetBSD:*:*)
echo m68k-hp-netbsd${UNAME_RELEASE}
exit 0 ;;
hp300:OpenBSD:*:*) hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE} echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
i?86:BSD/386:*:* | i?86:BSD/OS:*:*) i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
sparc*:BSD/OS:*:*) sparc*:BSD/OS:*:*)
@@ -587,9 +622,6 @@ EOF
fi fi
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit 0 ;; exit 0 ;;
*:NetBSD:*:*)
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
*:OpenBSD:*:*) *:OpenBSD:*:*)
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;; exit 0 ;;
@@ -618,12 +650,6 @@ EOF
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;; exit 0 ;;
*:Linux:*:*) *:Linux:*:*)
# uname on the ARM produces all sorts of strangeness, and we need to
# filter it out.
case "$UNAME_MACHINE" in
armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
arm* | sa110*) UNAME_MACHINE="arm" ;;
esac
# The BFD linker knows what the default object file format is, so # The BFD linker knows what the default object file format is, so
# first see if it will tell us. cd to the root directory to prevent # first see if it will tell us. cd to the root directory to prevent
@@ -636,12 +662,38 @@ EOF
s/ .*// s/ .*//
p'` p'`
case "$ld_supported_emulations" in case "$ld_supported_emulations" in
*ia64) echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 ;; *ia64)
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; echo "${UNAME_MACHINE}-unknown-linux"
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; exit 0
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; ;;
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; i?86linux)
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; echo "${UNAME_MACHINE}-pc-linux-gnuaout"
exit 0
;;
i?86coff)
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
exit 0
;;
sparclinux)
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
exit 0
;;
armlinux)
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
exit 0
;;
elf32arm*)
echo "${UNAME_MACHINE}-unknown-linux-gnuoldld"
exit 0
;;
armelf_linux*)
echo "${UNAME_MACHINE}-unknown-linux-gnu"
exit 0
;;
m68klinux)
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
exit 0
;;
elf32ppc | elf32ppclinux) elf32ppc | elf32ppclinux)
# Determine Lib Version # Determine Lib Version
cat >$dummy.c <<EOF cat >$dummy.c <<EOF
@@ -671,47 +723,59 @@ EOF
fi fi
fi fi
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;; echo powerpc-unknown-linux-gnu${LIBC}
exit 0
;;
esac esac
if test "${UNAME_MACHINE}" = "alpha" ; then if test "${UNAME_MACHINE}" = "alpha" ; then
sed 's/^ //' <<EOF >$dummy.s cat <<EOF >$dummy.s
.globl main .data
.ent main \$Lformat:
main: .byte 37,100,45,37,120,10,0 # "%d-%x\n"
.frame \$30,0,\$26,0
.prologue 0 .text
.long 0x47e03d80 # implver $0 .globl main
lda \$2,259 .align 4
.long 0x47e20c21 # amask $2,$1 .ent main
srl \$1,8,\$2 main:
sll \$2,2,\$2 .frame \$30,16,\$26,0
sll \$0,3,\$0 ldgp \$29,0(\$27)
addl \$1,\$0,\$0 .prologue 1
addl \$2,\$0,\$0 .long 0x47e03d80 # implver \$0
ret \$31,(\$26),1 lda \$2,-1
.end main .long 0x47e20c21 # amask \$2,\$1
lda \$16,\$Lformat
mov \$0,\$17
not \$1,\$18
jsr \$26,printf
ldgp \$29,0(\$26)
mov 0,\$16
jsr \$26,exit
.end main
EOF EOF
LIBC="" LIBC=""
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then if test "$?" = 0 ; then
./$dummy case `./$dummy` in
case "$?" in 0-0)
7)
UNAME_MACHINE="alpha" UNAME_MACHINE="alpha"
;; ;;
15) 1-0)
UNAME_MACHINE="alphaev5" UNAME_MACHINE="alphaev5"
;; ;;
14) 1-1)
UNAME_MACHINE="alphaev56" UNAME_MACHINE="alphaev56"
;; ;;
10) 1-101)
UNAME_MACHINE="alphapca56" UNAME_MACHINE="alphapca56"
;; ;;
16) 2-303)
UNAME_MACHINE="alphaev6" UNAME_MACHINE="alphaev6"
;; ;;
2-307)
UNAME_MACHINE="alphaev67"
;;
esac esac
objdump --private-headers $dummy | \ objdump --private-headers $dummy | \
@@ -725,6 +789,7 @@ EOF
elif test "${UNAME_MACHINE}" = "mips" ; then elif test "${UNAME_MACHINE}" = "mips" ; then
cat >$dummy.c <<EOF cat >$dummy.c <<EOF
#ifdef __cplusplus #ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
int main (int argc, char *argv[]) { int main (int argc, char *argv[]) {
#else #else
int main (argc, argv) int argc; char *argv[]; { int main (argc, argv) int argc; char *argv[]; {
@@ -740,6 +805,8 @@ EOF
EOF EOF
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy rm -f $dummy.c $dummy
elif test "${UNAME_MACHINE}" = "s390"; then
echo s390-ibm-linux && exit 0
else else
# Either a pre-BFD a.out linker (linux-gnuoldld) # Either a pre-BFD a.out linker (linux-gnuoldld)
# or one that does not give us useful --help. # or one that does not give us useful --help.
@@ -761,6 +828,7 @@ EOF
cat >$dummy.c <<EOF cat >$dummy.c <<EOF
#include <features.h> #include <features.h>
#ifdef __cplusplus #ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
int main (int argc, char *argv[]) { int main (int argc, char *argv[]) {
#else #else
int main (argc, argv) int argc; char *argv[]; { int main (argc, argv) int argc; char *argv[]; {
@@ -798,19 +866,21 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit 0 ;; exit 0 ;;
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
else else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi fi
exit 0 ;; exit 0 ;;
i?86:*:5:7*) i?86:*:5:7*)
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` # Fixed at (any) Pentium or better
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 UNAME_MACHINE=i586
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586 if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
(/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585 else
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE} echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi
exit 0 ;; exit 0 ;;
i?86:*:3.2:*) i?86:*:3.2:*)
if test -f /usr/options/cb.name; then if test -f /usr/options/cb.name; then
@@ -830,7 +900,11 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv32 echo ${UNAME_MACHINE}-pc-sysv32
fi fi
exit 0 ;; exit 0 ;;
i?86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp
exit 0 ;;
pc:*:*:*) pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about # uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386. # the processor, so we play safe by assuming i386.
echo i386-pc-msdosdjgpp echo i386-pc-msdosdjgpp
@@ -944,6 +1018,24 @@ EOF
*:Rhapsody:*:*) *:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
Power*:Mac*OS:*:*)
echo powerpc-apple-macos${UNAME_RELEASE}
exit 0 ;;
*:Mac*OS:*:*)
echo ${UNAME_MACHINE}-apple-macos${UNAME_RELEASE}
exit 0 ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
if test "${UNAME_MACHINE}" = "x86pc"; then
UNAME_MACHINE=pc
fi
echo `uname -p`-${UNAME_MACHINE}-nto-qnx
exit 0;;
*:QNX:*:4*)
echo i386-pc-qnx
exit 0 ;;
NSR-W:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
exit 0 ;;
esac esac
#echo '(No uname command or uname output not recognized.)' 1>&2 #echo '(No uname command or uname output not recognized.)' 1>&2

72
config.sub vendored
View File

@@ -1,6 +1,8 @@
#! /bin/sh #! /bin/sh
# Configuration validation subroutine script, version 1.1. # Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
# Free Software Foundation, Inc.
#
# This file is (in principle) common to ALL GNU software. # This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software # The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can. # can handle that machine. It does not imply ALL GNU software can.
@@ -25,6 +27,9 @@
# configuration script generated by Autoconf, you may include it under # configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program. # the same distribution terms that you use for the rest of that program.
# Written by Per Bothner <bothner@cygnus.com>.
# Please send patches to <config-patches@gnu.org>.
#
# Configuration subroutine to validate and canonicalize a configuration type. # Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument. # Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1. # If it is invalid, we print an error message on stderr and exit with code 1.
@@ -68,7 +73,7 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations. # Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in case $maybe_os in
linux-gnu*) nto-qnx* | linux-gnu*)
os=-$maybe_os os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;; ;;
@@ -169,18 +174,20 @@ case $basic_machine in
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 \ | 580 | i960 | h8300 \
| x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
| alphaev6[78] \
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
| mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
| mips64vr5000 | miprs64vr5000el | mcore \ | mips64vr5000 | miprs64vr5000el | mcore \
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
| thumb | d10v) | thumb | d10v | fr30 | avr)
basic_machine=$basic_machine-unknown basic_machine=$basic_machine-unknown
;; ;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65) m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
;; ;;
# We use `pc' rather than `unknown' # We use `pc' rather than `unknown'
@@ -201,8 +208,10 @@ case $basic_machine in
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
| xmp-* | ymp-* \ | xmp-* | ymp-* \
| x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
| alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
| alphaev6[78]-* \
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
| clipper-* | orion-* \ | clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
@@ -210,9 +219,9 @@ case $basic_machine in
| mips64el-* | mips64orion-* | mips64orionel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
| mipstx39-* | mipstx39el-* | mcore-* \ | mipstx39-* | mipstx39el-* | mcore-* \
| f301-* | armv*-* | t3e-* \ | f301-* | armv*-* | s390-* | sv1-* | t3e-* \
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
| thumb-* | v850-* | d30v-* | tic30-* | c30-* ) | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* )
;; ;;
# Recognize the various machine names and aliases which stand # Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS. # for a CPU type and a company and sometimes even an OS.
@@ -430,7 +439,6 @@ case $basic_machine in
;; ;;
i370-ibm* | ibm*) i370-ibm* | ibm*)
basic_machine=i370-ibm basic_machine=i370-ibm
os=-mvs
;; ;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2? # I'm not sure what "Sysv32" means. Should this be sysv3.2?
i[34567]86v32) i[34567]86v32)
@@ -511,6 +519,10 @@ case $basic_machine in
mips3*) mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;; ;;
mmix*)
basic_machine=mmix-knuth
os=-mmixware
;;
monitor) monitor)
basic_machine=m68k-rom68k basic_machine=m68k-rom68k
os=-coff os=-coff
@@ -519,6 +531,10 @@ case $basic_machine in
basic_machine=i386-unknown basic_machine=i386-unknown
os=-msdos os=-msdos
;; ;;
mvs)
basic_machine=i370-ibm
os=-mvs
;;
ncr3000) ncr3000)
basic_machine=i486-ncr basic_machine=i486-ncr
os=-sysv4 os=-sysv4
@@ -528,7 +544,7 @@ case $basic_machine in
os=-netbsd os=-netbsd
;; ;;
netwinder) netwinder)
basic_machine=armv4l-corel basic_machine=armv4l-rebel
os=-linux os=-linux
;; ;;
news | news700 | news800 | news900) news | news700 | news800 | news900)
@@ -579,6 +595,9 @@ case $basic_machine in
np1) np1)
basic_machine=np1-gould basic_machine=np1-gould
;; ;;
nsr-tandem)
basic_machine=nsr-tandem
;;
op50n-* | op60c-*) op50n-* | op60c-*)
basic_machine=hppa1.1-oki basic_machine=hppa1.1-oki
os=-proelf os=-proelf
@@ -723,6 +742,10 @@ case $basic_machine in
sun386 | sun386i | roadrunner) sun386 | sun386i | roadrunner)
basic_machine=i386-sun basic_machine=i386-sun
;; ;;
sv1)
basic_machine=sv1-cray
os=-unicos
;;
symmetry) symmetry)
basic_machine=i386-sequent basic_machine=i386-sequent
os=-dynix os=-dynix
@@ -912,12 +935,24 @@ case $os in
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*) | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*)
# Remember, each alternative MUST END IN *, to match a version number. # Remember, each alternative MUST END IN *, to match a version number.
;; ;;
-qnx*)
case $basic_machine in
x86-* | i[34567]86-*)
;;
*)
os=-nto$os
;;
esac
;;
-nto*)
os=-nto-qnx
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
| -macos* | -mpw* | -magic* | -mon960* | -lnews*) | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
;; ;;
-mac*) -mac*)
os=`echo $os | sed -e 's|mac|macos|'` os=`echo $os | sed -e 's|mac|macos|'`
@@ -931,6 +966,12 @@ case $os in
-sunos6*) -sunos6*)
os=`echo $os | sed -e 's|sunos6|solaris3|'` os=`echo $os | sed -e 's|sunos6|solaris3|'`
;; ;;
-opened*)
os=-openedition
;;
-wince*)
os=-wince
;;
-osfrose*) -osfrose*)
os=-osfrose os=-osfrose
;; ;;
@@ -955,6 +996,9 @@ case $os in
-ns2 ) -ns2 )
os=-nextstep2 os=-nextstep2
;; ;;
-nsk)
os=-nsk
;;
# Preserve the version number of sinix5. # Preserve the version number of sinix5.
-sinix5.*) -sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'` os=`echo $os | sed -e 's|sinix|sysv|'`
@@ -1017,7 +1061,7 @@ case $basic_machine in
*-acorn) *-acorn)
os=-riscix1.2 os=-riscix1.2
;; ;;
arm*-corel) arm*-rebel)
os=-linux os=-linux
;; ;;
arm*-semi) arm*-semi)
@@ -1191,7 +1235,7 @@ case $basic_machine in
-genix*) -genix*)
vendor=ns vendor=ns
;; ;;
-mvs*) -mvs* | -opened*)
vendor=ibm vendor=ibm
;; ;;
-ptx*) -ptx*)

View File

@@ -3,7 +3,7 @@ AC_REVISION([$Id$])
AC_PREREQ(2.13)dnl dnl Minimum Autoconf version required. AC_PREREQ(2.13)dnl dnl Minimum Autoconf version required.
AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir. AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir.
AM_INIT_AUTOMAKE(make, 3.78.91) AM_INIT_AUTOMAKE(make, 3.78.92)
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)
dnl Regular configure stuff dnl Regular configure stuff
@@ -60,7 +60,7 @@ AC_MSG_RESULT($ac_cv_check_symbol_$1)])dnl
# clock_gettime is in -lposix4 in Solaris 2.6. # clock_gettime is in -lposix4 in Solaris 2.6.
AC_CHECK_LIB(posix4, clock_gettime) AC_CHECK_LIB(posix4, clock_gettime)
AC_CHECK_FUNCS(memmove strchr memcpy strdup psignal mktemp pstat_getdynamic \ AC_CHECK_FUNCS(memmove strchr memcpy strdup psignal mkstemp mktemp fdopen \
clock_gettime dup2 getcwd sigsetmask sigaction getgroups \ clock_gettime dup2 getcwd sigsetmask sigaction getgroups \
setlinebuf seteuid setegid setreuid setregid pipe \ setlinebuf seteuid setegid setreuid setregid pipe \
strerror strsignal) strerror strsignal)
@@ -74,6 +74,7 @@ AC_FUNC_SETVBUF_REVERSED
AC_FUNC_SELECT AC_FUNC_SELECT
AC_CHECK_LIB(kstat, kstat_open) dnl _Must_ come before AC_FUNC_GETLOADAVG. AC_CHECK_LIB(kstat, kstat_open) dnl _Must_ come before AC_FUNC_GETLOADAVG.
AC_CHECK_FUNCS(pstat_getdynamic) dnl Supposedly in AC_FUNC_GETLOADAVG, but...?
AC_FUNC_GETLOADAVG AC_FUNC_GETLOADAVG
# Check out the wait reality. # Check out the wait reality.

View File

@@ -396,10 +396,10 @@ static char *default_variables[] =
/* This expands to $(CO) $(COFLAGS) $< $@ if $@ does not exist, /* This expands to $(CO) $(COFLAGS) $< $@ if $@ does not exist,
and to the empty string if $@ does exist. */ and to the empty string if $@ does exist. */
"CHECKOUT,v", "CHECKOUT,v", "+$(if $(wildcard $@),,$(CO) $(COFLAGS) $< $@)",
"+$(if $(wildcard $@),,$(CO) $(COFLAGS) $< $@)",
"CO", "co", "CO", "co",
"COFLAGS", "",
"CPP", "$(CC) -E", "CPP", "$(CC) -E",
#ifdef CRAY #ifdef CRAY
"CF77PPFLAGS", "-P", "CF77PPFLAGS", "-P",

View File

@@ -91,13 +91,11 @@ initialize_variable_output ()
/* Recursively expand V. The returned string is malloc'd. */ /* Recursively expand V. The returned string is malloc'd. */
static char *allocated_variable_append PARAMS ((struct variable *v, static char *allocated_variable_append PARAMS ((struct variable *v));
struct variable_set_list *l));
char * char *
recursively_expand_setlist (v, list) recursively_expand (v)
register struct variable *v; register struct variable *v;
struct variable_set_list *list;
{ {
char *value; char *value;
@@ -109,7 +107,7 @@ recursively_expand_setlist (v, list)
v->expanding = 1; v->expanding = 1;
if (v->append) if (v->append)
value = allocated_variable_append (v, list); value = allocated_variable_append (v);
else else
value = allocated_variable_expand (v->value); value = allocated_variable_expand (v->value);
v->expanding = 0; v->expanding = 0;
@@ -144,10 +142,9 @@ reference_variable (o, name, length)
unsigned int length; unsigned int length;
{ {
register struct variable *v; register struct variable *v;
struct variable_set_list *setlist;
char *value; char *value;
v = lookup_variable_setlist (name, length, &setlist); v = lookup_variable (name, length);
if (v == 0) if (v == 0)
warn_undefined (name, length); warn_undefined (name, length);
@@ -155,7 +152,7 @@ reference_variable (o, name, length)
if (v == 0 || *v->value == '\0') if (v == 0 || *v->value == '\0')
return o; return o;
value = (v->recursive ? recursively_expand_setlist (v, setlist) : v->value); value = (v->recursive ? recursively_expand (v) : v->value);
o = variable_buffer_output (o, value, strlen (value)); o = variable_buffer_output (o, value, strlen (value));
@@ -472,9 +469,8 @@ variable_expand_for_file (line, file)
context of the next variable set, then we append the expanded value. */ context of the next variable set, then we append the expanded value. */
static char * static char *
allocated_variable_append (v, list) allocated_variable_append (v)
struct variable *v; struct variable *v;
struct variable_set_list *list;
{ {
struct variable_set_list *save; struct variable_set_list *save;
int len = strlen (v->name); int len = strlen (v->name);
@@ -486,12 +482,9 @@ allocated_variable_append (v, list)
variable_buffer = 0; variable_buffer = 0;
if (!list) assert(current_variable_set_list->next != 0);
list = current_variable_set_list;
assert(list->next != 0);
save = current_variable_set_list; save = current_variable_set_list;
current_variable_set_list = list->next; current_variable_set_list = current_variable_set_list->next;
var[0] = '$'; var[0] = '$';
var[1] = '('; var[1] = '(';

13
file.c
View File

@@ -58,8 +58,7 @@ lookup_file (name)
register char *lname, *ln; register char *lname, *ln;
#endif #endif
if (*name == '\0') assert (*name != '\0');
abort ();
/* This is also done in parse_file_seq, so this is redundant /* This is also done in parse_file_seq, so this is redundant
for names read from makefiles. It is here for names passed for names read from makefiles. It is here for names passed
@@ -128,8 +127,7 @@ enter_file (name)
char *lname, *ln; char *lname, *ln;
#endif #endif
if (*name == '\0') assert (*name != '\0');
abort ();
#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS) #if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS)
lname = (char *)malloc (strlen (name) + 1); lname = (char *)malloc (strlen (name) + 1);
@@ -252,8 +250,9 @@ file_hash_enter (file, name, oldhash, oldname)
if (strieq (oldfile->hname, name)) if (strieq (oldfile->hname, name))
break; break;
/* If the old file is the same as the new file, something's wrong. */ /* If the old file is the same as the new file, never mind. */
assert (oldfile != file); if (oldfile == file)
return;
if (oldhash != 0 && (newbucket != oldbucket || oldfile != 0)) if (oldhash != 0 && (newbucket != oldbucket || oldfile != 0))
{ {
@@ -394,7 +393,7 @@ remove_intermediates (sig)
for (i = 0; i < FILE_BUCKETS; ++i) for (i = 0; i < FILE_BUCKETS; ++i)
for (f = files[i]; f != 0; f = f->next) for (f = files[i]; f != 0; f = f->next)
if (f->intermediate && (f->dontcare || !f->precious) if (f->intermediate && (f->dontcare || !f->precious)
&& !f->secondary) && !f->secondary && !f->cmd_target)
{ {
int status; int status;
if (f->update_status == -1) if (f->update_status == -1)

View File

@@ -117,9 +117,9 @@ extern void set_command_state PARAMS ((struct file *file, int state));
extern void notice_finished_file PARAMS ((struct file *file)); extern void notice_finished_file PARAMS ((struct file *file));
#if ST_MTIM_NSEC #ifdef ST_MTIM_NSEC
# define FILE_TIMESTAMP_STAT_MODTIME(st) \ # define FILE_TIMESTAMP_STAT_MODTIME(st) \
FILE_TIMESTAMP_FROM_S_AND_NS ((st).st_mtim.tv_sec, \ FILE_TIMESTAMP_FROM_S_AND_NS ((st).st_mtime, \
(st).st_mtim.ST_MTIM_NSEC) (st).st_mtim.ST_MTIM_NSEC)
# define FILE_TIMESTAMPS_PER_S \ # define FILE_TIMESTAMPS_PER_S \
MIN ((FILE_TIMESTAMP) 1000000000, \ MIN ((FILE_TIMESTAMP) 1000000000, \

View File

@@ -492,9 +492,9 @@ func_notdir_suffix(o, argv, funcname)
char *list_iterator = argv[0]; char *list_iterator = argv[0];
char *p2 =0; char *p2 =0;
int doneany =0; int doneany =0;
int len=0; unsigned int len=0;
int is_suffix = streq(funcname, "suffix"); int is_suffix = streq (funcname, "suffix");
int is_notdir = !is_suffix; int is_notdir = !is_suffix;
while ((p2 = find_next_token (&list_iterator, &len)) != 0) while ((p2 = find_next_token (&list_iterator, &len)) != 0)
{ {
@@ -555,7 +555,7 @@ func_basename_dir(o, argv, funcname)
int doneany=0; int doneany=0;
unsigned int len=0; unsigned int len=0;
char *p=0; char *p=0;
int is_basename= streq(funcname, "basename"); int is_basename= streq (funcname, "basename");
int is_dir= !is_basename; int is_dir= !is_basename;
while ((p2 = find_next_token (&p3, &len)) != 0) while ((p2 = find_next_token (&p3, &len)) != 0)
@@ -563,7 +563,7 @@ func_basename_dir(o, argv, funcname)
p = p2 + len; p = p2 + len;
while (p >= p2 && (!is_basename || *p != '.')) while (p >= p2 && (!is_basename || *p != '.'))
{ {
if (IS_PATHSEP(*p)) if (IS_PATHSEP (*p))
break; break;
--p; --p;
} }
@@ -1536,7 +1536,10 @@ func_shell (char *o, char **argv, const char *funcname)
if (command_argv == 0) if (command_argv == 0)
return o; return o;
/* Note the mktemp() is a security hole, but this only runs on Amiga.
Ideally we would use main.c:open_tmpfile(), but this uses a special
Open(), not fopen(), and I'm not familiar enough with the code to mess
with it. */
strcpy (tmp_output, "t:MakeshXXXXXXXX"); strcpy (tmp_output, "t:MakeshXXXXXXXX");
mktemp (tmp_output); mktemp (tmp_output);
child_stdout = Open (tmp_output, MODE_NEWFILE); child_stdout = Open (tmp_output, MODE_NEWFILE);
@@ -1662,7 +1665,7 @@ static struct function_table_entry function_table[] =
{ STRING_SIZE_TUPLE("words"), 1, 1, 1, func_words}, { STRING_SIZE_TUPLE("words"), 1, 1, 1, func_words},
{ STRING_SIZE_TUPLE("origin"), 1, 1, 1, func_origin}, { STRING_SIZE_TUPLE("origin"), 1, 1, 1, func_origin},
{ STRING_SIZE_TUPLE("foreach"), 3, 3, 0, func_foreach}, { STRING_SIZE_TUPLE("foreach"), 3, 3, 0, func_foreach},
{ STRING_SIZE_TUPLE("call"), 1, 0, 0, func_call}, { STRING_SIZE_TUPLE("call"), 1, 0, 1, func_call},
{ STRING_SIZE_TUPLE("error"), 1, 1, 1, func_error}, { STRING_SIZE_TUPLE("error"), 1, 1, 1, func_error},
{ STRING_SIZE_TUPLE("warning"), 1, 1, 1, func_error}, { STRING_SIZE_TUPLE("warning"), 1, 1, 1, func_error},
{ STRING_SIZE_TUPLE("if"), 2, 3, 0, func_if}, { STRING_SIZE_TUPLE("if"), 2, 3, 0, func_if},
@@ -1824,60 +1827,38 @@ func_call (o, argv, funcname)
int i; int i;
const struct function_table_entry *entry_p; const struct function_table_entry *entry_p;
fname = expand_argument (argv[0], NULL);
/* There is no way to define a variable with a space in the name, so strip /* There is no way to define a variable with a space in the name, so strip
leading and trailing whitespace as a favor to the user. */ leading and trailing whitespace as a favor to the user. */
cp = fname; fname = argv[0];
while (*cp != '\0' && isspace ((unsigned char)*cp)) while (*fname != '\0' && isspace ((unsigned char)*fname))
++cp; ++fname;
argv[0] = cp;
cp += strlen(cp) - 1; cp = fname + strlen(fname) - 1;
while (cp > argv[0] && isspace ((unsigned char)*cp)) while (cp > fname && isspace ((unsigned char)*cp))
--cp; --cp;
cp[1] = '\0'; cp[1] = '\0';
/* Calling nothing is a no-op */ /* Calling nothing is a no-op */
if (*argv[0] == '\0') if (*fname == '\0')
{ return o;
free (fname);
return o;
}
/* Are we invoking a builtin function? */ /* Are we invoking a builtin function? */
entry_p = lookup_function (function_table, argv[0]); entry_p = lookup_function (function_table, fname);
if (entry_p) if (entry_p)
{ {
char **av;
free (fname);
/* How many arguments do we have? */ /* How many arguments do we have? */
for (i=0; argv[i+1]; ++i) for (i=0; argv[i+1]; ++i)
; ;
/* If we need to expand arguments, do it now. */ return expand_builtin_function (o, i, argv+1, entry_p);
if (entry_p->expand_args)
for (av=argv+1; *av; ++av)
*av = expand_argument (*av, NULL);
o = expand_builtin_function (o, i, argv+1, entry_p);
/* What we expanded we must free... */
if (entry_p->expand_args)
for (av=argv+1; *av; ++av)
free (*av);
return o;
} }
/* Not a builtin, so the first argument is the name of a variable to be /* Not a builtin, so the first argument is the name of a variable to be
expanded and interpreted as a function. Create the variable expanded and interpreted as a function. Create the variable
reference. */ reference. */
flen = strlen (argv[0]); flen = strlen (fname);
body = alloca (flen + 4); body = alloca (flen + 4);
body[0] = '$'; body[0] = '$';
@@ -1905,6 +1886,5 @@ func_call (o, argv, funcname)
pop_variable_scope (); pop_variable_scope ();
free (fname);
return o + strlen(o); return o + strlen(o);
} }

View File

@@ -563,7 +563,8 @@ _nl_explode_name (name, language, modifier, territory, codeset,
if (*codeset != cp && (*codeset)[0] != '\0') if (*codeset != cp && (*codeset)[0] != '\0')
{ {
*normalized_codeset = _nl_normalize_codeset (*codeset, *normalized_codeset = _nl_normalize_codeset ((const unsigned
char *)*codeset,
cp - *codeset); cp - *codeset);
if (strcmp (*codeset, *normalized_codeset) == 0) if (strcmp (*codeset, *normalized_codeset) == 0)
free ((char *) *normalized_codeset); free ((char *) *normalized_codeset);
@@ -1220,13 +1221,13 @@ read_alias_file (fname, fname_len)
unsigned char *value; unsigned char *value;
unsigned char *cp; unsigned char *cp;
if (fgets (buf, sizeof buf, fp) == NULL) if (fgets ((char *)buf, sizeof buf, fp) == NULL)
/* EOF reached. */ /* EOF reached. */
break; break;
/* Possibly not the whole line fits into the buffer. Ignore /* Possibly not the whole line fits into the buffer. Ignore
the rest of the line. */ the rest of the line. */
if (strchr (buf, '\n') == NULL) if (strchr ((char *)buf, '\n') == NULL)
{ {
char altbuf[BUFSIZ]; char altbuf[BUFSIZ];
do do
@@ -1279,8 +1280,8 @@ read_alias_file (fname, fname_len)
if (nmap >= maxmap) if (nmap >= maxmap)
extend_alias_table (); extend_alias_table ();
alias_len = strlen (alias) + 1; alias_len = strlen ((char *)alias) + 1;
value_len = strlen (value) + 1; value_len = strlen ((char *)value) + 1;
if (string_space_act + alias_len + value_len > string_space_max) if (string_space_act + alias_len + value_len > string_space_max)
{ {
@@ -1750,41 +1751,6 @@ static const char *guess_category_value PARAMS ((int category,
const char *categoryname)) const char *categoryname))
internal_function; internal_function;
/* For those loosing systems which don't have `alloca' we have to add
some additional code emulating it. */
#ifdef HAVE_ALLOCA
/* Nothing has to be done. */
# define ADD_BLOCK(list, address) /* nothing */
# define FREE_BLOCKS(list) /* nothing */
#else
struct block_list
{
void *address;
struct block_list *next;
};
# define ADD_BLOCK(list, addr) \
do { \
struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
/* If we cannot get a free block we cannot add the new element to \
the list. */ \
if (newp != NULL) { \
newp->address = (addr); \
newp->next = (list); \
(list) = newp; \
} \
} while (0)
# define FREE_BLOCKS(list) \
do { \
while (list != NULL) { \
struct block_list *old = list; \
list = list->next; \
free (old); \
} \
} while (0)
# undef alloca
# define alloca(size) (malloc (size))
#endif /* have alloca */
/* Names for the libintl functions are a problem. They must not clash /* Names for the libintl functions are a problem. They must not clash
with existing names and they should follow ANSI C. But this source with existing names and they should follow ANSI C. But this source
code is also used in GNU C Library where the names have a __ code is also used in GNU C Library where the names have a __

3165
i18n/de.po

File diff suppressed because it is too large Load Diff

21
job.c
View File

@@ -1795,7 +1795,7 @@ child_execute_job (argv, child)
int status; int status;
char *cmd = alloca (strlen (argv) + 512), *p, *q; char *cmd = alloca (strlen (argv) + 512), *p, *q;
char ifile[256], ofile[256], efile[256]; char ifile[256], ofile[256], efile[256];
char comname[50]; char *comname = 0;
char procname[100]; char procname[100];
/* Parse IO redirection. */ /* Parse IO redirection. */
@@ -1944,8 +1944,6 @@ child_execute_job (argv, child)
is desired. Forcing commands with newlines into DCLs allows to is desired. Forcing commands with newlines into DCLs allows to
store search lists on user mode logicals. */ store search lists on user mode logicals. */
comname[0] = '\0';
if (strlen (cmd) > MAXCMDLEN if (strlen (cmd) > MAXCMDLEN
|| (have_redirection != 0) || (have_redirection != 0)
|| (have_newline != 0)) || (have_newline != 0))
@@ -1962,12 +1960,9 @@ child_execute_job (argv, child)
return 0; return 0;
} }
strcpy (comname, "sys$scratch:CMDXXXXXX.COM"); outfile = open_tmpfile (&comname, "sys$scratch:CMDXXXXXX.COM");
(void) mktemp (comname);
outfile = fopen (comname, "w");
if (outfile == 0) if (outfile == 0)
pfatal_with_name (comname); pfatal_with_name (_("fopen (temporary file)"));
if (ifile[0]) if (ifile[0])
{ {
@@ -2150,7 +2145,7 @@ child_execute_job (argv, child)
fflush (stdout); fflush (stdout);
} }
if (comname[0] && !ISDB (DB_JOBS)) if (comname && !ISDB (DB_JOBS))
unlink (comname); unlink (comname);
return (status & 1); return (status & 1);
@@ -2465,10 +2460,10 @@ construct_command_argv_internal (line, restp, shell, ifs, batch_filename_ptr)
slow_flag = strcmp((s1 ? s1 : ""), (s2 ? s2 : "")); slow_flag = strcmp((s1 ? s1 : ""), (s2 ? s2 : ""));
if (s1); if (s1)
free(s1); free (s1);
if (s2); if (s2)
free(s2); free (s2);
} }
if (slow_flag) if (slow_flag)
goto slow; goto slow;

79
main.c
View File

@@ -68,7 +68,6 @@ extern void exit PARAMS ((int)) __attribute__ ((noreturn));
# endif # endif
extern double atof (); extern double atof ();
#endif #endif
extern char *mktemp ();
static void print_data_base PARAMS ((void)); static void print_data_base PARAMS ((void));
static void print_version PARAMS ((void)); static void print_version PARAMS ((void));
@@ -728,6 +727,51 @@ msdos_return_to_initial_directory ()
} }
#endif #endif
extern char *mktemp ();
extern int mkstemp ();
FILE *
open_tmpfile(name, template)
char **name;
const char *template;
{
int fd;
#if defined HAVE_MKSTEMP || defined HAVE_MKTEMP
# define TEMPLATE_LEN strlen (template)
#else
# define TEMPLATE_LEN L_tmpnam
#endif
*name = xmalloc (TEMPLATE_LEN + 1);
strcpy (*name, template);
#if defined HAVE_MKSTEMP && defined HAVE_FDOPEN
/* It's safest to use mkstemp(), if we can. */
fd = mkstemp (*name);
if (fd == -1)
return 0;
return fdopen (fd, "w");
#else
# ifdef HAVE_MKTEMP
(void) mktemp (*name);
# else
(void) tmpnam (*name);
# endif
# ifdef HAVE_FDOPEN
/* Can't use mkstemp(), but guard against a race condition. */
fd = open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600);
if (fd == -1)
return 0;
return fdopen (fd, "w");
# else
/* Not secure, but what can we do? */
return fopen (*name, "w");
# endif
#endif
}
#ifndef _AMIGA #ifndef _AMIGA
int int
main (argc, argv, envp) main (argc, argv, envp)
@@ -1212,24 +1256,16 @@ int main (int argc, char ** argv)
into a temporary file and read from that. */ into a temporary file and read from that. */
FILE *outfile; FILE *outfile;
/* Make a unique filename. */
#ifdef HAVE_MKTEMP
#ifdef VMS
static char name[] = "sys$scratch:GmXXXXXX";
#else
static char name[] = "/tmp/GmXXXXXX";
#endif
(void) mktemp (name);
#else
static char name[L_tmpnam];
(void) tmpnam (name);
#endif
if (stdin_nm) if (stdin_nm)
fatal (NILF, _("Makefile from standard input specified twice.")); fatal (NILF, _("Makefile from standard input specified twice."));
outfile = fopen (name, "w"); #ifdef VMS
# define TMP_TEMPLATE "sys$scratch:GmXXXXXX"
#else
# define TMP_TEMPLATE "/tmp/GmXXXXXX"
#endif
outfile = open_tmpfile (&stdin_nm, TMP_TEMPLATE);
if (outfile == 0) if (outfile == 0)
pfatal_with_name (_("fopen (temporary file)")); pfatal_with_name (_("fopen (temporary file)"));
while (!feof (stdin)) while (!feof (stdin))
@@ -1243,16 +1279,9 @@ int main (int argc, char ** argv)
/* Replace the name that read_all_makefiles will /* Replace the name that read_all_makefiles will
see with the name of the temporary file. */ see with the name of the temporary file. */
{ makefiles->list[i] = xstrdup (stdin_nm);
char *temp;
/* SGI compiler requires alloca's result be assigned simply. */
temp = (char *) alloca (sizeof (name));
bcopy (name, temp, sizeof (name));
makefiles->list[i] = temp;
}
/* Make sure the temporary file will not be remade. */ /* Make sure the temporary file will not be remade. */
stdin_nm = savestring (name, sizeof (name) -1);
f = enter_file (stdin_nm); f = enter_file (stdin_nm);
f->updated = 1; f->updated = 1;
f->update_status = 0; f->update_status = 0;
@@ -2683,7 +2712,7 @@ die (status)
print_version (); print_version ();
/* Wait for children to die. */ /* Wait for children to die. */
for (err = status != 0; job_slots_used > 0; err = 0) for (err = (status != 0); job_slots_used > 0; err = 0)
reap_children (1, err); reap_children (1, err);
/* Let the remote job module clean up its state. */ /* Let the remote job module clean up its state. */

3
make.h
View File

@@ -275,7 +275,7 @@ extern char *alloca ();
# endif /* HAVE_ALLOCA_H. */ # endif /* HAVE_ALLOCA_H. */
#endif /* GCC. */ #endif /* GCC. */
#if ST_MTIM_NSEC #ifdef ST_MTIM_NSEC
# if HAVE_INTTYPES_H # if HAVE_INTTYPES_H
# include <inttypes.h> # include <inttypes.h>
# endif # endif
@@ -407,6 +407,7 @@ extern int alpha_compare PARAMS ((const void *, const void *));
extern void print_spaces PARAMS ((unsigned int)); extern void print_spaces PARAMS ((unsigned int));
extern char *find_char_unquote PARAMS ((char *, char *, int)); extern char *find_char_unquote PARAMS ((char *, char *, int));
extern char *find_percent PARAMS ((char *)); extern char *find_percent PARAMS ((char *));
extern FILE *open_tmpfile PARAMS ((char **, const char *));
#ifndef NO_ARCHIVES #ifndef NO_ARCHIVES
extern int ar_name PARAMS ((char *)); extern int ar_name PARAMS ((char *));

27
read.c
View File

@@ -287,7 +287,7 @@ read_makefile (filename, flags)
unsigned int commands_len = 200; unsigned int commands_len = 200;
char *commands; char *commands;
unsigned int commands_idx = 0; unsigned int commands_idx = 0;
unsigned int cmds_started; unsigned int cmds_started, tgts_started;
char *p; char *p;
char *p2; char *p2;
int len, reading_target; int len, reading_target;
@@ -313,9 +313,13 @@ read_makefile (filename, flags)
{ \ { \
if (filenames != 0) \ if (filenames != 0) \
{ \ { \
int lineno = fileinfo.lineno; \
struct floc fi; \
fi.filenm = fileinfo.filenm; \
fi.lineno = tgts_started; \
record_files (filenames, pattern, pattern_percent, deps, \ record_files (filenames, pattern, pattern_percent, deps, \
cmds_started, commands, commands_idx, two_colon, \ cmds_started, commands, commands_idx, two_colon, \
&fileinfo, !(flags & RM_NO_DEFAULT_GOAL)); \ &fi, !(flags & RM_NO_DEFAULT_GOAL)); \
using_filename |= commands_idx > 0; \ using_filename |= commands_idx > 0; \
} \ } \
filenames = 0; \ filenames = 0; \
@@ -327,7 +331,7 @@ read_makefile (filename, flags)
fileinfo.lineno = 1; fileinfo.lineno = 1;
pattern_percent = 0; pattern_percent = 0;
cmds_started = fileinfo.lineno; /* cmds_started = fileinfo.lineno; */
if (ISDB (DB_VERBOSE)) if (ISDB (DB_VERBOSE))
{ {
@@ -755,6 +759,7 @@ read_makefile (filename, flags)
/* Record the previous rule. */ /* Record the previous rule. */
record_waiting_files (); record_waiting_files ();
tgts_started = fileinfo.lineno;
/* Search the line for an unquoted ; that is not after an /* Search the line for an unquoted ; that is not after an
unquoted #. */ unquoted #. */
@@ -879,7 +884,7 @@ read_makefile (filename, flags)
sizeof (struct nameseq), sizeof (struct nameseq),
1), 1),
sizeof (struct nameseq)); sizeof (struct nameseq));
*colonp = ':'; *p2 = ':';
if (!filenames) if (!filenames)
{ {
@@ -1540,7 +1545,7 @@ record_files (filenames, pattern, pattern_percent, deps, cmds_started,
char *implicit_percent; char *implicit_percent;
nextf = filenames->next; nextf = filenames->next;
free ((char *) filenames); free (filenames);
implicit_percent = find_percent (name); implicit_percent = find_percent (name);
implicit |= implicit_percent != 0; implicit |= implicit_percent != 0;
@@ -1608,6 +1613,12 @@ record_files (filenames, pattern, pattern_percent, deps, cmds_started,
continue; continue;
o = patsubst_expand (buffer, name, pattern, d->name, o = patsubst_expand (buffer, name, pattern, d->name,
pattern_percent, percent); pattern_percent, percent);
/* If the name expanded to the empty string, that's
illegal. */
if (o == buffer)
fatal (flocp,
_("target `%s' leaves prerequisite pattern empty"),
name);
free (d->name); free (d->name);
d->name = savestring (buffer, o - buffer); d->name = savestring (buffer, o - buffer);
} }
@@ -1627,7 +1638,8 @@ record_files (filenames, pattern, pattern_percent, deps, cmds_started,
/* If CMDS == F->CMDS, this target was listed in this rule /* If CMDS == F->CMDS, this target was listed in this rule
more than once. Just give a warning since this is harmless. */ more than once. Just give a warning since this is harmless. */
if (cmds != 0 && cmds == f->cmds) if (cmds != 0 && cmds == f->cmds)
error (flocp, _("target `%s' given more than once in the same rule."), error (flocp,
_("target `%s' given more than once in the same rule."),
f->name); f->name);
/* Check for two single-colon entries both with commands. /* Check for two single-colon entries both with commands.
@@ -1636,7 +1648,8 @@ record_files (filenames, pattern, pattern_percent, deps, cmds_started,
else if (cmds != 0 && f->cmds != 0 && f->is_target) else if (cmds != 0 && f->cmds != 0 && f->is_target)
{ {
error (&cmds->fileinfo, error (&cmds->fileinfo,
_("warning: overriding commands for target `%s'"), f->name); _("warning: overriding commands for target `%s'"),
f->name);
error (&f->cmds->fileinfo, error (&f->cmds->fileinfo,
_("warning: ignoring old commands for target `%s'"), _("warning: ignoring old commands for target `%s'"),
f->name); f->name);

View File

@@ -43,6 +43,18 @@ Boston, MA 02111-1307, USA. */
extern int try_implicit_rule PARAMS ((struct file *file, unsigned int depth)); extern int try_implicit_rule PARAMS ((struct file *file, unsigned int depth));
/* The test for circular dependencies is based on the 'updating' bit in
`struct file'. However, double colon targets have seperate `struct
file's; make sure we always use the base of the double colon chain. */
#define start_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\
->updating = 1)
#define finish_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\
->updating = 0)
#define is_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\
->updating)
/* Incremented when a command is started (under -n, when one would be). */ /* Incremented when a command is started (under -n, when one would be). */
unsigned int commands_started = 0; unsigned int commands_started = 0;
@@ -62,9 +74,6 @@ static int library_search PARAMS ((char **lib, FILE_TIMESTAMP *mtime_ptr));
should only make one goal at a time and return as soon as one goal whose should only make one goal at a time and return as soon as one goal whose
`changed' member is nonzero is successfully made. */ `changed' member is nonzero is successfully made. */
/* We need to know this "lower down" for correct error handling. */
static int updating_makefiles = 0;
int int
update_goal_chain (goals, makefiles) update_goal_chain (goals, makefiles)
register struct dep *goals; register struct dep *goals;
@@ -74,8 +83,6 @@ update_goal_chain (goals, makefiles)
unsigned int j = job_slots; unsigned int j = job_slots;
int status = -1; int status = -1;
updating_makefiles = makefiles;
#define MTIME(file) (makefiles ? file_mtime_no_search (file) \ #define MTIME(file) (makefiles ? file_mtime_no_search (file) \
: file_mtime (file)) : file_mtime (file))
@@ -287,7 +294,7 @@ update_file (file, depth)
if (f->considered == considered) if (f->considered == considered)
{ {
DBF (DB_VERBOSE, _("Pruning file `%s'.\n")); DBF (DB_VERBOSE, _("Pruning file `%s'.\n"));
return 0; return f->command_state == cs_finished ? f->update_status : 0;
} }
/* This loop runs until we start commands for a double colon rule, or until /* This loop runs until we start commands for a double colon rule, or until
@@ -373,7 +380,7 @@ update_file_1 (file, depth)
++depth; ++depth;
/* Notice recursive update of the same file. */ /* Notice recursive update of the same file. */
file->updating = 1; start_updating (file);
/* Looking at the file's modtime beforehand allows the possibility /* Looking at the file's modtime beforehand allows the possibility
that its name may be changed by a VPATH search, and thus it may that its name may be changed by a VPATH search, and thus it may
@@ -421,7 +428,7 @@ update_file_1 (file, depth)
mtime = file_mtime (d->file); mtime = file_mtime (d->file);
check_renamed (d->file); check_renamed (d->file);
if (d->file->updating) if (is_updating (d->file))
{ {
error (NILF, _("Circular %s <- %s dependency dropped."), error (NILF, _("Circular %s <- %s dependency dropped."),
file->name, d->file->name); file->name, d->file->name);
@@ -499,7 +506,7 @@ update_file_1 (file, depth)
} }
} }
file->updating = 0; finish_updating (file);
DBF (DB_VERBOSE, _("Finished prerequisites of target file `%s'.\n")); DBF (DB_VERBOSE, _("Finished prerequisites of target file `%s'.\n"));
@@ -793,7 +800,7 @@ check_dep (file, depth, this_mtime, must_make_ptr)
int dep_status = 0; int dep_status = 0;
++depth; ++depth;
file->updating = 1; start_updating (file);
if (!file->intermediate) if (!file->intermediate)
/* If this is a non-intermediate file, update it and record /* If this is a non-intermediate file, update it and record
@@ -845,7 +852,7 @@ check_dep (file, depth, this_mtime, must_make_ptr)
d = file->deps; d = file->deps;
while (d != 0) while (d != 0)
{ {
if (d->file->updating) if (is_updating (d->file))
{ {
error (NILF, _("Circular %s <- %s dependency dropped."), error (NILF, _("Circular %s <- %s dependency dropped."),
file->name, d->file->name); file->name, d->file->name);
@@ -884,7 +891,7 @@ check_dep (file, depth, this_mtime, must_make_ptr)
} }
} }
file->updating = 0; finish_updating (file);
return dep_status; return dep_status;
} }

View File

@@ -1,11 +1,48 @@
2000-03-27 Paul D. Smith <psmith@gnu.org>
* scripts/features/statipattrules: Test that static pattern rules
whose prerequisite patterns resolve to empty strings throw an
error (instead of dumping core). Fixes PR/1670.
* scripts/features/reinvoke: Make more robust by touching "b"
first, to ensure it's not newer than "a".
Reported by Marco Franzen <Marco.Franzen@Thyron.com>.
* scripts/options/dash-n: Ditto.
* scripts/functions/call: Whoops. The fix to PR/1527 caused
recursive invocations of $(call ...) to break. I can't come up
with any way to get both working at the same time, so I backed out
the fix to 1527 and added a test case for recursive calls. This
also tests the fix for PR/1610.
* scripts/features/double_colon: Test that circular dependencies
in double-colon rule sets are detected correctly (PR/1671).
2000-03-26 Paul D. Smith <psmith@gnu.org>
* scripts/targets/INTERMEDIATE: Test that make doesn't remove
.INTERMEDIATE files when given on the command line (PR/1669).
2000-03-08 Paul D. Smith <psmith@gnu.org>
* scripts/options/dash-k: Add a test for error detection by
multiple targets depending on the same prerequisite with -k.
For PR/1634.
2000-02-07 Paul D. Smith <psmith@gnu.org>
* scripts/features/escape: Add a test for backslash-escaped spaces
in a target name (PR/1586).
2000-02-04 Paul D. Smith <psmith@gnu.org> 2000-02-04 Paul D. Smith <psmith@gnu.org>
* scripts/features/patspecific_vars: Add a test for PR/1407. * scripts/features/patspecific_vars: Add a test for pattern-specific
target variables inherited from the parent target (PR/1407).
2000-02-02 Paul D. Smith <psmith@gnu.org> 2000-02-02 Paul D. Smith <psmith@gnu.org>
* run_make_tests.pl (set_more_defaults): Hard-code the LANG to C * run_make_tests.pl (set_more_defaults): Hard-code the LANG to C
to make sure porting order, etc. is predictable. to make sure sorting order, etc. is predictable.
Reported by Andreas Jaeger <aj@suse.de>. Reported by Andreas Jaeger <aj@suse.de>.
* run_make_tests.pl (set_more_defaults): Set the $wtime variable * run_make_tests.pl (set_more_defaults): Set the $wtime variable
@@ -17,6 +54,11 @@
* scripts/targets/SECONDARY: Ditto. * scripts/targets/SECONDARY: Ditto.
* scripts/targets/INTERMEDIATE: Ditto. * scripts/targets/INTERMEDIATE: Ditto.
2000-01-27 Paul D. Smith <psmith@gnu.org>
* test_driver.pl (toplevel): Don't try to run test scripts which
are really directories.
2000-01-23 Paul D. Smith <psmith@gnu.org> 2000-01-23 Paul D. Smith <psmith@gnu.org>
* scripts/features/include: Remove a check; the fix caused more * scripts/features/include: Remove a check; the fix caused more
@@ -27,7 +69,7 @@
* scripts/functions/call: Add a test for PR/1517 and PR/1527: make * scripts/functions/call: Add a test for PR/1517 and PR/1527: make
sure $(call ...) doesn't eval its arguments and that you can sure $(call ...) doesn't eval its arguments and that you can
invoke foreach from it without infinitely looping. invoke foreach from it without looping forever.
1999-12-15 Paul D. Smith <psmith@gnu.org> 1999-12-15 Paul D. Smith <psmith@gnu.org>

View File

@@ -36,6 +36,9 @@ two: ; @echo two
f1.h f2.h: ; @echo $@ f1.h f2.h: ; @echo $@
d :: ; @echo ok
d :: d ; @echo oops
EOF EOF
close(MAKEFILE); close(MAKEFILE);
@@ -95,6 +98,12 @@ $answer = "f2.h\nfoo SECOND\n";
$answer = "f2.h\nfoo SECOND\n"; $answer = "f2.h\nfoo SECOND\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
# TEST 8: Test circular dependency check; PR/1671
&run_make_with_options($makefile, "d", &get_logfile, 0);
$answer = "ok\n$make_name: Circular d <- d dependency dropped.\noops\n";
&compare_output($answer, &get_logfile(1));
# TEST 8: I don't grok why this is different than the above, but it is... # TEST 8: I don't grok why this is different than the above, but it is...
# #
# Hmm... further testing indicates this might be timing-dependent? # Hmm... further testing indicates this might be timing-dependent?

View File

@@ -1,11 +1,17 @@
# -*-perl-*-
$description = "Test various types of escaping in makefiles."; $description = "Test various types of escaping in makefiles.";
$details = "Make sure that escaping of `:' works in target names."; $details = "\
Make sure that escaping of `:' works in target names.
Also make sure escaping of whitespace works in target names";
open(MAKEFILE,"> $makefile"); open(MAKEFILE,"> $makefile");
print MAKEFILE '$(path)foo : ; @echo cp $^ $@ print MAKEFILE <<'EOF';
'; $(path)foo : ; @echo cp $^ $@
foo\ bar: ; @echo 'touch "$@"'
EOF
close(MAKEFILE); close(MAKEFILE);
@@ -34,5 +40,11 @@ $answer = "cp p:foo\n";
$answer = "$makefile:1: *** target pattern contains no `%'. Stop.\n"; $answer = "$makefile:1: *** target pattern contains no `%'. Stop.\n";
&compare_output($answer,&get_logfile(1)); &compare_output($answer,&get_logfile(1));
# TEST 5: This one should work
&run_make_with_options($makefile, "'foo bar'", &get_logfile, 0);
$answer = "touch \"foo bar\"\n";
&compare_output($answer,&get_logfile(1));
# This tells the test driver that the perl test script executed properly. # This tells the test driver that the perl test script executed properly.
1; 1;

View File

@@ -65,7 +65,8 @@ EOM
close(MAKEFILE); close(MAKEFILE);
&touch('a','b'); &touch('b');
&touch('a');
sleep(2); sleep(2);
&touch('c'); &touch('c');

View File

@@ -1,66 +1,67 @@
$description = "The following test creates a makefile to test static \n" # -*-perl-*-
."pattern rules. Static pattern rules are rules which \n" $description = "Test handling of static pattern rules.";
."specify multiple targets and construct the dependency \n"
."names for each target based on the target name. ";
$details = "The makefile created in this test has three targets. The \n" $details = "\
."filter command is used to get those target names ending in \n" The makefile created in this test has three targets. The
.".o and statically creates a compile command with the target\n" filter command is used to get those target names ending in
."name and the target name with .c. It also does the same thing\n" .o and statically creates a compile command with the target
."for another target filtered with .elc and creates a command\n" name and the target name with .c. It also does the same thing
."to emacs a .el file"; for another target filtered with .elc and creates a command
to emacs a .el file";
open(MAKEFILE,"> $makefile"); open(MAKEFILE,"> $makefile");
print MAKEFILE <<'EOF';
files = foo.elc bar.o lose.o
# The Contents of the MAKEFILE ... $(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@
print MAKEFILE "files = foo.elc bar.o lose.o \n\n"
."\$(filter %.o,\$(files)): %.o: %.c\n"
."\t\@echo CC -c \$(CFLAGS) \$< -o \$@ \n"
."\$(filter %.elc,\$(files)): %.elc: %.el \n"
."\t\@echo emacs \$< \n";
# END of Contents of MAKEFILE
$(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $<
EOF
close(MAKEFILE); close(MAKEFILE);
&touch("bar.c","lose.c");
&touch('bar.c', 'lose.c');
# TEST #1 # TEST #1
# ------- # -------
&run_make_with_options($makefile, &run_make_with_options($makefile, '', &get_logfile);
"",
&get_logfile,
0);
# Create the answer to what should be produced by this Makefile
$answer = "CC -c bar.c -o bar.o\n"; $answer = "CC -c bar.c -o bar.o\n";
&compare_output($answer,&get_logfile(1)); &compare_output($answer, &get_logfile(1));
# TEST #2 # TEST #2
# ------- # -------
&run_make_with_options($makefile,"lose.o",&get_logfile);
&run_make_with_options($makefile, 'lose.o', &get_logfile);
$answer = "CC -c lose.c -o lose.o\n"; $answer = "CC -c lose.c -o lose.o\n";
&compare_output($answer, &get_logfile(1));
&compare_output($answer,&get_logfile(1));
# TEST #3 # TEST #3
# ------- # -------
&touch("foo.el"); &touch("foo.el");
&run_make_with_options($makefile,"foo.elc",&get_logfile); &run_make_with_options($makefile, 'foo.elc', &get_logfile);
$answer = "emacs foo.el\n"; $answer = "emacs foo.el\n";
&compare_output($answer, &get_logfile(1));
&compare_output($answer,&get_logfile(1));
unlink('foo.el', 'bar.c', 'lose.c');
# TEST #4 -- PR/1670: don't core dump on invalid static pattern rules
# -------
$makefile2 = &get_tmpfile;
open(MAKEFILE, "> $makefile2");
print MAKEFILE "foo: foo%: % ; \@echo $@\n";
close(MAKEFILE);
&run_make_with_options($makefile2, '', &get_logfile, 512);
$answer = "$makefile2:1: *** target `foo' leaves prerequisite pattern empty. Stop.\n";
&compare_output($answer, &get_logfile(1));
unlink("foo.el","bar.c","lose.c");
1; 1;

View File

@@ -26,23 +26,35 @@ my-notdir = $(call notdir,$(1))
my-foreach = $(foreach $(1),$(2),$(3)) my-foreach = $(foreach $(1),$(2),$(3))
my-if = $(if $(1),$(2),$(3)) my-if = $(if $(1),$(2),$(3))
# Test recursive invocations of call with different arguments
#
one = $(1) $(2) $(3)
two = $(call one,$(1),foo,$(2))
all: ; @echo '$(call reverse,bar,foo)'; \ all: ; @echo '$(call reverse,bar,foo)'; \
echo '$(call map,origin,MAKE reverse map)'; \ echo '$(call map,origin,MAKE reverse map)'; \
echo '$(call my-notdir,a/b c/d e/f)'; \ echo '$(call my-notdir,a/b c/d e/f)'; \
echo '$(call my-foreach)'; \ echo '$(call my-foreach)'; \
echo '$(call my-foreach,a,,,)'; \ echo '$(call my-foreach,a,,,)'; \
echo '$(call my-foreach,a,x y z,$(a)$(a))'; \
echo '$(call my-if,a,b,c)'; \ echo '$(call my-if,a,b,c)'; \
echo '$(call my-if,,$(warning don't print this),ok)' echo '$(call two,bar,baz)'
EOMAKE EOMAKE
# These won't work until/unless PR/1527 is resolved.
# echo '$(call my-foreach,a,x y z,$(a)$(a))'; \
# echo '$(call my-if,,$(warning don't print this),ok)'
#
# $answer = "xx yy zz\nok\n";
# END of Contents of MAKEFILE # END of Contents of MAKEFILE
close(MAKEFILE); close(MAKEFILE);
&run_make_with_options($makefile, "", &get_logfile); &run_make_with_options($makefile, "", &get_logfile);
$answer = "foo bar\ndefault file file\nb d f\n\n\nxx yy zz\nb\nok\n"; $answer = "foo bar\ndefault file file\nb d f\n\n\nb\nbar foo baz\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
1; 1;

View File

@@ -1,36 +1,37 @@
$description = "The following test creates a makefile to test the -k option.\n" # -*-perl-*-
."Normally, make gives up immediately if an error happens \n"
."that make has not been told to ignore. However, if the -k\n"
."option is specified, make continues to consider the other\n"
."dependencies of the pending targets.";
$details = "The makefile created in this test is a simulation of building \n" $description = "Test the make -k (don't stop on error) option.\n";
."a small product. However, the trick to this one is that one \n"
."of the dependencies of the main target does not exist. \n" $details = "\
."Without the -k option, make would fail immediately and not \n" The makefile created in this test is a simulation of building
."build any part of the target. What we are looking for here, \n" a small product. However, the trick to this one is that one
."is that make builds the rest of the dependencies even though \n" of the dependencies of the main target does not exist.
."it knows that at the end it will fail to rebuild the main target."; Without the -k option, make would fail immediately and not
build any part of the target. What we are looking for here,
is that make builds the rest of the dependencies even though
it knows that at the end it will fail to rebuild the main target.";
open(MAKEFILE,"> $makefile"); open(MAKEFILE,"> $makefile");
# The Contents of the MAKEFILE ... # The Contents of the MAKEFILE ...
print MAKEFILE "VPATH = $workdir\n"; print MAKEFILE <<EOF;
print MAKEFILE "edit: main.o kbd.o commands.o display.o \n"; VPATH = $workdir
print MAKEFILE "\t\@echo cc -o edit main.o kbd.o commands.o display.o \n"; edit: main.o kbd.o commands.o display.o
\t\@echo cc -o edit main.o kbd.o commands.o display.o
print MAKEFILE "main.o : main.c defs.h\n"; main.o : main.c defs.h
print MAKEFILE "\t\@echo cc -c main.c\n"; \t\@echo cc -c main.c
print MAKEFILE "kbd.o : kbd.c defs.h command.h\n"; kbd.o : kbd.c defs.h command.h
print MAKEFILE "\t\@echo cc -c kbd.c\n"; \t\@echo cc -c kbd.c
print MAKEFILE "commands.o : command.c defs.h command.h\n"; commands.o : command.c defs.h command.h
print MAKEFILE "\t\@echo cc -c commands.c\n"; \t\@echo cc -c commands.c
print MAKEFILE "display.o : display.c defs.h buffer.h\n"; display.o : display.c defs.h buffer.h
print MAKEFILE "\t\@echo cc -c display.c\n"; \t\@echo cc -c display.c
EOF
# END of Contents of MAKEFILE # END of Contents of MAKEFILE
@@ -45,29 +46,55 @@ close(MAKEFILE);
&touch(@files_to_touch); &touch(@files_to_touch);
if ($vos) if ($vos) {
{ $error_code = 3307;
$error_code = 3307;
} }
else else {
{ $error_code = 512;
$error_code = 512;
} }
&run_make_with_options($makefile,"-k",&get_logfile,$error_code); &run_make_with_options($makefile, "-k", &get_logfile, $error_code);
# Create the answer to what should be produced by this Makefile # Create the answer to what should be produced by this Makefile
$answer = "cc -c main.c\n" $answer = "cc -c main.c
."$make_name: *** No rule to make target `kbd.c', needed by `kbd.o'.\n" $make_name: *** No rule to make target `kbd.c', needed by `kbd.o'.
."cc -c commands.c\n" cc -c commands.c
."cc -c display.c\n" cc -c display.c
."$make_name: Target `edit' not remade because of errors.\n"; $make_name: Target `edit' not remade because of errors.\n";
# COMPARE RESULTS # COMPARE RESULTS
if (&compare_output($answer,&get_logfile(1))) &compare_output($answer, &get_logfile(1));
{
unlink @files_to_touch; unlink(@files_to_touch) unless $keep;
}
# TEST 1: Make sure that top-level targets that depend on targets that
# previously failed to build, aren't attempted. Regression for PR/1634.
$makefile2 = &get_tmpfile;
open(MAKEFILE, "> $makefile2");
print MAKEFILE <<'EOF';
.SUFFIXES:
all: exe1 exe2; @echo making $@
exe1 exe2: lib; @echo cp $^ $@
lib: foo.o; @echo cp $^ $@
foo.o: ; exit 1
EOF
close(MAKEFILE);
&run_make_with_options($makefile2, "-k", &get_logfile, $error_code);
$answer = "exit 1
$make_name: *** [foo.o] Error 1
$make_name: Target `all' not remade because of errors.\n";
&compare_output($answer, &get_logfile(1));
1; 1;

View File

@@ -18,17 +18,20 @@ close(MAKEFILE);
&touch('orig'); &touch('orig');
# TEST 0
&run_make_with_options($makefile, "", &get_logfile); &run_make_with_options($makefile, "", &get_logfile);
$answer = "echo >> intermediate\necho >> final\n"; $answer = "echo >> intermediate\necho >> final\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
# TEST 1
&run_make_with_options($makefile, "-Worig -n", &get_logfile); &run_make_with_options($makefile, "-Worig -n", &get_logfile);
$answer = "echo >> intermediate\necho >> final\n"; $answer = "echo >> intermediate\necho >> final\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
unlink('orig', 'intermediate', 'final'); unlink('orig', 'intermediate', 'final');
# TEST2
# We consider the actual updated timestamp of targets with all # We consider the actual updated timestamp of targets with all
# recursive commands, even with -n. # recursive commands, even with -n.
@@ -46,14 +49,19 @@ EOF
close(MAKEFILE); close(MAKEFILE);
&touch('a', 'b'); &touch('b');
&touch('a');
sleep(1); sleep(1);
&touch('c'); &touch('c');
# TEST 2
&run_make_with_options($makefile2, "", &get_logfile); &run_make_with_options($makefile2, "", &get_logfile);
$answer = "$make_name: `a' is up to date.\n"; $answer = "$make_name: `a' is up to date.\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
# TEST 3
&run_make_with_options($makefile2, "-n", &get_logfile); &run_make_with_options($makefile2, "-n", &get_logfile);
$answer = "$make_name: `a' is up to date.\n"; $answer = "$make_name: `a' is up to date.\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));

View File

@@ -77,9 +77,15 @@ sleep($wtime);
$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm foo.e bar.e\n"; $answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm foo.e bar.e\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
# TEST #6 -- added for PR/1669: don't remove files mentioned on the cmd line.
&run_make_with_options($makefile,'foo.e',&get_logfile);
$answer = "cp foo.f foo.e\n";
&compare_output($answer, &get_logfile(1));
unlink('foo.f', 'foo.e', 'foo.d', 'foo.c', 'bar.f', 'bar.e', 'bar.d', 'bar.c'); unlink('foo.f', 'foo.e', 'foo.d', 'foo.c', 'bar.f', 'bar.e', 'bar.d', 'bar.c');
# TEST #6 -- added for PR/1423 # TEST #7 -- added for PR/1423
$makefile2 = &get_tmpfile; $makefile2 = &get_tmpfile;
@@ -94,7 +100,7 @@ EOF
close(MAKEFILE); close(MAKEFILE);
&run_make_with_options($makefile2, "-R", &get_logfile); &run_make_with_options($makefile2, '-R', &get_logfile);
$answer = "touch foo.a\ntouch foo\nrm foo.a\n"; $answer = "touch foo.a\ntouch foo\nrm foo.a\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));

View File

@@ -117,7 +117,8 @@ sub toplevel
closedir (SCRIPTDIR); closedir (SCRIPTDIR);
foreach $dir (@dirs) foreach $dir (@dirs)
{ {
next if ! -d "$scriptpath/$dir" || $dir =~ /^\.\.?$/ || $dir eq 'CVS'; next if ($dir =~ /^\.\.?$/ || $dir eq 'CVS' || $dir eq 'RCS'
|| ! -d "$scriptpath/$dir");
push (@rmdirs, $dir); push (@rmdirs, $dir);
mkdir ("$workpath/$dir", 0777) mkdir ("$workpath/$dir", 0777)
|| &error ("Couldn't mkdir $workpath/$dir: $!\n"); || &error ("Couldn't mkdir $workpath/$dir: $!\n");
@@ -127,7 +128,7 @@ sub toplevel
closedir (SCRIPTDIR); closedir (SCRIPTDIR);
foreach $test (@files) foreach $test (@files)
{ {
next if $test =~ /^\.\.?$/ || $test =~ /~$/ || $test eq 'CVS'; next if $test =~ /~$/ || -d $test;
push (@TESTS, "$dir/$test"); push (@TESTS, "$dir/$test");
} }
} }

View File

@@ -136,17 +136,18 @@ define_variable_in_set (name, length, value, origin, recursive, set, flocp)
Returns address of the `struct variable' containing all info Returns address of the `struct variable' containing all info
on the variable, or nil if no such variable is defined. on the variable, or nil if no such variable is defined.
If LISTP is not nil, return a pointer to the setlist where If we find a variable which is in the process of being expanded,
the variable was found. If the variable wasn't found, the try to find one further up the set_list chain. If we don't find
value of LISTP is unchanged. */ one that isn't being expanded, return a pointer to whatever we
_did_ find. */
struct variable * struct variable *
lookup_variable_setlist (name, length, listp) lookup_variable (name, length)
char *name; char *name;
unsigned int length; unsigned int length;
struct variable_set_list **listp;
{ {
register struct variable_set_list *setlist; register struct variable_set_list *setlist;
struct variable *firstv = 0;
register unsigned int i; register unsigned int i;
register unsigned int rawhash = 0; register unsigned int rawhash = 0;
@@ -161,21 +162,31 @@ lookup_variable_setlist (name, length, listp)
register unsigned int hashval = rawhash % set->buckets; register unsigned int hashval = rawhash % set->buckets;
register struct variable *v; register struct variable *v;
/* Look through this set list. */
for (v = set->table[hashval]; v != 0; v = v->next) for (v = set->table[hashval]; v != 0; v = v->next)
if (*v->name == *name if (*v->name == *name
&& strneq (v->name + 1, name + 1, length - 1) && strneq (v->name + 1, name + 1, length - 1)
&& v->name[length] == 0) && v->name[length] == '\0')
{ break;
if (listp)
*listp = setlist; /* If we didn't find anything, go to the next set list. */
return v; if (!v)
} continue;
/* If it's not being expanded already, we're done. */
if (!v->expanding)
return v;
/* It is, so try to find another one. If this is the first one we've
seen, keep a pointer in case we don't find anything else. */
if (!firstv)
firstv = v;
} }
#ifdef VMS #ifdef VMS
/* since we don't read envp[] on startup, try to get the /* since we don't read envp[] on startup, try to get the
variable via getenv() here. */ variable via getenv() here. */
if (!firstv)
{ {
char *vname = alloca (length + 1); char *vname = alloca (length + 1);
char *value; char *value;
@@ -229,10 +240,9 @@ lookup_variable_setlist (name, length, listp)
return define_variable (vname, length, value, o_env, 1); return define_variable (vname, length, value, o_env, 1);
} }
} }
#endif /* VMS */ #endif /* VMS */
return 0; return firstv;
} }
/* Lookup a variable whose name is a string starting at NAME /* Lookup a variable whose name is a string starting at NAME

View File

@@ -95,10 +95,7 @@ extern char *patsubst_expand PARAMS ((char *o, char *text, char *pattern, char *
char *pattern_percent, char *replace_percent)); char *pattern_percent, char *replace_percent));
/* expand.c */ /* expand.c */
extern char *recursively_expand_setlist PARAMS ((struct variable *v, extern char *recursively_expand PARAMS ((struct variable *v));
struct variable_set_list *l));
#define recursively_expand(v) recursively_expand_setlist((v),(struct variable_set_list *)0)
/* variable.c */ /* variable.c */
extern struct variable_set_list *create_new_variable_set PARAMS ((void)); extern struct variable_set_list *create_new_variable_set PARAMS ((void));
@@ -111,12 +108,7 @@ extern void print_variable_set PARAMS ((struct variable_set *set, char *prefix))
extern void merge_variable_set_lists PARAMS ((struct variable_set_list **setlist0, struct variable_set_list *setlist1)); extern void merge_variable_set_lists PARAMS ((struct variable_set_list **setlist0, struct variable_set_list *setlist1));
extern struct variable *try_variable_definition PARAMS ((const struct floc *flocp, char *line, enum variable_origin origin, int target_var)); extern struct variable *try_variable_definition PARAMS ((const struct floc *flocp, char *line, enum variable_origin origin, int target_var));
extern struct variable *lookup_variable_setlist extern struct variable *lookup_variable PARAMS ((char *name, unsigned int length));
PARAMS ((char *name, unsigned int length,
struct variable_set_list **lisp));
#define lookup_variable(n,l) lookup_variable_setlist((n),(l),\
(struct variable_set_list **)0)
extern struct variable *define_variable_in_set extern struct variable *define_variable_in_set
PARAMS ((char *name, unsigned int length, char *value, PARAMS ((char *name, unsigned int length, char *value,