summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorTarget.cxx
Commit message (Collapse)AuthorAgeFilesLines
* cmTarget: Add all sources traced from custom commands at once.Stephen Kelly2014-04-091-2/+5
| | | | | | | | | | | | | | | | The AddSource method accepts one file and tries to avoiding adding it to the sources-list of the target if it already exists. This involves creating many cmSourceFileLocation objects for matching on existing files, which is an expensive operation. Avoid the searching algorithm by appending the new sources as one group. Generate-time processing of source files will ensure uniqueness. Add a new AddTracedSources for this purpose. The existing AddSources method must process the input for policy CMP0049, but as these source filenames come from cmSourceFile::GetFullPath(), we can forego that extra processing.
* cmGeneratorTarget: Trace cmSourceFile objects instead of strings.Stephen Kelly2014-04-061-16/+15
| | | | | | | | This reverses the decision in commit d38423ec (cmTarget: Add a method to obtain list of filenames for sources., 2014-03-17). The cmSourceFile based API is preferred because that avoids creation of many cmSourceFileLocation objects for matching strings, and the result is cached by cmTarget.
* cmTarget: Cache the cmSourceFiles in GetSourceFiles.Stephen Kelly2014-04-061-9/+9
| | | | | | Avoid calling GetSourceFiles with the same result container multiple times when tracing target dependencies. The result from the previous configuration is cached and used later otherwise.
* cmTarget: Make the source files depend on the config.Stephen Kelly2014-04-021-19/+52
| | | | | | | | | | | | | | | | | Disallow the use of config-specific source files with the Visual Studio and Xcode generators. They don't have any way to represent the condition currently. Use the same common-config API in cmQtAutoGenerators. While it accepts config-specific files, it doesn't have to support multiple configurations yet. Loop over the configs in cmTargetTraceDependencies and cmGlobalGenerator::WriteSummary and consume all source files. Loop over the configs in cmComputeTargetDepends and compute the object library dependencies for each config.
* cmGeneratorTarget: Don't add computed sources to the target.Stephen Kelly2014-04-021-1/+5
| | | | | | | | | | | | | | | When config-specifig generator expressions are supported, a target may have SOURCES: src1.cpp $<$<CONFIG:Debug>:src2.cpp> $<$<CONFIG:Release>:src3.cpp> and computation in cmTargetTraceDependencies would add each of the src2.cpp and src3.cpp sources back to the target without a config-guard. That would make the sources be used later when generating the buildsystem, regardless of the configuration. Avoid calling AddSource on the target with the result of the GetSourceFiles call.
* cmGeneratorTarget: Compute target objects on demandStephen Kelly2014-04-021-6/+25
| | | | | | | | | | | | | | | | | | | | | Add a ComputeObjectMapping method to compute the object names. It takes mapping to populate as an out-parameter so that it can be extended in the future with parameters relevant to generator expression evaluation. Remove the supporting cmGeneratorTarget::AddObject method. It is no longer needed as the container member is populated directly. The ComputeObjectMapping method is called whenever objects are requested from the cmGeneratorTarget. Because the Xcode generator makes no such request, explicitly invoke the method from that generator so that the logic of checking for bad sources in object libraries is executed. In a follow-up, the UseObjectLibraries usage may be replaced by a true generator expression evaluator for TARGET_OBJECTS. That will require generators to use cmGeneratorTarget::GetExternalObjects which is not currently the case for Xcode and VS generators.
* cmGeneratorTarget: Compute consumed object libraries on demand.Stephen Kelly2014-04-021-53/+19
| | | | | | | Remove up-front object library computation from cmGlobalGenerator. Adjust tests for message coming from the generator expression evaluation.
* cmComputeTargetDepends: Track object library depends.Stephen Kelly2014-04-021-1/+0
| | | | Relieve cmGeneratorTarget of that responsibility.
* cmTarget: Add a method to obtain list of filenames for sources.Stephen Kelly2014-03-311-12/+12
|
* add_custom_command: Evaluate generator expressions in DEPENDSStephen Kelly2014-03-201-5/+34
| | | | | | | Rely on evaluation in cmCustomCommandGenerator for the generators. When tracing target dependencies, depend on the union of dependencies for all configurations.
* cmGeneratorTarget: Don't store ObjectSources for object libraries.Stephen Kelly2014-03-151-6/+4
| | | | Compute them on demand instead.
* cmGeneratorTarget: Constify cmSourceFile* in containers.Stephen Kelly2014-03-131-10/+17
| | | | | Some of them will be used with other APIs which require value_type to be cmSourceFile const*.
* cmGeneratorTarget: Make GetSourceDepends const.Stephen Kelly2014-03-131-1/+1
|
* cmGeneratorTarget: Constify the AddExplicitObjectName API.Stephen Kelly2014-03-131-1/+1
| | | | The storage is already const.
* cmGeneratorTarget: Constify the AddObject API.Stephen Kelly2014-03-131-1/+2
| | | | The storage is already const.
* Remove some c_str() calls.Stephen Kelly2014-03-111-8/+8
| | | | | | Use the clang RemoveCStrCalls tool to automatically migrate the code. This was only run on linux, so does not have any positive or negative effect on other platforms.
* stringapi: Pass configuration names as stringsBen Boeckel2014-03-081-14/+16
|
* cmTarget: Refactor GetLocation APIBrad King2014-03-081-1/+1
| | | | | | | | | When given a non-NULL configuration the GetLocation returned the location for the given configuration. When given a NULL configuration the GetLocation method returned a location with the build-system placeholder for the configuration name. Split the latter use case out into a separate GetLocationForBuild method and update call sites accordingly.
* strings: Remove cmStdString referencesBen Boeckel2014-03-081-4/+4
| | | | | | | | | | | Casts from std::string -> cmStdString were high on the list of things taking up time. Avoid such implicit casts across function calls by just using std::string everywhere. The comment that the symbol name is too long is no longer relevant since modern debuggers alias the templates anyways and the size is a non-issue since the underlying methods are generated since it's inherited.
* stringapi: Use strings in target nameBen Boeckel2014-03-081-2/+2
|
* stringapi: Use strings for the languagesBen Boeckel2014-03-081-1/+1
|
* stringapi: Use strings for property namesBen Boeckel2014-03-081-2/+2
| | | | Property names are always generated by CMake and should never be NULL.
* Handle Mac OSX source flags for individual files lazily.Stephen Kelly2014-02-241-26/+17
| | | | | The actual list of files will become config dependent in a follow-up commit.
* cmGeneratorTarget: Classify sources on demand, not up front.Stephen Kelly2014-02-241-114/+235
| | | | | | | | | | Implement a Visitor to hold the sequence of source file tests for populating outputs. Use VS 6 and 7 workaround from Brad King for lack of partial template specialization and function template specialization capabilities. This will make it possible to use context dependent generator expressions to determine the sources of a target.
* cmGeneratorTarget: Use a method to access the definition file.Stephen Kelly2014-02-241-0/+6
|
* cmTarget: Change GetTransitivePropertyLinkLibraries to output targets.Stephen Kelly2014-02-241-20/+12
| | | | | | | The callers already skip non-targets, so unify the target search. Change supporting functions to accept a container of targets instead of strings where possible.
* cmTarget: Move SourceFileFlags to cmGeneratorTarget.Stephen Kelly2014-02-241-1/+105
|
* cmTarget: Don't try to get sources of an INTERFACE_LIBRARY.Stephen Kelly2014-02-141-4/+7
| | | | An an assert to ensure this.
* cmMakefile: make some methods take const std::string& instead of const char*Rolf Eike Beer2014-01-161-5/+5
| | | | | | | | Most callers already have a std::string, on which they called c_str() to pass it into these methods, which internally converted it back to std::string. Pass a std::string directly to these methods now, avoiding all these conversions. Those methods that only pass in a const char* will get the conversion to std::string now only once.
* cmGeneratorTarget: Hold a const global generator.Stephen Kelly2014-01-121-1/+1
|
* cmTarget: Make GetSourceFiles populate an out-vector parameter.Stephen Kelly2014-01-091-4/+6
| | | | | In a future patch, this will also be populated with extra sources from the linked dependencies.
* cmGeneratorTarget: Add methods to access source file groups.Stephen Kelly2014-01-091-0/+78
| | | | | These methods and others will be able to get a config parameter later to implement the INTERFACE_SOURCES feature.
* cmTarget: Handle NO_SYSTEM_FROM_IMPORTED.Stephen Kelly2014-01-081-4/+8
| | | | | This handling was lost in commit faedd2be (cmTarget: Fix system include annotation propagation., 2014-01-01).
* cmTarget: Fix system include annotation propagation.Stephen Kelly2014-01-061-14/+99
| | | | | | | | | | | | Direct users of IMPORTED targets treat INTERFACE_INCLUDE_DIRECTORIES as SYSTEM, after commit a63fcbcb (Always consider includes from IMPORTED targets to be SYSTEM., 2013-08-29). It was intended that transitive use of an IMPORTED target would have the same behavior, but that did not work. The implementation processed only direct dependencies in cmTarget::FinalizeSystemIncludeDirectories. Implement transitive evaluation of dependencies by traversing the link interface of each target in the link implementation.
* Make the cmStrictTargetComparison operate on const cmTarget*.Stephen Kelly2013-12-041-1/+2
|
* cmGeneratorTarget: Use the output directory to order cmTargets.Stephen Kelly2013-11-251-2/+2
| | | | | The output directory must be unique, but the source directory of an add_subdirectory call may be re-used.
* Order cmGeneratorTargetsType elements deterministically.Stephen Kelly2013-11-221-0/+11
| | | | | | | | | | Define a custom ordering functor to deterministically and strictly order the cmTarget* key. Otherwise the order would be dependent on runtime pointer values, which breaks assumptions of some generators. The functor orders first by target name, and then by directory. Multiple global targets may have the same name, such as edit_cache, but their directory differentiates them.
* cmGeneratorTarget: Make GetIncludeDirectories const.Stephen Kelly2013-11-191-2/+2
|
* cmGeneratorTarget: Make some accessors const.Stephen Kelly2013-11-031-11/+12
|
* Merge topic 'use-generator-target'Brad King2013-10-311-0/+293
|\ | | | | | | | | | | 07f5788 Move TraceDependencies to cmGeneratorTarget. fa03777 Do not populate SourceEntries in AddSourceFile.
| * Move TraceDependencies to cmGeneratorTarget.Stephen Kelly2013-10-301-0/+293
| |
* | Merge topic 'use-generator-target'Brad King2013-10-301-2/+76
|\ \ | |/ | | | | | | | | | | 638843a Remove the Location member from cmTarget. 90ef1cf Move GenerateTargetManifest to cmGeneratorTarget. 25f1df3 Split CreateGeneratorTargets into two methods.
| * Move GenerateTargetManifest to cmGeneratorTarget.Stephen Kelly2013-10-271-0/+76
| |
| * Split CreateGeneratorTargets into two methods.Stephen Kelly2013-10-271-2/+0
| | | | | | | | | | As the generate-time-related API is moving to cmGeneratorTarget, almost all of generation code needs to be able to access instances of it.
* | Generators: don't append sources from utility targets to objectSourcesNils Gladitz2013-10-281-1/+8
|/
* Normalize system directories from the interface target propertyStephen Kelly2013-08-291-0/+6
| | | | | The input dir being tested is normalized, so ensure that the entries in the vector are normalized too (eg no trailing slash).
* Add the INTERFACE_SYSTEM_INCLUDE_DIRECTORIES target property.Stephen Kelly2013-07-161-11/+33
| | | | | | | | Unlike other target properties, this does not have a corresponding non-INTERFACE variant. This allows propagation of system attribute on include directories from link dependents.
* Store system include directories in the cmTarget.Stephen Kelly2013-07-021-1/+17
| | | | | | | Entries from the cmMakefile are processed and maintained similarly to other include directories. The include_directories(SYSTEM) signature affects all following targets, and all prior targets in the same makefile.
* Add Target API to determine if an include is a system include.Stephen Kelly2013-07-021-0/+7
| | | | | The implementation can be modified later so that system includes can be determined on a per-target basis.
* VS: Add Windows Forms SupportJohn Farrier2013-05-161-0/+12
| | | | | | | Add support to maintain designer functionality for Visual Studio C++ Windows Forms projects. Also add a test project showing how to use the CMakeLists.txt file and, when successfully configured, will allow use of the designer for the included form.