Commit Graph

492 Commits

Author SHA1 Message Date
wiz
4c99916337 va_{start,end} audit:
Make sure that each va_start has one and only one matching va_end,
especially in error cases.
If the va_list is used multiple times, do multiple va_starts/va_ends.
If a function gets va_list as argument, don't let it use va_end (since
it's the callers responsibility).

Improved by comments from enami and christos -- thanks!

Heimdal/krb4/KAME changes already fed back, rest to follow.

Inspired by, but not not based on, OpenBSD.
2001-09-24 13:22:25 +00:00
wiz
456dff6cb8 Spell 'occurred' with two 'r's. 2001-09-16 16:34:23 +00:00
wiz
1e378c4c12 precede, not preceed. 2001-08-20 12:00:46 +00:00
ad
811a1f306a Nit. 2001-08-13 12:33:48 +00:00
matt
2850b6d11e Print out errno when vfork fails. 2001-07-24 05:06:40 +00:00
christos
147dd16dac add .USEBEFORE Attribute 2001-07-03 18:08:50 +00:00
sjg
e28cc22621 Add 4th arg (flags) to Var_Set so that VarLoopExpand can tell it not
to export interator variables when using context VAR_CMD.

Reviewed: christos
2001-06-12 23:36:17 +00:00
christos
815427002e Revert Job_CatchOutput() change; it adds a considerable delay to make, and
it is not clear what problem it is trying to fix.
2001-06-11 04:20:32 +00:00
wiz
40ac848024 Fix various misspellings of compatible/compatibility. 2001-06-11 01:50:48 +00:00
sjg
fc0df160d8 Simplify the exporting of VAR_CMD's via MAKEFLAGS.
We now just list the names of such variables in .MAKEOVERRIDES.
When we come to export MAKEFLAGS we quote the value of each exported variable
using :Q, using: ${.MAKEOVERRIDES:O:u:@v@$v=${$v:Q}@}
The :O:u suppresses duplicate names.
Also modifed Parse_DoVar to re-export MAKEFLAGS whenever .MAKEOVERRIDES
is assigned to so .MAKEOVERRIDES+= PATH will export PATH=${PATH:Q}
to the environment, while .MAKEOVERRIDES= will disable export of VAR_CMD's.
2001-06-10 02:31:00 +00:00
sjg
e843d81502 Mention .MAKEOVERRIDES 2001-06-09 07:00:37 +00:00
sjg
d7c22ce2d7 Do a better job of duplicate suppression in .MAKEOVERRIDES.
From Var_Set: We actually want the equivalent of
.MAKEOVERRIDES:= ${.MAKEOVERRIDES:Nname=*} name='val'
clearing the previous value for name is important, since
doing simple duplicate suppression does not handle:
$ make FOO=goo
which then runs a sub-make with FOO=boo
the commands from that sub-make should see just FOO=boo.
2001-06-09 05:57:31 +00:00
sjg
44372a7be4 Modify handling of command line variable assignments and their exporting
via MAKEFLAGS.  Instead of appending them directly to .MAKEFLAGS, put
them in .MAKEOVERRIDES (and ensure they are quoted).  This is now done
in Var_Set when it exports VAR_CMD's.
Use ExportMAKEFLAGS() to export MAKEFLAGS, using the combined content
of .MAKEFLAGS and .MAKEOVERRIDES (with duplicate supression).
If .MAKEFLAGS is assigned to in a Makefile, ExportMAKEFLAGS is called again.
This allows a line like:
.MAKEOVERRIDES=
to effectively stop the exporting of the command line vars in MAKEFLAGS.
2001-06-09 05:22:47 +00:00
sjg
80a2d65904 Provide a useful? MAKE_VERSION. 2001-06-09 05:17:51 +00:00
explorer
4b9b13c33f Perform variable expansion on sysv rhs patterns. That is, expand ${O} in: ${SRCS:.c=.${O}} 2001-06-05 06:00:39 +00:00
sommerfeld
c60038a831 Avoid being overly specific since the unresolved merge conflict tags
we detect could have come from something other than cvs.
2001-06-02 18:04:44 +00:00
christos
45bc184ebb mention `cvs' in the the previous hack so that the clueless get a clue. 2001-06-02 16:17:08 +00:00
sommerfeld
f705156c1e Gratuitous make(1) hack of the morning: if operator-less lines start
with merge delimeters (<<<<<<, ======, >>>>>>), report "Makefile
contains unresolved merge conflict" rather than "Need an operator".
2001-06-02 14:25:23 +00:00
sjg
9cfd89292b A number of semi-related changes.
1. make -dx turns on DEBUG_SHELL which causes sh -x to be used where
   possible.
2. PrintOnError() is now called when make is stopping due to an error.
   This routine reports the curdir and the value of any variables listed
   in MAKE_PRINT_VAR_ON_ERROR.
3. Variables set via command line, are propagated to child-makes via
   MAKEFLAGS.  This behaviour appears to be necessary for POSIX (according
   to the GNU folk anyway).
4. Do not reset MAKEFILE when reading ".depend" as this rather eliminates the
   usefulness of ${MAKEFILE}.
5. Added ${.newline} as a simple means of being able to include \n in the
   result of a :@ loop expansion.
6. Set ${MAKE_VERSION} if defined.  Need to come up with a useful value.

Reviewed: christos
2001-06-01 20:33:37 +00:00
christos
d0c243e9e5 better error messages on exec* failures. From Simon Burge. 2001-05-29 17:37:51 +00:00
sjg
843e9049af Modifier :P avoid segfault if gn is found but path is NULL. 2001-05-12 06:48:49 +00:00
aymeric
b57e4f3ad4 Fix core dump triggered by a .DEFAULT target with no commands.
Bug reported privately by Nicolas Ollinger <nollinge@ens-lyon.fr>.

You can trigger this bug prior to updating your sources with for example:
% cat > Makefile <<EOF
.DEFAULT:
a
EOF
% make
2001-05-08 15:15:53 +00:00
sommerfeld
46608f023e bin/12734: fix SIGTSTP/SIGCONT handling.
- install SIGCONT handler which reestablishes SIGTSTP handler and then calls
JobRestartJobs() to restart all the suspended jobs.
 - when SIGTSTP is handled, call JobCatchChildren() so *** Suspended messages
get printed before make stops rather than after.
2001-05-01 03:27:50 +00:00
wiz
14dbdf5518 Negative exit code cleanup: Replace exit(-x) with exit(x).
As seen on tech-userlevel.
2001-04-06 11:13:45 +00:00
wiz
11d6505ee1 getcwd lives in 3, not 2. Whitespace fixes. 2001-04-04 09:39:07 +00:00
itojun
6924e04336 redo of previous: do not destroy v->val if str points to v->val.
XXX GC of v->val
2001-03-10 00:41:48 +00:00
itojun
4679105873 correct case with VAR_KEEP. if clause checked VAR_KEEP backwards,
and made str a dangling pointer.
2001-03-09 12:49:05 +00:00
sjg
cefcce2537 Test for non-existant LIB was incorrect (using cmtime cf. mtime). 2001-03-05 16:20:33 +00:00
christos
3e343f9152 PR/12251: Thomas Klausner: Make core dumps on unclosed conditional.
Well, it should say 'make core-dumps on any error on the primary makefile'.
This was a result of the new changes to print the path to the parsed
Makefile... Made the code a lot more conservative, plus prepended <progname>:
to each message.
2001-02-23 21:11:38 +00:00
cgd
2f928e31d3 <sys/time.h>, rather than <time.h>. The former is actually the documented
way to get gettimeofday(), etc.  On some systems on which you might want
to host make (e.g. solaris), <time.h> won't get you a struct timeval
definition.
2001-01-23 02:48:05 +00:00
thorpej
f9db1fd410 Add trace.o 2001-01-18 05:53:05 +00:00
cgd
d594ce939b comment or delete text after CPP directives. 2001-01-16 02:50:27 +00:00
cgd
3e8fb298b1 Avoid accidental use of trigraphs. Pointed out by development version of gcc. 2001-01-16 02:37:03 +00:00
christos
a5854c63b6 .PHONY gnode's don't get a PREFIX, so don't try to set the parent's prefixes
on a parallel make.
2001-01-15 22:17:09 +00:00
mycroft
139c9e6bf2 Once again, do the warning in a format that doesn't completely blow, and that
corresponds with text in the man page.  Also split it into 2 pieces that can
both be used with, e.g., C-x` in Emacs.
2001-01-14 20:54:16 +00:00
christos
a73d3d97ca Provide a new .if commands(<target>) primitive that returns true if the
target has commands associated with it.
2001-01-14 20:44:26 +00:00
christos
3fbe1ebe81 convert error messages into english 2001-01-14 06:02:25 +00:00
christos
07c4e36361 We cannot override commands yet, ignore the additional sets for now.
This will be reverted when the tree is fixed.
2001-01-14 05:41:08 +00:00
christos
50a2a73342 - make the second list of commands override the first like gmake does
- remember where the first command definition occured so that we can debug
  things.
