Changes in CMake 2.8.5 (since 2.8.5-rc3)
--------------------------------------------
Brad King (1):
      Revert "Add a new function SWIG_GET_WRAPPER_DEPENDENCIES to UseSWIG.cmake"
      (this revert means that issue #4147 has been re-opened)

Changes in CMake 2.8.5-rc3 (since 2.8.5-rc2)
--------------------------------------------
Bill Hoffman (4):
      Use devenv instead of msbuild for vs2010.
      Revert "With very long file names, VS 2010 was unable to compile files."
      Use relative paths for custom command inputs.
      Look for VCExpress as a possible build tool as well as devenv.

Brad King (3):
      KWSys: Recognize color TERM=screen-256color-bce (#12287)
      find_library: Use lib->lib64 conversion in CXX-only projects (#12247,#12248)
      libarchive: Install COPYING with CMake documentation

Christoph Höger (1):
      FindJNI: Search in Fedora arch-specific JVM location (#12276)

Julien Malik (1):
      FindSWIG: Use NAMES in find_program directives (#12280)

Modestas Vainius (1):
      Documentation: Fix spelling / formatting errors (#12287)

Philip Lowman (3):
      FindBoost: Fixes #12188
      FindBoost: Also search for 1.46.1
      Detect VS 2010 SP1, faster and more robust detection

Changes in CMake 2.8.5-rc2 (since 2.8.5-rc1)
--------------------------------------------
Bill Hoffman (6):
      Fix a memory leak.
      Fix for bug#10798.  VS10 did not append -I flags with COMPILE_FLAGS prop.
      Append and do not clobber CMAKE_CXX_FLAGS in the test.
      Use bin tree for inclues to avoid -I with spaces in the path.
      One more try.  Use full path by default, and relative on broken compilers.
      Fix for bug #11927, external project git clone step always runs vs10.

Brad King (9):
      XL: Place Fortran modules with -qmoddir= flag (#12246)
      Teach file(DOWNLOAD|UPLOAD) to timeout after inactivity
      Xcode: Fix parallel build depends with universal binaries (#11844)
      Fix style errors added by parent and grandparent
      Use cascading-if for per-config test and install code
      CTest: Report tests not run due to unknown configuration
      GNU: Fix CMAKE_INCLUDE_SYSTEM_FLAG_<lang> value (#12258)
      Teach find_(library|package) about Linux multiarch (#12037)
      Test find_package multiarch support (#12037)

Clinton Stimpson (11):
      BundleUtilities: Work w/ non .app exes on Mac (#12034)
      BundleUtilities: Fix regex to extract dependents from ldd (#12034)
      BundleUtilities: Fix test when using xcode (#12034)
      BundleUtilities: Fix issues with custom target DEPENDS in test (#12034)
      BundleUtilities: Disable running test on Windows unless using MSVC.
      BundleUtilities: Run test on Windows if either MSVC or dumpbin was found.
      BundleUtilities: Print reason for not loading module.so
      BundleUtilities: Add rpath to loadable modules in test.
      Revert "BundleUtilities: Run test on Windows if either MSVC or dumpbin was found."
      Qt4: complete module dependencies in UseQt4.cmake
      Add imported targets support for frameworks on Mac.

Daniel R. Gomez (1):
      Fix plugin API for gcc 2.9-aix51-020209 (#12233)

David Cole (3):
      BundleUtilities: Avoid a cryptic and unhelpful error message
      BundleUtilities: Avoid test on Watcom dashboards (#12034)
      CMake: eliminate use of cvs in the Release scripts

Eric NOULARD (2):
      CPackRPM: Enhance documentation
      Add some more Specs file tag handling.

Johan Björk (3):
      CMake: Move tokenize to cmSystemTools
      Xcode: Support multiple level nesting of XCode folders (#10039)
      XCode: Support target folders on XCode.

Modestas Vainius (1):
      multiarch: Set CMAKE_LIBRARY_ARCHITECTURE_REGEX for Linux|Hurd|kFreeBSD

Philip Lowman (3):
      FindProtobuf: Better MSVC support, Searching for protobuf lite
      Fix , to - in Copyright message so it passes CMake.ModuleNotices test
      10997: PROTOBUF_GENERATE_CPP now supports proto files outside current dir

Rolf Eike Beer (1):
      CMake: Update documentation of STRING(SUBSTRING) for length -1 (#10740)

Sean McBride (1):
      Fix XCode -> Xcode typos, notably in man page (#12231)

Tim Gallagher (1):
      Modified the FindHDF5.cmake file to locate the Fortran bindings.

Will Dicharry (7):
      HDF5 high level library is a find COMPONENT now.
      Add logic for CMake built HDF5 install.
      Use CMAKE_CURRENT_LIST_DIR to locate FindPackageHandleStandardArgs.
      Use HDF5_FOUND to control autoconf and CMake built FindHDF5.
      Fix for bug 11752, mixed debug and release libraries.
      FindHDF5 ensures good link lines when libraries are duplicated.
      Remove unnecessary mark_as_advanced from FindHDF5.

Zach Mullen (3):
      Dynamic analysis test output should not be compressed.
      We will actually compress memcheck output if the server supports it.
      Fix type conversion warning

Changes in CMake 2.8.5-rc1 (since 2.8.4)
----------------------------------------
Alex Neundorf (33):
      Rework the way assembler is handled, use the C/CXX compiler by default
      Make it possible to exlude external libs from dot files
      GRAPHVIZ_IGNORE_TARGETS is now a list of regular expressions
      Also generate dependers-graphviz files.
      Fix XML escaping for the project() name in Eclipse projects (#11658)
      Fix XML escaping for target names in Eclipse project files (#11658)
      Add XML escaping for directory name in Eclipse projects (#11658)
      Eclipse projects: created one linked resource for each subproject
      Also add the SOURCES from add_custom_target() to CodeBlocks projects (#11736)
      Add ASM support for the Intel compiler
      Actually use CMAKE_ASM_COMPILER for asm, instead of CMAKE_C_COMPILER
      Add support for ASM for the SunPro compiler
      Add suport for ASM for the IBM XL compiler
      Add support for ASm for the HP compiler.
      Set the HP asm file suffix
      Change the default rules so they fit better to the new ASM handling
      Fix the default CMAKE_ASM_COMPILE_OBJECT, make XL-ASM use it
      Add assemble- and preprocess commands for HP
      The Assembler test now tests ASM for GNU, Intel, HP, XL and SunPro
      Use a regexp instead a lot of ORs for checking the compiler ID
      Only try assembler support for Makefile-based generators
      Fix bad comparison in the detect assembler-code
      It's ELSEIF(), not ELSIF()
      Add temporary debug output for compiler ID detection for ASM
      Add more regex for gcc, always print the ASM compiler ID
      Add support for the Intel compiler used for ASM under Windows
      -use CMAKE_C_FLAGS when generating the assembler file
      -only enable the asm test for the Intel compiler if we are under UNIX
      Remove trailing whitespace
      Make use_mangled_mesa() available in cmake script mode (#11926)
      Fix parsing include dirs and builtin macros for CXX-only projects
      Don't skip the last builtin include dir for the Eclipse project file
      -fix VirtualFolders in Eclipse under Windows

Alexey Ozeritsky (1):
      ACML search improvement

Andreas Schneider (6):
      Modules: Added CheckPrototypeDefinition module.
      Tests: Added test for check_prototype_definition.
      FindOpenSSL: Added support for pkg-config.
      FindOpenSSL: We should only use hints to find OpenSSL.
      FindOpenSSL: Fixed crypto und ssl variable names.
      FindOpenSSL: Use find_package_handle_standard_args for version check.

Bill Hoffman (2):
      With very long file names, VS 2010 was unable to compile files.
      Fix for bug where VS2010 did not use .obj files as part of the build.

Brad King (94):
      Reject directory names containing '=' (#11689)
      FindQt4: Include builtin FindPackageHandleStandardArgs directly
      Handle trailing slashes on add_custom_command DEPENDS
      Handle relative WORKING_DIRECTORY in add_custom_(command|target)
      Pass -o after -c for Fortran to avoid mpif77 ordering bug
      Add link flag table entries for VS 7,8,9
      VS: Create a Fortran DLL's import library directory
      Fix linker flag initialization from LDFLAGS (#11840)
      ccmake: Remove extra parens around comparison
      Avoid direct use of std::stringstream
      Honor module .def files with MinGW tools (#9997)
      CTest: Update Git submodules with --recursive
      libarchive: Remove unused build/windows directory (#11885)
      Pass .def files directly to MinGW tools (#9997)
      Fix Fortran test .def file symbol mangling
      Require at least CMake 2.6.3 to build current CMake
      GNUInstallDirs: Simplify and clarify documentation
      KWSys: Require at least CMake 2.6.3
      Remove unused CMAKE_BACKWARDS_COMPATIBILITY mark
      Factor AIX and XL compiler flags into common module
      Move RPATH flags to AIX per-compiler information files
      Initialize ASM rpath flags for executables with those for shared libs
      Add ASM platform information for XL compiler on AIX
      Factor HP compiler flags into per-platform/per-compiler files
      Add ASM platform information for HP compiler on HP
      Add target property LINK_SEARCH_START_STATIC to aid static linking
      Test static linking with LINK_SEARCH_START_STATIC
      Fix Assembler test to parse C flags string before using
      Teach Assembler test to generate main.s at build time
      Do not bother enabling C++ in Assembler test
      The link interface of MODULE libraries is empty (#11945)
      CTest: Do not fail with submodules and Git < 1.6.5.0
      Remove trailing whitespace
      Add parens in cmTarget::ComputeLinkInterface logic
      Validate custom command arguments (#11963)
      Factor old-style -D flags out from -I flag generation
      FindMPI: Fix documentation formatting
      Generate target-wide flags before individual build rules
      Optionally pass include directories with response files
      Pass include directories with response files to GNU on Windows
      Enable Java test more carefully on Apple
      Disable Java test with Xcode generator
      Allow '.' in target names in generator expressions (#12002)
      GNUInstallDirs: Propagate DATAROOTDIR changes to dependent defaults
      KWSys: Do not trust EXECUTABLE_OUTPUT_PATH for ProcessFwd9x encoding
      Refine unused cache variable warning
      Fix unused cache warning after multiple configure iterations
      FortranCInterface: Fix mangling detection with Cray Fortran >= 7.3.2
      Fix typo in include_directories documentation (#12020)
      KWSys: Recognize rxvt-unicode-256color terminal (#12013)
      Normalize slashes of add_custom_(command|target) DEPENDS (#11973)
      COMP: Fix build against non-standard outside libarchive
      Modules: Add comment and copyright notice validation to readme.txt
      cmArchiveWrite: Clear xattr and acl from entries (#11958)
      find_package: Forward component list for recursive calls in modules
      XL: Set C++ and Fortran flags consistently with C
      XL: Consolidate compiler flag information
      XL: Avoid copying archives into shared libraries that link them
      VS10: Fix working directory of consecutive custom commands (#11938)
      Fix working drive of make rules on Windows
      Change working drive only in MinGW Makefiles
      VS: Use setlocal/endlocal only in VS 10 custom commands
      VS10: Fix exit code of custom commands with setlocal/endlocal (#11938)
      KWSys: Remove unused CheckCXXSourceRuns cmake module
      find_package: Rename implementation of user package registry
      find_package: Cleanup user package registry less aggressively
      find_package: Document user package registry locations
      find_package: Search a "system package registry"
      find_package: Check both 32-bit and 64-bit registry views
      find_package: Test system package registry when possible
      find_package: Fix system package registry test path conversion
      FindITK: Use passthru find_package config mode for messages
      OpenBSD: Use 'arch -s' for host processor (#12143)
      Fix case typo in CMAKE_BUILD_TYPE docs (#12148)
      KWSys: Fix leaked FILE in EncodeExecutable error case
      ENH: Fix Intel 12 plugin project generation for VS < 10
      Revert "Honor RULE_MESSAGES property for build target messages" (#12190)
      Fix signed/unsigned comparison in EscapeJSON
      Fix run_compile_commands build on Apple GCC 3.3
      Make std::map usage more portable in language=>flags/defines maps
      Provide std::map<>::at for use in run_compile_commands
      run_compile_commands: Avoid shadow in std::map<>::at workaround
      Improve string(RANDOM) default seed
      run_compile_commands: Avoid extra stl vector conversion
      VS 6: Define _WIN32_WINNT to load wincrypt.h correctly
      run_compile_commands: Cast istream::get() result to char
      Fix CompileCommandOutput test for Make tools not supporting spaces
      Explicitly cast time value in cmSystemTools::RandomSeed
      Fix CompileCommandOutput test build on Windows
      Add Absoft Fortran compiler id and basic flags
      Absoft: Detect implicit link libraries on Linux and Mac
      Absoft: Enable FortranCInterface check in Fortran test
      Document status of output_required_files command (#12214)
      Fix forced-seed argument type in string(RANDOM)

Clement Creusot (2):
      Add new module Armadillo
      Corrected copyright format in FindArmadillo.cmake

Clinton Stimpson (8):
      Change to use fphsa to check required variables and version.
      Fix grouping bug where "Ungrouped Entries" showed up as a child.
      When checking find_package() components, special case qtmain.
      Fix issues with find_path() for QtCore include dir on Mac.  Fixes 11868.
      Fix regression in 43cb9b8.
      Speed up creation of parameters file for moc custom command.
      Combine component packaging methods into an enum.
      Add component support to DragNDrop generator.

David Cole (34):
      ExternalProject Test: Increase test timeout value
      CFBundle Test: Add PATHS for finding Rez (#11295)
      CTest: Mark DART_TESTING_TIMEOUT as advanced (#10150)
      Xcode: Allow override of CMAKE_CONFIGURATION_TYPES (#8914)
      Tests: Eliminate unnecessary files and variables.
      VS9: Map enable/disable PREfast flags (#10638)
      Strip trailing space from xcode-select output (#10723)
      CTest: Add alias for make test target (#4564)
      Add CMAKE_SCRIPT_MODE_FILE variable (#2828)
      Add CMAKE_ARGC and CMAKE_ARGV0..N-1 variables (#2828)
      Fix KWStyle line-too-long complaint (#2828)
      Documentation: Sync two differing copies of -E docs (#10446)
      Clarify list subcommand documentation (#8154)
      VS2010: Fixed GenerateManifest flag (#10704)
      VS: Only use /MANIFEST if hasManifest is true (#11216)
      Make file DOWNLOAD less noisy (#11761)
      Begin post-2.8.4 development
      Use stable_sort to preserve test order (#11877)
      Implement file(UPLOAD (#11286)
      Fix KWStyle line too long error (#11286)
      ExternalProject: Extract file names from more urls
      InstallRequiredSystemLibraries: Read reg values with get_filename_component
      Add correct module notice header.
      If getconf returns empty output, try cpuinfo. (#11302)
      Add ProcessorCount support for QNX via pidin. (#11302)
      Compare ProcessorCount to SystemInformation count. (#11302)
      ProcessorCount test: more output, do not fail. (#11302)
      ProcessorCount: Add support for remaining platforms (#11302)
      ProcessorCount: Test fails if count is 0 (#11302)
      ProcessorCount: Use ERROR_QUIET with execute_process (#11302)
      ExternalProject: Add SVN_TRUST_CERT argument
      CMake: Clarify the --debug-trycompile help text
      ExternalProject: Always use --non-interactive with svn
      VS10: Write header-only files in correct xml element (#11925)

Eric NOULARD (25):
      CPackRPM  honors all the different ways of packaging components
      CPackRPM  fix IRIX compiler warning (variable never used)
      CPack remove "-ALL" suffix for ALL-IN-ONE packages
      CPack Authorize DISPLAY_NAME usage in component package
      CPack  fix KWStyle warning
      CPack remove previously CPack generated files (if any) before running CPack
      CPackRPM Replace space in some CPACK_ vars (Fix bug 9932)
      CPackRPM  activate CPackRPM test on Linux systems where rpmbuild is found
      CPackArchive package all components specified in CPACK_COMPONENTS_ALL
      CPack  more robust way to collect files belonging to a component
      CPackRPM  do not run test if build dir contains space
      CPack  fix compile error on VS70 and avoid KWStyle warnings
      CPackRPM  add more trace output in order to help failing diagnostics
      CPackRPM even more trace in debug mode or in case of failure
      CPackRPM  non matching ENDIF
      CPack try to please SUSE 64 bits and install lib in lib64 and not lib.
      Remove debbuging typo
      CPack fix CPackDeb crash when CPackDeb.cmake ends with a FATAL_ERROR
      CPack fix #11930 and simplifies component packaging options
      Fix #11964 Handle lib64 library on Linux
      Fix KWStyle warnings
      Split CPack.cmake in more manageable parts
      Fix KWStyle warnings
      CPackRPM  Fix #12096: handle absolute install path with component install
      CPack  make RPM work on AIX. fix #0012183 merge patch from Pasi Valminen

James Bigler (1):
      Add FloatingPointModel to the list of known VS7 generator flags.

Johan Björk (1):
      XCode: Also qoute [] as needed to set build-configurations.

Kovarththanan Rajaratnam (1):
      Documentation: document platform specific -E commands (#10446)

M. Konrad (1):
      CPackDeb  add Component Support to DEB generator fix #0011655

Manuel Klimek (6):
      refactor flags and defines
      cache flags and defines
      implement cxx command output
      make compile command output optional
      Adds a test for the compile command line output.
      Only offer the compile command output feature on unix systems

Marco Craveiro (1):
      CTest: Use the gcov --preserve-paths flag (#11717)

Markus Rathgeb (1):
      When cross compiling, don't double-root paths when using find_*.

Martin Konrad (2):
      CPackDeb: Fix #12006 broken package names
      CPackDeb: Handle dirs for CONTROL_EXTRA correctly when packaging components

Mathieu Malaterre (8):
      This commit fixes bug #0010316
      Add a new function SWIG_GET_WRAPPER_DEPENDENCIES to UseSWIG.cmake
      Add support for Java on HP
      Add support for java on fedora
      UseSWIG.cmake does not expand $(OutDir)
      Add support for new swig 2.0 application
      UseSWIG.cmake did not support multiple modules and parallel builds
      Add support for FindJava on HP-UX and alpha

Michael Wild (1):
      Add module ProcessorCount.cmake (#11302)

Modestas Vainius (1):
      Documentation: Fix a few typos (#11883)

Nikita Krupen'ko (1):
      Add GNUInstallDirs module to define GNU layout (#3976)

Philip Lowman (1):
      VS7/8/9: Map whole program optimization flags (#10263)

Richard Bateman (1):
      Add support for CFBundle targets on the Mac (#11295)

Rolf Eike Beer (2):
      CTest: catch warning output of Apache Maven
      FindZLIB: print library instead of include directory

Sean McBride (1):
      Removed most usage of Carbon in favour of CoreFoundation

Sebastian Herbst (2):
      VS8/9: Add flag map entries for /Zc:wchar_t (#10397)
      VS7/8/9: Add flag map for string pooling option (#10397)

Tim Hütz (1):
      Add a string(FIND) sub-command (#11795)

Todd Gamblin (2):
      FindMPI: Handle multiple languages
      Added backward compatibility for input as well as output vars.

Wesley Turner (1):
      Ensure executable files have executable permissions.

Zach Mullen (5):
      Implement ctest_upload command
      Change 'Files' tag to 'Upload' in Upload.xml
      Don't tar/gz ctest_upload() files
      Add the FILES keyword to ctest_upload command
      cmCTestUploadCommand::CheckArgumentKeyword should return false if not FILES

Changes in CMake 2.8.4 (since 2.8.4-rc2)
----------------------------------------
Alex Neundorf (1):
      Fix crash in GraphVizWriter when GRAPHVIZ_TARGET_IGNORE_REGEX is used

Andreas Schneider (1):
      FindPerlLibs: Add notice of copyright

Brad King (3):
      libarchive: Define major/minor/makedev only where needed (#11648)
      libarchive: Use OpenSSL only if CMAKE_USE_OPENSSL (#11815)
      Fix documentation of MSVC_VERSION (#11833)

David Cole (1):
      Silence the may be used uninitialized warnings: initialize stuff.

Eric NOULARD (2):
      CPack   Tests the different ways of packaging components
      Avoid foreach IN LISTS syntax which is not supported by CMake 2.6

Changes in CMake 2.8.4-rc2 (since 2.8.4-rc1)
--------------------------------------------
Alex Neundorf (3):
      Make cmake build again with cmake < 2.6.3
      Strip trailing whitespace.
      Fix parsing of compiler name with a version number

Ben Boeckel (86):
      ... 86 commit messages summarized as:
      Fix ADD_TEST regression when WORKING_DIRECTORY not given
      Add new "strict-mode" CMake variable checking
      Activate / avoid using new command line arguments:
        --warn-uninitialized
        --warn-unused-vars
        --no-warn-unused-cli
        --check-system-vars

Bill Hoffman (3):
      For macros make sure the FilePath points to a valid pointer in the args.
      Add a warning when variables are used uninitialized.
      Make --strict-mode option, and integrate with cmake-gui

Brad King (34):
      bootstrap: Granular system library selection (#11431)
      bootstrap: Clarify --init flag documentation (#11431)
      bootstrap: --verbose implies verbose Makefiles (#11708)
      Combine duplicate COMPILE_DEFINITIONS disclaimer
      Document COMPILE_DEFINITIONS known limitations (#11660, #11712)
      Document try_compile behavior more clearly (#11688)
      Document Check(C|CXX)SourceCompiles behavior more clearly (#11688)
      Fix get_(cmake|test)_property documentation (#11703)
      Reference get_property() from old get_*_property() commands
      Replace misleading example in the if() documentation (#10773)
      Clarify auto-dereference cases in if() command (#11701)
      Document CheckFunctionExists more clearly (#10044)
      Document CheckSymbolExists more clearly (#11685)
      Update CheckSymbolExists copyright year
      Report directory with missing source file (#11677)
      Test that missing source mentions directory (#11677)
      Teach Simple_Mingw_Linux2Win test to use windres
      Disable SubDirSpaces parens with GNU Make 3.82 (#11654)
      libarchive: Fix major() check for LSB 4.0 (#11648)
      Xcode: Make generation depend on all input directories
      Recognize SCO UnixWare C/C++ compilers (#11700)
      Factor SCO compiler info out of platform file (#11700)
      Honor CMAKE_TRY_COMPILE_CONFIGURATION in Makefile generators (#10809)
      Document CMAKE_TRY_COMPILE_CONFIGURATION variable
      Honor VS_SCC_* properties in Fortran targets (#10237)
      Normalize slashes in scanned #include lines (#10281)
      Improve try_compile and try_run error messages
      Use shortest extension to verify try_compile language (#11731)
      Modules: Include builtin FindPackageHandleStandardArgs directly
      Fix relative CMAKE_USER_MAKE_RULES_OVERRIDE (#11725)
      Clarify CMAKE_USER_MAKE_RULES_OVERRIDE documentation (#11724)
      Always place try_compile executables predictably (#11724)
      try_compile: Allow only languages loaded in caller (#11469)
      Fix ArgumentExpansion test expected results

Clinton Stimpson (1):
      Replace exec_program with execute_process for qmake queries.

David Cole (16):
      Update script with new machine name
      VS10: Fix problems with InstallRequiredSystemLibraries.
      Add CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS variable
      Add CPACK_NSIS_INSTALL_ROOT for CMake's own installer (#9148)
      Xcode: Disable implicit make rules in custom rules makefiles.
      Add freeglut as library name (#10031)
      Add new names for PNG and ZLIB libraries
      Avoid exceptions when ccmake terminal window is too small (#11668)
      VS10: Load projects with obj "source" files (#11147)
      VS10: Enable using devenv as CMAKE_MAKE_PROGRAM (#11459)
      Xcode: Fix crash: avoid strlen call on NULL char *
      CTestTest2: Avoid running purify unless requested
      VS10: Escape double quote chars in defines for rc files (#11695)
      Fix line too long KWStyle issue (#11695)
      Avoid space in rc /D values for VS6 and Cygwin (#11695)
      VSResource: Avoid windres /D with quoted spaces (#11695)

Marcus D. Hanwell (1):
      Bug #11715 - generate header in the build tree.

Nicolas Despres (1):
      bootstrap: Add --enable-ccache option (#11707)

Changes in CMake 2.8.4-rc1 (since 2.8.3)
----------------------------------------
Alex Neundorf (32):
      Add support for nasm assembler, patch by Peter Collingbourne (see #10069)
      Improve misleading comments.
      Add missing copyright headers
      We already have 2010, fix copyright year.
      Make FindBISON work properly with non-C locales (#11326)
      Add support for yasm, a nasm compatible assembler
      Use CMAKE_ASM_NASM_FLAGS for nasm instead of FLAGS
      Remove trailing whitespace and minor formatting changes for the dot-code
      Move the code for collecting targets and libraries into separate functions
      Properly insert all targets, also those which don't link to anything.
      Generate separate dot files for each target, and a big one with everything.
      Move the code for generating dot-files into separate class cmGraphVizWriter
      Fix #11421: FindQt3.cmake doesn't honor the REQUIRED keyword
      Remove trailing whitespace
      Don't enforce VERBOSE makefiles for the CodeBlocks generator
      Remove the "early alpha stage" comments about Eclipse and C::B
      Don't disable colors in the CodeBlocks generator and minor cleanup.
      Some more fixes for nasm support, from Etienne (#10069)
      Enable/disable generating graphs depending on the target type
      Use std::cout instead of fprintf
      Collect targets and libs on demand instead of in the ctor
      Exclude targets from the graphviz file based on a regex
      Include CMakeDetermineCompilerId in CMakeDetermineASMCompiler.cmake (#11467)
      Fix typos in the doc
      Add cache var CMAKE_ECLIPSE_MAKE_ARGUMENTS when using the Eclipse generator
      Add ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT as a ADVANCED cache variable (#9631)
      Fix crash in Eclipse generator with empty project (#11616)
      Fix indentation in cmPolicies::ApplyPolicyVersion()
      Remove trailing whitespace
      Prefer files from CMAKE_ROOT when including from CMAKE_ROOT
      Improve documentation and messages for the new CMP0017
      Remove usage of CMAKE_CURRENT_LIST_DIR now that we have CMP0017

Alexey Ozeritsky (5):
      FindBLAS works in C/C++ projects without Fortran
      ACML find fixes (issue 0011219)
      find ACML fixes
      fix for Fortran-only projects
      FindLAPACK works with C/C++ only projects (issue 0009976)

Andrius Štikonas (1):
      Modules: Fix spelling 'becase' -> 'because'.

Ben Boeckel (25):
      Fix parsing of cache variables without a type
      Use cmCacheManager to load entries from the cache
      Support manual cache entries
      Condense parsing of cache entries
      Use FPHSA in FindOpenGL
      Ignore strerror_r since CMake isn't threaded
      Use _POLL_EMUL_H_ instead of HAVE_POLL_FINE
      Rename WorkingDirectory test
      Add WORKING_DIRECTORY argument to add_test
      Add tests for WORKING_DIRECTORY arg to add_test
      Rename the project to match the test
      Fix header includes for C++ and Visual Studio
      Add ctype.h include for toupper()
      Flip slashes around on Windows
      Use --><-- markers to denote the path
      Simplify the _default_cwd derivation
      Only test the default cwd with Makefiles
      Group adding tests with its properties
      Fully specify the path to old-signature add_test
      Use iostream to make Borland happy
      Check for poll when looking for _POLL_EMUL_H_
      Toss out strerror_r macros
      Fix missed _POLL_EMUL_H_ and HAVE_POLL combo
      Make TestsWorkingDirectory test a C file
      Pass the expected value as the first argument

Bill Hoffman (17):
      Fixes for the OSF operating system build.
      Add a fix for the inline keyword on the osf os.
      Add a "Contract" test for VTK.  The test downloads and builds VTK.
      Fix contract test so it is not hard coded to the vtk542 test.
      Fix incremental linking for VS2010 with nmake or make.
      Change cpack run and verify script to work with multi-config generators.
      Fix vs2010 project generation error when HEADER_FILE_ONLY is set.
      Add more documentation for LANGUAGE property.
      Add flags to resource builds on vs 2010 with a test.
      Disable incremental testing for this test, it crashes vs9 linker.
      Only run resource test for MSVC compilers.
      Add support for windows resources with mingw/msys.
      Add support for windres to cygwin.
      Add testing for windows resources for mingw/msys/cygwin and remove for watcom.
      Enable resource building with the intel compiler on windows.
      Add support for source files in custom targets for VS 10 (Bug#11330).
      Change the nightly tests to build from the nightly branch and not next.

Brad King (90):
      Store direct dependencies in solutions for VS >= 8
      BUG: Fix compiler flag test for non-English MSVC (#11336)
      Document custom command behavior without DEPENDS (#11407)
      Consolidate duplicate link rule make dependency code
      Define LINK_DEPENDS target property (#11406)
      KWSys: Teach SystemInformation about WinXP Pro and Win7
      Fix Intel .vfproj SubSystem attribute values
      Set Intel .vfproj RuntimeLibrary attribute
      Create Fortran info variables for .mod behavior
      Teach CMake about Cray C, C++, and Fortran compilers
      Speedup find_* commands (#11412)
      Prefer non-empty prefixes when matching lib names (#11468)
      Record edge type in global dependency graph
      Use modern global dependency graph for VS < 8 deps
      Allow add_dependencies() on imported targets (#10395)
      Pass Mac linker flag through PGI compiler using "-Wl,"
      Modernize FindITK module (#11494)
      Fix find_* argument parsing crash (#11513)
      Skip VS <= 7.1 dependency analysis for VS >= 8
      Enable 64-bit tools with VS 2010 Express (#9981, #10722)
      KWSys: Associate installed library with an EXPORT
      Fix try_compile RemoveFile anti-virus loop (#11503)
      Fix Fortran .mod timestamps with Cray compiler
      Make Fortran $obj.provides.build targets not .PHONY
      Honor custom command dependencies on imported targets (#10395)
      Improve signature of cmLocalGenerator::GetRealDependency
      Skip file-level dependencies on custom targets (#11332)
      Simplify VS generator ConstructScript interface
      Factor out common custom command generator
      Remove cmLocalGenerator::GetRealLocation
      KWSys: Remove realpath from SystemTools::GetPath (#10335)
      Fix parallel "make install" of CMake itself
      CTest: Fix ctest_sleep documentation (#11554)
      Fix soname in cross-compiled targets with Mac host (#11547)
      Detect object files in implicit link information
      Allow Fortran platform files to set empty values
      Recognize the NAG Fortran compiler
      Add NAG Fortran compiler information files
      FortranCInterface: Recognize NAG Fortran module symbols
      Remove unused variable "rootdir" in VS generators
      Avoid msbuild idiosyncrasy that builds multiple configs (#11594)
      Remove unused parameter "root" in some VS generator methods
      Fix dependency tracing of INSTALL and PACKAGE (#11598)
      Remove unused GLOBAL_TARGET generation code
      KWSys: Use EXPORT name only if installing library
      Write full version into try_compile CMakeLists
      KWSys: Do not mangle UNC paths in ConvertToUnixOutputPath (#10206)
      Normalize add_custom_command OUTPUT names (#10485)
      Make link rule depend on ".def" file (#11014)
      Document target_link_libraries target scope (#11058)
      Record backtrace in cmCustomCommand
      Factor generator expression docs out of add_test
      Factor per-config sample targets out of 'Testing' test
      Optionally suppress errors in cmGeneratorExpression
      Record set of targets used in cmGeneratorExpression
      Introduce "generator expression" syntax to custom commands (#11209)
      CTest: Fix test DEPEND cycle detection
      Make Intel defines consistent with MSVC on Windows (#9904)
      CTest: Fix line-too-long style in DEPEND cycle error
      Detect Fortran target architecture on Windows
      Modernize Intel compiler info on Windows
      Remove unused old-style g++ info file
      CheckCCompilerFlag: Strict signature of 'main' (#11615)
      Warn in find(GLOB) docs about bad use case (#11617)
      Remove call to SystemTools::GetMaximumFilePathLength
      Xcode: Generate native 3.2 projects
      Declare min CMake version in --system-information project
      Cygwin: Fix tests to check CYGWIN instead of WIN32
      Cygwin: Do not define 'WIN32' (#10122)
      Revert "Remove unused parameter "root" in some VS generator methods"
      Revert "Avoid msbuild idiosyncrasy that builds multiple configs" (#11633)
      Avoid msbuild ".\" idiosyncrasy that builds multiple configs (#11594)
      Mark CustomCommand test perconfig.out as SYMBOLIC
      CTest: Factor out duplicate Git author/committer code
      KWSys: Avoid buffer overflow in SystemInformation (#11018)
      Fix sentence break in add_test documentation
      Pass Mac linker flag through all compilers with -Wl,
      KWSys: Avoid passing string literal as char*
      Avoid passing string literal to char* type
      Fix constness in compiler id detection
      Build enable_language command during bootstrap
      Map multiple /FI flags for VS < 10 (#11649)
      KWSys: Remove useless include <sys/procfs.h> (#11648)
      Allow users to specify defaults for unset policies
      ccmake: Use LSB 4.0 curses API conditionally
      CTest: Do not truncate UTF-8 test output too early (#10656)
      ccmake: Use LSB 4.0 getmaxyx conditionally
      Allow platform files to set large archive rules (#11674)
      Document reading LOCATION early as undefined (#11671)
      Document reading LOCATION_<CONFIG> early as undefined (#11671)

Brian Bassett (1):
      VS: Fix linking of Fortran-only DLL projects (#10803)

Campbell Barton (1):
      Honor RULE_MESSAGES property for build target messages

Chuck Atkins (1):
      CTest: Teach launcher to ignore empty/no-op make commands

Clinton Stimpson (11):
      Fix regex for moc includes when looking for frameworks.
      cmake-gui: use BundleUtilities in place of custom script.
      Fix regression in 2dae2f1 which added find of Qt imports dir.
      Force cmake to run again when qrc dependency scanning needs to happen.
      Fix regression to allow specifying a CMakeCache.txt file on the command line.
      BundleUtilities: only do rpath strip on copied prerequisites.
      Fix build issues cross compiling with static Qt.
      CTest: multiple ctest_test calls w/LABEL regexs (#11487)
      cmake-gui: always enable generate button.
      allow absolute paths for dbus interface.
      Add support for using static/dynamic Qt plugins.

Craig Scott (1):
      ccmake: Port for LSB 4.0 (#11648)

Dave Abrahams (1):
      FindPerlLibs: Fix for Mac locally applied patches

David Cole (31):
      Add a contract test for building the CSE.
      Enable overriding contract test timeout values.
      Update tag in the Contracts/cse-snapshot test.
      Make HTML test fail when --nonet arg is not available.
      Begin post-2.8.3 development
      No CMake.HTML test if xmllint has no --nonet.
      Suppress "loop was vectorized" "warnings."
      Add contract test for Trilinos 10.6.1 snapshot.
      Honor FOLDER on include_external_msproject targets (#11436)
      Correct misspelling in error message text.
      BundleUtilities: error if fixup_bundle_item called on non-embedded item
      VS10: stop build on custom command error (#11533)
      CPack: look for makensis in the PATH (#8210)
      VS10: avoid warning, no nologo when verbose (#10587)
      Use m prefix in shorttag value to indicate "md5 of tarball"
      Establish pass criteria for the Trilinos contract test.
      Suppress erroneous warnings from Intel compiler
      Avoid running CMake.Install test simultaneously with other tests
      VS10: Finish Midl support (#11461)
      Prohibit space in HOME value for VSMidl test.
      KWSys: Fix CPU speed calculations (#9963)
      KWSys: Retrieve QNX specific memory and processor info (#11329)
      Improve build error detection.
      VSMidl Test: Use correct include_directories with VS6 (#11461)
      Add PATH_SUFFIXES for finding git.
      ExternalProject: Avoid bleed-through output when logging.
      Fix WOW64 registry mode on Windows 2000 (#10759)
      ExternalProject: Replace location tags in CMAKE_CACHE_ARGS
      CPack: Detect more URLs in CPACK_NSIS_MENU_LINKS (#10644)
      KWSys: Fix WOW64 registry mode on Windows 2000 (#10759)
      CPack: Add CPACK_NSIS_INSTALL_ROOT variable (#9148)

Eric NOULARD (13):
      CPackRPM  add basic component support to CPackRPM
      CPack  fix kwstyle breakage and make CPackRPM backward compatible
      CPack backward compatibility fix 2.8.3-2.8.2 (bug 11452)
      CPack Fix KWStyle error
      CPack Honor CPACK_MONOLITHIC_INSTALL at CPack time too
      CPack  use IsOn when it's better than IsSet
      CPackRPM fix bug 0011595 : Can't generate RPMs (on FC11...)
      CPack new tests for component install
      CPack  Default component test for ZIP should be OK
      CPackTest spit out more output in case of failure
      Arrange output in a better way
      Precise the project config type when invoking cpack
      CPackSTGZ  quote here-doc, fix bug10518

Kai Wasserbäch (1):
      FindTCL: Fix TCL and TK version variable references (#11528)

Marcus D. Hanwell (5):
      BUG 11451 - pass CMAKE_EXTRA_GENERATOR down.
      Added CMAKE_CACHE_ARGS to ExternalProject.
      Escape file write expansion, and build up lists.
      Fixed bug where last entry would be lost.
      Python additional version support, bug #10279.

Matthias Kretz (1):
      Inline help in vim with vertical split.

Mike McQuaid (6):
      Fix incorrect variable documentation (#11127)
      Add variable for InstallRequiredSystemLibraries dir (#11140)
      InstallRequiredSystemLibraries debug-only (#11141)
      Allow NSIS package or uninstall icon (#11143)
      Add CPACK_NSIS_EXECUTABLES_DIRECTORY (#7828)
      Add CPack NSIS MUI_FINISHPAGE_RUN support (#11144)

Philip Lowman (8):
      11363: FindBoost.cmake fails to find debug libraries in tagged layout install
      11429: FindGTK2 does not find libraries built for Visual Studio 2010
      11430: FindBullet doesn't find header files installed by Bullet >= 2.77
      11384: FindCxxTest now includes test code in VS project
      [patch] Add Boost 1.45 to search, simplify a check removing VERSION_LESS
      Add Boost 1.46
      Fix spelling BOOST_LIBRARYDIR message. Add error for common misspellings.
      Lowercase all function names and improve consistency

Rolf Eike Beer (2):
      allow STRING(SUBSTRING) work with length -1 as "rest of the string"
      Add the WORKING_DIRECTORY property to tests

Wojciech Migda (1):
      Recognize the Texas Instruments DSP compiler (#11645)

Yaakov Selkowitz (2):
      Cygwin: Use 'cyg' prefix for module DLLs (#10122)
      Cygwin: Fix release script libncurses search patterns (#10766)

Zach Mullen (4):
      Remove debugging message from parallel ctest
      CTest git update should pass the committer as well as the author
      Support explicitly set test costs in non-parallel testing.
      Test TIMEOUT property explicitly set to zero should be honored

No changes in CMake 2.8.3 since 2.8.3-rc4.

Changes in CMake 2.8.3-rc4 (since 2.8.3-rc3)
--------------------------------------------
Bill Hoffman (1):
      When processing DartMeasurements use the tests working directory.

David Cole (2):
      ExternalProject: No svn --username if empty (#11173)
      Avoid problem reading jni.h on Macs.

David Partyka (5):
      Fixed appending PATH to dumpbin tool from growing without bounds.
      Switch to CMAKE_PATH when doing PATH comparisons on Windows.
      Remove unecessary TO_CMAKE_PATH for gp_cmd_dir.
      Append the gp_tool path to the system PATH using native slashes.
      Fixes to GetPrerequisites for cygwin

Eric NOULARD (1):
      CPackDeb Added several optional debian binary package fields

Marcus D. Hanwell (2):
      ENH: Added case for Python 2.7.
      Fixed parallel build for generators with EXTRA.

Changes in CMake 2.8.3-rc3 (since 2.8.3-rc2)
--------------------------------------------
Alex Neundorf (4):
      Remove trailing whitespace
      Add automatic variable CMAKE_CURRENT_LIST_DIR(dir of CMAKE_CURRENT_LIST_FILE)
      Use absolute path to FindPackageHandleStandardArgs.cmake everywhere
      CodeBlocks Generator: Do not omit files in the project file listing.

Brad King (4):
      VS10: Order .vcxproj dependencies deterministically (#10502)
      Document ENABLE_EXPORTS behavior on Mac (#11295)
      FindHDF5: Fix typo in parallel-IO support check (#11291)
      Xcode: Recognize .hh as C++ (#11307)

Clinton Stimpson (1):
      Find imports dir in Qt 4.7

David Partyka (1):
      Update module to locate newely released MS MPI HPC Pack R2.

Philip Lowman (1):
      Remove superfluous variable Boost_COMPAT_STATIC_RUNTIME.

Rolf Eike Beer (2):
      FindSubversion: Fix for German localized client (#11273)
      FindSubversion: Use C locale to detect version (#11273)

Changes in CMake 2.8.3-rc2 (since 2.8.3-rc1)
--------------------------------------------
Alex Neundorf (5):
      APPEND and not-APPEND mode of feature_summary() were swapped
      Set a default DESCRIPTION if none is given for ALL mode of feature_summary()
      Close ENDFUNCTION() properly with the same name as FUNCTION()
      Make cmake-gui remember whether the "Advanced" checkbox was checked or not
      Also store the required version number in the details message.

Ben Boeckel (3):
      Add test that CMake errors with empty libs
      Fix which string is checked for in the test
      XCode generation should fail if lang isn't known

Bill Hoffman (5):
      Fix the name of the variable being tested.
      Fix KWStyle line length issues.
      Add a delay after untar on windows to make external project work on windows 7
      Add a new line to the end of the generated main.cxx for the hpux compiler.
      Fix for bug #11274, VS10 custom commands that create files in INTDIR fix.

Brad King (12):
      Evaluate <OBJECT_DIR> rule variable for executables
      ccmake: Fix search with '/'
      MinGW: Support long object file lists
      Document IMPORTED_NO_SONAME target property
      FindMPI: Recoginze -f flags from mpicc (#10771)
      Add module-dir flag for Compaq Visual Fortran (#11248)
      FindPythonInterp: Look for python2.7 interpreter
      VS10: Use $(IntDir) for per-source output directory (#11270)
      Reset platform/compiler info status for each language
      Remove trailing whitespace from Xcode generator source
      VS10: Skip targets with no linker language (#11230)
      VS10: Encode custom command comments for echo (#11283)

Clinton Stimpson (1):
      Fix regression in cross-compile patches with finding Qt libs.

David Cole (7):
      Enable calling commands with : in argv[1] (#9963)
      No extra spaces in CustomCommand test (#9963)
      Avoid CustomCommand test failure on VS71 (#9963)
      Update release scripts.
      Avoid CustomCommand test failure on VS71 (#9963)
      Honor MAKECOMMAND value saved in cache (#11026)
      New USE_FOLDERS property OFF by default. (#3796)

David Gobbi (1):
      Set the module prefix, updated Windows suffix.

Eric NOULARD (2):
      InstallGen/CPack  fix handling absolute installed file regression
      CPackRPM  Handle parenthesis in CPACK_SYSTEM_NAME (fix bug 10737)

James Bigler (2):
      Fix for bug 0011263.
      Allow -g3 for CUDA v3.0+.

Mikkel Krautz (2):
      Xcode: Avoid trailing space in ARCHS list (#11244)
      Xcode: Quote string values containing '$' (#11244)

Philip Lowman (12):
      FindBoost.cmake fixes for issues 11204 & 8529
      FindBoost.cmake: Miscellaneous changes and refactoring
      FindBoost.cmake: Add Boost_NO_SYSTEM_PATHS option
      FindBoost.cmake: Fix compiling against a boost source tree
      FindBoost.cmake: Fixes 11246
      FindBoost.cmake: Fixes 11121
      FindBoost.cmake: Fixes 10436
      FindBoost.cmake: Implements 11160
      Fix 11136: [patch] FindThreads.cmake documents the wrong variable
      FindBoost.cmake: Fix library search path glitch introduced in earlier commit
      FindFLEX.cmake: Fix issue 11249
      Fixes issue 11279: CMakeDetermineVSServicePack support for VS10

Yaakov Selkowitz (2):
      FindFLTK*: Use Cygwin fltk on Cygwin (#11290)
      Use 'uname -m' for processor on Cygwin (#10774)

Changes in CMake 2.8.3-rc1 (since 2.8.2)
----------------------------------------
Alex Neundorf (39):
      fix build on SUSE 11.2 in cmcurl due to ssize_t
      -add an additional name for finding libtiff on Windows
      -fix typo in docs of deprecated MacroAddFileDependencies.cmake
      add 2nd, more powerful mode to find_package_handle_standard_args()
      -fix indentation of the documentation
      Add version checking support to FindFlex and FindPerlLibs
      FindSquish doesn't detect the version, remove that from the documentation
      Improved version checking for FindRuby using the new mode of FPHSA()
      Improved version checking for FindJava using the new FPHSA() mode
      Fix DETAILS string with version number in FHPSA()
      Improved version checking for FindSubversion using the new mode of FPHSA()
      Improved version checking for FindCUDA using the new mode of FPHSA
      Use FPHSA() in FindSWIG, including version checking.
      Change documentation of Subversion_FOUND and SUBVERSION_FOUND.
      Add macro CMakeParseArguments() and use it in FPHSA()
      Fix ZLIB version parsing if no TWEAK version exists
      Fix EclipseCDT include path parsing with spaces (#10868)
      Fix EclipseCDT parsing of builtin macros with spaces (#10868)
      Remove trailing spaces
      Detect a COMPILER_ID also for ASM.
      Add timeout to execute_process() in CMAKE_DETERMINE_COMPILER_ID().
      Fix parsing of builtin macros so Eclipse handles them properly (#10868)
      Log the required package version and major improvement to FeatureSummary
      Improve documentation.
      Improve wording of the documentation.
      Add macro ADD_FEATURE_INFO() and improve docs.
      Remove trailing whitespace
      Make target_link_libraries() complain if bad target name is used
      Just warn in case of a bad target as only argument for t_l_l()
      Remove trailing whitespace
      New CMP0016 for deciding whether an unknown target in TLL() is an error.
      Record all considered Config files and their versions.
      Improve error message in Config-mode when no appropriate version was found
      Replace the two vector<string,string> with one vector<struct{string,string}>
      Small cleanup of FindPackageHandleStandardArgs.cmake
      Don't create an empty element at the end of Foo_CONSIDERED_CONFIGS/VERSIONS
      Add option CONFIG_MODE to FPHSA()
      Improve version notice in the generated message
      Improve wording of the error message of find_package() in config-mode

Andrew Maclean (3):
      Adding a FindPostgreSQL.cmake module
      Forgot the copyright notice.
      Changed ADDITIONAL_SEARCH_PATHS to PostgreSQL_ADDITIONAL_SEARCH_PATHS.

Arjen Verweij (1):
      Pass objects to Intel linker using a response file

Bill Hoffman (9):
      Disable gcc 33 on OpenBSD because it crashes CPack by default.
      Fix for bug#10483, INCLUDE_EXTERNAL_MSPROJECT: ProjectGUID now ProjectGuid
      Remove the ctest submit larget output test.
      Let CMake recognize .CPP .CXX and .C++ as c++ files.
      Fix for bug 10388, fix various default flags.
      Only use .CPP .CXX and .C++ do not work by default with g+++.
      Fix targets with . in the name for VS 10 IDE.
      Only test for .CPP on Microsoft compilers which will handle .CPP as c++.
      Allow testing of .CPP on WIN32 as it is a case insensitive OS and should work.

Brad King (69):
      ExternalProject: Add LOG_* options to hide step output
      FindMPI: Do not parse -l in middle of library name
      FindMPI: Parse mpicc flags more carefully (#9093)
      Fix or cast integer conversions in cmake
      Begin post-2.8.2 development
      FindMPI: Failure is not an error if not REQUIRED
      FindMPI: Trust mpicc -showme on BlueGene/L
      VS: Always separate preprocessor defs by semicolon (#10902)
      KWSys: Cleanup putenv leak option implementation
      KWSys: Pass ptrdiff_t check result to System.c
      Fix or cast more integer conversions in cmake
      Use same type in both cases of '?:' operator
      FindMPI: Fix parsing of mpicc -Wl,-L link flags (#9093)
      Fix signed/unsigned comparison warnings in ccmake
      Fix integer conversions in cpack
      bootstrap: Detect known C/C++ compiler toolchains
      KWSys: Use short fallback timeout for Process tests
      KWSys: Optionally suppress consistent test failures
      KWSys: Avoid Clang optimizer bug in testProcess-[45]
      Poison GCC 3.3 on OpenBSD a bit later
      KWSys: Avoid undefined behavior in Process crash tests
      Optionally use system bzip2 library (#10932)
      ctest_update: Abort if Git FETCH_HEAD has no candidates
      ctest_update: Support ".git file" work trees
      ctest_update: Run 'git submodule' at top level
      FindBoost: Search for Boost 1.42
      Add FindLibArchive module (#10923)
      Add option CMAKE_USE_SYSTEM_LIBARCHIVE (#10923)
      Refer to self with CMake_(SOURCE|BINARY)_DIR (#10046)
      ExternalProject: Fix $(MAKE) with cygpath on Windows
      FindBoost: Search for Boost 1.43 and 1.44
      Include headers from chosen libarchive (#10923)
      No response files with GNU ld <= 2.16 (#10913)
      Create class cmArchiveWrite to wrap libarchive (#11020)
      Include entries for directories in tarballs (#11020)
      cmArchiveWrite: Fix signed/unsigned compare/convert
      cmArchiveWrite: Fix signed/unsigned again
      CPack: Avoid member shadowing after API refactor
      KWSys: Fix SplitPath for leading '\' on Windows
      KWSys: Fix GetActualCaseForPath for UNC paths
      ModuleNoticesTest: Do not require "Kitware" copyright
      Modules: Fix CMakeParseArguments copyright notice
      FortranCInterface: Fix doc typo FC.h -> FCMangle.h
      CTest: Avoid use of old EscapeSpaces method
      Remove cmSystemTools::EscapeSpaces method
      Clarify install(TARGETS) docs for EXPORT option
      Factor out global generator ComputeTargetDepends method
      Factor out duplicate VS target dependency code
      Refactor VS <= 7.1 utility-depends workaround
      Restore GetTargetDirectDepends const return
      Split notion of node lists and edge lists
      Distinguish "strong" and "weak" target dependency edges
      Honor strong intra-component target dependencies
      libarchive: Remove SCHILY dev,ino,nlink attributes (#11176)
      Fix unused parameter warning in VS 7.1 generator
      KWSys: Avoid empty string dereference in SplitString
      KWSys: Improve SplitPath method documentation
      KWSys: Use SplitPath in GetActualCaseForPath
      Add whitespace=tab-in-indent attribute for sources
      Search MacPorts /opt/local prefix on Mac
      HP-UX: Always add /usr/lib to rpath (#10571)
      No CMAKE_CONFIGURATION_TYPES in single-config generators (#10202)
      KWSys: Suppress -Wcast-align warning in MD5.c
      Suppress -Wcast-align in curl and bzip2
      libarchive: Fix purposeful crash
      bootstrap: Honor CFLAGS during "make" test (#10545)
      file(DOWNLOAD): Fix error message formatting
      Fix line-too-long style errors
      Report missing source files with context of target

Clinton Stimpson (10):
      Fix performance issue with getting version from zlib.h
      Fix bug 10418 - GetPrerequisites returning "not" as a dependency.
      Fix regression in 5e6634fd77969433a87c150a2fb3f2079131484f for Windows.
      Change Qt4ConfigDependentSettings to use more standard find modules.
      Add cross-compiling support to FindQt4.cmake
      Tweak for cygwin, don't convert : to ;
      Fix some issues with refinding when qmake executable is changed.
      Find correct Qt plugins for cross-compiling.
      Fix mingw/VS warning message with cross compile re-org.
      Make sure moc parameters file goes in binary directory.

David Cole (20):
      CheckSourceTree test: read UpdateCommand from Update.xml.
      Eliminate -Wconversion warnings.
      Detect CMake warnings and errors in build output.
      Activate retry code on any curl submit failure.
      Add another expected output for the failed submit tests.
      ExternalProject: Use $(MAKE) whenever possible.
      Copy Resources in Frameworks during fixup_bundle (#10020)
      Update path to git. dashmacmini2 was "upgraded."
      ExternalProject: Remove 'unknown keyword' warning (#11034)
      Add documentation for CPACK_PROJECT_CONFIG_FILE.
      Add STEP_TARGETS to ExternalProject module.
      Refine formatting for cmake --help-module output.
      Improve documentation of OPTION command.
      Add FOLDER target property, for IDEs (#3796)
      Avoid adding self as prerequisite. (#10417)
      Correct CMAKE_INSTALL_PREFIX value for Win64 apps (#9992)
      Preserve timestamps on files on tar extract.
      Use QUIET to avoid Java status messages.
      VS2010: Honor PROJECT_LABEL target property (#10611)
      VS2010: Set IntDir for utility and global targets.

David Genest (1):
      Honor CMAKE_USER_MAKE_RULES_OVERRIDE in try_compile (#10902)

Eric NOULARD (20):
      CPackRPM:: Replace - with _ in RPM Version (fix bug 0010934)
      Provides default changelog if no file is provided
      CPackRPM:: Quote every filenames in %file section (see bugs 10701,10871,10345)
      CPackRPM:: [partially] support relocatable package
      CPackDEB:  merge wrong installed size patch. see bugs 10296 (and 10292)
      CPackDeb  optionally generates auto-dependency list part fix of bug 10292
      Proposal for bash-completion support file
      CPack: Refactor API in order to handle multi-file packages
      CPack: Avoid member shadowing after API refactor (part2)
      Improve cmake-completion (install doc, ctest -R completion)
      Add ZIP archive format and LZMA compress support to libarchive-wrapper
      Add XZ compress support to libarchive-wrapper
      Add Compress compress support to libarchive-wrapper
      CPack   Backward-compatibly enforce DESTDIR for DEB and RPM
      CPack   Enable better handling of absolute installed files
      CPackArchiveGenerator  use cmArchiveWrite wrapper
      CPackArchiveGenerator  add component supports
      CPackArchiveGenerator improve usability and robustness
      CPack fix broken compilation for CygwinSource generator
      CPack  handle symlinks in CPACK_INSTALLED_DIRECTORIES fix for bug5430

James Bigler (1):
      Added CUDA 3.2 directory changes.  Disable emulation mode for CUDA 3.1+.

Kai Wasserbäch (1):
      Fix spelling errors reported by Lintian.

Kovarththanan Rajaratnam (4):
      FindZLIB: optimize zlib.h version parsing
      FindCygwin: add new registry entry for Cygwin 1.7 (#10951)
      FindZLIB: use the FPHSA version mode
      FindSubversion: set compatibility variables based on FPHSA()

Marcel Loose (1):
      Issue 10199: Fixed code documentation and now set <prefix>_WC_ROOT

Marcus D. Hanwell (1):
      Bug with default library type of Python modules.

Mathieu Malaterre (3):
      Add missing PATHS to find_path commands to fix openssl searching
      BUG: 0009611 Fix Arch independent FindJNI.cmake on Linux
      Fix 11035 : debug/release library configuration mistake

Michael Wild (2):
      Improve documentation of BundleUtilities.cmake
      Improve documentation of GetPrerequisites.cmake

Miguel A. Figueroa-Villanueva (7):
      ENH: #9775 Added support for new wxWidgets 2.9 libraries.
      BUG: #9775 Fixed patch FindwxWidgets-fixed-bug-9775.
      BUG #10658: FindwxWidgets USE_FILE should not include .cmake extension.
      STYLE: Clarified/Fixed documentation of UsewxWidgets.
      BUG #11123: Generic include dir should come after config specific one.
      BUG #8184: Fixed FindwxWidgets wrong order of default libs for MinGW.
      ENH #8993: FindwxWidgets add support for wx-config custom options.

Mike McQuaid (1):
      Make bundle items writable before fixup (#9284)

Modestas Vainius (1):
      CTestTestFailedSubmit-xmlrpc: Pass with "Submission problem"

Patrick Gansterer (4):
      VS: Convert PlatformName member to a virtual method
      VS: Add more TargetMachine option values
      VS: Map /ENTRY linker option to EntryPointSymbol
      VS: Add ArchitectureId to VS 8 and 9 generators

Philip Lowman (7):
      Fixes problem finding libraries under Boost (#9510)
      Add detection for new pangommconfig.h header file
      Several fixes needed to improve Windows support
      11041: Improve FindCxxTest to use Python or Perl automatically; custom flags
      10241: FindBISON.cmake clears wrong variable
      10688: FindGTK2.cmake doesn't auto-detect macports
      Merge patch for detecting gdk-pixbuf library

Pino Toscano (1):
      GNU/Hurd platform support fixes (#9873)

Robert Goulet (1):
      VS2010: Disable PDBs when there is no debug info

Rolf Eike Beer (2):
      clean up some stuff in CPack RPM script
      Set MSVC_VERSION for MSVC 6, 7, 7.1 (#7944)

Todd Gamblin (3):
      Modules: Fix spelling 'To distributed' -> 'To distribute'
      Teach find_* commands to ignore some paths
      Add platform files for BlueGene/P systems

Zach Mullen (12):
      Checksums on CTest submit files, and retry timed out submissions.
      Cross-platform fixes for checksum/retry code
      Fix subscript out of range crash
      CTest should resubmit in the checksum failed case
      Testing for CTest checksum
      Mock checksum failure output for old CDash versions
      Checksum test should use CMAKE_TESTS_CDASH_SERVER
      Fix cycle detection for test dependencies
      More robust cost-based scheduling impl
      Fix hard-coded CDash URI in version query
      Added CTest command --print-labels
      We shouldn't ask CDash for its version info until/unless we actually need it.

No changes in CMake 2.8.2 since 2.8.2-rc4.

Changes in CMake 2.8.2-rc4 (since 2.8.2-rc3)
--------------------------------------------
Bill Hoffman (1):
      Fix for bug #10859, ctest exit exception incorrectly reported.

Brad King (3):
      Run CMake.HTML test without net access (#10857)
      Run CMake.HTML test with older xmllint (#10857)
      CTest: Parse empty Git commits correctly

David Cole (2):
      Qualify name of extraction location with ExternalProject name.
      For VS10: Really use full path file names.

James Bigler (1):
      Add support for the emulation version of the cudart library.

Mathieu Malaterre (1):
      Cleanup FindOpenSSL. Add support for win64 installation.

Zach Mullen (1):
      Parallel CTest hangs if serial test has depends

Changes in CMake 2.8.2-rc3 (since 2.8.2-rc2)
--------------------------------------------
Brad King (1):
      Preserve ENV{MAKEFLAGS} in CMake script mode

David Cole (4):
      Remove "Microsoft Visual Studio .NET" from VS8 and VS9 find modules.
      Use full path file names in generate.stamp.list.
      Use full path file names to express dependencies.
      Look in the ctest ini file for GitCommand.

James Bigler (2):
      Fixed: CUDA_VERSION_MAJOR/MINOR now computed after first run.
      CUDA_VERSION variable passed to REGEX needs quotes to work when not defined.

Mathieu Malaterre (1):
      Cleanup FindDCMTK (using foreach). Fix linking on win32 static libs.

Zach Mullen (2):
      Do not exit if stoptime is passed.
      Document ctest_build() TARGET option

Changes in CMake 2.8.2-rc2 (since 2.8.2-rc1)
--------------------------------------------

Bill Hoffman (1):
      Make sure libarchive uses cmzlib and not the system libz if found.

Brad King (12):
      Use forward slashes for objects in response files
      Use platform variable for response file flag
      Use response file for objects on MinGW and MSYS
      Generalize CTest.Update* test dashboard script helpers
      ctest_update: Support custom Git update command
      ctest_update: Support Git upstream branch rewrites
      Fix CMake data and doc paths in Cygwin package
      Document scope of source file properties
      Run CTest.NoNewline test using built CMake
      Tru64: Place cmOStringStream vtable uniquely (#10541)
      Enable BootstrapTest on MSYS
      Tru64: Use full-path include directives in Makefiles (#10569)

Christoph Watzl (1):
      Fix nested source groups with VS 10 (#9863)

Clinton Stimpson (2):
      Support pthreads on irix.
      Remove macro for querying qmake for qmake variables.

David Cole (2):
      Fix issue #10346. Error if SOURCE_DIR is empty.
      Remove CTestTest3.

Zach Mullen (1):
      Extra coverage glob should subtract the explicitly defined excluded files

Changes in CMake 2.8.2-rc1 (since 2.8.1):
- Build on Tru64 (#10542)
- Build on mingw-w64
- Build on old Sun (#10550, #10543)
- CPack: Add native BZip2 support
- CPack: Set compression type in RPM spec (#10363)
- CPack: Try harder to initialize staging directory (#10793)
- CTest: Add --stop-time argument
- CTest: Cost data with '-j'
- CTest: Fix memory report
- CTest: Glob for uncovered files during coverage tests
- CTest: Option to specify cdash server
- CTest: PHP Coverage support
- CTest: Process tree kill for OpenBSD, FreeBSD, kFreeBSD, GNU/Hurd
- CTest: Report failure in Update.xml
- CTest: Submit author email in Update.xml
- CTest: Teach ctest_update about Git submodules
- CTest: Teach ctest_update to handle Git upstream branch rewrites
- Cygwin: Export all symbols with ENABLE_EXPORTS (#10122)
- Do not list file names during 'cmake -E tar xz'
- Documentation: Comply with "XHTML 1.0 Strict"
- Documentation: Fix typo in CMAKE_LIBRARY_PATH (#10291)
- Documentation: Fix typo in HAS_CXX docs (#10578)
- Documentation: More consistent command signatures
- Eclipse: Do not add INCLUDE to environment twice
- Enable extra CodeBlocks generator on Cygwin
- ExternalProject: Support .zip and .bz2 archives, MD5 verification
- ExternalProject: Reconfigure when args change (#10258)
- ExternalProject: Support Git, SVN username/password
- FindCurses: Fix for cygwin ncurses package
- FindHSPELL: Version support
- FindJava: Error if version is not found only when REQUIRED
- FindJava: Support runtime and development components (#9840)
- FindKDE4: Prefer kdeconfig results over system paths
- FindMPEG: Check for 'vo' library
- FindPNG: Support png 1.4 versioned lib names (#10551)
- FindPkgConfig: Add QUIET keyword to pkgconfig macros (see #10469)
- FindZLIB: GnuWin32 support, version support (#5588)
- FindwxWidget: Fix CXX flag parsing (#10209)
- Fix .pdb name attribute in VS project files (#10614)
- Fix CodeBlocks to work with Fortran-only
- Fix VS 2010 custom commands (#10503)
- Fix VS 6 support for COMPILE_DEFINITIONS_MINSIZEREL (#10700)
- Fix cross-compiling from Linux to iPhone (#10526)
- Fix documentation typos
- Fix g95 Fortran compiler support
- Fix uname masking in file(WRITE) and write_file (#10789)
- GetPrerequisites: Provide an override hook
- Handle non-ASCII terminators in file(STRINGS)
- Module fixes: FindPythonLibs, FindQt4, FindX11, FindwxWidgets
- PathScale Fortran compiler tool detection
- Qt4 OpenGL framework fix
- Qt4ConfigDependentSettings.cmake Qt4Macros.cmake UseQt4.cmake
- Recognize ARM ABI/EABI with GNU compilers
- Recognize Clang compiler
- Search basic directories on "Generic" platform
- Set MSVC* variables consistently on all generators, and test
- Support SunPro C++ 5.11 on Linux (new compiler)
- Support VS 10 Express (related to #10670)
- Support compression with 'cmake -E tar'
- Support multiple arguments in CC,CXX,FC environment variables
- Support per-configuration librarian flags (#10768)
- Support per-platform initial ASM language flags (#10577)
- Use Fortran ABI detection results conservatively
- Use libarchive to replace the unmaintained libtar
- UseQt4: Support QtMultimedia (#10675)
- bootstrap: Fix make tool detection (#10544)
- cmake-gui: Add simple grouped view
- cmake-gui: Support build tree under symlink (#9975)
- Cleanup modules FindASPELL, FindAVIFile, FindBZip2, FindDart,
  FindEXPAT, FindGCCXML, FindGLU, FindHSPELL, FindJasper, FindLibXml2,
  FindLibXslt, FindMPEG, FindOpenAL, FindPhysFS, FindQuickTime,
  FindSubversion, FindZLIB.

Changes in CMake 2.8.1
- Fix failing test on cygwin
- Add a new serach path for MPICH2

Changes in CMake 2.8.1 RC 5
- Fix FindQt4 to work with OpenGL on the mac
- Add .git .bzr and .hg to the list of default CPack ignore directories.

Changes in CMake 2.8.1 RC 4
- CTest: Do not hide test GUI windows (fixes 2.8.0 regression)
- Documentation: Clarify CMAKE_MODULE_PATH variable
- FindQt4: Add support for QtDeclartive module
- FortranCInterface: Fix PathScale detection
- Suppress GNU flag -fPIC on Windows (fixes 2.8.1-rc1 regression)

Changes in CMake 2.8.1 RC 3
- Add CMAKE_XCODE_ATTRIBUTE_<attr> interface to set compiler (#9125)
- Fix Eclipse files for targets in subdirectories (#9978)
- Fix custom command rule hashes to avoid extra rebuilds
- Print non-make generator name in initial compiler test

Changes in CMake 2.8.1 RC 2
- CPack: Avoid deleting long PATH values with NSIS (#10257)
- CTest: Fix and test cost-based test scheduler
- CTest: Fix and test git updates for case of out-dated index
- CTest: Fix regression caused by fix for (#2336) in rc1
- CTest: Setup command-line dashboard support with Git
- FindCUDA: Improve docs, use -rpath on Apple, fix dependency scanning
- Fix OS X deployment-target and sysroot defaults (#9959,#9898,#10155)
- Recognize the Compaq Fortran compiler

Changes in CMake 2.8.1 RC 1
- Add "NMake Makefiles JOM" generator
- Add PathScale compiler support
- Add per-configuration OUTPUT_DIRECTORY properties
- Add per-target OSX_ARCHITECTURES property
- check_type_size(): Handle mixed-size universal binaries
- CPack: Document Mac generators
- CPack: Improve RPM spec files
- Create CMAKE_FORCE_Fortran_COMPILER for cross-compiling
- CTest: Add --http1.0 command-line option
- CTest: Add --timeout command-line option
- CTest: Do not munge UTF-8 output in XML files
- CTest: Document CTEST_USE_LAUNCHERS option
- CTest: Fix killing of whole test process trees
- CTest: Handle failure of running invalid executables
- CTest: Honor the -C arg to ctest (#2336)
- CTest: Improve host system introspection
- CTest: Optionally randomize test order (--schedule-random)
- CTest: Skip tests with unsatisfied REQUIRED_FILES test property
- CTest: Submit arbitrary results with ATTACHED_FILES test property
- ctest_build(): Enhance signature
- ctest_start(): Add APPEND option
- ctest_start(): Move CTEST_CHECKOUT_COMMAND from ctest_update
- ctest_update(): Submit global tree revision in Update.xml
- Cygwin: Do not export all symbols from DLLs (#10122)
- Cygwin: Name DLLs with SOVERSION, not VERSION (#10122)
- Detect 32/64-bit Windows with Intel compiler
- Eclipse generator enhancements
- ExternalProject: Add TIMEOUT parameter
- FindCUDA: Respect CUDA version differences
- FindCURL: Find import libraries on Windows
- FindDCMTK: Look in more places
- FindGTest: Handle spaces better (#10065)
- FindGTK2: Look in fink locations on Mac OS X
- FindHDF5: Follow find-module API conventions
- FindJava: Support for versioned find
- FindJNI: Honor find_package() REQUIRED and QUIET options
- FindMPI: Improve Windows support
- FindOpenSSL: Fix MinGW support
- FindPythonLibs: Look in config for static library
- FindQt4: Misc enhancements, sync with KDE vesion
- FindRuby: Fix version convention on Windows
- FindX11: Improve documentation
- Fortran: Detect address size (#10119)
- FortranCInterface: Honor user flags
- Improve VS 2010 beta2 support
- link_directories(): Treat relative paths consistently (CMP0015)
- Modernize FindLibXslt and FindLibXml.cmake
- Refactor platform info to simplify adding new compilers
- Support cross-compiling versioned DLLs
- UseQt4: Provide dependencies only for static Qt (#10021)
- Address issues:
  #2336, #3571, #5041, #7541, #8725, #9011, #9042, #9054, #9163,
  #9171, #9450, #9697, #9764, #9782, #9792, #9862, #9894, #9913,
  #9916, #9917, #9918, #9949, #9965, #9970, #9982, #9985, #10003,
  #10014, #10021, #10032, #10055, #10060, #10065, #10114, #10119,
  #10122, #10126, #10136.

Changes in CMake 2.8.0 Release
- CPack: Honor CPACK_NSIS_DISPLAY_NAME (fixes regression)

Changes in CMake 2.8.0 RC 7
- Partially sync FindQt4 with KDE version
- Improve implementation of fix for #9090
- Fix CTest infinite loop when test executable could not be found
- Fix #9833: Document ctest --help-command
- FindCUDA: Fix -fPIC from being used on executable object files
- Fix #9654: %files section in spec file should not list directories
- Fix #9851: Better STRING(RANDOM) seeding
- Fix double bootstrap build for in source builds
- Fix CTest to use allowed value for valgrind --num-callers
- Remove non-language implicit link dependencies
- Implement LINK_FLAGS_<CONFIG> property on Xcode

Changes in CMake 2.8.0 RC 6
- Partially sync FindQt4 with KDE version
- Fix #9090: Teach CTest subdirs() command to handle absolute paths
- Fix CTest bug that could start a test twice

Changes in CMake 2.8.0 RC 5
- CTest now detects cycles in test dependency graph
- Warn on set(PARENT_SCOPE) at top scope
- Fix Xcode <= 2.0 projects with CMAKE_BUILD_TYPE
- Fix flags for Intel Fortran on Windows
- Fix #2199: UseSWIG documentation for swig_generated_file_fullname
- Fix #7915: UseSWIG interaction with JNI
- Fix #8971: FindOpenSSL now works on windows
- Fix #9124: CPackDeb documentation
- Fix #9722: cmake-gui reports error when not able to create build directory
- Fix #9767: Match more valgrind-reported leaks in CTest memcheck
- Fix #9777: Sync CMakeDetermineJavaCompiler paths with FindJava
- Fix #9793: FindJNI should find matching jni.h and jni_md.h
- Fix #9817: FindJNI on Solaris
- Fix FindHDF5 when hdf5.h exists without H5pubconf.h
- Fix FindZLIB to follow variable name conventions
- Fix invalid use of auto_ptr on array
- Mention temp var convention in Modules/readme.txt documentation

Changes in CMake 2.8.0 RC 4
- Fix try_compile when file cannot be found
- Add new module to test manifest installation issues on windows.
- Add more test coverage
-Improvements in finding MPI on windows. ENH: reorganized searching mpi for mpi components (include,lib,bin) using a single set of search paths instead of seperately mainted lists of paths for each.
- Look for nvcc in the 32 bit bin directory before the 64 bin directory.
- BUG: hardcore some values so output matches cmVS10CLFlagTable.h (addresses bug #9753)
- Avoid Intel linker crash in BuildDepends test
- Fix Intel Fortran SHARED libraries on Linux
- Fix working dir issue for ctest
- Fix if() command and CMP0012 OLD/NEW behavior
- Allow for /D to change install directory on the command line for NSIS
- Move SetErrorMode around calls to generate and configure instead of setting it for the whole application for cmake-gui on windows.  Allows for bad installs of windows shell programs to not break file completion.
- Fix Intel and MinGW Fortran DLL import libraries
- Fix Xcode dylib version default
- Fix the showing of non-cpp files in the IDE for VS 10
- Fix optionally-valued booleans in VS 10 flag table
- Detect and set Unicode character set in VS 10
- Add support for the g95 Fortran compiler
- Test all target types in Fortran
- Add Xcode file association for Fortran
- Fix VS 10 flag table for precompiled headers
- Fix VS 10 .sln files for Windows Explorer
- Fix Microsoft.Cpp.$(Platform).user.props in VS10b2
- Fix up file(DOWNLOAD ) a bit, better error checking and uses of long not double for timeout as curl needs, bug# 9748
- Add a VS 10 Win64 generator
- Fix for bug#9686 convert java_home to a cmake path before using.
- fix for bug# 9751, add check for MSVC10
- Fix for bugs #9756, #9690 and #9755, header files were not included, and link_directories we incorrect
- Add a module to test an install tree to verify that the MS CRT version is correct.
- Fix seg fault for empty ENV{} call bug #9747
- Better fix for finding the MSBuild that matches the VS 10 install.
- make testing the CodeBlocks and Eclipse generators easier by not requiring the CMAKE_EDIT_COMMAND variable
- Do not link library dependencies in VS solutions
- Ctest was broken for subdirs.  Restored working directory state for tests so that their executables could be found.
- Fixes version detection using osg/Version on Mac OSX when OSG is installed as a framework
- Avoid C++ linker language in VS Fortran project
- Avoid duplicate ZERO_CHECK in VS solutions
- Fixed bug 8319, search for the Python shared library in the standard locations.
- Fix bug#9714, should not crash when version file is not where it should be...
- Fix ctest output alignment for cases where total tests run is not the same width as max test index.
- make it more robust wrt. #9621
- Add another possible error message that curl might emit with an empty drop location.
- Fix issue #5668 - use CollapseFullPath when determining if covered file is within source or binary tree. Allows gcc/gcov coverage analysis using MinGW on Windows.
- CTest-side support for compiler name and compiler version information.  Requires CDash update to show on CDash.
- Add a bunch more testing coverage.

Changes in CMake 2.8.0 RC 3
- CTest Added OS Platform (cpu architecture) detection support to windows system
- Several minor FindBoost changes to address posts on mailing list
- Resolve #9685: Fix include dir to be correct path for gnutils
- Fix color check for dependency scanning
- Remove CMP00015 for now as it breaks more things than it fixes
- Reduce duration of ctest_sleep arguments. Add SmallAndFast project. Replace kwsys with SmallAndFast to make CTestTest faster. (I will keep an eye on coverage results after this commit and make sure we still have equivalent ctest coverage.)
-  Do not use -fPIC to link executables
- Split Borland compiler information files
- Trimmed off the newline from sw_vers output on mac, it could cause xml parsing errors if left in
- Check for openssl-linked option with Qt 4.4+ before making ssl a dependency.
- Make Complex test of CMakeLib more optional
- Modernize FindVTK module
- Fix find_package() when <pkg>_DIR is wrong
- Do not collapse path of NOTFOUND values
- More robust implicit link line detection regex
- fix Xcode 30 generator
- Use the correct CMake (the freshly built one) to drive the CMakeWizardTest.
- Support more special characters in file(STRINGS)
- Log implicit link line detection regex
- speedup C dependency scanning even more
- Avoid non-root copies of root-only targets
- Added better OS information for Mac OS X
- Use work-around from bug 4772 for C++ and Fortran
- FortranCInterface: Mangling for Intel on Windows
- cmake-gui don't allow consecutive generates without a configure.
- Fix Preprocess test for Intel on Windows
- Teach intel compiler on windows to place .lib files and .pdb files.
- CPack: Fix bash-isms in launch script
- BUG: #0009648 Change "The following tests FAILED" message to print on stdout rather than stderr
- Avoid (Unix|Windows)Paths.cmake multiple include
- When getting include dirs for moc, also watch for framework includes and use -F instead of -I.
- Find locally installed software first
- Add '#!/bin/sh' to cygwin-package.sh
- Fix permsissions of installed SquishRunTestCase.sh
- Fix module docs to be manpage (groff) friendly
- Support GNU/kFreeBSD
- Remove old Encoding field from CMake.desktop
- FindQt3: Prefer (moc|uic)-qt3 names over (moc|uic)
- Match width of ctest "Start xx: " line to line up with the end test line
- Remove old license from FindPkgConfig.cmake module
- Test target link information invalidation
- Invalidate target link info when necessary
- Use new style header generation and get rid of OBJECT_DEPENDS in tutorial
- Fix issue #8649 - move the location of CPACK_NSIS_EXTRA_INSTALL_COMMANDS so that it is not excluded from execution when 'Do not create shortcuts' is checked.
- add the additional features for the dbus macros from KDE's FindQt4.cmake
fc9f7a5 Fix warnings in CMake source code.
- Correct some typos in error messages in the string command. Add a test that covers more of the code implemented in cmStringCommand.cxx, especially the error handlers.
- Create INTERPROCEDURAL_OPTIMIZATION build feature
- Document CMAKE_CURRENT_LIST_FILE more precisely
- Fix the documentation to say what it really does. Bug #9638
- document how the minimum version can be specified
- Fix warnings in CMake source code. Suppress rampant warnings emanating from Qt files.
- Add documentation for Cocoa flag and move Motif under X11 flag.

Changes in CMake 2.8.0 RC 2
- Fix FindQt4 so that QtHelp depends on QtNetwork
- Add missing copyright notice to CMake.cmake module
- Add alternative _UTILITY targets to all VS solutions 
- FindGTest.cmake some bugfixes, also added public function for closer integration btwn GoogleTest & CTest, contributed by Dan Blezek.
- Eliminate ExternalProject's use of CMAKE_CFG_INTDIR subdir for Makefile generators. It was causing problems with parallel make -j invocations. Keep it for multi-configuration build systems so that Debug and Release stamp files remain separate.
- Fix for bug #9611, some more paths for OpenJDK.
- Fix get_filename_component() registry view with wow64
- Fix warnings in CMake source code.
- Fix module definition file reference for VS6 NMake
- Fix for bug #9611 do not hard code archs for search paths of java, look at the machine type.
- Fix bug#9619 add a link to module maintainers page in readme.txt for Modules
- Add cmake-help-command function to emacs-mode
- Add initial XL C compiler flags for safer builds
- Split XL compiler information files
- Fix default install prefix on Haiku
- Fix use of module .def files for MS tools
- Add StringProperty options includeing /def: for VS 10 flag table
- Convert copyright to OSI BSD and clean up licenses
- ENH: Added ctest test coverage for a test timeout
- CTest honors test timeouts again.
- Remove ctest_submit from CTestTestParallel
- Fix shared library creation flag for XL on Linux
- Fix BUG: 0009612: --output-on-failure option doesn't work with
  the new parallel CTest handler
- Removed support for cutil library and header file.
- Fixed CUDA_PROPAGATE_HOST_FLAGS, added path for Mac SDK.
- Make sure LINK_FLAGS are seen by generator, fix for part of bug#9613
- Fix issue #9412 - remove RPATH from files copied by
  BundleUtilities.cmake on Linux. Thank
- Fix support for OLD behavior of policy CMP0002
- Fix issue #8818 - escape quotes in the license file when using the
  DragNDrop cpack genera
- Fix .vfproj file version for Intel Fortran 10.1
- Use BeAPI for per-user package registry on Haiku
- Correct comments and use ASM${ASM_DIALECT} env. var instead of ASM
  env. var to initialize
- Fix bug #9529.
- Fix Windows GUI implib and image version in VS 6
- Convert newlines from CRLF to LF
- Oops. Last commit did not create subdir before doing a touch on a
  file in it. So it fails of a type that is expected to have a
  location...
- Policies 14 and 15 will be first released in 2.8.0
- Document full version number with policy default
- Simplify bootstrap script source dir detection
- Documentation fixes, new CUDA_PROPAGATE_HOST_FLAGS, changed output
  directory.

Changes in CMake 2.8.0 RC 1 

- Qt based GUI cmake-gui is now the default GUI, MFC CMakeSetup is no
  longer included in CMake.  ccmake is still supported.
- cmake-gui supports multi-state values options.
- CMake now has cmake --build command that can build any CMake generated
  project from the command line.
- Visual Studio 2010 beta support has been added.
- KDevelop generator now has color output for builds.
- CTest supports running tests in parallel with a -j N option.
- A new CTest CTEST_USE_LAUNCHERS option can be used to get better
  dashboard error reports with make based tools.
- CTest has support for sub-projects and labels which can interact
  with CDash.
- CTest now supports Git, Mercurial, and Bazaar.
- It is now possible to use DESTDIR in CPack for any CMake based projects
  giving more flexibility on the final path names.
- The CPack Deb generator now computes the arch instead of hard coding it.
- Fortran/C mixed language projects made much easier. CMake now
  automatically can compute the run time libraries for a compiler. In
  addition, a new FortranCInterface module can determine the correct
  name mangling needed to mix C and Fortran.
- Intel compiler support added to OSX, and support for embedded
  manifests in the windows intel compiler was added.
- Depend scanning is now much faster with makefiles.
- Many FindQt4 improvements to stay working with current Qt releases
- FindMPI has improvements for windows.
- FindBoost has been updated to work with the most recent boost releases.
- New External Project Module.  The 'ExternalProject_Add' function
  creates a custom target to drive download, update/patch, configure,
  build, install and test steps of an external project.
- xmlrpc dependancy has been removed
- CMAKE_OSX_DEPLOYMENT_TARGET cache variable has been created to set the
  deployment OS for a build on OSX.
- Several new policies were added:
  CMP0012
       The if() command can recognize named boolean constants.
  CMP0013
       Duplicate binary directories are not allowed.
  CMP0014
       Input directories must have CMakeLists.txt.
  CMP0015
       The set() CACHE mode and option() command make the cache value
       visible.
- Lots of bug fixes.
