Change | User | Description | Committed |
---|---|---|---|
4044 | Matt Armstrong | Fix //guest/matt_armstrong/jam/bug/3/... (as well as 2/... and 1/...). Introduce a pa...ss *before* make0() that propagates INCLUDES relationships fully thruout the dependency graph. bug/3 was caused by make0 trying to do too much at once. You can't properly deal with cycles in the INCLUDES graph and correctly determine dependencies in one pass. We now have three passes through the dependency graph in make.c 1) make0bscan() - bind and scan all targets in the tree 2) make0includes() - gather all INCLUDES from sub-INCLUDES in a way that is safe from cycles in the INCLUDES graph. 3) make0() - fate determination TODO: verify correct bindtarget() use in make0bscan() and make0includes() « |
21 years ago |
4016 | Matt Armstrong | Split make.c into two phases -- make0bscan() and make0(). make0bscan() does binding and h...eader scanning, and make0() does fate determination. This two pass approach completely isolates fate determination from header scanning, and so eliminates problems where circular INCLUDE dependencies caused the old make0() to incorrectly determine the fate of targets (see //guest/matt_armstrong/jam/bug/3/...). « |
21 years ago |
4015 | Matt Armstrong | second thoughts... | 21 years ago |
4014 | Matt Armstrong | initial branch from mainline | 21 years ago |
3968 | Matt Armstrong | Fix //guest/matt_armstrong/jam/bug/1/... and //guest/matt_armstrong/jam/bug/2/... in one... go. jam2.5rc3 attempts to turn INCLUDES into DEPENDS by turning every INCLUDES into an implicit node in the dependency graph. The problem with this approach is that make.c and make1.c algorithms work only with acyclic graphs, and INCLUDES relationships are often cyclic. This branch backs out //public/jam/src/... changes 2614 and 3057 and merges in //guest/matt_armstrong/jam/fix/includes/... changes 2573, 2574 and 2575. The end result is that make.c now copies a target's INCLUDES to its DEPENDS list as it walks through the graph. The end result is that at the end of make.c, every target's DEPENDS list includes all its direct dependencies *and* all of the implicit dependencies that INCLUDES creates. This creates more nodes, but is immune to cycles in the INCLUDES chain. An alternative approach would be to change every use of t->depends to use a smart iterator. The iterator would generate a temporary list containing all of t->depends and all of associated INCLUDES. This list would be iterated over and disposed. I didn't take this approach because it was more complex, and I rather like the -dd debug output my patch generates (i.e. the "implicit" lines for DEPENDS and INCLUDES relationships that are implicitly created via INCLUDES). « |
21 years ago |
3967 | Matt Armstrong |
Integrate from //public/jam/src/... through change 3108. |
21 years ago |
3966 | Matt Armstrong | Ignore change 3057 from //public/jam/src/... | 21 years ago |
3965 | Matt Armstrong |
Integrate from //public/jam/src/... through change 3056. |
21 years ago |
3964 | Matt Armstrong | Integrate change 2614 from //public/jam/src/..., but ignore it. | 21 years ago |
3963 | Matt Armstrong |
Branch from //public/jam/src/... up to change 2613. |
21 years ago |
3951 | Matt Armstrong | Avoid an ambiguous "else" | 21 years ago |
3949 | Matt Armstrong | Fix bug //guest/matt_armstrong/jam/bug/1/... make1.c produces incorrect results with ci...rcular dependencies and the -j flag. This is fine, since circular dependencies indicate an error in a Jamfile somewhere. However, jam 2.5rc3 implicitly converts "INCLUDES" into an internal "DEPENDS" and so creates circular dependencies that are not bugs in the project's Jamfiles. See perforce public depot change 2614. One case where this causes files to be built out of order is //guest/matt_armstrong/jam/bug/1/... -- this is a distilled test case built from a real source tree. Usually this poses no problems, since INCLUDES is typically used for header files and those are rarely generated at build time. But systems that generate header files at build time are vulnerable to this bug. The fix implemented here is to make make1.c invulnerable to circular INCLUDES dependencies. The fix ensures that make1a() only processes only "real" targets (not the implicit internal INCLUDES dependencies). When it processes a target, it gathers up all the INCLUDES dependencies into a list and processes that list, instead of using recursion. « |
21 years ago |
3948 | Matt Armstrong | Initial branch to play around with bug //guest/matt_armstrong/jam/bug/1/... which shows u...p with jam 2.5rc3 (perforce public depot change 3108). « |
21 years ago |
3316 | Matt Armstrong | Fix mem leak. | 22 years ago |
3315 | Matt Armstrong | Update from mainline. | 22 years ago |
2618 | Matt Armstrong | initial branch to play around with -dc | 22 years ago |
2617 | Matt Armstrong | delete fixes incorporated upstream | 22 years ago |
2582 | Matt Armstrong | make1cmds() now ignores the `updated` actions modifier if the target is missing. Th...is way stable dependants get included when the target is being built from scratch. This is necessary because make0() no longer marks a target newer if the parent is missing. « |
22 years ago |
2581 | Matt Armstrong | initial branch | 22 years ago |
2575 | Matt Armstrong | simplify previous fixes by marking 'includes' and 'depends' and using the mark to test fo...r membership. « |
22 years ago |
2574 | Matt Armstrong | Improve the previous INCLUDES bug fix by having make0 check for duplicate targets before... doing implicit INCLUDES and DEPENDS propagation. This cuts the number of calls to targetentry() down to about 5k from 450k when jam builds itself. « |
22 years ago |
2573 | Matt Armstrong | Fix INCLUDES by copying the include list of each target's included file to itself. ... So this: INCLUDE B : A ; INCLUDE C : B ; implies: INCLUDE C : A ; Do then if you have: DEPENDS D : C ; Both these will be implied: DEPENDS D : B ; DEPENDS D : A ; (previously D would not depend on A). « |
22 years ago |
2571 | Matt Armstrong | initial branch | 22 years ago |
2570 | Matt Armstrong | delete a bunch of fixes that have been incorporated upstream | 22 years ago |
2545 | Matt Armstrong |
Don't require . to be in PATH to build jam. |
22 years ago |
2532 | Matt Armstrong |
Initial branch for "finally get jam to bootstrap without . in path" fix. |
22 years ago |