1. 10 Oct, 2016 1 commit
  2. 27 Sep, 2016 1 commit
    • Brad King's avatar
      Simplify CMake per-source license notices · 86578ecc
      Brad King authored
      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 lin...
      86578ecc
  3. 22 Sep, 2016 7 commits
  4. 20 Sep, 2016 2 commits
  5. 19 Sep, 2016 2 commits
  6. 03 Sep, 2016 1 commit
  7. 30 Aug, 2016 1 commit
  8. 27 Aug, 2016 1 commit
  9. 18 Aug, 2016 1 commit
  10. 09 Aug, 2016 2 commits
    • Brad King's avatar
      Ninja: Add `$subdir/{test,install,package}` targets · 02789894
      Brad King authored
      With the Makefile generator one can use `cd $subdir; make install` to build and
      install targets associated with a given subdirectory.  This is not possible to
      do with the Ninja generator since there is only one `build.ninja` file at the
      top of the build tree.  However, we can approximate it by allowing one to run
      `ninja $subdir/install` at the top of the tree to build the targets in the
      corresponding subdirectory and install them.
      
      This also makes sense for `test`, `package`, and other GLOBAL_TARGET targets.
      It was already done for `all` by commit v3.6.0-rc1~240^2~2 (Ninja: Add
      `$subdir/all` targets, 2016-03-11).
      02789894
    • Brad King's avatar
      Ninja: Simplify computation of GLOBAL_TARGET outputs · a88c99f1
      Brad King authored
      In cmGlobalNinjaGenerator::AppendTargetOutputs we previously
      handled GLOBAL_TARGET outputs specially in order to avoid adding
      directory components to the output.  However, this is not necessary
      because cmNinjaTargetGenerator::New already filters out copies of
      these targets that are not at the top level.  Instead we can simply
      follow the same output computation code path as UTILITY targets.
      a88c99f1
  11. 04 Aug, 2016 1 commit
  12. 20 Jul, 2016 1 commit
    • Brad King's avatar
      Ninja: Fix inter-target order-only dependencies of custom commands · 1296a0ea
      Brad King authored
      Custom command dependencies are followed for each target's source files
      and add their transitive closure to the corresponding target.  This
      means that when a custom command in one target has a dependency on a
      custom command in another target, both will appear in the dependent
      target's sources.  For the Makefile, VS IDE, and Xcode generators this
      is not a problem because each target gets its own independent build
      system that is evaluated in target dependency order.  By the time the
      dependent target is built the custom command that belongs to one of its
      dependencies will already have been brought up to date.
      
      For the Ninja generator we need to generate a monolithic build system
      covering all targets so we can have only one copy of a custom command.
      This means that we need to reconcile the target-level ordering
      dependencies from its appearance in multiple targets to include only the
      least-dependent common set.  This is done by computing the set
      intersection of the dependencies of all the targets containing a custom
      command.  However, we previously included only the direct dependencies
      so any target-level dependency not directly added to all targets into
      which a custom command propagates was discarded.
      
      Fix this by computing the transitive closure of dependencies for each
      target and then intersecting those sets.  That will get the common set
      of dependencies.  Also add a test to cover a case in which the
      incorrectly dropped target ordering dependencies would fail.
      1296a0ea
  13. 28 Jun, 2016 1 commit
  14. 14 Jun, 2016 1 commit
  15. 10 Jun, 2016 1 commit
  16. 02 Jun, 2016 1 commit
    • Daniel Pfeifer's avatar
      Simplify boolean expressions · 7f6b8d33
      Daniel Pfeifer authored and Brad King's avatar Brad King committed
      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.
      7f6b8d33
  17. 26 May, 2016 1 commit
    • Daniel Pfeifer's avatar
      Remove unnecessary local copies. · 27ead963
      Daniel Pfeifer authored
      Use clang-tidy's performance-unnecessary-copy-initialization checker.
      After applying the fix-its (which turns the copies into const&), revise
      the changes and see whether the copies can be removed entirely by using
      the original instead.
      27ead963
  18. 25 May, 2016 1 commit
    • Daniel Pfeifer's avatar
      Use enums defined in cmOutputConverter using their fully qualified name. · 25d1ef64
      Daniel Pfeifer authored and Brad King's avatar Brad King committed
      Mostly automated:
      
      values=("RelativeRoot" "NONE" "FULL" "HOME" "START" "HOME_OUTPUT" "START_OUTPUT"
              "OutputFormat" "UNCHANGED" "MAKERULE" "SHELL" "WATCOMQUOTE" "RESPONSE"
              "FortranFormat" "FortranFormatNone" "FortranFormatFixed" "FortranFormatFree")
      for i in "${values[@]}"; do git grep -l cmLocalGenerator::$i | xargs sed -i "s|cmLocalGenerator::$i|cmOutputConverter::$i|g"; done
      25d1ef64
  19. 24 May, 2016 1 commit
    • Daniel Pfeifer's avatar
      Use std::replace for replacing chars in strings. · 5cec953e
      Daniel Pfeifer authored
      Find uses of `cmSystemTools::ReplaceString` where both `replace` and
      `with` are string literals with a size of one.
      
      Automate with:
      
      git grep -l ReplaceString | xargs sed -i "s|cmSystemTools::ReplaceString(\([^,]*\), \"\(.\)\", \"\(.\)\");|std::replace(\1.begin(), \1.end(), '\2', '\3');|g"
      git grep -l ReplaceString | xargs sed -i "s|cmSystemTools::ReplaceString(\([^,]*\), \"\(.\)\", \"\\\\\\\\\");|std::replace(\1.begin(), \1.end(), '\2', '\\\\\\\\');|g"
      git grep -l ReplaceString | xargs sed -i "s|cmSystemTools::ReplaceString(\([^,]*\), \"\\\\\\\\\", \"\(.\)\");|std::replace(\1.begin(), \1.end(), '\\\\\\\\', '\2');|g"
      5cec953e
  20. 17 May, 2016 5 commits
  21. 16 May, 2016 1 commit
    • Kitware Robot's avatar
      Revise C++ coding style using clang-format · d9fd2f54
      Kitware Robot authored and Brad King's avatar Brad King committed
      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.
      d9fd2f54
  22. 09 May, 2016 1 commit
    • Brad King's avatar
      Remove `//------...` horizontal separator comments · 0ac18d40
      Brad King authored
      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.
      0ac18d40
  23. 06 May, 2016 1 commit
    • Brad King's avatar
      Isolate formatted streaming blocks with clang-format off/on · 64b55203
      Brad King authored
      The clang-format tool can do a good job formatting most code, but
      well-organized streaming blocks are best left manually formatted.
      
      Find blocks of the form
      
          os <<
            "...\n"
            "...\n"
            ;
      
      using the command
      
          $ git ls-files -z -- Source |
            egrep -v -z '^Source/kwsys/' |
            xargs -0 pcregrep -M --color=always -B 1 -A 1 -n \
              '<<[^\n]*\n(^ *("[^\n]*("|<<|;)$|;)\n){2,}'
      
      Find blocks of the form
      
          os << "...\n"
             << "...\n"
             << "...\n";
      
      using the command
      
          $ git ls-files -z -- Source |
            egrep -v -z '^Source/kwsys/' |
            xargs -0 pcregrep -M --color=always -B 1 -A 1 -n \
              '<<[^\n]*\n(^ *<<[^\n]*(\\n"|<<|;)$\n){2,}'
      
      Surround such blocks with the pair
      
          /* clang-format off */
          ...
          /* clang-format on */
      
      in order to protect them from update by clang-format.  Use the C-style
      `/*...*/` comments instead of C++-style `//...` comments in order to
      prevent them from ever being swallowed by re-formatting of surrounding
      comments.
      64b55203
  24. 29 Apr, 2016 2 commits
    • Brad King's avatar
      Format include directive blocks and ordering with clang-format · e1c77472
      Brad King authored
      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 '...
      e1c77472
    • Brad King's avatar
      Source: Stabilize include order · 180538c7
      Brad King authored
      Each source file has a logical first include file.  Include it in an
      isolated block so that tools that sort includes do not move them.
      180538c7
  25. 07 Apr, 2016 1 commit
  26. 18 Mar, 2016 1 commit
    • Charles Huet's avatar
      Ninja: Add `$subdir/all` targets · ca575fe9
      Charles Huet authored and Brad King's avatar Brad King committed
      With the Makefile generator one can use `cd $subdir; make all` to build
      all targets associated with a given subdirectory.  This is not possible
      to do with the Ninja generator since there is only one `build.ninja`
      file at the top of the build tree.  However, we can approximate it by
      allowing one to run `ninja $subdir/all` at the top of the tree to build
      the targets in the corresponding subdirectory.
      
      Port logic from cmGlobalUnixMakefileGenerator3::WriteDirectoryRule2 to
      cmGlobalNinjaGenerator in order to produce equivalent directory-level
      targets.
      ca575fe9