summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalUnixMakefileGenerator3.cxx
Commit message (Collapse)AuthorAgeFilesLines
* cmLocalGenerator: Rename 'MAKEFILE' to 'MAKERULE'Brad King2014-07-221-2/+2
| | | | | Rename the internal enumeration value for converting paths destined for use in Makefile rule syntax.
* LocalGenerator: Add a string overload for AppendFlagsBen Boeckel2014-05-071-3/+10
|
* Merge topic 'target-transitive-sources'Brad King2014-04-031-2/+4
|\ | | | | | | | | | | | | | | | | | | | | 9407174b target_sources: New command to add sources to target. 81ad69e0 Make the SOURCES target property writable. 6e636f2e cmTarget: Make the SOURCES origin tracable. 3676fb49 cmTarget: Allow transitive evaluation of SOURCES property. e6971df6 cmTarget: Make the source files depend on the config. df753df9 cmGeneratorTarget: Don't add computed sources to the target. 869328aa cmComputeTargetDepends: Use valid config to compute target depends.
| * cmTarget: Make the source files depend on the config.Stephen Kelly2014-04-021-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | Makefile: Generate single-quoted object lists for WatcomJiri Malak2014-03-271-3/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Drop the CMAKE_NO_QUOTED_OBJECTS internal variable from the Makefile generators. The underlying problem is with the Watcom linker, not with WMake. The Watcom linker wants object files to be single-quoted. Add <LINK-RULE>_USE_WATCOM_QUOTE platform information variables to tell the generators to use Watcom-style single quotes for object files on link lines. On Windows, Watcom uses the GetCommandLine API to get the original command-line string and do custom parsing that expects single quotes. On POSIX systems, Watcom approximates the original command line by joining all argv[] entries separated by a single space. Therefore we need to double-quote the single-quoted arguments so that the shell does not consume them and they are available for the parser to see.
* | cmLocalUnixMakefileGenerator3: Re-organize ConvertToQuotedOutputPathJiri Malak2014-03-271-33/+32
|/ | | | | Use one code path whether the components list is empty or not. Fix indentation accordingly.
* Merge topic 'watcom-updates'Brad King2014-03-201-0/+1
|\ | | | | | | | | | | | | | | 64c2342a Watcom: Enable 'WMake Makefiles' generator on Linux 5d9aa66c Watcom: Introduce OpenWatcom compiler id and fix compiler version 9292d3b8 Watcom: Detect compiler target architecture and platform fbc883c9 Watcom: Add one blank line to Makefile for better readability
| * Watcom: Add one blank line to Makefile for better readabilityJiri Malak2014-03-171-0/+1
| |
* | Rename local 'dir_max' variables to 'dir'Stephen Kelly2014-03-171-6/+6
|/ | | | | The code is not computing the maximum length directory, as is the case in cmLocalVisualStudioGenerator::ComputeLongestObjectDirectory.
* cmLocalGenerator: Add ComputeObjectFilenames interface.Stephen Kelly2014-03-131-0/+14
| | | | | Implement it in the local generators and use it in the global generators.
* cmGeneratorTarget: Constify cmSourceFile* in containers.Stephen Kelly2014-03-131-3/+3
| | | | | Some of them will be used with other APIs which require value_type to be cmSourceFile const*.
* Makefiles: Compute local object files on demand.Stephen Kelly2014-03-131-12/+46
| | | | Don't compute them up front.
* Generalize cmCustomCommandGenerator to more fieldsBrad King2014-03-121-16/+18
| | | | | | | Until now the cmCustomCommandGenerator was used only to compute the command lines of a custom command. Generalize it to get the comment, working directory, dependencies, and outputs of custom commands. Update use in all generators to support this.
* cmCustomCommand: Return std::string from GetWorkingDirectoryBrad King2014-03-121-6/+7
|
* Merge topic 'remove-c_str-calls'Brad King2014-03-121-50/+50
|\ | | | | | | | | | | | | 3be265b3 Workaround Sun C++ 5.9 compiler crash af8a1643 Remove c_str calls when using stream APIs. 21c573f6 Remove some c_str() calls.
| * Remove c_str calls when using stream APIs.Stephen Kelly2014-03-111-4/+4
| | | | | | | | | | Use an ad-hoc clang tool for matching the calls which should be ported.
| * Remove some c_str() calls.Stephen Kelly2014-03-111-46/+46
| | | | | | | | | | | | 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.
* | Makefile: Improve handling of WMake verbose output and errorsJiri Malak2014-03-101-12/+25
|/ | | | | | | | | | | * The '-e' option has nothing to do with verbose output. It is now properly handled by .ERASE directive in make file * The '-s' option sets silent output globally, it cannot be switched off. It is now handled only by .SILENT directive in make file directive is simply controlled by a conditonal block. Remove SilentNoColon member variable as it is no longer needed.
* stringapi: Miscellaneous char* parametersBen Boeckel2014-03-081-1/+1
|
* strings: Remove cmStdString referencesBen Boeckel2014-03-081-8/+8
| | | | | | | | | | | 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-7/+7
|
* stringapi: Use strings for the languagesBen Boeckel2014-03-081-1/+1
|
* Use cmsys::[io]fstream instead of cmsys_ios::[io]fstream.Clinton Stimpson2014-01-071-1/+1
| | | | | Also use SystemTools::Fopen() instead of fopen(). This is to eventually support utf-8 filenames.
* Merge topic 'make-entry-no-parallel'Brad King2013-12-201-0/+11
|\ | | | | | | | | bd11de0 Makefile: Allow "gmake target1 target2 -j" (#14312)
| * Makefile: Allow "gmake target1 target2 -j" (#14312)Brad King2013-12-201-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | Add the .NOTPARALLEL target to each local Makefile command-line interface entry point file so that even with -j we launch only one "make -f Makefile2" at a time. The actual build rules in Makefile2 and lower will still run in parallel. Do not add .NOTPARALLEL for Borland or Watcom make tools because they do not tolerate it. Other make tools that do not understand .NOTPARALLEL will not be hurt. Suggested-by: Robert Luberda <robert-cmake@debian.org>
* | Remove INTERFACE build targets.Stephen Kelly2013-12-101-1/+0
|/ | | | | | | | | | | | | | | Commit b04f3b9a (Create make rules for INTERFACE_LIBRARY targets., 2013-08-21) extended the makefile generator to create build targets for INTERFACE_LIBRARY targets. No other generators were extended with this feature. This conflicts with the feature of whitelisting of target properties read from INTERFACE_LIBRARY targets. The INTERFACE_* properties of the INTERFACE_LIBRARY may legitimately contain TARGET_PROPERTY generator expressions for reading properties from the 'head target'. The 'head target' would be the INTERFACE_LIBRARY itself when creating the build rules for it, which means that non-whitelisted properties would be read.
* Merge topic 'use-generator-target'Brad King2013-12-021-0/+5
|\ | | | | | | | | 02a545c Don't generate subdir convenience rules for IMPORTED targets.
| * Don't generate subdir convenience rules for IMPORTED targets.Stephen Kelly2013-11-291-0/+5
| | | | | | | | | | | | | | | | | | This was missing from commit c34968a9 (Port some of the generator API to cmGeneratorTarget., 2012-10-10). The generator targets stored with the cmMakefile include IMPORTED targets, unlike the accessor for resgular targets. Before this patch, rules would be generated for Qt5::Core for example, which result in broken makefiles.
* | INTERFACE_LIBRARY: Avoid codepaths which set unneeded properties.Stephen Kelly2013-11-251-1/+2
|/ | | | | | | | | | | | | As an INTERFACE_LIBRARY has no direct link dependencies, we can short-circuit in cmGeneratorExpressionEvaluator and in cmGlobalGenerator::CheckLocalGenerators. As they do not generate any output directly, any generate- or install- related code acn also be short-circuited. Many of the local generators already do this. Because only INTERFACE related properties make sense on INTERFACE_LIBRARY targets, avoid setting other properties, for example via defaults.
* Port some of the generator API to cmGeneratorTarget.Stephen Kelly2013-11-221-23/+31
| | | | | | | Just enough to reach the BuildMacContentDirectory method and the NeedRelinkBeforeInstall methods. In the future, those methods can be moved to cmGeneratorTarget.
* Refactor tool selection for edit_cache (#14544)Brad King2013-11-121-11/+0
| | | | | | | | | Refactor edit_cache tool selection to ask each global generator for its preference. Teach the Ninja generator to always use cmake-gui because Ninja by design cannot run interactive terminal dialogs like ccmake. Teach the Makefile generator to use cmake-gui when also using an "extra" generator whose IDE has no terminal to run ccmake, and otherwise fall back to CMAKE_EDIT_COMMAND selection for normal Makefile build systems.
* Create make rules for INTERFACE_LIBRARY targets.Stephen Kelly2013-10-211-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The result is that the depends of the target are created. So, add_library(somelib foo.cpp) add_library(anotherlib EXCLUDE_FROM_ALL foo.cpp) add_library(extra EXCLUDE_FROM_ALL foo.cpp) target_link_libraries(anotherlib extra) add_library(iface INTERFACE) target_link_libraries(iface INTERFACE anotherlib) Executing 'make iface' will result in the anotherlib and extra targets being made. Adding a regular executable to the INTERFACE of an INTERFACE_LIBRARY will not result in the executable being built with 'make iface' because of the logic in cmComputeTargetDepends::AddTargetDepend. So far, this is implemented only for the Makefile generator. Other generators will follow if this feature is possible for them. Make INTERFACE_LIBRARY targets part of the all target by default. Test this by building the all target and making the expected library EXCLUDE_FROM_ALL.
* Makefile: Always create clean target commandBrad King2013-10-161-37/+37
| | | | | Borland Make complains if the phony clean target has no rule to build it. If there are no files to clean, generate and run an empty clean script.
* Generate modern-style cmake code.Stephen Kelly2013-08-221-16/+16
| | | | | | | | | | | The commits 9db31162 (Remove CMake-language block-end command arguments, 2012-08-13) and 77543bde (Convert CMake-language commands to lower case, 2012-08-13) changed most cmake code to use lowercase commands and no parameters in termination commands. However, those changes excluded cmake code generated in c++ by cmake. Make a similar style change to code generated by cmake.
* Merge topic 'drop-old-vs-dependency'Brad King2013-07-161-1/+0
|\ | | | | | | | | 4bb6e24 VS,Xcode: Drop incorrect legacy dependency trace (#14291)
| * VS,Xcode: Drop incorrect legacy dependency trace (#14291)Brad King2013-07-151-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Drop the "vsProjectFile" argument from cmTarget::TraceDependencies. It appears to be the modern equivalent to a hunk added in commit ba68f771 (...added new custom command support, 2003-06-03): + name = libName; + name += ".dsp.cmake"; + srcFilesToProcess.push(name); but was broken by refactoring at some point. The current behavior tries to trace dependencies on a source file named the same as a target, which makes no sense. Furthermore, in code of the form add_executable(foo foo.c) add_custom_command(OUTPUT "${somewhere}/foo" ... DEPENDS foo) the "vsProjectFile" value "foo" matches source "${somewhere}/foo.rule" generated to hold the custom command and causes the command to be added to the "foo" target incorrectly. Simply drop the incorrect source file trace and supporting logic.
* | Refactor cmTarget::GetCompileDefinitions to use an out-vector, not a string.Stephen Kelly2013-07-111-2/+2
|/ | | | Refactor to create AddCompileDefinitions.
* Fix spelling and typos (non-binary)Andreas Mohr2013-05-071-4/+4
|
* Fix the evaluation of per-config COMPILE_DEFINITIONS (#14037)Stephen Kelly2013-03-251-1/+0
| | | | | | | | | | | | | | The API for retrieving per-config COMPILE_DEFINITIONS has long existed because of the COMPILE_DEFINITIONS_<CONFIG> style properties. Ensure that the provided configuration being generated is also used to evaluate the generator expressions in cmTarget::GetCompileDefinitions. Both the generic COMPILE_DEFINITIONS and the config-specific variant need to be evaluated with the requested configuration. This has the side-effect that the COMPILE_DEFINITIONS does not need to be additionally evaluated with no configuration, so the callers can be cleaned up a bit too.
* Fix generation of COMPILE_DEFINITIONS in DependInfo.cmake.Stephen Kelly2013-02-071-22/+5
| | | | | | | | | | | | | | | | | | | | | | As INTERFACE_COMPILE_DEFINITIONS are now possible, we can have situations like this: add_library(foo ...) add_library(bar ...) target_link_libraries(foo bar) target_compile_definitions(bar INTERFACE SOME_DEF) The INTERFACE_COMPILE_DEFINITIONS of bar determine how foo should be compiled, and if they change, foo should be rebuilt. Additionally, as of commit d1446ca7 (Append the COMPILE_DEFINITIONS from the Makefile to all targets., 2012-09-17), we don't need to read definitions from the makefile if we read them from the target, so also de-duplicate the cached info. The DependInfo for INTERFACE_INCLUDE_DIRECTORIES is already handled correctly.
* Always use the auto_ptr from cmsys.Stephen Kelly2012-11-201-1/+0
| | | | | | This is for consistency throughout cmake. The cmsys version exists becaues uses of auto_ptr types as return types does not work with some implementations in ancient compilers.
* AddCustomCommand: Handle multiple IMPLICIT_DEPENDS files (#10048)Alex Neundorf2012-11-061-3/+7
| | | | | | | | | | | | | The code handling IMPLICIT_DEPENDS was only able to track a single file, the latest file replaced earlier files in the list. The documentation now mentions that the language has to be prefixed to every file and the test now uses two implicit dependencies, where only the second is modified to trigger re-running of the custom command. Alex Inspired-by: Michael Wild <themiwi@users.sourceforge.net>
* Makefile: Support directory names containing '=' (#12934)Brad King2012-06-061-19/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since commit c8ef6430 (Allow directory names containing '=' and warn if necessary, 2012-02-06) we allow directories with '=' instead of rejecting them as was previously done since commit 8704525f (Reject directory names containing '=', 2011-01-14). However, we did not warn in all cases that '=' may cause failure, such as when it appears on the right-hand side of a dependency line. Both commits above were made assuming that '=' cannot be escaped in Make syntax, but it can be achieved with a variable: EQUALS = = left$(EQUALS)side : right$(EQUALS)side Use this approach to escape '=' in dependency lines, thus supporting the character in paths. All our tests now pass when CMake is built in source and build trees both containing '=', except for the "OutOfSource" test. It fails in its coverage of the obscure "OutOfBinary" test case where part of the build tree is located outside the main build tree of the test. The reason is that CMake must invoke a command like $(MAKE) -f /path/with=sign/build.make /path/with=sign/somefile but the make tool interprets the last argument as a variable assignment. This is an acceptable limitation, since the case is so obscure, in exchange for supporting '=' cleanly otherwise.
* Build object library targets in MakefilesBrad King2012-03-131-0/+1
| | | | | | Treat OBJECT libraries as STATIC libraries but leave out the archive step. The object files will be left behind for reference by other targets later.
* Pre-compute object file names before Makefile generationBrad King2012-03-091-39/+0
| | | | | | | Add a virtual cmGlobalGenerator::ComputeTargetObjects method invoked during cmGeneratorTarget construction. Implement it in the Makefile generator to pre-compute all object file names for each target. Use the results during generation instead of re-computing it later.
* Merge branch 'cleanup-object-file-names' into object-libraryBrad King2012-03-091-11/+14
|\
| * Hide Makefile local object info inside local generatorBrad King2012-03-081-0/+14
| | | | | | | | | | Make cmLocalUnixMakefileGenerator3::LocalObjectInfo private and add cmLocalUnixMakefileGenerator3::AddLocalObjectFile to create entries.
| * Remove unused partial OBJECT_FILES property implementationBrad King2012-03-061-11/+0
| | | | | | | | | | | | | | Remove partial implementation added by commit ca0230a3 (check in initial conv library stuff, 2007-02-16) since it was never finished. It does not make sense for multi-configuration generators since no specific build configuration is processed at CMake time.
* | Extract and use the INCLUDE_DIRECTORIES target properties.Stephen Kelly2012-02-221-22/+0
|/ | | | | | | | | Eliminate callers of cmMakefile::GetIncludeDirectories. All callers of GetIncludeDirectories should go through the local generator object. Only the local generator calls cmTarget::GetIncludeDirectories directly.
* Merge topic 'warn-funny-path-names'David Cole2012-02-071-0/+15
|\ | | | | | | | | c8ef643 Allow directory names containing '=' and warn if necessary (#12934)