summaryrefslogtreecommitdiffstats
path: root/Source/cmSourceFileLocation.cxx
Commit message (Collapse)AuthorAgeFilesLines
* use cm::string_view for language extension lookupsRolf Eike Beer2020-03-231-1/+3
| | | | | | | Once the list of extensions is build the set is just a copy of the vector and not modified anymore. Use a string_view for the members of the set, which saves a small amount of memory. It also makes possible to use string_views as lookup keys, so the callers do not need to create copies for the extensions anymore.
* cmake: avoid getcwd in `CollapseFullPath`Tim Blechmann2020-01-141-1/+2
| | | | | | `CollapseFullPath` calls getcwd, which is a rather expensive system call. we can replace it with `GetHomeOutputDirectory()` to save us from the calling overhead
* Revise include order using clang-format-6.0Kitware Robot2019-10-011-2/+2
| | | | | Run the `clang-format.bash` script to update our C and C++ code to a new include order `.clang-format`. Use `clang-format` version 6.0.
* clang-tidy: modernize-deprecated-headersRegina Pfeifer2019-09-161-1/+1
|
* Source sweep: Use cmStrCat for string concatenationSebastian Holtermann2019-08-221-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch is generated by a python script that uses regular expressions to search for string concatenation patterns of the kind ``` std::string str = <ARG0>; str += <ARG1>; str += <ARG2>; ... ``` and replaces them with a single `cmStrCat` call ``` std::string str = cmStrCat(<ARG0>, <ARG1>, <ARG2>, ...); ``` If any `<ARGX>` is itself a concatenated string of the kind ``` a + b + c + ...; ``` then `<ARGX>` is split into multiple arguments for the `cmStrCat` call. If there's a sequence of literals in the `<ARGX>`, then all literals in the sequence are concatenated and merged into a single literal argument for the `cmStrCat` call. Single character strings are converted to single char arguments for the `cmStrCat` call. `std::to_string(...)` wrappings are removed from `cmStrCat` arguments, because it supports numeric types as well as string types. `arg.substr(x)` arguments to `cmStrCat` are replaced with `cm::string_view(arg).substr(x)`
* cmStringAlgorithms: Move string functions to the new cmStringAlgorithms.hSebastian Holtermann2019-07-291-1/+1
| | | | | This adds the `cmStringAlgorithms.h` header and moves all string functions from `cmAlgorithms.h` to `cmStringAlgorithms.h`.
* cmAlgorithms: Make cmHasLiteral{Prefix,Suffix} cm::string_view basedSebastian Holtermann2019-07-241-2/+1
|
* cmSourceFile: Refactor FindFullPath methodSebastian Holtermann2019-02-021-0/+10
| | | | | Refactors the cmSourceFile::FindFullPath method to use lambdas.
* clang-tidy: Use `= default`Regina Pfeifer2019-01-251-3/+1
| | | | | | Suppress some cases in `Source/cmGeneratorExpressionNode.cxx` and `Source/cmUVHandlePtr.h` where a few older compilers require a user-defined default constructor (with `{}`).
* Factor out enum MessageType into dedicated headerBruno Manganelli2019-01-161-1/+2
| | | | Reduce the number of files relying on `cmake.h`.
* clang-tidy: Use default member initializationRegina Pfeifer2018-12-151-3/+0
|
* cmMakefile: return directories as const std::string&Vitaly Stakhovsky2018-08-271-4/+4
|
* Reduce raw string pointers usage.Pavel Solodovnikov2018-01-311-3/+3
| | | | | | | | | | * Change some functions to take `std::string` instead of `const char*` in the following classes: `cmMakeFile`, `cmake`, `cmCoreTryCompile`, `cmSystemTools`, `cmState`, `cmLocalGenerator` and a few others. * Greatly reduce using of `const char*` overloads for `cmSystemTools::MakeDirectory` and `cmSystemTools::RelativePath`. * Remove many redundant `c_str()` conversions throughout the code.
* cmSourceFileLocation: allow skipping ambiguous extensionsBen Boeckel2018-01-101-2/+8
| | | | | | | | | | | The ambiguous extension logic is an old behavior that ends up taking lots of extra compute cycles to execute. This is triggered by various CMake codepaths which pass extension-less paths down when CMake actually knows that they are not ambiguous. These codepaths will be indicated in upcoming changes. Various APIs have gained a cmSourceFileLocationKind parameter, but they are all optional and default to the existing behavior.
* Performance: Improve efficiency of source file lookup in cmMakefileAaron Orenstein2017-11-171-16/+4
| | | | | | | | | This reintroduces the change from commit v3.10.0-rc1~69^2 (Performance: Improve efficiency of source file lookup in cmMakefile, 2017-08-17) with some corrections. The original was rolled back by commit v3.10.0-rc1~52^2~1 (Revert "Performance: ...", 2017-09-25) due to incompatibilities found. The rollback was followed-up by addition of a test for the offending case, and this revision passes the test.
* cmSourceFileLocation: Drop unnecessary copy-assignment operatorAaron Orenstein2017-09-201-15/+0
| | | | Update the one place that used it to avoid needing assignment.
* IWYU: Mark cmConfigure.h with pragma: keepDaniel Pfeifer2017-08-261-2/+0
| | | | Also remove `#include "cmConfigure.h"` from most source files.
* Use C++11 nullptrDaniel Pfeifer2017-08-241-1/+1
|
* Use quotes for non-system includesDaniel Pfeifer2017-04-111-1/+1
| | | | | | | | | | | | | Automate with: git grep -l '#include <cm_' -- Source \ | xargs sed -i 's/#include <\(cm_.*\)>/#include "\1"/g' git grep -l '#include <cmsys/' -- Source \ | xargs sed -i 's/#include <\(cmsys\/.*\)>/#include "\1"/g' git grep -l '#include <cm[A-Z]' -- Source \ | xargs sed -i 's/#include <\(cm[A-Z].*\)>/#include "\1"/g'
* Simplify CMake per-source license noticesBrad King2016-09-271-11/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | Per-source copyright/license notice headers that spell out copyright holder names and years are hard to maintain and often out-of-date or plain wrong. Precise contributor information is already maintained automatically by the version control tool. Ultimately it is the receiver of a file who is responsible for determining its licensing status, and per-source notices are merely a convenience. Therefore it is simpler and more accurate for each source to have a generic notice of the license name and references to more detailed information on copyright holders and full license terms. Our `Copyright.txt` file now contains a list of Contributors whose names appeared source-level copyright notices. It also references version control history for more precise information. Therefore we no longer need to spell out the list of Contributors in each source file notice. Replace CMake per-source copyright/license notice headers with a short description of the license and links to `Copyright.txt` and online information available from "https://cmake.org/licensing". The online URL also handles cases of modules being copied out of our source into other projects, so we can drop our notices about replacing links with full license text. Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority of the replacements mechanically. Manually fix up shebang lines and trailing newlines in a few files. Manually update the notices in a few files that the script does not handle.
* fix a load of include-what-you-use violationsDaniel Pfeifer2016-09-031-1/+6
|
* use CM_NULLPTRDaniel Pfeifer2016-06-281-1/+1
|
* Simplify boolean expressionsDaniel Pfeifer2016-06-021-4/+1
| | | | | | Use clang-tidy's readability-simplify-boolean-expr checker. After applying the fix-its, revise all changes *very* carefully. Be aware of false positives and invalid changes.
* Revise C++ coding style using clang-formatKitware Robot2016-05-161-132/+85
| | | | | | | | | | | | | Run the `Utilities/Scripts/clang-format.bash` script to update all our C++ code to a new style defined by `.clang-format`. Use `clang-format` version 3.8. * If you reached this commit for a line in `git blame`, re-run the blame operation starting at the parent of this commit to see older history for the content. * See the parent commit for instructions to rebase a change across this style transition commit.
* Remove `//------...` horizontal separator commentsBrad King2016-05-091-10/+0
| | | | | | | | | | | | | | | | | | | | | | | | Modern editors provide plenty of ways to visually separate functions. Drop the explicit comments that previously served this purpose. Use the following command to automate the change: $ git ls-files -z -- \ "*.c" "*.cc" "*.cpp" "*.cxx" "*.h" "*.hh" "*.hpp" "*.hxx" | egrep -z -v "^Source/cmCommandArgumentLexer\." | egrep -z -v "^Source/cmCommandArgumentParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmDependsJavaLexer\." | egrep -z -v "^Source/cmDependsJavaParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmExprLexer\." | egrep -z -v "^Source/cmExprParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmFortranLexer\." | egrep -z -v "^Source/cmFortranParser(\.y|\.cxx|Tokens\.h)" | egrep -z -v "^Source/cmListFileLexer\." | egrep -z -v "^Source/cm_sha2" | egrep -z -v "^Source/(kwsys|CursesDialog/form)/" | egrep -z -v "^Utilities/(KW|cm).*/" | xargs -0 sed -i '/^\(\/\/---*\|\/\*---*\*\/\)$/ {d;}' This avoids modifying third-party sources and generated sources.
* Format include directive blocks and ordering with clang-formatBrad King2016-04-291-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sort include directives within each block (separated by a blank line) in lexicographic order (except to prioritize `sys/types.h` first). First run `clang-format` with the config file: --- SortIncludes: false ... Commit the result temporarily. Then run `clang-format` again with: --- SortIncludes: true IncludeCategories: - Regex: 'sys/types.h' Priority: -1 ... Commit the result temporarily. Start a new branch and cherry-pick the second commit. Manually resolve conflicts to preserve indentation of re-ordered includes. This cleans up the include ordering without changing any other style. Use the following command to run `clang-format`: $ git ls-files -z -- \ '*.c' '*.cc' '*.cpp' '*.cxx' '*.h' '*.hh' '*.hpp' '*.hxx' | egrep -z -v '(Lexer|Parser|ParserHelper)\.' | egrep -z -v '^Source/cm_sha2' | egrep -z -v '^Source/(kwsys|CursesDialog/form)/' | egrep -z -v '^Utilities/(KW|cm).*/' | egrep -z -v '^Tests/Module/GenerateExportHeader' | egrep -z -v '^Tests/RunCMake/CommandLine/cmake_depends/test_UTF-16LE.h' | xargs -0 clang-format -i This selects source files that do not come from a third-party. Inspired-by: Daniel Pfeifer <daniel@pfeifer-mail.de>
* cmake: Store hardcoded lists of sources and headersStephen Kelly2015-10-271-4/+8
| | | | Don't duplicate this in each cmMakefile.
* Remove unused cmLocalGenerator include.Stephen Kelly2015-10-051-1/+0
|
* Port to cmMakefile::GetGlobalGenerator.Stephen Kelly2015-05-031-2/+1
|
* cmMakefile: Rename GetCurrent{Output,Binary}Directory.Stephen Kelly2015-04-201-3/+3
| | | | Match names used in CMake code.
* cmMakefile: Rename GetCurrent{,Source}Directory.Stephen Kelly2015-04-201-4/+4
| | | | Match the names used in cmake code.
* Include cmAlgorithms where it is used.Stephen Kelly2015-03-101-0/+1
|
* Merge topic 'fix-source-case-matching'Brad King2014-12-011-1/+2
|\ | | | | | | | | 84d124e8 Fix lookup of source names after conversion to their actual case (#15259)
| * Fix lookup of source names after conversion to their actual case (#15259)Brad King2014-11-261-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | Since commit v3.1.0-rc1~688^2~15 (cmTarget: Add a method to obtain list of filenames for sources, 2014-03-17) we have code paths that lookup sources by strings containing their own full path after normalization to the actual case on disk. This fails in the case that a cmSourceFile has already been created with a different case in the filename. The comparison of the directory works because it is always normalized. Only the comparison of the file name fails. Fix this by using a case-insensitive comparison of source file names on platforms that do not have case-sensitive filesystems.
* | strings: Remove redundant calls to std::string::c_str()Nils Gladitz2014-10-151-7/+7
|/ | | | | Replacements were detected and performed by the clang tool remove-cstr-calls on a linux build.
* cmSourceFileLocation: Save some string copiesBen Boeckel2014-04-291-6/+6
|
* cmSourceFileLocation: Simplify logic in MatchesBen Boeckel2014-04-291-36/+35
|
* cmSourceFileLocation: Avoid string allocation in extension checkingBen Boeckel2014-04-291-2/+3
| | | | | | The substr call was causing excess allocations. Swap the cheaper character check to be before the longer string comparison, now using the prefix checking function.
* cmSourceFileLocation: Collapse full path for directory comparisons.Stephen Kelly2014-03-311-0/+5
| | | | | | | | | | | | | Otherwise Matches() ends up doing a comparison of the directories /path/to/dir/subdir/.. and /path/to/dir as strings and not matching where it should.
* cmSourceFileLocation: Remove unused Update method.Stephen Kelly2014-03-311-24/+0
| | | | | The string overload is never called. This allows the removal of the unused UpdateDirectory method.
* cmSourceFileLocation: Make copyable and assignable.Stephen Kelly2014-03-311-0/+41
| | | | This allows using it in containers and algorithms.
* stringapi: Use strings for the languagesBen Boeckel2014-03-081-1/+1
|
* stringapi: Use strings for source namesBen Boeckel2014-03-081-6/+7
|
* cmSourceFileLocation: Use a const cmMakefile.Stephen Kelly2014-01-221-3/+3
|
* 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.
* BUG: Fix matching of ambiguous sf extensions.Brad King2008-08-051-18/+56
| | | | | | | | A name with an ambiguous extension may only match an unambiguous name that is extended by one of the fixed set of extensions tried when finding the source file on disk. This rule makes matching of source files with ambiguous extensions much less aggressive but still sufficient.
* ENH: Recognize src extensions of all enabled langsBrad King2008-07-301-3/+8
| | | | | | | | | | | | For historical reasons we still support naming of source files without their extension. Sources without known extensions are located on disk by iterating through a fixed set of possible extensions. We now want users to always specify the extension, so the fixed set will not be expanded and is preserved for compatibility with older projects. This change adds recognition of extensions of all enabled languages to avoid checking the disk for files whose extensions are unambiguous but not in the original fixed set.
* BUG: Avoid double-slash in check for source fileBrad King2008-07-301-2/+5
|
* BUG: fix source file extension bug that broke Second life buildBill Hoffman2008-07-251-0/+30
|
* STYLE: Fix line-too-long for new INTERNAL_ERROR messages.Brad King2008-03-151-6/+6
|