# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 4332 | Chris Comparini | Re-branched, this time getting everyone's versions of jam. | 21 years ago | |
#1 | 4329 | Chris Comparini | Initial setup as per public depot instructions. | 21 years ago | |
//guest/perforce_software/jam/src/make.c | |||||
#19 | 3057 | rmg | Fix mysterious rebuild problem: in an attempt to make 'jam -dc' output report heade...rs updates more accurately, internal (header collection) targets were being bound as T_BIND_PARENTS so that they could carry the timestamp of the actual source file. But that caused the fate of the internal node to be marked as T_FATE_NEEDTMP if anything they included was newer, and that easily happens among header files (something is always newer than something else). Now internal targets carry their parents time, but with T_BIND_UNBOUND, like other NOTFILE targets. Bug fix documented in RELNOTES. === computer:1666: Change 43415 by seiwald@play-seiwald on 2003/04/04 09:36:25 « |
22 years ago | |
#18 | 2848 | rmg | Fix 'jam -dc' output broken by 2614. Now the parent's timestamp is propagated to the ta...rgets marked T_FLAG_INTERNAL, so that -dc can see that a header file is newer than the file that includes it. Fix to unreleased bug. === computer:1666: Change 40499 by seiwald@play-seiwald on 2003/01/21 22:35:27 « |
22 years ago | |
#17 | 2614 | rmg | Fix to includes of includes not being considered, broken by 2499. Details taken from em...ail to jamming: The challenge is to make included includes appear as direct includes, so that they get considered. This used to work by recursion, because each TARGET node computed the summary of its includes -- the hfate and htime -- along with the summary of its dependents -- the fate and time. Alas, that previous arrangement confused make1() into treating headers as direct dependencies during the build phase. A.o | A.c -- A.h (Read depends down, includes across) (Failed build of A.h aborts build of A.c) The fix to the confused make1() problem was to consolidate the special handling of includes by having make0() tack onto a target's list of dependendies any of the target's dependents' includes. Unfortunately, this fix did not recurse: if the target's dependents' includes included other files, those files were not added to the target's dependencies. A.o | A.c -- A.h -- B.h -- C.h is rewritten to: A.o | \ A.c A.h -- B.h -- C.h (A.o depends on A.h, but not B.h or C.h. This is the current, broken state of jam 2.5rc1.) Matt's bugfix added some recursion at this point, by transitively appending includes' includes onto the includes chain. But, as he found out (and I did before), this can slow make0() down considerably, as typically header files all include each other and you wind up with lots of really long chains. A.o | A.c -- A.h -- B.h -- C.h is rewritten to: A.o | A.c -- A.h -- B.h -- C.h - B.h - C.h - C.h (Matt's fix: if the .h files include each other, the includes chains get very long.) The final(?) fix I have is relatively simple, but is an extra step: to have make0() replace a target's includes chain with a single pseudo-target whose dependencies are the original target's includes. That pseudo-target gets passed to make0(), which then recursively consolidates its fate and time. This then makes a target's includes fate and time available in a single target hanging off the original target. A.o | A.c -- A.h -- B.h -- C.h is rewritten to: A.o | \ A.c A.c-includes | \ A.h A.h-includes | \ B.h B.h-includes | C.h (New pseudo-target xxx-includes recursively consolidates fate and time of all included targets.) While this new scheme does add a node for every include file, it is linear, rather than exponential, and the time is pretty much neglible. User-visible bugfix not documented, because there is no place in RELNOTES for release-candidate fixes. Bumped patchlevel to 2.5rc2. « |
22 years ago | |
#16 | 2613 | rmg | Fix 'actions updated' broken by 2487. The idea was that dependents of NOTFILE targets (...like "all") shouldn't be T_FATE_NEWER (newer than their parents), but instead left as T_FATE_STABLE. That way the new 'jam -dc' (display "causes") option didn't report spurious "newer" targets. NOTFILE targets have a 0 timestamp, making their children always look newer, and the change was to suppress this. But instead of checking for NOTFILE parents, the code checked for missing parents. And that broke 'actions updated', because it relied on T_FATE_NEWER even if the parent was missing. Now it checks for p->binding != T_BIND_UNBOUND (the mark of a NOTFILE target), rather than p->binding == T_BIND_EXISTS (the mark of an existing real target). === computer:1666: Change 39756 by seiwald@play-seiwald on 2003/01/03 14:53:11 « |
22 years ago | |
#15 | 2529 | rmg | Fix "on target" variables during header scan, from Matt Armstrong. Setting target-speci...fic variables while under the influence of the target's target-specific variables caused the _global_ values to be modified. This happened both during header file scanning and with the "on target statement" syntax. The manifestation of this was if a file #included itself, HdrRule would accidentally set HDRRULE/HDRSCAN globally, and then all files (executables, etc) would get scanned for includes. While this borrows from Matt's fix, it is a slightly different implementation. User visible fix documented in RELNOTES. === computer:1666: Change 39095 by seiwald@play-seiwald on 2002/12/17 14:00:58 « |
22 years ago | |
#14 | 2528 | rmg | Rewrite comments in 39049, so that there are not two 4b's. No functional change. ===... computer:1666: Change 39076 by seiwald@play-seiwald on 2002/12/17 11:21:15 « |
22 years ago | |
#13 | 2527 | rmg | Fix to 38399 [Public Depot 2499], which broke 35018 [2484], which made make0() consider h...eaders when deciding whether to update a temporary source file. Now we deliberately scan the list of included headers to see if their update time is newer than the target's parents, which can cause that target to get built if it is a temp. Change to unreleased behavior. === computer:1666: Change 39049 by seiwald@play-seiwald on 2002/12/16 21:21:04 « |
22 years ago | |
#12 | 2499 | rmg | Fix 'includes' support so that included files aren't treated as direct dependencies durin...g the command execution phase. If an included file failed to build, make1() would bypass the including file. Now make0() appends each child's 'includes' onto its own 'depends' list, eliminating 'includes'-specific code in make0() and make1(). This not only fixes the bug, but removes some complexity as well. Bug fix documented in RELNOTES. === computer:1666: Change 38399 by seiwald@play-seiwald on 2002/12/03 16:00:40 « |
22 years ago | |
#11 | 2493 | rmg | Rewrite the past: update all jam's source with comments to reflect changes since about 2....3, very early 2001. Whitespace only change. === computer:1666: Change 37660 by seiwald@play-seiwald on 2002/11/06 22:41:35 Note: I regenerated jamgram.c on my linux 7.3 system prior to the submit, since patch was so unhappy trying to lay down the changes from Christopher's change. Presumably this is just due to different yacc/bison/whatever particulars on the system where Christopher made the changes originally. - rmg « |
22 years ago | |
#10 | 2491 | rmg | Some consting in jam to make it more compilable by C++ compilers. No functional change.... === computer:1666: Change 37433 by perforce@perforce on 2002/10/30 16:08:51 Recreational const-ing of jam, for compilers that don't allow "string" to be passed as a non-const char *. This included a few places where we were modifying what could possibly have been read-only storage, oddly enough. No functional change. === computer:1666: Change 37602 by seiwald@play-seiwald on 2002/11/04 17:25:40 « |
22 years ago | |
#9 | 2487 | rmg | Subtle jam adjustments in make0() to improve tracing output, and some new tracing output... (-dc: show 'causes'). First, make0() now takes a pointer p to the parent, rather than just the parent time ptime. This helps when setting the T_FATE_NEWER: it's only set if the target is newer than the parent _and the parent exists_. Otherwise, T_FATE_NEWER gets set for all dependenents of NOTFILE targets. When determining fate, don't make the final check to see if we need to downgrade T_FATE_NEWER to T_FATE_STABLE: fate is always T_FATE_NEWER or T_FATE_STABLE, so we might as well just set it to T_FATE_STABLE anyhow. New -dc output shows what targets are causing things to get rebuilt. User visible change documented in RELNOTES. === computer:1666: Change 36605 by seiwald@play-seiwald on 2002/09/28 18:26:32 « |
22 years ago | |
#8 | 2486 | rmg | Fooling around with jam's -d flag, to make it possible to specify useful display output w...ithout turning on loads of debugging crud. New -dd flag to display dependencies. Provisional changes not yet documented in jam.html. === computer:1666: Change 36374 by seiwald@play-seiwald on 2002/09/19 15:17:20 Jam -d change: the message "...using xxx..." now only shows up with -da, rather than in the default output. It made it hard to see what was happening when there were a lot of temp files lying around. User visible change documented in RELNOTES. === computer:1666: Change 36430 by seiwald@play-seiwald on 2002/09/23 11:34:12 Put jam -dx flags into 'jam -h'. Change to undocumented behavior (jam -h's output). === computer:1666: Change 36551 by seiwald@play-seiwald on 2002/09/26 14:39:54 Document jam's new -d debug flags. === computer:1666: Change 37367 by seiwald@waffle-cyg-seiwald on 2002/10/28 16:03:46 jam -n now implies -dax, just as the old jam -n implied -d2. Change to unreleased functionality. === computer:1666: Change 37550 by seiwald@waffle-cyg-seiwald on 2002/11/03 23:12:15 « |
22 years ago | |
#7 | 2484 | rmg | Rework make0() to consider headers when deciding whether to update a temporary source fil...e. This makes it possible to have generated, temporary source files that must be regened because an included header has been updated. === computer:1666: Change 35018 by seiwald@play-seiwald on 2002/07/17 10:41:35 Followon to 35018: actually update a "needtmp" target (duh). === computer:1666: Change 35023 by seiwald@play-seiwald on 2002/07/17 11:10:16 Fix to 35018, which handled out-of-date header files built from temporary sources. Unfortunately, the change made circular header dependencies (which are legion) get reported. Now the circular dependency reporting is done in the call to make0() rather than at the beginning of make0(), and step 3b (the header recursion) simply skips that check. Change to unreleased behavior. === computer:1666: Change 36247 by seiwald@waffle-cyg-seiwald on 2002/09/16 16:15:10 « |
22 years ago | |
#6 | 1553 | Perforce staff | New -g flag to reorder targets so that they are built according to their sources update t...imes, rather than simply the order in which they appear in the Jamfiles. This flag is experimental: it isn't clear if sorting on target time is adequate to ensure newest sources are seen first, and it isn't clear that this is actually useful at all. Undocumented except for a note in RELNOTES. « |
23 years ago | |
#5 | 1545 | Perforce staff | Handle TEMPORARY targets with multiple parents better (but not perfectly). Previously,... a TEMPORARY target that had no timestamp of its own (t->time == 0, due to the target being missing) took on its parent's timestamp ptime. The target's timestamp is used for four things: 1. It is passed as the target's timestamp to its children, in case they are also TEMPORARY targets (and thus need their parent's timestamp). 2. It is compared against the target's children's timestamps, to see if the target is out of date. 3. It is compared against the target's parent time, to see if the target is newer than its parent (for 'actions updated'). 4. It is saved as the target's timestamp, for when the target's parents need to see if they are out of date. The problem was with (4) and multiple parents: the first parent's timestamp would become the target's, which could then inadvertantly outdate another parent older than the first but otherwise up-to-date. With this change a missing TEMPORARY target is left with a zero timestamp, and the four above cases are modified for T_BIND_PARENT targets as such: 1. The parent's timestamp is passed directly to the target's children. 2. The parent's timestamp is compared directly against the target's children's timestamps. 3. The parent's timestamp is no longer compared against the target's own, as it could never be older. 4. The target's timestamp remains zero (or the newest of the target's children's), so as not to outdate other parents. Oddly enough, this change mostly just removes the setting of 't->time = ptime' (leaving t->time zero), and adds only a little extra logic to use ptime directly when needed. It also removes the 'pbinding' parameter to make0(), as its only use (to indicate if the parent was missing) can better be divined from !ptime. Perfection, as they say, isn't achieved when there is nothing more to add, but nothing more to take away. We'll see if I removed enough this time. Bug fix documented in RELNOTES. « |
23 years ago | |
#4 | 556 | Perforce staff | Patch release jam 2.3.2: reverse NOCARE change. NOCARE once again applies to targ...ets with source and/or actions, so that buildable header files get built. « |
24 years ago | |
#3 | 486 | Perforce staff | Jam 2.3. See RELNOTES for a list of changes from 2.2.x. Just about every source... file was touched when jam got ANSI-fied. « |
24 years ago | |
#2 | 214 | Perforce staff | Peter Glasscock's NOUPDATE fix, so that a missing dependency doesn't force the update of... a NOUPDATE target. NOUPDATE targets should only be updated if they don't exist. « |
26 years ago | |
#1 | 2 | laura | Add Jam/MR 2.2 source | 27 years ago |