Commit Graph

1013 Commits

Author SHA1 Message Date
Brad King 38ee28bfd5 Merge branch 'fix-function-missing-end' into release 2015-06-22 11:46:09 -04:00
Brad King 5d85fb4f40 Fix assertion failure on unmatched function or macro
The fix in commit v3.2.3~3^2 (Fix assertion failure on unmatched foreach
in function, 2015-05-18) broke handling of unmatched non-loop blocks
because it assumed all function blockers removed during error unwinding
were for loops, essentially switching the set of mishandled cases.

The purpose of the loop block push/pop operations is to define a scope
matching the lifetime of the loop function blockers.  Since our function
blockers already have the proper lifetime, simply move the push/pop
operations to their constructor/destructor.

Extend the RunCMake.Syntax test with a case covering this.
2015-06-22 11:41:51 -04:00
Brad King c12fc3573b Merge topic 'inject-state-snapshot'
3b880a07 cmLocalGenerator: Require a valid cmState::Snapshot in the ctor.
e12afe76 cmState: Host some state from the cmGlobalGenerator.
c7b79aa1 cmGlobalGenerator: Require a cmake instance in ctor.
01e1cd5c cmState: Move snapshot creation to the cmake instance.
2015-05-27 09:23:01 -04:00
Stephen Kelly 3b880a0741 cmLocalGenerator: Require a valid cmState::Snapshot in the ctor.
Refactor the local generator creation API to accept a
cmState::Snapshot.  Adjust MakeLocalGenerator to use the 'current'
snapshot in cases where there is no parent.  Create the snapshot
for subdirectories in cmMakefile::AddSubdirectory.

This means that snapshots are now created at the point of extending the tree,
as appropriate, and independently of the cmLocalGenerator and cmMakefile they
represent the state for.
2015-05-27 09:18:32 -04:00
Stephen Kelly f5b0a0fba4 cmMakefile: Don't pop the directory listfile off the stack.
Simplify the IssueMessage implementation.
2015-05-25 09:49:59 +02:00
Stephen Kelly e40fcb598d cmMakefile: Simplify convert condition.
The CallStack is checked above.
2015-05-25 09:21:56 +02:00
Stephen Kelly 8b4b9631f5 cmake: Add IssueMessage overload taking a single cmListFileContext.
Port appropriate clients to use it.
2015-05-22 01:21:35 +02:00
Brad King 3e3a09d1d3 Merge topic 'clean-up-CMAKE_COMMAND'
6fbd4cae Use cmSystemTools::GetCMakeCommand() to get path to cmake internally
2015-05-21 09:03:52 -04:00
Brad King 6fbd4cae0d Use cmSystemTools::GetCMakeCommand() to get path to cmake internally
This is much simpler than finding a way to lookup "CMAKE_COMMAND"
everywhere.
2015-05-20 11:20:42 -04:00
Stephen Kelly b9f9915516 cmMakefile: Remove VarUsageStack.
Store usage information in the cmDefintions value instead.  We already
pay for the memory as padding in the Def struct, so we might as well
use it.
2015-05-19 22:36:53 +02:00
Stephen Kelly 2b09d9f346 cmMakefile: Remove VarInitStack.
In cmMakefile::PushScope, a copy of the closure of keys initialized
in the parent scope is made.  In PopScope, essentially the same copy
is inserted back into the parent.  That means a lot of duplication
of strings and a lot of string comparisons.  None of it is needed,
because the cmDefinitions keys already provide a canonical
representation of what is initialized.

The removal of the separate container also makes the variable handling
code more easy to reason about in general.

Before this patch, configuring llvm uses 200 KiB for the VarInitStack.
Overall peak memory consumption goes from 35.5 MiB to 35.1 MiB.
2015-05-19 22:36:53 +02:00
Stephen Kelly 528d68021c cmMakefile: Use more suitable method name to log var usage. 2015-05-19 22:36:52 +02:00
Stephen Kelly f58c3774d1 cmMakefile: Mark definitions explicitly erased, even at top level.
Presumably the intention here is to attempt to optimize memory by not
storing what is not needed.  However, all keys need to be tracked
anyway to implement initialization tracking, and this special case
gets in the way of simplifying the implementation of that.

