summaryrefslogtreecommitdiffstats
path: root/Source/cmMakefile.cxx
Commit message (Collapse)AuthorAgeFilesLines
* Merge topic 'cached-regex-clear-fixed'Brad King2014-12-041-0/+58
|\ | | | | | | | | | | ceecd790 cmMakefile: store the number of last matches in a CMake var 7878d061 test: add a test for clearing regex results
| * cmMakefile: store the number of last matches in a CMake varBen Boeckel2014-12-031-0/+58
| | | | | | | | | | | | | | | | | | With PushScope and PopScope, keeping track of another bit of data for each scope isn't easy. Instead, store it as another CMake variable so it gets implicitly tracked along with everything else. This works in a revert of commit 7d674b5f0b28a610333644d417c2e8cb796cc9e4.
* | file: Add LOCK subcommand to do file and directory lockingRuslan Baratov2014-12-031-0/+10
|/ | | | | | | | | Provide options to fail without blocking or to block up to a timeout. Provide options to specify the scope containing the lock so it can be released automatically at the end of a function, file, or process. Extend the RunCMake.file test with cases covering the file(LOCK) command usage and error cases.
* Merge branch 'revert-cached-regex-clear' into ↵Brad King2014-11-261-47/+0
|\ | | | | | | | | | | revert-cached-regex-clear-for-master Resolve conflict in Source/cmMakefile.h by integrating both changes.
| * Revert "ClearMatches: Only clear matches which were actually set" (#15261)Ben Boeckel2014-11-261-47/+0
| | | | | | | | | | | | | | | | | | | | | | This reverts commit v3.1.0-rc1~557^2~2 (ClearMatches: Only clear matches which were actually set, 2014-03-12). The optimization did not track the match count in the same scope as the variables, allowing possible inconsistency. Resolve conflicts in Source/cmIfCommand.cxx, Source/cmMakefile.cxx, and Source/cmMakefile.h by moving the changes to the new location of the code involved.
| * Merge branch 'revert-definition-map-lookup' into releasev3.1.0-rc1Brad King2014-10-241-1/+1
| |\
* | | Track nested loop levels in CMake language with a stack of countersGregor Jasny2014-11-251-0/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It gets incremented while entering a loop block (e.g. foreach or while) and gets decremented when leaving the block. Because scope borders for example at function borders must be taken into account the counter is put into a stack. With every new scope an empty counter is pushed on the stack, when leaving the scope the original value is restored. This will allow easy querying if the break command is properly nested within a loop scope. Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
* | | Add an option for explicit BYPRODUCTS of custom commands (#14963)Brad King2014-11-141-8/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A common idiom in CMake-based build systems is to have custom commands that generate files not listed explicitly as outputs so that these files do not have to be newer than the inputs. The file modification times of such "byproducts" are updated only when their content changes. Then other build rules can depend on the byproducts explicitly so that their dependents rebuild when the content of the original byproducts really does change. This "undeclared byproduct" approach is necessary for Makefile, VS, and Xcode build tools because if a byproduct were listed as an output of a rule then the rule would always rerun when the input is newer than the byproduct but the byproduct may never be updated. Ninja solves this problem by offering a 'restat' feature to check whether an output was really modified after running a rule and tracking the fact that it is up to date separately from its timestamp. However, Ninja also stats all dependencies up front and will only restat files that are listed as outputs of rules with the 'restat' option enabled. Therefore an undeclared byproduct that does not exist at the start of the build will be considered missing and the build will fail even if other dependencies would cause the byproduct to be available before its dependents build. CMake works around this limitation by adding 'phony' build rules for custom command dependencies in the build tree that do not have any explicit specification of what produces them. This is not optimal because it prevents Ninja from reporting an error when an input to a rule really is missing. A better approach is to allow projects to explicitly specify the byproducts of their custom commands so that no phony rules are needed for them. In order to work with the non-Ninja generators, the byproducts must be known separately from the outputs. Add a new "BYPRODUCTS" option to the add_custom_command and add_custom_target commands to specify byproducts explicitly. Teach the Ninja generator to specify byproducts as outputs of the custom commands. In the case of POST_BUILD, PRE_LINK, and PRE_BUILD events on targets that link, the byproducts must be specified as outputs of the link rule that runs the commands. Activate 'restat' for such rules so that Ninja knows it needs to check the byproducts, but not for link rules that have no byproducts.
* | | Add USES_TERMINAL option for custom commandsPeter Collingbourne2014-11-141-6/+13
| | | | | | | | | | | | | | | | | | Teach the add_custom_command and add_custom_target commands a new USES_TERMINAL option. Use it to tell the generator to give the command direct access to the terminal if possible.
* | | Merge topic 'revert-definition-map-lookup'Brad King2014-10-271-1/+1
|\ \ \ | | |/ | |/| | | | | | | | | | | | | | | | d1b62185 Merge branch 'parent-scope-tests' into variable-pull-failure 5f414cef Revert "cmDefinitions: Don't store parent lookups" e0c0b1ac test: add a test for PARENT_SCOPE with multiple scopes 064c415d test: add test for PARENT_SCOPE behavior
| * | Revert "cmDefinitions: Don't store parent lookups"Ben Boeckel2014-10-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 5abfde6cb8a1ae0b2825797eab6c2e9842eb7c49. The behaviors associated with implicit pulldown on variable lookup seriously conflict with the optimizations made in these commits. Basically, since values were copied upon variable lookup, not just on PARENT_SCOPE, coupled with PARENT_SCOPE's behavior based on whether the variable is in the current scope or not causes serious problems with not storing a value for every variable at every scope. The commit changed behavior of the following example, among other cases: function(test_set) set(blah "value2") message("before PARENT_SCOPE blah=${blah}") set(blah ${blah} PARENT_SCOPE) message("after PARENT_SCOPE blah=${blah}") endfunction() set(blah value1) test_set() message("in parent scope, blah=${blah}") Reported-by: Alex Merry <alex.merry@kde.org> Reported-by: Ben Cooksley <bcooksley@kde.org>
* | | strings: Remove redundant calls to std::string::c_str()Nils Gladitz2014-10-151-14/+14
| |/ |/| | | | | | | Replacements were detected and performed by the clang tool remove-cstr-calls on a linux build.
* | Merge topic 'if-sanity'Brad King2014-09-151-0/+61
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 858d5a0b Fix if() checks of CMAKE_SYSTEM_NAME on Cygwin e177e7af FPHSA: Avoid if() dereferencing of quoted variable 425acc52 cmcurl: Use if(DEFINED) to simplify conditions cede5cbd libarchive: Avoid depending on if() to dereference a quoted variable 2d97178b FindGTK2: Avoid depending on if() to dereference a quoted variable 0b12815d Modules/Test*.cmake: Use if(DEFINED) to simplify conditions 188a1f23 If: Introduce policy CMP0054 - don't dereference quoted variables in if() b900c1cc If: Extract cmConditionEvaluator from if() implementation
| * | If: Introduce policy CMP0054 - don't dereference quoted variables in if()Nils Gladitz2014-09-111-0/+61
| | |
* | | CMake: Add CMAKE_GENERATOR_PLATFORM optionBrad King2014-09-051-0/+1
|/ / | | | | | | | | | | | | | | | | | | | | Reject the option by default. It will be implemented on a per-generator basis. Pass the setting into try_compile project generation. Add cache entry CMAKE_GENERATOR_PLATFORM and associated variable documentation to hold the value persistently. Add a RunCMake.GeneratorPlatform test to cover basic use cases for the option. Verify that CMAKE_GENERATOR_PLATFORM is empty by default, and that it is rejected when the generator does not support a user setting.
* | cmGlobalGenerator: Take Build output argument by referenceBrad King2014-07-311-1/+1
| | | | | | | | | | | | No call sites pass NULL to the output argument, so take it by reference to avoid the if(output) conditions. Propagate the change through the TryCompile APIs that call it.
* | cmMakefile: fix __CMAKE_RULE property settingBen Boeckel2014-07-141-1/+1
| | | | | | | | It got put into the condition by mistake.
* | cmMakefile: Defer dependency calculationsBen Boeckel2014-07-081-7/+7
| |
* | cmMakefile: Avoid excess source filesBen Boeckel2014-07-081-23/+26
| | | | | | | | | | When there are no commands, a main_dependency is not required and when there are also no dependencies, nothing is required.
* | cmMakefile: Add a CreateSource methodBen Boeckel2014-07-081-13/+21
|/ | | | | The GetOrCreateSource searches the source file listing again, but some callers know that it already didn't exist.
* cmDefinitions: Don't store parent lookupsBen Boeckel2014-06-091-1/+1
| | | | | When looking up scopes, it is faster to not store the lookup locally to keep the maps smaller and avoid extra allocations and rebalancing.
* backtrace: Convert to local paths in IssueMessageBen Boeckel2014-06-051-13/+10
| | | | | This is the only place we care show the FilePath to the user, so defer the expensive relative path calculation until here.
* cmMakefile: return a backtraceBen Boeckel2014-06-051-21/+11
| | | | | This allows backtraces to be fully controlled by the makefile rather than externally (and makes changing how they are manipulated easier).
* Merge topic 'cxx14-features'Brad King2014-05-291-5/+28
|\ | | | | | | | | dd043c3f Features: Add support for C++14 features.
| * Features: Add support for C++14 features.Stephen Kelly2014-05-221-5/+28
| | | | | | | | Record the features implemented by GNU 4.9 and Clang 3.4.
* | Merge topic 'dev/CMP0053-variable_watch'Brad King2014-05-271-1/+7
|\ \ | | | | | | | | | | | | 9ba91463 tests: test CMP0053 in WARN mode when watching variables
| * | tests: test CMP0053 in WARN mode when watching variablesBen Boeckel2014-05-221-1/+7
| |/ | | | | | | | | | | | | When CMP0053 is in WARN mode, variables get expanded twice, leaking the fact that the string was expanded twice and changing behavior. Instead, suppress variable watches when running the expansion to trigger the CMP0053 warning.
* | Merge topic 'variable_watch-no-allowed-access'Brad King2014-05-271-12/+1
|\ \ | |/ |/| | | | | d8498003 variable_watch: Remove undocumented and redundant access type
| * variable_watch: Remove undocumented and redundant access typeBen Boeckel2014-05-221-12/+1
| | | | | | | | | | | | The ALLOWED_UNKNOWN_VARIABLE_READ_ACCESS access type was switched on an undocumented variable and its lookup caused an unnecessary performance impact. Remove it.
* | Features: Add COMPILE_FEATURES generator expression.Stephen Kelly2014-05-211-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | Allow setting build properties based on the features available for a target. The availability of features is determined at generate-time by evaluating the link implementation. Ensure that the <LANG>_STANDARD determined while evaluating COMPILE_FEATURES in the link implementation is not lower than that provided by the INTERFACE of the link implementation. This is similar to handling of transitive properties such as POSITION_INDEPENDENT_CODE.
* | cmMakefile: Add methods for checking availability of a feature.Stephen Kelly2014-05-201-0/+112
| |
* | cmMakefile: Extract CheckNeeded{C,Cxx}Language methods.Stephen Kelly2014-05-201-12/+29
| |
* | cmMakefile: Extract CompileFeaturesAvailable method.Stephen Kelly2014-05-201-26/+38
| |
* | cmMakefile: Extract CompileFeatureKnown method.Stephen Kelly2014-05-201-29/+49
| |
* | Features: Extend concept to C language.Stephen Kelly2014-05-141-2/+114
|/ | | | | | | | | | | Add properties and variables corresponding to CXX equivalents. Add features for c_function_prototypes (C90), c_restrict (C99), c_variadic_macros (C99) and c_static_assert (C11). This feature set can be extended later. Add a <PREFIX>_RESTRICT symbol define to WriteCompilerDetectionHeader to conditionally represent the c_restrict feature.
* Makefile: Undef FEATURE_STRING iteration define after use.Stephen Kelly2014-05-101-0/+1
|
* EVIS: Reimplement using custom parsing codeBen Boeckel2014-05-081-16/+445
| | | | | | | | | | | | | | | | | | | | | | Introduce a new implementation of ExpandVariablesInString and select between the old and new implementations based on policy CMP0053. Instead of cmCommandArgumentParserHelper, use a custom parser with our own stack. This is much faster and works well for our simple grammar. The new behavior of CMP0053 should expand @VAR@ syntax only in certain contexts. All existing EVIS callers use "replaceAt == true" so hard-code our call to the old implementation. Update the signature to default to "replaceAt == false" and pass "replaceAt == true" explicitly in the call sites for configure_file and string(CONFIGURE). Testing the configure (no generate) step with ParaView shows ~20% performance improvement. In terms of complete configure/generate steps, further testing with ParaView shows a 20% performance improvement over 2.8.12.2 with Unix Makefiles and minimal with Ninja. Ninja is less because it generate step is the expensive part (future work will address this) by a long shot and these changes help the configure step for the most part.
* Merge topic 'minor-cleanups'Brad King2014-05-081-2/+2
|\ | | | | | | | | | | | | 47795421 Fix whitespace in docs. aa283b6b Features: Fix test for GNU 4.8.1. bbfd4cd4 Features: Include the language of the compiler in error messages.
| * Features: Include the language of the compiler in error messages.Stephen Kelly2014-05-071-2/+2
| |
* | Merge topic 'dev/regex-variables'Brad King2014-05-071-0/+49
|\ \ | | | | | | | | | | | | | | | | | | 3f517522 StoreMatches: Minor cleanups ef62fbad ClearMatches: Store match variable names statically f718b30a ClearMatches: Only clear matches which were actually set
| * | StoreMatches: Minor cleanupsBen Boeckel2014-04-291-3/+3
| | |
| * | ClearMatches: Store match variable names staticallyBen Boeckel2014-04-291-11/+20
| | | | | | | | | | | | | | | Constructing the names and then turning them into a std::string is non-negligible in performance testing.
| * | ClearMatches: Only clear matches which were actually setBen Boeckel2014-04-291-0/+40
| | | | | | | | | | | | | | | | | | | | | ClearMatches was clearing many variables which were never set in the first place. Instead, store how many matches were made last time and only clear those. It is moved to the cmMakefile class since it is a common utility used by multiple commands.
* | | Merge topic 'dev/hashmap-for-targets'Brad King2014-05-071-3/+2
|\ \ \ | |_|/ |/| | | | | | | | | | | 325599ca cmGlobalGenerator: Store targets in hash maps ac4106c6 cmMakefile: Use a hashmap for imported targets
| * | cmMakefile: Use a hashmap for imported targetsBen Boeckel2014-05-071-3/+2
| |/
* | Features: Make CMAKE_CXX_KNOWN_FEATURES a property.Stephen Kelly2014-05-021-54/+0
| | | | | | | | | | As a 'built-in' variable it imposes a cost on all variable lookups and it is expected to be rarely used.
* | Merge topic 'cxx98-features'Brad King2014-04-301-0/+21
|\ \ | |/ |/| | | | | a36b957f Features: Add cxx_template_template_parameters.
| * Features: Add cxx_template_template_parameters.Stephen Kelly2014-04-161-0/+21
| | | | | | | | | | Extend the existing feature infrastructure as needed to support both C++11 and C++98 features.
* | Features: FATAL_ERROR on compilers with no recorded features.Stephen Kelly2014-04-171-2/+22
|/ | | | | | Users of the new target_compile_features command are expected to check the existence of the CMAKE_CXX_COMPILE_FEATURES variable before attempting to use it to require features.
* Features: Add cxx_defaulted_move_initializers.Stephen Kelly2014-04-081-0/+1
|