• florian jacomme's avatar
    Revise implementation of case-insensitive command names · b1a05d6c
    florian jacomme authored
    Store both the as-written and lower-case command names and use
    the latter to avoid case-insensitive string comparisons.
    With this I obtain 2-6% speed increase (on Windows) for the configure
    step with no significant changes in memory usage.  A case-insensitive
    comparison is a lot slower than just calling `==` because the operator
    will use things like memcmp, so prefer the latter.
    The `cmSystemTools::LowerCase` function allocates a new string each time
    it is called, so before this change we were allocating in:
    * cmMakefile::Configure two times for each function
      (to look for `cmake_minimum_required` and `project`)
    * cmMakefile::ExecuteCommand twice by function by calling
      cmState::GetCommand and copying the name
    Now we are only allocating once by function instead of four.
cmState.cxx 27.3 KB