This doesn't change any observable effects because values set
to 0 are considered not to exist by the cmDefinitions API.
2015-05-19 22:36:52 +02:00
Stephen Kelly ea7b962be2 cmMakefile: Raise variable in scope explicitly when needed.
The Get method implicitly pulls a copy of all variables into a local scope. This
is not necessary.
2015-05-19 22:36:51 +02:00
Stephen Kelly c8cb66880c cmMakefile: Use early return to reduce nested code. 2015-05-19 22:36:51 +02:00
Stephen Kelly bdd1aa91ae cmMakefile: Don't use else after return. 2015-05-19 22:36:51 +02:00
Stephen Kelly c42f0e2b3e cmMakefile: Remove redundant conditions.
This container is never empty.
2015-05-19 22:36:51 +02:00
Stephen Kelly bb1e8c3adf cmMakefile: Remove Print() debugging facilities.
They don't print things that are important in the modern implementation.
2015-05-19 22:36:50 +02:00
Stephen Kelly 1363bff83a cmMakefile: Remove duplicate variable initialization. 2015-05-19 22:36:50 +02:00
Stephen Kelly 5b7ff35c4d cmMakefile: Don't expect the VarStack iterator to support size(). 2015-05-19 22:36:50 +02:00
Stephen Kelly 390bc3244f cmMakefile: Remove redundant condition.
As this is called in the constructor, the definition will never be already
set.
2015-05-19 22:36:49 +02:00
Stephen Kelly 8ab1cce704 cmMakefile: Rename method to something more appropriate.
Allow the name to be used for something more-suitable.
2015-05-19 22:36:49 +02:00
Stephen Kelly 2dd5d42f52 cmMakefile: Make the public ReadListFile method take one param.
Make the existing method a private overload. All external callers
invoke the method with only one argument.
2015-05-19 22:36:49 +02:00
Stephen Kelly f3e6a336f2 cmMakefile: Remove CurrentListFile member.
It is never read externally.  The CollapseFullPath removed in this commit
is a repeat of a similar call inside ReadListFile.
2015-05-19 22:36:48 +02:00
Stephen Kelly 6b9e647239 cmMakefile: Port CurrentListFile clients to GetDefinition.
There is no need to store this as a member variable.
2015-05-19 22:36:48 +02:00
Brad King 0cbc69b9ea Merge topic 'minor-cleanups'
61d52e6e cmListFileBacktrace: Hide the context-stack implementation detail.
a271f7f1 cmTarget: Simplify CMP0023 message loop.
f4300cd4 cmTarget: Simplify output computation.
65a42849 cmTarget: Store context in stack only if different.
9645cba3 cmListFileContext: Implement EqualityComparable.
52a8d19c cmTarget: Store only cmListFileContext for CMP0023 handling.
59ba1215 cmTarget: Remove needless iteration.
18f810a8 cmListFileContext: Sort by line before file.
e96b5d14 cmListFileContext: Implement LessThanComparable.
7eb0dfa0 cmMakefile: Use std::set::insert API to simplify CMP0054 handling.
f9785e0c cmMakefile: Simplify CMP0054 handling.
e17b5e42 cmMakefile: Add access to the top-level execution context.
1ec1bf9f if(): Test the effect of cmMakefileCall use in elseif() handling.
9b4aefad cmMakefile: Replace deques with vectors.
2015-05-19 11:09:36 -04:00
Brad King 93acb504c0 Merge topic 'clean-up-makefile-generators'
036372c4 Remove obsolete overrides of CreateLocalGenerator.
684e5cef cmGlobalGenerator: Host the MakeSilentFlag.
2047144f cmLocalGenerator: Remove unused IgnoreLibPrefix.
333c1fa8 cmGlobalUnixMakefileGenerator3: Host the UnixCD.
a97df5e1 cmGlobalUnixMakefileGenerator3: Host the PassMakeflags.
14f171c3 Remove method calls just repeating the default.
cf7f03e5 cmGlobalUnixMakefileGenerator3: Host the DefineWindowsNULL.
e9b134b9 cmGlobalUnixMakefileGenerator3: Host the include directive.
24613d8b cmLocalGenerator: Remove unused method.
b659d161 cmGlobalGenerator: Add NVI wrapper to create local generator.
2015-05-19 11:09:31 -04:00
Brad King 2d1d8af9b1 Merge topic 'clean-up-cmDefinitions'
f170985e cmDefinitions: Make the ClosureKeys method static.
98c5c903 cmDefinitions: Centralize knowledge of iterator type.
7872201b cmDefinitions: Remove internal MakeClosure method.
2015-05-19 11:09:28 -04:00
Brad King aa68f2e4c9 Merge topic 'fix-function-missing-endforeach'
3a656065 Fix assertion failure on unmatched foreach in function (#15572)
2015-05-19 11:09:21 -04:00
Stephen Kelly 61d52e6e77 cmListFileBacktrace: Hide the context-stack implementation detail.
The backtrace will soon not be implemented in terms of a stack of
cmListFileContext objects.  Keep the cmListFileContext in the API
for convenience for now.
2015-05-18 23:56:00 +02:00
Stephen Kelly e96b5d14f9 cmListFileContext: Implement LessThanComparable.
Move wrapping existing code from cmMakefile, and simplify the
implementation there.
2015-05-18 23:55:43 +02:00
Stephen Kelly 7eb0dfa062 cmMakefile: Use std::set::insert API to simplify CMP0054 handling. 2015-05-18 23:55:43 +02:00
Stephen Kelly f9785e0cb6 cmMakefile: Simplify CMP0054 handling. 2015-05-18 23:55:43 +02:00
Stephen Kelly e17b5e4262 cmMakefile: Add access to the top-level execution context.
This is cheaper than getting the whole backtrace, and the cmListFileBacktrace
will not always be composed of cmListFileContext objects.
2015-05-18 23:55:41 +02:00
Stephen Kelly 9b4aefad41 cmMakefile: Replace deques with vectors. 2015-05-18 21:25:48 +02:00
Brad King 3a65606591 Fix assertion failure on unmatched foreach in function (#15572)
The lexical scope counting added by commit v3.2.0-rc1~332^2~1 (Track
nested loop levels in CMake language with a stack of counters,
2014-11-18) forgot to account for scopes popped by error messages about
unclosed scopes.  Teach the error handler to pop the lexical scope it
reports as unclosed.  Re-order the lexical scope RAII object to be
inside the variable scope RAII object scope so that the lexical scope
is fully closed before we check assertions about variable scopes.

Extend the RunCMake.Syntax test with a case covering this.
2015-05-18 11:13:05 -04:00
Stephen Kelly f170985e7a cmDefinitions: Make the ClosureKeys method static.
For consistency with all other closure-related methods.
2015-05-17 16:50:18 +02:00
Stephen Kelly b659d161da cmGlobalGenerator: Add NVI wrapper to create local generator. 2015-05-16 05:18:25 +02:00
Stephen Kelly ce167b546d cmMakefile: Handle CMP0014 before configuring the generator. 2015-05-14 21:26:13 +02:00
Stephen Kelly 63255342c6 cmMakefile: Remove redundant variable set.
The variable is initialized by the constructor already.
2015-05-14 20:57:24 +02:00
Stephen Kelly 894961af16 cmMakefile: Use the state to determine the parent directory.
Do not depend on the local generator for that.
2015-05-14 20:57:21 +02:00
Stephen Kelly 76b598319f cmLocalGenerator: Initialize state before creating cmMakefile.
Access the state from the local generator in the cmMakefile.
2015-05-14 20:36:28 +02:00
Brad King 226df303f9 CTest: Stop telling 'make' to ignore errors with -i
Add policy CMP0061 to maintain compatibility for existing projects.
2015-05-12 09:06:49 -04:00
Brad King 2c5a1bff23 Merge topic 'refactor-cmPolicies'
013ada80 cmPolicies: Implement PolicyMap in terms of bitset.
be6664c2 cmPolicies: Implement abstraction for PolicyMap.
de211686 Port to static cmPolicies API.
13981f20 cmPolicies: Make all API static.
23e2bcc8 cmPolicies: Remove unused DefinePolicy method.
5641ba4f cmPolicies: Remove unused cmPolicy class.
3de54497 cmPolicies: Loop over all policies using enum constants.
387aff20 cmPolicies: Trivialize GetPolicyStatus method.
dbf680d6 cmPolicies: Use more-direct ID access.
8c204133 cmPolicies: Implement in terms of public API.
e3a8c029 cmPolicies: Make private method file-static.
cb765af0 cmPolicies: Implement short description access with XMacros.
5df267fa cmPolicies: Implement version check with XMacro.
2235cfeb cmPolicies: Implement id to version with XMacro.
05d84388 cmPolicies: Implement id to string conversion with XMacro.
6eaade8a cmPolicies: Introduce XMacro table for policy data.
...
2015-05-05 09:35:30 -04:00
Brad King 82a55ff916 Merge topic 'refactor-cmMakefile-constructor'
42142d4f cmMakefile: Inline Intialize method in constructor
f39f0c0a cmMakefile: Initialize SuppressWatches member before use
2015-05-05 09:35:23 -04:00
Stephen Kelly be6664c208 cmPolicies: Implement abstraction for PolicyMap.
Hide the detail that it is a std::map.
2015-05-04 22:32:21 +02:00
Stephen Kelly de21168612 Port to static cmPolicies API. 2015-05-04 22:32:20 +02:00
Brad King 0d167b3e60 Merge topic 'add-cmMakefile-GetGlobalGenerator'
a0836ed9 Port to cmMakefile::GetGlobalGenerator.
cbf143bb cmComputeTargetDepends: Use simpler global generator access.
040491fc cmComputeLinkDepends: Remove unused local generator.
0bb6dbe0 cmMakefile: Extract an accessor for the global generator.
e1bdf5f5 cmMakefile: Use GetCMakeInstance.
efcca935 cmMakefile: Simplify GetCMakeInstance implementation.
2015-05-04 11:02:23 -04:00
Brad King 42142d4fd2 cmMakefile: Inline Intialize method in constructor
Since commit 80909041 (cmMakefile: Disable copy constructor, 2015-04-18)
the only call to cmMakefile::Initialize is in one constructor.  Inline
it and drop the separate method.
2015-05-04 10:22:01 -04:00
Brad King f39f0c0aec cmMakefile: Initialize SuppressWatches member before use
In commit 86f3cd0f (cmMakefile: Require the localGenerator in the
constructor, 2015-04-27) we added use of GetDefinition to the
Initialize method.  Set SuppressWatches before calling this method
since GetDefinition checks it.
2015-05-04 10:22:01 -04:00