2001-01-14 05:34:06 +00:00
christos
a2da9e7752 make the -W arg work; it was not put in the getopt string. 2001-01-14 05:33:53 +00:00
cgd
741c8f626f back out the change in rev 1.57. it was misguided; see discussion
on current-users (subject "build problem - multibyte.c").
2001-01-13 20:36:58 +00:00
jdolecek
f68d9de78d only print the 'duplicate script for target' warning if
parseWarnFatal is on
2001-01-12 09:27:44 +00:00
christos
bda102d681 PR/11800: Chris Demetriou: Add -W flag to exit on parse warnings.
While I am here, s/make:.*"/%s:\1", progname/
2001-01-10 15:54:00 +00:00
sjg
fc4c89c68b ReadMakefile: Don't simply fopen() fname before checking if we are in separate
objdir.  This is the way freebsd does it, and apart from being more correct,
saves a lot of pointless fopen() calls.
2001-01-07 06:16:02 +00:00
sjg
85be2f6526 Always try an give the absolute pathname of the Makefile that we got an error in.
Use .PARSEDIR if set and not '.', otherwise .CURDIR to qualify the Makefile's path.
2001-01-07 06:08:33 +00:00
sommerfeld
ded2509e8b Missing bit of last change 2001-01-01 15:50:23 +00:00
sommerfeld
3274266e5f Delete forceSerial; just use compatMake for that.
Add -N flag to *really* not execute any commands (useful when using
the -d flags to debug usr/src/Makefile)
Document -N
Update documentation of -n to mention that it still executes commands
for targets marked .MAKE so that the -N/-n distinction is clear.
2001-01-01 15:47:37 +00:00
sommerfeld
1ef47ae656 Include token counts in trace output.
Don't let tokensFree go negative.
2000-12-30 16:38:22 +00:00
sommerfeld
dd9c50102d Fix token accounting for .BEGIN/.END jobs 2000-12-30 15:58:34 +00:00
sommerfeld
663ff035b1 Avoid token leaks when aborting after an error. 2000-12-30 14:21:22 +00:00
sommerfeld
129b8c6309 strdup tracefile so that it doesn't get smashed. 2000-12-30 02:52:03 +00:00
sommerfeld
9984263e63 Do lazy token release - don't return tokens to the pipe unless we're
waiting for something or we're done.
2000-12-30 02:51:21 +00:00
sommerfeld
8a39635d34 Back out debug cruft. 2000-12-30 02:06:42 +00:00
sommerfeld
a804073cac Add a token-passing scheme to allow a recursive make to successfully
use -j; all make's in a recursive build cooperate to limit the total
number of jobs, using a token-passing scheme.

