summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalUnixMakefileGenerator3.h
Commit message (Collapse)AuthorAgeFilesLines
* Merge topic 'custom-command-multiple-outputs'Brad King2015-03-091-11/+0
|\ | | | | | | | | 66a9c90c Makefile: Fix multiple custom command outputs regression (#15116)
| * Makefile: Fix multiple custom command outputs regression (#15116)Brad King2015-03-071-11/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In commit v3.2.0-rc1~272^2~2 (Makefile: Fix rebuild with multiple custom command outputs, 2014-12-05) we changed the generated makefile pattern for multiple outputs from out1: depends... commands... out2: out1 to out1 out2: depends... commands... This was based on the incorrect assumption that make tools would treat this as a combined output rule and run the command(s) exactly once for them. It turns out that instead this new pattern is equivalent to out1: depends... commands... out2: depends... commands... so the commands may be run more than once. Some documents suggest using a "dedicated witness" stamp file: stamp: depends... rm -f stamp touch stamp.tmp commands... mv stamp.tmp stamp out1 out2: stamp However, if the commands fail the error message will refer to the stamp instead of any of the real outputs, which may be confusing to readers. Also, this approach seems to have the same behavior of the original approach that motiviated the above commit: multiple invocations are needed to bring consumers of the outputs up to date. Instead we can return to the original approach but add an explicit touch to each extra output rule: out1: depends... commands... out2: out1 touch -c out2 This causes make tools to recognize that all outputs have changed and therefore to execute any commands that consume them.
* | Makefile: Fix output during parallel builds (#12991)Brad King2015-02-061-2/+3
|/ | | | | | | | | | Replace use of separate "cmake -E cmake_progress_report" and "cmake -E cmake_echo_color" commands to report the progress and message portions of build output lines with --progress-* options to the latter to print everything with a single command. The line buffering of the stdout FILE stream should cause the whole line to be printed with one atomic write. This will avoid inter-mixing of line-wise messages from different processes during a parallel build.
* Makefile: Workaround Borland Make bug with multiple outputsBrad King2014-12-061-0/+4
| | | | | | | | | | | | | | | Given a rule of the form out1 out2: dep1 out1 out2: dep2 Borland Make complains that there are multiple rules for "out1" even though this works when there is only one output. Instead generate out1 out2: dep1 dep2 for Borland Make, but only when there are multiple outputs.
* Makefile: Fix rebuild with multiple custom command outputs (#15116)Brad King2014-12-051-0/+7
| | | | | | | Fix the generated makefiles for custom commands with multiple outputs to list all the outputs on the left hand side of the build rule. This is much simpler and more reliable than the old multiple-output-pair infrastructure.
* LocalGenerator: Add a string overload for AppendFlagsBen Boeckel2014-05-071-0/+1
|
* Makefile: Generate single-quoted object lists for WatcomJiri Malak2014-03-271-1/+2
| | | | | | | | | | | | | | | | 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.
* cmLocalGenerator: Add ComputeObjectFilenames interface.Stephen Kelly2014-03-131-0/+4
| | | | | Implement it in the local generators and use it in the global generators.
* Makefiles: Compute local object files on demand.Stephen Kelly2014-03-131-5/+3
| | | | Don't compute them up front.
* Generalize cmCustomCommandGenerator to more fieldsBrad King2014-03-121-4/+5
| | | | | | | 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.
* Makefile: Improve handling of WMake verbose output and errorsJiri Malak2014-03-101-7/+0
| | | | | | | | | | | * 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-4/+6
|
* strings: Remove cmStdString referencesBen Boeckel2014-03-081-9/+9
| | | | | | | | | | | 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-4/+5
|
* stringapi: Use strings for the languagesBen Boeckel2014-03-081-2/+2
|
* AddCustomCommand: Handle multiple IMPLICIT_DEPENDS files (#10048)Alex Neundorf2012-11-061-1/+2
| | | | | | | | | | | | | 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>
* Pre-compute object file names before Makefile generationBrad King2012-03-091-5/+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.
* Hide Makefile local object info inside local generatorBrad King2012-03-081-21/+23
| | | | | Make cmLocalUnixMakefileGenerator3::LocalObjectInfo private and add cmLocalUnixMakefileGenerator3::AddLocalObjectFile to create entries.
* Remove unused partial OBJECT_FILES property implementationBrad King2012-03-061-3/+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.
* Watcom: Use shortpath to CMake if full path has parens (#12548)Brad King2011-11-031-0/+1
| | | | | | | | | | The Watcom WMake tool has trouble running commands in paths that have parentheses. We already convert most commands to a shortpath for Watcom if the path contains a space, but the use of $(CMAKE_COMMAND) hides the true path from that conversion. Factor the shortpath conversion code out into a new ConvertShellCommand method. Teach it to convert paths that contain parentheses as well as spaces. Use the new method to convert the value of $(CMAKE_COMMAND) and other helper variables.
* Fix typo.Nicolas Despres2011-10-231-1/+1
|
* Remove trailing white-spaces.Nicolas Despres2011-10-231-23/+23
|
* MinGW: Remove old workaround and use native echo (#12283)Brad King2011-06-161-10/+0
| | | | | | | | | The workaround added by commit 7e92f0b4 (Hack to make echo command work properly in mingw32-make, 2006-10-05) and updated by commit 69356d8a (Juse use cmake -E echo instead of the native echo, 2006-10-13) no longer seems necessary with modern mingw32-make. Furthermore it slows performance due to the time spent loading a cmake process instead of plain echo.
* Optionally pass include directories with response filesBrad King2011-03-171-0/+2
| | | | | | Create platform option CMAKE_<lang>_USE_RESPONSE_FILE_FOR_INCLUDES to enable use of response files for passing the list of include directories to compiler command lines.
* Convert CMake to OSI-approved BSD LicenseBrad King2009-09-281-14/+9
| | | | | | | This converts the CMake license to a pure 3-clause OSI-approved BSD License. We drop the previous license clause requiring modified versions to be plainly marked. We also update the CMake copyright to cover the full development time range.
* Major optimization of C/C++ dependency scanning.Alexander Neundorf2009-09-231-1/+5
| | | | | | | | | | | | | | Now only the dependencies for the file where the dependencies actually may have changed are rescanned, before that this was done for all source files even if only one source file had changed. This reduces e.g. on my machine the time for scanning the dependencies of kdelibs/khtml/ when only one file (khtml_global.cpp) has changed from around 7.5 seconds to 1.2 seconds. The tests succeed, it does what I expected it to do on kdelibs, and Brad also reviewed the patch, so I think it should be ok. Alex
* Major improvement of the generated targets in Eclipse.Alexander Neundorf2009-09-161-0/+10
| | | | | | | | | | | | | | | Before this change all targets were displayed in the top level directory of the project. Now the targets are displayed in the correct directory. The targets "clean" and "all" are now created in every subdirectory. Also now the targets for just compiling one file, preprocessing one file, assembling one file are are created for Eclipse. Additionally all targets get a prefix now in eclipse, so that they are sorted in a way which makes sense (global targets first, then executable and libraries, then object files, then preprocessed, then assembly). Also this prefix gives the user a hint what the target is, i.e. whether it's a library or an executable or something else. Alex
* ENH: Cleanup make progress rule generation codeBrad King2009-06-251-11/+0
| | | | | | | | This cleans up the Makefile generator's progress rule code. Instead of keeping every cmMakefileTargetGenerator instance alive to generate progress, we keep only the information necessary in a single table. This approach keeps most of the code in cmGlobalUnixMakefileGenerator3, thus simplifying its public interface.
* ENH: Define RULE_LAUNCH_* propertiesBrad King2009-02-101-0/+3
| | | | | | | This defines global, directory, and target properties RULE_LAUNCH_COMPILE, RULE_LAUNCH_LINK, and RULE_LAUNCH_CUSTOM. Their values specify 'launcher' command lines which are prefixed to compile, link, and custom build rules by Makefile generators.
* ENH: Give target in which custom commands buildBrad King2009-02-101-0/+2
| | | | | | This gives the cmTarget instance for which custom command rules are being generated to cmLocalUnixMakefileGenerator3::AppendCustomCommands. It will be useful in the future.
* STYLE: fix two typos in the comments, patch from Daniel DOT Teske AT Nokia ↵Alexander Neundorf2009-02-091-1/+1
| | | | | | DOT com, QtCreator developer Alex
* ENH: Refactor custom command rule hashingBrad King2009-02-021-1/+2
| | | | | | | | | | This simplifies computation of custom command rule hashes to hash content exactly chosen as the custom commands are generated. Unfortunately this will change the hashes of existing build trees from earlier CMake versions, but this is not a big deal. The change is necessary so that in the future we can make optional adjustments to custom command lines at generate time without changing the hashes every time the option is changed.
* BUG: Fix color check for dependency scanningBrad King2008-10-151-0/+3
| | | | | Generation of color rules for dependency scanning messages did not account for disabling color at generation time. See issue #7814.
* ENH: Fix optional use of relative paths.Brad King2008-10-091-3/+8
| | | | | | | These changes refactor cmLocalGenerator methods Convert and ConvertToOutputForExisting to support references inside the build tree using relative paths. After this commit, all tests pass with Makefile generators when relative paths are enabled by default. See issue #7779.
* ENH: Improved escaping in kwsys/System. Added escape of % for NMake. Added ↵Brad King2008-01-131-0/+5
| | | | escape of ; for the VS IDE.
* BUG: Restore old interface of "make foo.o" and "make foo.i" even though ↵Brad King2008-01-071-3/+7
| | | | object file names now include source extensions. For Java we also need to always remove the source extension (.java -> .class). This fixes the re-opening of bug #6169.
* ENH: Moved global inter-target dependency analysis and cycle-prevention code ↵Brad King2007-12-231-1/+1
| | | | up from cmGlobalUnixMakefileGenerator3 to cmGlobalGenerator. Simplified cmGlobalUnixMakefileGenerator3 to use it. Later other generators may be modified to use it also.
* ENH: Add a depends check step to custom targets. Add support for the ↵Brad King2007-12-211-3/+4
| | | | IMPLICIT_DEPENDS feature of custom commands when building in custom targets. Convert multiple-output pair checks to be per-target instead of global.
* ENH: Enabled color printing of "Scanning dependencies of target ..." message.Brad King2007-12-191-1/+2
|
* ENH: Moved dependency integrity check from CheckBuildSystem over to a ↵Brad King2007-12-191-4/+7
| | | | per-target UpdateDependencies step. This greatly reduces the startup time for make processes and allows individual targets to be built without a global dependency check.
* ENH: Implemented generation of display for pre-build, pre-link, and ↵Brad King2007-12-181-1/+2
| | | | post-build custom command comments during the build. This addresses issue #5353.
* ENH: Replaced dependency integrity map with an explicit map from object file ↵Brad King2007-08-071-11/+14
| | | | to source file for each language in each target. This simplifies creation of implicit dependency scanning rules and allows more than one object file in a target to start dependency scanning with the same source file.
* ENH: Moved GetTargetDirectory method up to cmLocalGenerator. This provides ↵Brad King2007-08-011-1/+1
| | | | a common interface to something that was implemented in most local generators anyway.
* STYLE: Removed unused reference to cmMakeDepend.Brad King2007-06-111-1/+0
|
* STYLE: move ForceVerboseMakefiles to cmGlobalUnixMakefileGenerator3, so theAlexander Neundorf2007-06-051-10/+0
| | | | | | kdevelop generator doesn't need its own CreateLocalGenerator() anymore Alex
* ENH: Added testing for custom command line arguments containing all special ↵Brad King2007-05-171-0/+13
| | | | characters on the US keyboard. Fixed curly brace arguments on borland and % arguments in mingw32-make.
* BUG: fix -D escaped quotes for watcomBill Hoffman2007-05-101-0/+3
|
* ENH: Replaced LibraryOutputPath and ExecutableOutputPath variables in ↵Brad King2007-03-081-7/+0
| | | | Makefile and VS generators to instead ask each target for its output path. This significantly reduces total code size and centralizes previously duplicate code. It is also a step towards bug#2240.
* ENH: Fixed recursive make call target escaping for Borland to support ↵Brad King2007-03-081-0/+8
| | | | SubDirSpaces test.
* ENH: Removed useless method ConvertToMakeTarget and all calls to it. It had ↵Brad King2007-03-081-3/+0
| | | | a buggy implementation that caused it to do nothing.