Silly CMake 2.8.2 regex causing slow project load in KDevelop

Nicolás Alvarez nicolas.alvarez at gmail.com
Mon Jul 19 02:35:36 UTC 2010


Since I upgraded to CMake 2.8.2, KDevelop takes almost four minutes to
load my project, before it appears in the Project toolview and C++
parsing starts. I tracked it down to a very slow regex in
FindZLIB.cmake:

   FILE(READ "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H)
   STRING(REGEX REPLACE ".*#define ZLIB_VERSION
\"([0-9]+)\\.([0-9]+)\\.([0-9]+)\".*" "\\1.\\2.\\3"
ZLIB_VERSION_STRING "${ZLIB_H}")

On my machine, and with my zlib.h, QRegExp takes 3 minutes 55 seconds
to process the regex (measured, test case attached), while CMake takes
10 seconds (still unacceptable imho). The regex doesn't even work on
my version of zlib.h (because ZLIB_VERSION has four version
components, "1.2.3.4"). Looks like the fact that it doesn't match is
what *makes* it slow; I edited zlib.h to have three version components
("1.2.3") and both cmake and kdevelop take a fraction of a second.

There is a CMake bug reported about this:
http://www.itk.org/Bug/view.php?id=11005

Note that FindZLIB.cmake is *not* checking cache variables before
running the regex, so it always runs. This means that if I modify a
CMake script in my zlib-using project, the project is reloaded, and it
disappears from the Project toolview for another four minutes(!).

Is there anything we could do in KDevelop to work around the stupidity
in this CMake release? :) At the moment my only ideas are:

- adding a workaround for this particular regex (a solution worthy of
Microsoft :P yuuuuck!)
- caching the results of regex replacement
- changing to a different regex library with performance
characteristics more similar to whatever cmake is using

-- 
Nicolas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: regexfail.cpp
Type: text/x-c++src
Size: 523 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20100718/0bb71bfd/attachment.cpp>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: zlib.h
Type: text/x-chdr
Size: 72800 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20100718/0bb71bfd/attachment.h>


More information about the KDevelop-devel mailing list