The current token passing algorithm is similar to the one implemented
by gmake; there is a single pipe which is inherited through the entire
process hierarchy; tokens are obtained by reading a byte from the
"read end" of the pipe, and are returned by writing them to the "write
end".  This exact algorithm is likely to change in the future.

Implementation details:
 - Use the new trace facility to allow measurement of the
effectiveness of different token-passing schemes
 - Get a token in MakeStartJobs(), return it in Make_Update()
 - Eliminate Job_Full() and the jobFull global since they are
redundant with token system.
 - Add an "internal" -J option (to pass the token pipe fd's down to
submakes) and a -T option for tracing.
 - Change how compatMake is forced so that -j means something when
inherited by submakes.
 - When waiting for a token, poll the token-passing pipe as well as
the output pipes of existing jobs.
2000-12-30 02:05:20 +00:00
sommerfeld
694b899b9c Quick and dirty trace mechanism to make it easier to look at how different
parallel make job distribution algorithms work in practice.
2000-12-29 23:11:08 +00:00
mycroft
b91d3efb9a Make the fds[] realloc O(n). Also make the rethreading a lot simpler. 2000-12-05 21:57:20 +00:00
sommerfeld
e65a50bf34 Boolean consistancy (use TRUE, not 1) 2000-12-05 17:07:01 +00:00
sommerfeld
e3f68e5130 Make clearfd() take O(1) time instead of O(N) by moving only the last
job in the arrays to the hole made by the now-dead job.  No
measureable performance difference for -j4, but the code is simpler
this way.
2000-12-05 15:28:55 +00:00
sommerfeld
b5e2403ec9 correct performance regression of recent change from select() to
poll() for parallel make:
 - Make the poll() code behave more like the select() code: sleep for
a bit waiting for output rather than busy-wait (eww).
 - Install a no-op SIGCHLD handler so that poll/select wake up early
(with -1/EINTR) when a child exits.
 - Change the default sleep time from 500ms to 5 seconds since we now
wake up promptly when a child exits.
2000-12-05 15:20:10 +00:00
christos
fd8f9c7b9f oops forgot to commit this one. 2000-12-04 20:13:29 +00:00
christos
8ba1720b96 mycroft did not like my O(n^2) lookup algorithm, so I made things much
more complicated.
2000-12-04 17:45:17 +00:00
christos
105cc20925 1. switch to using poll by default; can be overriden by compiling with
-DUSE_SELECT
2. make sure that we don't overrun our allocated fd_set if USE_SELECT is defined
2000-12-03 02:19:32 +00:00
christos
709d0cf4cb add noreturn attribute to the functions that need it. 2000-12-03 02:18:14 +00:00
christos
9a19da76d7 1. the tfile patch was incorrect. If we are doing multiple jobs, we
try to open tfile many times, passing bad strings to mkstemp
2. remove extra semicolon after the MESSAGE macro
3. more error checking
4. be more careful about setting things to NULL after freeing.
5. fix a comment that does not apply anymore
2000-12-03 01:27:03 +00:00
christos
6a9332cff1 use 6 X's instead of 5 for portability. 2000-12-03 01:18:15 +00:00
is
135600f947 More format string cleanup by sommerfeld. 2000-10-11 14:46:00 +00:00
christos
89d34c0b70 fixed comment U -> u 2000-09-05 21:08:35 +00:00
christos
73e15c3ea3 :u modifier a'la uniq(1) [from der Mouse] 2000-09-05 17:57:52 +00:00
christos
a9e7fd9028 don't attempt to free varNoError too. 2000-08-13 22:47:01 +00:00
christos
e8b09532bb PR/10714: SUNAGAWA Keiki: Add newer hpux support, but without removing the
old hpux support.
2000-08-03 15:53:24 +00:00
mycroft
d53a63dfff Use a lower threshold for rebuilding hash tables. 2000-06-11 07:54:32 +00:00
mycroft
796fb2ec8c Readd optimization last night. Problems earlier were partially due to the
arguments names on one function being swapped (by a previous author).

Do not do any duplicate suppression when a source list is created.  Instead:
* OP_MADE protects against trying to make the source multiple times.
* A new OP_MARK flag is introduced to suppress duplicates while expanding
  the .ALLSRC variable and .USE targets.
This turns the O(n^2) insertion into O(n) in most cases.

This is tested with a `make build' and some special test cases.
2000-06-11 07:39:52 +00:00
mycroft
83660a50d9 Back out last night's optimization for now. 2000-06-10 22:28:33 +00:00
mycroft
04af209e45 Don't use OP_MARK when attaching suffix transformations. 2000-06-10 22:24:21 +00:00
mycroft
edfd0106e2 Introduce an OP_MARK bit, and use it to suppress duplicates during .ALLSRC
and .USE expansion.  Also, remove some more Lst_Member() checks that are now
redundant.
2000-06-10 21:44:08 +00:00
mycroft
83f22c12ea Nuke an `optimization' that made source list creation O(n^2). This may cause
more memory to be used with stupid Makefiles, but it saves a fair amount of
time (~13% just for libc) with sane ones.
2000-06-10 13:48:48 +00:00
sjg
70fc6bfcaf no need for v->name-- on JUNK vars anymore 2000-06-10 05:54:29 +00:00
mycroft
b0d51d4783 For VAR_JUNK variables, defer freeing of the name string until the bottom of
Var_Parse(), as it may be used (strdup()ed) by some modifiers.
2000-06-10 04:51:00 +00:00
sjg
5d93c6ecfd Don't free v until after the last use. 2000-06-10 04:17:58 +00:00
mycroft
6bf47769cb Do some evil with VAR_KEEP to make it happier. This seems... wrong. 2000-06-06 09:00:49 +00:00
mycroft
39bf056eb6 Allow further patterns after a :D or :U, as in ODE make. (Copied some code
from VarGetPattern.  It should become more flexible instead.)
2000-06-06 08:44:57 +00:00
mycroft
123757193a Roll back my for-expansion changes. Doing this right is just too hard to be
worth it.
2000-06-06 04:56:52 +00:00
sjg
3d93bb57a6 Check_Cwd_av: Ensure that word after a '(', '{' etc is considered a command,
so that we spot the cd/chdir and don't put one in.
2000-06-06 03:00:11 +00:00
sjg
2293fdd17b Make ::= work again with the VAR_FOR context changes. 2000-06-01 09:39:02 +00:00
mycroft
ea218bb6e9 Create a `for' context, and substitute iteration variable from it using the
normal Var_Parse() path.  This allows :R, etc. to work on iteration variables.
2000-06-01 04:16:39 +00:00
sjg
cd8908a299 Rats! ${FOO:=bar} is a common usage of the SysV = modifier.
To avoid that, we now do ::[+?!]*= but the SysV = modifier can
conflict with any new modifier.  At there are currently no Makefiles
in our tree that use ${FOO::=bar}
2000-06-01 02:29:21 +00:00
sjg
339f702f71 Implemented a set of assignment modifiers. These solve obscure
problems such as using modifiers on .for loop iterators derived from
local variables (eg .TARGET).
Unless the variable already exists in a global context, these assignments are
local to the current context (this is usually what is wanted).
2000-05-30 02:32:21 +00:00
sjg
489a59f8c6 Expand variables that appear in a [No]Match pattern. Allows
[ x${DONE:M${.TARGET}} != x ] || blah
2000-05-14 15:14:41 +00:00
sjg
214b560694 allow .POSIX to define %POSIX as in FreeBSD 2000-05-11 08:22:40 +00:00
sjg
edfc5b4270 Expand variables in variable name passed to Var_Set and Var_Append.
This allows ${FOO}.bar=fubar etc to work.
This does not impact any Makefiles in the current tree but allows
some cool magic (which I need elsewhere).
2000-05-11 07:43:42 +00:00
sjg
0051977fda Pass ctxt along to VarLoopExpand so that local variables such as .TARGET
can be expanded.
2000-05-11 03:32:56 +00:00
sjg
82abb388a6 Revert to the original behaviour wrt sysIncPath, ie if sysIncPath
is an empty list, use DEFSYSPATH.
The current behaviour may have been useful when DEFSYSMK was an
absolute path (hasn't been the case since 1996), but right now
make -m /no/such/dir will fail to find sys.mk and die.
2000-05-10 07:49:35 +00:00
drochner
df45d3b6cf support OSF/1 2000-05-04 18:29:53 +00:00
drochner
6d10baf050 conditionalize prototypes for REMOTE support
(seems that REMOTE support is incomplete anyway)
2000-05-04 18:29:12 +00:00
drochner
e1710a32d6 make cleaner C for more picky compilers 2000-05-04 18:27:53 +00:00
sjg
5fe132c5cb Added the :U :D :L :P :! and :@ modifiers as used by ODE make.
These allow some very useful magic in the makefiles.
The comment in var.c describing their behaviour is mostly lifted
from ODE make, but the implementation of the modifiers themselves
is quite different (much simpler) due to divergence of our code base.
2000-04-29 12:18:52 +00:00
sjg
6f4163b60c Allow MAKESYSPATH in the environment to override the default syspath. 2000-04-29 12:15:16 +00:00
sjg
0828d668af Changes to make MAKEOBJDIRPREFIX useful.
Firstly, we ignore getenv("PWD") if MAKEOBJDIRPREFIX is set so that we always
get the same value for .CURDIR regardless of how make was invoked.

Second, when executing a command we check if it is ${.MAKE} or ${.MAKE:T}
without a preceeding chdir, if so we insert a chdir(${.CURDIR}) so that
the Makefile will be found by the child make.  Note that this behaviour is
dissabled if MAKEOBJDIRPREFIX is not set or if NOCHECKMAKECHDIR is set.
See the comments in main.c for more detail.

With these two changes, one can successfully build usr/src using MAKEOBJDIRPREFIX
allowing the src to be mounted from a CD-ROM.
2000-04-20 11:23:25 +00:00
simonb
ae62335eb5 Buf_GetAll() takes an int *, not a size_t *.
Build failure on alpha reported by Tim Rightnour on current-users.
2000-04-18 03:46:41 +00:00
christos
94c2d86134 Don't type && when you mean || (pointed out by David Holland) 2000-04-17 14:59:02 +00:00
christos
13a6d6acf1 PR/9898: David Holland: small glitch in var substitution for single letter
variables.
2000-04-16 23:35:16 +00:00
christos
a4760ab7d0 prefix errors with the program name. 2000-04-16 23:24:23 +00:00
christos
c097e3c5c2 Don't core-dump when the current working directory is not readable 2000-04-16 23:24:04 +00:00
christos
c407ec1982 PR/9899: David A. Holland: multi-variable .for constructs in make 2000-04-16 22:08:06 +00:00
simonb
d88dfea295 Don't declare 'extern opt*' getopt variables. 2000-04-14 06:11:07 +00:00
soren
89c5a767f8 Fix doubled 'the's. 2000-03-13 22:55:05 +00:00
sjg
90c80377e5 Fixed the oodate test to include the check of gn->cmtime == 0 without
breaking the original intent.

PR: 9503
2000-02-29 22:00:02 +00:00
sjg
14fcc9e86c Non-existent libs are always out of date.
This was not handled correctly on ELF where libs do not have T.O.C.

PR: 9393
Reviewed by: christos
2000-02-15 04:41:45 +00:00
sjg
448f091254 Mention MAKEOBJDIRPREFIX and explain how it or MAKEOBJDIR are used.
Also fixed a typo in the .SUFFIXES bit.
2000-02-08 12:56:28 +00:00
sjg
49984c2f37 Make chdir_verify_path() do variable expansion on path in case
someone wants to do freaky stuff with $MAKEOBJDIR.
Initialize the Var system and set .CURDIR, MACHINE and MACHINE_ARCH
before chdir_verify_path() is called.
2000-02-08 12:43:25 +00:00
sjg
f618973b5f You cannot meaningfully test if a non-existent file has a correct
archive header, so don't try - just believe gn->type & OP_LIB.
2000-01-31 13:21:20 +00:00
mycroft
4e558e01fa Don't apply suffix rules for .PHONY targets. (gmake doesn't do this either.) 2000-01-22 19:28:11 +00:00
mycroft
f5d7100e26 Nuke `extern int errno;' in code we compile with -Wstrict-prototypes. We get
the correct definition from errno.h.
2000-01-21 17:08:33 +00:00
christos
4cd25afac7 Create temporary files carefully, to avoid security problems. Idea borrowed
from the botched FreeBSD implementation...
2000-01-19 23:39:37 +00:00
wrstuden
f21e998aad Add a few little changes needed to get this to compile on IRIX 6.4. 2000-01-06 22:23:20 +00:00
mrg
f22d12ed49 back out rev 1.23 (don't stat PHONY targets). it broken the libcrypto
build by causing everything to be remade everytime.  this fixes PR#8419.
1999-11-25 22:34:16 +00:00
kristerw
e71aea426d Typos (from OpenBSD) 1999-11-19 22:29:24 +00:00
msaitoh
0fcbe067c6 s/ the the / the / 1999-10-08 20:13:42 +00:00
kim
6c6c0c0d5c Make this compile on Solaris... 1999-09-16 19:57:54 +00:00
mycroft
2500a4b975 Some minor cleanup of :: tests. 1999-09-16 00:54:14 +00:00
mycroft
ce14db1fcd Fix a bug in the previous. In the `compat' case, we don't actually use the
list of target nodes returned by Make_ExpandUse().  We have to search the
cohorts explicitly while iterating through the tree.  So, tweak CompatMake()
to do this.
1999-09-16 00:49:48 +00:00
sommerfeld
bcb141e5d0 Reuse the Hash_Entry `name' field to store the variable name when we
can (i.e., everything except environment variables, which aren't
stored in hash tables).

While we're here, inline the body of VarDelete into Var_Delete since
it's the only caller and it's just simpler that way when v->name can
share storage with the hash entry and may not need to be freed
separately.

Speeds up the infamous libc build benchhmark maybe 1% on PIII, 4% on
alpha pc164

Suggested by Perry Metzger.
1999-09-15 22:51:05 +00:00
mycroft
b12871c6cb Rework how :: dependencies are handled.
Build a list of `cohorts' as before, but do *not* link each one into all the
parent nodes; instead, copy the `cohort' lists into the stream of targets to
be built inside Make_ExpandUse().  Also do the attribute propagation as a
separate pass after parsing.
This eliminates several O(n^2) algorithms.
1999-09-15 10:47:37 +00:00
mycroft
c29ad80902 More cleanup code bites it. 1999-09-15 08:48:17 +00:00
mycroft
dd291116bc Don't bother iterating through all the data structures to free(3) everything
right before exiting.
(The code is still present, `#ifdef CLEANUP', in case someone needs it...)
1999-09-15 08:43:21 +00:00
mycroft
441a442e46 Fix another case where we stat(2)ed .PHONY targets. 1999-09-15 05:56:33 +00:00
mycroft
ff6341a190 Nuke Buf_{G,Ung}etByte{,s}(), since they aren't used, and make BufExpand do
power-of-2 allocation.
1999-09-15 04:16:31 +00:00
mycroft
c33b6eca55 Avoid using Lst_Member() in SuffExpandChildren(), by avoiding Lst_ForEach() and
passing in the LstNode of the child being inspected.  Shaves off another few %,
particularly when there are long child lists containing $ expansions (e.g. in
libc).
1999-09-15 03:59:44 +00:00
mycroft
d2ec8b0e26 Replace the linear variable list in the GNode with a hash table. Gives a
small (~10% on my machine) speedup building libc.
Changes by: perry (+ bug fix and minor change by me)
Reviewed by: mycroft sommerfeld
1999-09-15 02:56:34 +00:00
christos
ab01074993 Add :O var modifier, that sorts the words in a variable. 1999-09-12 00:17:50 +00:00
christos
7057287c54 PR/8259: Chris Demetriou: Fix stack overflow bugs exposed by the glibc-2.1.1
Makefile. Use snprintf everywhere.
1999-09-04 04:21:28 +00:00
simonb
dcb4cadef7 Don't need strftime() on Ultrix either. 1999-08-27 00:47:25 +00:00
aidan
58f27ba58c Added .PARSEDIR and .PARSEFILE variables to make(1). 1999-08-09 21:06:28 +00:00
ross
7886a593e3 Back out part of previous, only the parse.c mod was intended. 1999-08-04 16:44:07 +00:00
ross
0728723c31 Trivial speed hack. 1999-08-04 02:54:56 +00:00
hubertf
5674691260 Save the walls, use fly swatters instead of machine guns!
(s/sscanf/strtol/, per Christos)
1999-08-02 17:23:58 +00:00
hubertf
a38c426e1c Detect invalid arguments to -j and -L by using sscanf() instead of atoi().
Fixes PR 6743 by Assar Westerlund <assar@sics.se>
1999-08-02 15:23:11 +00:00
hubertf
d5df2197fb sprite.h is private to make, so #include it with "sprite.h",
not <sprite.h>.

Problem reported in PR 4381 bye Soren S. Jorvang <soren@t.dk>
1999-07-29 19:45:32 +00:00
christos
10e7b7f04d Fix extreme brokeness with job control that appeared when we set USE_PGRP. 1999-07-16 05:38:20 +00:00
thorpej
70b6975a7e Fix a typo. 1999-07-12 18:22:49 +00:00
thorpej
484fe86089 Correct an inverse initialization of a variable, which caused all .PATHs
to be treated as .DOTLAST.
1999-07-12 17:29:32 +00:00
thorpej
5a0addc0ef Add a mechanism for specifying that ${.CURDIR} will be searched last
in the presence of .PATH directives by specifying:

.PATH: .DOTLAST

This will be used to fixup the build system to work with both crypto-us
and crypto-intl sub-trees.

Make(1) changes by Christos Zoulas, after much badgering by me :-)
1999-07-11 02:06:57 +00:00
christos
80d9d7d175 Regular bourne shells don't have the -q option (from Chuck Cranor) 1999-07-06 14:02:56 +00:00
christos
516292d398 apply solaris fixes 1999-06-29 07:44:21 +00:00
christos
eee5bfa70d Revert previous change. I am a bonehead. 1999-06-06 21:16:23 +00:00
christos
9081585e9b remove accidentally left debugging code 1999-06-06 20:41:04 +00:00
christos
4d93254198 Allow junk variable to work in non dynamic contexts. Allows as to say things
like:
    .if defined(COPTS) && !empty(COPTS:M*-g*)
1999-06-06 20:24:02 +00:00
christos
f15f83610f Fix awful bug where:
V := $V foo
	V := $V bar

would report that variable V is recursive...
1999-06-02 18:47:11 +00:00
christos
94df9ca047 Define USE_PGRP so that we send signals to our job's process group instead
of only pid.
1999-05-03 12:01:14 +00:00
christos
130a3bae01 killpg(pgrp, sig) == kill(-pgrp, sig) in the sysv case. 1999-05-03 09:49:55 +00:00
gwr
4761a8c13b Uh... should have been ${MACHINE} not hard coded... Duh! 1999-04-03 04:50:16 +00:00
gwr
ae400a2e31 Define CC=gcc -O and add -DMACHINE=... 1999-04-03 04:39:10 +00:00
gwr
0a1b2f4b53 Make regex support conditional on NO_REGEX (was MAKE_BOOTSTRAP)
Solaris has a compatible regex, as do many others now...
1999-04-03 04:37:47 +00:00
sommerfe
1be2746ed5 report a sensible error if wait() fails. 1999-03-24 13:19:26 +00:00
christos
8001a619fc use emalloc() instead of malloc() 1999-03-19 16:11:02 +00:00
erh
fa45851f9b Add missing .El line. 1999-03-10 05:14:51 +00:00
ross
7f8e818918 Missing .El. 1999-03-09 03:19:28 +00:00
mycroft
a1c657fe56 Clean up SYNOPSIS formatting. 1999-03-07 11:29:58 +00:00
cjs
d5ce180dc0 When giving the -v option to /bin/sh, also give the new -q option so that
the execution of $ENV isn't printed with every job that's started.
1999-02-04 00:40:55 +00:00
christos
24eea87b54 Allow system path to be overriden in the Makefile 1998-12-19 17:26:12 +00:00
ross
3eb0afd457 Fix a bug that apparently prevented, since day 1, the .-include / .sinclude
feature from ever working. Also, fix the man page that incorrectly described
the syntax of the feature that didn't work.
1998-11-17 23:56:23 +00:00
christos
4f3cc30bcc This patch fixes the problem introduced in the previous commit where
parents would be get remade, even if children were not really updated
by the commands executed for them. It also makes all the children have
the real modification time set if possible, so it should fix some other
timing weirdnesses...

- collapse childMade and make fields into flags and convert them to bits
  CHILDMADE and REMAKE
- introduce FORCE flag that gets set in all the parents of a child that
  has no sources and does not exist.
- set oodate if the FORCE flag is set, and not if CHILDMADE
- centralize the RECHECK into Make_Recheck() and use this in make.c and compat.c
- use Make_TimeStamp for all child -> parent timestamp propagations
1998-11-11 19:37:06 +00:00
christos
7e91b1976d PR/6426: Jim Bernard: make sometimes does not make directories on top of
a union mount.

	eg.
	src: FORCE

	FORCE is a fake target that does not have sources. When FORCE is
	considered made it gets updated with the current timestamp. If the
	directory happens to have the same timestamp too, then it will not
	be made because it is considered to be up-to-date with respect to
	the child. This can happen because the time resolution is only in
	seconds. It is more likely to happen on a union filesystem where
	the timestamps take longer to update.

	The fix is to consider the parent unmade when children have been
	updated.
1998-11-11 11:25:43 +00:00
christos
889ce7db6e - full prototypes
- more conservative printf
- char -> unsigned char
1998-11-06 23:31:09 +00:00
itohy
6aeb72f23f Reduced memory leaks.
I found some more leaks, but are not in inside of iterations.
1998-11-01 03:07:33 +00:00
itohy
841c52934a If the target name is shorter than the suffix,
the previous garbage bytes may be read.
Example: "make n" --- target = n, suffix = .ln

Changing interface of SuffSuffIsSuffix() is required to fix this bug.
1998-11-01 03:05:03 +00:00
itohy
f748b52ef3 Avoid reading outside of allocated memory
on command execution if the output is empty.
1998-11-01 03:01:53 +00:00
christos
ff08129ca5 strftime is not needed for svr4 machines; also fix the prototype footprint. 1998-10-18 14:24:16 +00:00
christos
3b7c5b4ed8 Only define const and volatile when __STDC__ is not defined (for BOOTSTRAP) 1998-10-18 14:23:48 +00:00
wsanchez
65b6624a6d Include sys/types.h 1998-10-13 17:09:16 +00:00
wsanchez
8a6084908f Use __ARCHITECTURE__, if defined, as MACHINE_ARCH 1998-10-13 17:08:34 +00:00
christos
82ee767393 Fix conditional variable expression parsing (reported by cgd) 1998-09-18 20:35:11 +00:00
christos
1b24c735a6 PR/6162: Greg A. Woods: pmake does not add suffix rules if gnodes have children.
This is traditional make behavior (Solaris make does the same), but
	 GNU does not. Lets see what breaks.
1998-09-18 20:20:52 +00:00
christos
aed39ca72c PR/6174: ITOH Yasufumi: Purify bug and a compile error in utility code. 1998-09-18 20:15:36 +00:00
christos
8bd03e9aab - Add {.,}[s-]include for silent include file failures
- Make traditional include statement include more than one file if present
  on the line.

Keeping up with the other's :-)
1998-08-06 13:42:22 +00:00
christos
ea21627e65 Fix access to freed memory; pointed out by Todd Miller. 1998-07-04 21:53:11 +00:00
christos
076a184bb0 PR/5690: Wolfgang Rupprecht: deleting a suffix that has 0 source references
causes core-dump. Fix: when an unused suffix gets removed, delete
	 it from the suffix list.
1998-07-02 23:30:18 +00:00
tv
f0dcde8323 Make a MAKE_BOOTSTRAP case work on NetBSD, too, for cross-compile cases 1998-05-21 17:19:46 +00:00
cgd
b374e69f29 in Var_Parse(), set delim in a couple of other paths into cleanup 1998-04-03 04:07:15 +00:00
kleink
fb7502608a Need <time.h> for time() prototype. 1998-04-02 10:33:17 +00:00
christos
84e525a801 Add conditional variable evaluation from Alistair Crooks. 1998-04-01 14:18:10 +00:00
christos
d611392726 PR/5225: Jason Thorpe: make with -j 4 and subdirs core-dumps.
This revealed another long standing problem with pmake's port to bsd.
.MAKE was not set as the manual page states. Set it and remove another
typo in my last commit.
1998-03-28 22:29:04 +00:00
christos
f46f2d693e PR/5210: Hauke Fath: make core dumps with .SHELL
Unfortunately this revealed a deeper problem with the brk_string code.
To fix it:
	- remove sharing of the buffer between brk_string invocations
	- change the semantics of brk_string so that the argument array
	  starts with 0, and return the buffer where the strings are
	  stored
1998-03-26 19:20:36 +00:00
fair
78f41cb540 patch from PR#3573 to rename a variable "main" to "mainList" 1998-03-23 08:52:48 +00:00
hubertf
51dc9a9405 Fix typos from PR 5055 by NAKAJIMA Yoshihiro <nakayosh@kcn.or.jp>. 1998-02-24 18:34:31 +00:00
christos
79400c03dd Y2K fixes: use strftime(), and add a fake strftime() for systems that do
not have it.
1998-02-04 14:47:39 +00:00
thorpej
f04b8efed3 Change an exit() to _exit(), so that it's safe for vfork(). 1997-12-31 06:06:12 +00:00
lukem
8640f5d0af getopt returns -1 not EOF, use memmove instead of bcopy 1997-11-08 09:33:15 +00:00
lukem
8ba07ab0b3 use CPPFLAGS instead of CFLAGS 1997-10-24 09:00:17 +00:00
lukem
6d1c625f54 fix up .Nm usage 1997-10-19 05:05:24 +00:00
lukem
00c29d5afe don't define WARNS=1 here 1997-10-19 04:23:02 +00:00
mikel
d9c915fd1a add missing .Nm argument 1997-10-12 05:51:47 +00:00
mycroft
e96e918e60 Use bsd.subdir.mk as appropriate. 1997-10-11 09:34:07 +00:00
thorpej
75b410b331 If printing a u_long, use the %lu format. 1997-10-03 17:58:00 +00:00
enami
5a3584034e Make this compile on NetBSD/alpha; use %ld and cast to u_long to print
a variable of type size_t.
1997-10-03 16:06:26 +00:00
lukem
2ba9e97765 wrap #include <sys/cdefs.h>, __RCSID(...) stuff in #ifndef MAKE_BOOTSTRAP 1997-09-28 03:30:58 +00:00
christos
a004ae7f41 PR/4140: David A. Holland: use svr4 style archives for ELF environments 1997-09-26 13:29:05 +00:00
fair
7eaeaff5f2 fix some ints that should be "time_t" per PR#4139 1997-09-23 21:15:07 +00:00
christos
7b8cd5e6e3 Expand variables within variables correctly; eg.
foo.123=abc
bar=123
all:
	echo ${foo.${bar}}
1997-09-22 17:11:12 +00:00
kleink
66105c37fc Lseek(2) usage cleanup: the use of L_SET/L_INCR/L_XTND is deprecated,
use SEEK_SET/SEEK_CUR/SEEK_END instead.
1997-08-25 19:31:43 +00:00