Changes in CMake 2.8.8 (since 2.8.8-rc2)
----------------------------------------
Brad King (1):
      CheckIncludeFiles: Shorten check description message

David Cole (3):
      CPackNSIS: Rewrite variable documentation to make it more readable.
      OS X: Use correct extra path when searching for applicaton bundles (#13066)
      OS X: Mark find_program results as advanced

Eric NOULARD (1):
      Fix some doc typo and add an undocumented var.

Kashif Rasul (1):
      OS X: Use OSX_DEVELOPER_ROOT for app search path (#13066)

Rolf Eike Beer (1):
      FindBoost: add support for 1.49 and 1.50

Changes in CMake 2.8.8-rc2 (since 2.8.8-rc1)
--------------------------------------------
Alex Neundorf (4):
      make cmLocalGenerator::EscapeForCMake() static
      automoc: fix #13018, proper cmake escaping to avoid false rebuilds
      automoc: add define to test which caused bug #13018
      fix #13054: support OBJECT libraries in Eclipse

Ben Boeckel (1):
      Create granular targets for Ninja generators too

Brad King (6):
      CTest.UpdateHG: Fix repo URL for leading slash
      Always compile sources with known language
      Classify known header file extensions as headers
      VS: Add CMakeLists.txt re-run rules at start of generation
      Test generated module .def files
      Ninja: Fix module .def file path conversion

David Cole (2):
      CMake: Clarify SUFFIX target property documentation.
      Xcode: Pay attention to custom configuration types (#13082)

Peter Collingbourne (1):
      Ninja: Substitute <OBJECT> and <CMAKE_C_COMPILER> in depfile flags

Rolf Eike Beer (2):
      FILE: mention that TO_CMAKE_PATH also handles list delimiters
      FIND_LIBRARY: document FIND_LIBRARY_USE_LIB64_PATHS

Sean McBride (1):
      automoc: include <unistd.h> on Apple to get pathconf

Tom Hughes (1):
      Override topdir from rpm command line seems necessary on Amazon linux.

Changes in CMake 2.8.8-rc1 (since 2.8.7)
----------------------------------------
Aaron C. Meadows (1):
      Visual Studio: Allow setting Single Byte Character Set (#12189)

Alex Neundorf (34):
      GNUInstallDirs: add support for Debian multiarch
      FindRuby: fix usage of RUBY_VERSION_MAJOR (#12172)
      FindRuby: add more possible library names (for ubuntu, #12172)
      FindRuby.cmake: add more debug output
      fix FeatureSummary for REQUIRED packages, they were reported as OPTIONAL
      FindGetText: fix multiple targets with the same name problem (CMP0002)
      fix #6976: FindX11 also searches for X11_Xxf86vm_LIB
      GenerateExportHeader: use double quotes around _gcc_version
      -remove trailing whitespace
      -don't pull in CheckTypeSize.cmake from the cmake which is being built
      bootstrap: move while() and endwhile() into the bootstrap build
      Check*.cmake: Expand imported targets in CMAKE_REQUIRED_LIBRARIES
      find_package: print error if an invalid CONFIGS name is used
      find_package: rename NoModule to UseFindModules
      find_package: improve error message when no Find module is present
      find_package: add MODULE mode to use only Find-modules
      find_package: add CONFIG mode keyword alias for NO_MODULE
      find_package: mention requested version number in error message
      add CMakePackageConfigHelpers: configure_package_config_file()
      wrap write_basic_config_version_file as write_basic_package_version_file()
      find_package: error out if REQUIRED Config has not been found
      write_basic_package_version_file(): improve documentation
      write_basic_package_version_file: add ExactVersion mode
      WriteBasicConfigVersionFile: add test for ExactVersion mode
      find_package: allow <pkg>Config.cmake to set <pkg>_FOUND to FALSE
      find_package: add test for setting Foo_FOUND to FALSE in a Config file
      find_package: additional test for checking the error message
      find_package: add OPTIONAL_COMPONENTS keyword
      FPHSA(): add missing "]" to documentation
      find_package: add documentation for OPTIONAL_COMPONENTS
      FPHSA(): add HANDLE_COMPONENTS option
      add macro check_required_components() to configure_package_config_file()
      Eclipse: fix #13036, make version detection work with symlinks
      guard eCos.cmake against multiple inclusion (#12987)

Alexandru Ciobanu (2):
      CTest: Detect Xcode error "Command ... failed with exit code"
      CTest: Match valgrind errors with "points to" (#12922)

Alexey Ozeritsky (1):
      FindBLAS/FindLAPACK: Work with MKL version 10.3 (#12924, #12925)

Artur Kedzierski (1):
      Add CURL_CA_BUNDLE option for SSL support (#12946)

Bill Hoffman (12):
      Add CMakeAddFortranSubdirectory to use MinGW gfortran in VS
      VSGNUFortran: Add special case for SunPro Fortran runtime library
      VSGNUFortran: Disable test in special cases
      CMakeAddFortranSubdirectory: Make IMPORTED targets GLOBAL
      Use upgraded qt on linux  build machine.
      Teach CTest what a ninja error looks like.
      Allow two cmake_add_fortran_subdirectory calls in the same project.
      Add ability to include a file in a project via a cache variable.
      Fix typo in error message, and remove redundent test.
      Ninja: Add a cache option CMAKE_ENABLE_NINJA to enable the ninja generator.
      Ninja: Fix for PDB files with spaces in the path.
      Fix FindMPI for the intel compiler on linux by looking in implict directories.

Bjoern Ricks (1):
      Fix crash if app bundle executeable couldn't be found

Brad King (138):
      CheckCCompilerFlag: Generalize "but not for C" case (#12633)
      complex: Remove ancient unused ComplexRelativePaths test
      complex: Sync Tests/ComplexOneConfig with Tests/Complex
      complex: Remove dynamic loader tests
      complex: Move GeneratedFileStream test to CMakeLibTests
      complex: Simplify test for single-character exe name
      complex: Move cmSystemTools::UpperCase test to CMakeLibTests
      complex: Remove test dependence on cmSystemTools
      complex: Remove unused option to test CMakeLib
      Intel: Fix Windows per-config Fortran flags (#12642)
      libarchive: Remove our copy to make room for new import
      libarchive: Add .gitattributes for indentation with tab
      libarchive: Add README-CMake.txt
      libarchive: Do not build subdirectories not in reduced snapshot
      libarchive: Remove -Wall -Werror from build with GNU
      libarchive: Build one static cmlibarchive for CMake
      libarchive: Include cm_zlib.h to get zlib used by CMake
      Handle libarchive API change in archive_read_data_block
      Configure libarchive build within CMake
      libarchive: Install COPYING with CMake documentation
      libarchive: Port to OSF operating system
      libarchive: Fix typo in CheckFileOffsetBits
      libarchive: Implement custom lseek for Borland
      libarchive: Declare mbstate_t and wcrtomb for Borland
      libarchive: Cast constants to int64_t instead of using LL suffix
      libarchive: Workaround case-insensitive symbols on Borland
      libarchive: Clean up configuration within CMake build
      libarchive: Cast mode constants to mode_t in case it is signed
      libarchive: Fix Windows NT API usage in VS 6
      libarchive: Suppress compiler warnings
      libarchive: Fix var decl after statement in archive_string.c
      libarchive: Do not use ST_NOATIME if not defined
      libarchive: Check for 'struct statvfs' member 'f_iosize'
      libarchive: Do not use MNT_NOATIME if not defined
      libarchive: Use Apple copyfile.h API only if available
      libarchive: Remove hard-coded build configuration
      libarchive: Cleanup after ZLIB_WINAPI check
      libarchive: Define _XOPEN_SOURCE=500 on HP-UX
      libarchive: Include linux/types.h before linux/fiemap.h
      libarchive: Rename isoent_rr_move_dir parameter isoent => curent
      libarchive: Suppress PathScale compiler warnings
      libarchive: Avoid bogus conversion warning from PGI compiler
      libarchive: Set .gitattributes to allow trailing whitespace
      libarchive: Update README-CMake.txt for new snapshot
      libarchive: Restore CMake 2.6.3 as minimum version
      bootstrap: Update copyright year in version report
      bootstrap: Re-implement command line option processing
      bootstrap: Forward options after '--' to cmake
      VS10: Fix /pdb option vcxproj element name (#12328)
      Add framework to detect compiler version with its id (#12408)
      Detect GNU compiler version with its id (#6251)
      Detect MSVC compiler version with its id
      Detect Intel compiler version with its id (#11937)
      Detect Borland compiler version with its id
      Detect IBM XL compiler version with its id
      Detect PGI compiler version with its id
      Detect Clang compiler version with its id
      Detect Watcom compiler version with its id
      Detect SunPro compiler version with its id
      Detect HP compiler version with its id
      Document compiler version macro formats used for detection
      Detect SGI MIPSpro compiler version with its id
      ExternalProject: Fix git.cmd version detection
      ExternalProject: Update copyright year
      Include bzlib.h consistently across CMake build (#10950)
      FindMPI: Append MPI C++ library correctly in non-compiler case (#12874)
      Add infrastructure for CMake-only tests
      Tolerate cycles in shared library link interfaces (#12647)
      cmInstallCommand: Fix line length for style
      cmake-mode.el: Indent after multiline argument (#12908)
      Clarify IMPORTED_ target property documentation
      Optionally allow IMPORTED targets to be globally visible
      Add test covering imported target scope rules
      VS: Simplify ;-separated attribute value parsing
      Fix CXX/Fortran MODULE flags when enabled before C (#12929)
      Remove unused test code
      Allow directory names containing '=' and warn if necessary (#12934)
      Add CheckLanguage module
      CMakeAddFortranSubdirectory: Allow full paths to directories
      CMakeAddFortranSubdirectory: Fix documentation format and typos
      CMakeAddFortranSubdirectory: Find gfortran in PATH
      CMakeAddFortranSubdirectory: Validate gfortran architecture
      CMakeAddFortranSubdirectory: Always parse arguments
      CMakeAddFortranSubdirectory: Add NO_EXTERNAL_INSTALL option
      libarchive: Workaround mbsnrtowcs assertion failure on old glibc
      Recognize OpenBSD versioned .so names (#12954)
      try_compile: Use random executable file name (#12957)
      Rename Modules/Platform/Windows-{Borland => Embarcadero}.cmake
      Recognize Embarcadero compiler (#12604)
      Factor cmInstallType out of cmTarget::TargetType
      Add infrastructure for CMakeCommands tests
      find_package: Reject mixed use of MODULE- and CONFIG-only options
      find_package: Optionally warn when implicitly using Config mode
      find_package: Test error and warning messages in failure cases
      bootstrap: Convert MSYS paths to Windows format (#13001)
      CTest.UpdateHG: Fix repo URL for local filesystem (#13001)
      cmcurl: Do not hard-coded Windows check results for MinGW (#13001)
      CheckSourceTree: Remove CVS checkout support (#13001)
      Fix MSYS CVS local test repo path format (#13001)
      find_package: Test that REQUIRED aborts processing correctly
      Remove unused partial OBJECT_FILES property implementation
      VS: Simplify object name computation
      Hide Makefile local object info inside local generator
      KWIML: Make test_INT robust to #define-d int#_t and INT#_C
      Add stronger infrastructure for CMake-only tests
      Use generalized RunCMake test infrastrucure for find_package test
      Use generalized RunCMake test infrastrucure for build_command test
      Document Fortran_MODULE_DIRECTORY as OUTPUT only (#13034)
      Ninja: Constify use of cmCustomCommand
      Ninja: Avoid using 'this' in member initializers
      Write CMakeCache.txt atomically (#13040)
      Add cmGeneratorTarget to represent a target during generation
      Create a cmGeneratorTarget for each cmTarget during generation
      Simplify cmMakefileTargetGenerator using cmGeneratorTarget
      Simplify cmVisualStudio10TargetGenerator using cmGeneratorTarget
      Pre-compute object file names before Makefile generation
      Pre-compute object file names before VS project generation
      Remove unused cmSourceGroup method
      Rename/constify build-time config placeholder lookup
      Pre-compute and store target object directory in cmGeneratorTarget
      Add OBJECT_LIBRARY target type
      Build object library targets in Makefiles
      Build object library targets in VS
      Add $<TARGET_OBJECTS:...> expression to use an object library
      Test OBJECT library success cases
      Test OBJECT library failure cases
      Test OBJECT library language propagation
      Test OBJECT library use without other sources
      Document OBJECT library type in add_library command
      Simplify cmNinjaTargetGenerator using cmGeneratorTarget
      Pre-compute object file names before Ninja generation
      Build object library targets in Ninja
      Ninja: Honor $<TARGET_OBJECTS:...> source expressions
      find_package: Test rejection of required+optional components
      Simplify cmVisualStudio10TargetGenerator source classification
      VS10: Fix external objects generated outside target (#13047)
      Fix ObjectLibrary test on Watcom
      KWIML: Avoid conflict with C++11 user-defined literals

Christian Andersson (1):
      FindPythonLibs: Search for single-user installs on Windows

Christopher Sean Morrison (1):
      cmake-mode.el: Make indentation case-insensitive (#12995)

Clinton Stimpson (14):
      GetPrerequisites: Add support for @rpath on Mac OS X.
      GetPrerequisites: Add support for @rpath on Mac OS X.
      GetPrerequisites: Add test for @rpath support.
      Fix new BundleUtilities test failure on Mac 10.4.x
      Fix BundleUtilities test failure with space in build path.
      cmake-gui: Improve interrupt granularity to fix bug 12649.
      FindQt4: clarify warning message about incorrect Qt installation.
      FindQt4: Add include directories for lupdate.
      Fix paths/hints for finding qtmain.
      DragNDrop: Fix problem with relocated files in Xcode 4.3
      Add test for DeployQt4.cmake
      Fix for Qt4Deploy on some test machines.
      Remove QtGui dependency in Qt4Deploy test and verify QtSql existance.
      DeployQt4: Add path to Qt dlls on Windows.

Daniel Nelson (1):
      CPack  Add top level directory in component install for Archive Generators

David Cole (33):
      Begin post-2.8.7 development
      Release: Increase timeout for slow-testing cygwin build
      Update dashmacmini2 release script to use Qt 4.6.3
      Update dashmacmini2 release script to use Qt 4.8.0
      Tests: Update drop site value for the Trilinos contract test
      Update version of Qt for dashmacmini5 produced release binaries
      CTestCustom: Suppress clang warning on the dashboard
      CMake: Eliminate cmMakefile::IncludeDirectories
      Remove cmMakefile::GetIncludeDirectories
      Make search paths ordered and unique
      Call ExpandVariablesInString for each target's INCLUDE_DIRECTORIES
      Update the documentation regarding INCLUDE_DIRECTORIES.
      Fix compiler error reported on older Borland dashboard.
      Fix compiler warning reported on older Borland dashboard.
      Fix shadowed variable warning on dashboard results
      Remove trailing white space
      Use correct "requires" line in cygwin setup hint file
      VS6: Avoid _MBCS define when _SBCS is defined (#12189)
      VS6: Avoid SBCS test on VS6 (#12189)
      Suppress warnings occurring on the dashboards using the PGI compiler.
      CPack: Fix retry logic when calls to hdiutil fail
      Ninja: CMake: Adapt Ninja generator for per-target include dirs
      Ninja: Add friend struct so it can access the private ConvertToNinjaPath.
      Xcode: Detect new default locations of Xcode 4.3 bits and pieces (#12621)
      CPack: Use real path to PackageMaker to find its version file (#12621)
      Xcode: Re-factor code into GetObjectsNormalDirectory method
      Xcode: Re-factor some existing methods into "FromPath" variants
      Add a default source group for object files.
      Allow txt files as ExtraSources in object library targets
      Pre-compute object file names before Xcode generation
      Build object library targets in Xcode
      Xcode: Honor $<TARGET_OBJECTS:...> source expressions
      Tests: Relax restrictions on version variable contents

Deborah Pickett (1):
      CPackRPM flag direcories with %dir in the generated spec file

Droscy (1):
      FindCxxTest: Add support for CxxTest 4 (#13022)

Eric NOULARD (41):
      Document undocumented (but existing) cpack options (fix #0010134)
      Enhance bash completion file for cmake and ctest
      Do not add the content of a file if it's a symlink.
      CPackArchive restore default behavior and provide new variable.
      CPackNSIS fix #0012935 switch from LOG_WARNING to avoid final error.
      CPack begin the implementation of --help-command* and --help-variables*
      Implement simple CMake script comment markup language.
      CPack Documentation extraction from CMake script begins to work
      Update bash completion file in order to handle new CPack doc options.
      Suppress unused var, beautify code, avoid 1 extra newline.
      Fix potential bad memory access, thanks to Eike
      Calm down compiler warning about unused var
      Really avoid compiler warning about unused vars
      Fix another compiler warning due to a typo
      Make the load of script documentation more efficient and dynamic.
      Example of builtin variable documentation (i.e. only used in C++ source code).
      Add missing section markup for CPackComponent
      Create getDocumentedModulesListInDir which may be used in other context.
      Fix non existent std::string::clear on VS6
      Avoid discovering system infos for documentation. Adding some path is enough.
      Dynamically add documentation section specified in documented script.
      Add structured documentation for NSIS
      Add structure documentation for CPack Bundle generator
      Suppress unecessary (now empty) doc sections
      Correct copy/paste section name mistake
      Put CPack DMG and PackageMaker doc in separate files
      More documentation concerning CPack Components
      Fix typo in end markup
      Try to fix compile error on Win32-vs70
      Do not build RPM if path of the build tree contains space
      Fix layout of the CPack Bundle documentation
      Fix CPack Drag and Drop generator documentation layout.
      Review and update CPack variable documentation.
      Update CPackConfig template.
      Provide template for CPack Cygwin generator specific variables.
      Update CPack PackageMaker variable doc layout
      Typo: Add missing ##end for ##module
      Fix some typos in CPACK_SET_DESTDIR doc
      Add some missing CPACK_NSIS_xxx doc and move some to common CPack section.
      CPack STGZ put execute permission on all packages files (component case)
      Handle CPACK_MONOLITHIC_INSTALL in some rare use cases.

Eugene Golushkov (1):
      VS: Add support for WinRT project properties (#12930)

James Bigler (1):
      Added support for curand, cusparse, npp, nvcuenc and nvcuvid libraries.

Jason Erb (1):
      FindwxWidgets: Add webview library (#12636)

LibArchive Upstream (2):
      libarchive 3.0.1-r3950 (reduced)
      libarchive 3.0.2-r4051 (reduced)

Matthias Kretz (1):
      Improve checks for Open64 and g++ incompatible flags (#12119)

Mattias Helsing (1):
      CPack: Fix NSIS handling of privileged users (#12923)

Michael Wild (1):
      GenerateExportHeader: Fix wrong use of IS_ABSOLUTE (#12645)

Mike McQuaid (5):
      Don't use QT_LIBRARIES_PLUGINS by default.
      Fix mismatched arguments.
      Fix bad plugin paths.
      Ensure libs are passed to BundleUtilities.
      Fix plugin installation issues.

Modestas Vainius (3):
      various typo and formatting fixes in manual pages (#12975)
      KWIML: Teach ABI.h that MIPS is biendian
      Tests: Escape metachars before embedding paths into the regex (#12999)

Nicolas Despres (5):
      ccmake: Factor clear line.
      ccmake: Extend clear line.
      java: Factor jar output path.
      java: Add CMAKE_JAVA_TARGET_OUTPUT_DIR optional variable.
      java: Add CMAKE_JAVA_JAR_ENTRY_POINT optional variable.

Peter Collingbourne (19):
      Add cmSystemTools::TrimWhitespace function
      Add executable with exports flag support to cmLocalGenerator::GetTargetFlags
      Provide dependency file flags to generator
      Ninja: Add the Ninja generator
      Ninja: Fix a 79-col violation
      Ninja: Remove some default arguments
      Ninja: Appease various compilers
      Ninja: Partially revert "win fixes: escape back slash/colon, use cd. as cmd.exe nop"
      Ninja: Identifier encoding rules for ' ' and ':'
      Ninja: Backslash rules for Windows
      Ninja: Shell encode paths used in "cd" commands
      Ninja: Shell encode various CMake invocations
      Ninja: Shell encode the command used in custom commands
      Ninja: Import library support for Windows
      Ninja: Add a missed license header
      Ninja: Use cmSystemTools::ExpandListArgument to split compile/link commands
      Ninja: Remove an unnecessary variable
      Ninja: add support for OBJECT_OUTPUTS, fix PrecompiledHeader test case
      Ninja: shell escape $(CMAKE_SOURCE_DIR) and $(CMAKE_BINARY_DIR)

Peter Kuemmel (12):
      Find VC Express during default generator selection (#12917)
      Ninja: win fixes: escape back slash/colon, use cd. as cmd.exe nop
      Ninja: don't define MSVC_IDE when using the ninja generator
      Ninja: also build ninja support on Windows
      Ninja: add some hacks for Windows
      Ninja: disable unfinished Windows ninja support
      Ninja: mark the Windows specific hacks with a comment only
      Ninja: windows msvc: create for each target a .pdb file
      Ninja: ensure the output dir exists at compile time
      Ninja: add .def file support
      Ninja: add /DEF: flag to linker call
      Ninja: Fix <OBJECT_DIR> substitution

Philip Lowman (5):
      FindProtobuf: Merge patch that allows extra import dirs
      FindProtobuf: Update documentation comment for 2.8.8
      Findosg: New modules for osgQt and osgPresentation
      FindALSA: Fix incorrect include path detection
      FindALSA: Fix version detection after last commit

Rolf Eike Beer (95):
      remove reference to CVS directory when installing files
      CheckSymbolExists: force the compiler to keep the referenced symbol
      add a test for Check{,CXX}SymbolExists
      FindOpenSSL: improve version number handling
      FindOpenSSL: only try to parse opensslv.h if it exists
      FindOpenSSL: also parse version number define with uppercase letters
      GenerateExportHeader test: add newlines before end of file
      add a test that loops through most Find* modules
      AllFindModules test: keep complete output
      AllFindModules test: also check Qt3 modules if Qt4 is not found
      FindPythonInterp: make version selectable
      FindPythonInterp: fix version parsing
      LoadCommand test: cleanup
      FindThreads: Try pthreads with no special option first (#11333)
      fix uninitialized var in if(NOT foo bar STREQUAL "foo bar")
      use pkg_check_modules() quiet in other modules
      FindLibXml2: support version selection
      FindGnuTLS: partly support version selection
      FindGit: support version number
      FindCups: major overhaul
      FindEXPAT: support version number
      FindCURL: support version selection
      FindFLEX: fix version parsing for old flex versions
      FindFLEX: fix version parsing when the executable is quoted
      FindJasper: find debug libraries
      FindJasper: support version number
      FindBZip2: add support for version checking
      FindBZip2: add support for debug libraries (#12867)
      FindImageMagick: make use of more FPHSA features
      FindPNG: support version selection
      FindRuby: do not blindly set version to 1.8.0
      FindTclsh: support version selection
      SelectLibraryConfigurations: do not output identical configurations
      FindLua51: add version support
      FindTIFF: support version selection
      FindCURL: detect version number also for older versions
      FindLibXml2: detect version when PkgConfig is not used
      FindPostgreSQL: support version selection
      FindOpenSSL: properly parse the hex version components
      FindBISON: add a version expression for GNU Bison 1.x
      FindPythonInterp: try harder to get a version number
      FindJasper: fix library name
      FindGnuplot: add version selection
      FindALSA: support version selection
      FindGettext: support version selection
      CheckCXXCompilerFlag test: make it a CMakeOnly test
      CMakeOnly.AllFindModules: clean up the Qt3/Qt4 code
      CMakeOnly.AllFindModules: always check FindQt
      CMakeOnly.AllFindModules: suppress two modules from testing
      CMakeOnly.AllFindModules: require version for some modules
      CheckIncludeFiles: fix status output
      FindPerl{,Libs}: move version detection into FindPerl
      FindLibArchive: support version selection
      FindX11: also search for Xmu (#12447)
      detect "pgfortran" as PGI Fortran compiler (#12425)
      FindSDL*: use FPHSA (#12467)
      AllFindModules test: do not enforce GNUPLOT version
      FindPerlLibs: properly detect libperl on Windows (#12224)
      CTest: mark all gcov covered files as covered
      FindGLUT: honor REQUIRED (#12466)
      FindRuby: clean up querying variables from Ruby
      FindLibXslt: support version selection
      Tests: document where to put tests
      FindPkgConfig: support version selection of pkg-config itself
      fix the same typos as found by Debian in other places, too
      Find_library(): allow searching for versioned shared objects
      FindFreetype: support version selection
      AllFindModules test: expect more modules to have a version number available
      FindOpenMP: do not fail if only C or CXX is enabled (#11910)
      FindOpenMP: try the most likely flags first
      FindOpenMP: simplify check for enabled languages
      UseSWIG: clean up string compares
      FindPython{Interp,Libs}: document Python_ADDITIONAL_VERSIONS as input
      FindPythonLibs: make the version selection work as for PythonInterp
      FindPythonLibs: get the exact version of the found library (#3080)
      FindPythonLibs: put debug libraries into PYTHON_LIBRARIES
      FindPythonLibs: stop scanning when libraries are found
      Check{C,CXX}CompilerFlag: detect ICC error messages
      GenerateExportHeader: remove unneeded code
      GenerateExportHeader: improve compiler identification
      FindOpenSceneGraph: give every message() with an explicit level
      FindHSPELL: set HSPELL_VERSION_STRING
      FindImageMagick: fix fail if no components were given
      FindPythonInterp: rework the version detection
      document when version detection will not work
      AllFindModules test: once again expand version checking
      improve error message on a stray "endwhile()"
      add testcases for while()/endwhile() errors
      reflect that the QtAutomoc depends on QtGui
      FindQt3: fix warning when Qt3 is not found
      FindQt3: fix version extraction for versions with letters
      FindQt3: let FPHSA handle the version selection
      FindQt3: fix detection of Qt3 include directory
      AllFindModules test: do not require TCLSH version
      add test for get_property() errors

Stephen Kelly (13):
      Fix typos arguement -> argument.
      Exit the loop when we have determined the language.
      Add whitespace after '.' in CMAKE_SKIP_RPATH docs.
      Fix documented function signature to match reality.
      Add default initializers for WIN32_EXECUTABLE and MACOSX_BUNDLE
      Add an option to skip RPATH during installation.
      Refactor GetIncludeFlags to take includes instead of fetching them
      Make it safe to call this method without creating duplicates.
      Remove include flags memoization.
      Add API to get the ordered includes for a target.
      Keep the INCLUDE_DIRECTORIES target property up to date.
      Extract and use the INCLUDE_DIRECTORIES target properties.
      Fix some typos in the docs comments.

Yury G. Kudryashov (23):
      FindDoxygen: add DOXYGEN_VERSION variable
      cmInstallCommand: Fix indentation error
      cmInstallCommand: Remove duplicated sentence from docs
      FindPkgConfig: respect REQUIRED (#12620)
      FindPackageHandleStandardArgs: fix documentation
      Remove unused file cmake.1
      Fix typo in documentation
      Drop if(...) check because condition is always true
      CMakeFindPackageMode: fix 32/64bit detection if 'file' is a symlink
      Run vim spellcheck on some files
      cmPropertyDefinition::IsChained is const
      Add 'const' qualifier to some cmCommand members
      doxygen: cmPropertyDefinition
      doxygen: Improve API docs of GetRealDependency
      doxygen: Use proper syntax to document enum
      doxygen: Small fixes in cmake.h apidocs
      doxygen: fix some comments in cmPolicies.h
      doxygen: remove a few comments
      doxygen: review cmake.h
      doxygen: MathCommand is not about string operators
      Rename UsedCommands to FinalPassCommands
      Remove UnionsAvailable member from 2 classes
      Remove cmExprParserHelper::SetLineFile()

Changes in CMake 2.8.7 (since 2.8.7-rc2)
--------------------------------------------
None

Changes in CMake 2.8.7-rc2 (since 2.8.7-rc1)
--------------------------------------------
Alex Neundorf (5):
      automoc: default to strict mode, use CMAKE_AUTOMOC_RELAXED_MODE
      automoc: improved warning message in relaxed mode
      Remove trailing whitespace
      Add comment about one more problem of the C depency scanner.
      fix #12262: dependency scanning for ASM files

Bill Hoffman (1):
      Fix the case where cmake --build failed with two project cmds in one file.

Brad King (11):
      KWSys: Correctly handle empty environment variables
      FortranCInterface: Work around mingw32-make trouble with parens
      Xcode: Create separate rerun dependencies for subprojects (#12616)
      Fix Intel Fortran .vfproj files for VS 10
      HP: Drive shared library linking with compiler front end
      Follow all dependencies of shared library private dependencies
      Do not link private dependent shared libraries on OS X > 10.4
      Avoid clobbering variable 'OUTPUT' in compiler tests (#12628)
      Fix and simplify Fortran test compiler compatibility check
      CTest: Recognize Intel errors without space before colon (#12627)
      Windows-GNU: Remove extra quotes in GNUtoMS rule variable

David Cole (4):
      Release: Increase timeout for slow-testing cygwin build
      Modules: Use "windres" as rc compiler base name for cross-compiles (#12480)
      Tests: Only really run MFC test if we can build MFC apps (#11213)
      FindBoost: Quote possibly empty string argument (#12273)

Eric NOULARD (1):
      CPackRPM fix #0012608 and unoticed related bug

Johan Fänge (1):
      CMake: Fix progress reporting for custom targets (#12441)

Mike McQuaid (2):
      Unset configurations variable when no build type.
      Improve component support and output indentation.

Raphael Kubo da Costa (2):
      Remove the apparently outdated README in Source/QtDialog.
      QtDialog: Set Ctrl+Q as the shortcut for quitting the program.

Tim Gallagher (2):
      FindLAPACK: Correct CMAKE_FIND_LIBRARY_SUFFIXES spelling (#12624)
      FindLAPACK: List thread libs to avoid link errors (#12625)

Valat Sébastien (1):
      CTest: Do not get CDash version without drop site (#12618)

Changes in CMake 2.8.7-rc1 (since 2.8.6)
----------------------------------------
Aaron Ten Clay (1):
      VS: Add support for three new project properties (#12586)

Alex Neundorf (60):
      fix #12392: handle CMAKE_CXX_COMPILER_ARG1 for Eclipse projects
      fix #12262: use the C dependency scanner also for ASM files
      fix #12465: detect the masm compiler ID ("MSVC")
      Silence make on OpenBSD in FindPackageModeTest(#12508)
      Remove trailing whitespace
      Find Ruby on OpenBSD when installed from ports (#12507)
      Eclipse generator: detect Eclipse version
      Detect whether the current Eclipse version supports VirtualFolders
      Eclipse: don't create VirtualFolders if not supported
      Eclipse: better message when Eclipse version could not be determined
      automoc:run moc on the header if the source file contains include "foo.moc"
      Add copyright notices
      automoc: always run moc on the cpp file if there is a foo.moc included
      Eclipse: add virtual folder for each target
      Eclipse: move code for generating links to projects into separate function
      Eclipse: move code for generating links to targets into separate function
      Eclipse: add Build and Clean targets to targets
      Eclipse: detect number of CPUs, set CMAKE_ECLIPSE_MAKE_ARGUMENTS accordigly
      Eclipse: fix #12417, don't create wrong src pathentries
      FindLibXslt: also search libexslt and xsltproc
      don't crash in automoc with empty COMPILE_DEFINITIONS property
      Automoc: fix the fix, need to use std::string, not just char* pointer
      automoc: fix #12541, support moc options
      add documentation for the AUTOMOC_MOC_OPTIONS property
      Eclipse: warn if CMAKE_BINARY_DIR is subdir of CMAKE_SOURCE_DIR
      Eclipse: make targets work from any directory
      Eclipse: quote the build dir (to make it work with spaces)
      make automoc work when using ccmake via PATH (#12551)
      Strip trailing whitespace
      -make GETTEXT_PROCESS_PO_FILES() work with files with multiple dots
      FindGettext: two more fixes for files with multiple dots
      FindPNG: provide PNG_INCLUDE_DIRS, as the readme.txt says (#11312)
      Eclipse: create links to subprojects also in the source-project (#12579)
      Eclipse: use new variable CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT
      install(EXPORT): Enforce existence of imported target files
      Remove trailing whitespace
      cmake-gui: add completion for the names when adding cache entries
      automoc: stricter checking for what file is included
      automoc: rework the checking for the matching header, to give better warnings
      automoc: handle the case when the developer includes the wrong mocfile
      automoc: add more test cases
      automoc: improved diagnostics
      automoc: minor optimization
      automoc: another runtime optimization
      Automoc: modified handling of included .moc files
      automoc: add a test for including both abc.moc and moc_abc.cpp
      automoc: add test for including the moc file from another header
      automoc: add test for including a moc_abc_p.cpp file
      automoc: move some code from the big parsing loop into separate functions
      automoc: add special handling for including basename_p.moc, with test
      automoc: add extra check whether the header contains Q_PRIVATE_SLOT
      automoc: some more linebreaks for the warnings for better readability
      automoc: fix handling of included _p.moc files
      automoc: move the code for finding headers into separate function
      automoc: add a StrictParseCppFile(), which is only qmake-compatible
      automoc: also accept other files when .moc is included in non-strict mode
      automoc: accept even more .moc files in non-strict mode
      automoc: add variable CMAKE_AUTOMOC_STRICT_MODE, to enable strict parsing
      automoc: fix line length
      automoc: add documentation for CMAKE_AUTOMOC_STRICT_MODE

Alexey Ozeritsky (1):
      FindLAPACK: Fix linking to static LAPACK on Unix (#12477)

Bernhard Walle (1):
      Source/cmCTest.cxx: Add missing newline (#12538)

Brad King (65):
      Refactor find_* command final path list computation
      Constify XCode generator getters to match cmGlobalGenerator
      Fix line-too-long style violations
      KWSys: Fix Doxygen warnings
      Add pre-commit|commit-msg|prepare-commit-msg hook placeholders
      pre-commit: Reject changes to KWSys through Git
      Fix CTest.UpdateSVN with Subversion 1.7 (#12535)
      Teach CTest.UpdateSVN to detect svn add --depth before using it
      KWSys: Address Intel compiler remarks
      Fix linking to OS X Frameworks named with spaces (#12550)
      Watcom: Use shortpath to CMake if full path has parens (#12548)
      KWSys: Remove trailing whitespace in SystemTools.cxx
      KWSys: Fix wrong spelling of __INTEL_COMPILER
      Update main Copyright.txt year range for 2011
      KWIML: The Kitware Information Macro Library
      Configure KWIML inside CMake as cmIML
      KWIML: Avoid redefining _CRT_SECURE_NO_DEPRECATE in test.h
      KWIML: Suppress printf/scanf format warnings in test
      KWIML: No INT_SCN*8 on SunPro compiler
      KWIML: No INT_SCN*8 on Intel for Windows
      KWIML: Create test output dir for Xcode
      Order VS local generator Version ivar values consistently
      Enumerate VS11 version explicitly in local generators
      KWIML: Test header inclusion after system headers
      KWIML: Ignore _LONGLONG on MS compiler
      KWIML: Teach ABI.h about PGI compiler
      KWIML: Avoid MSVC linker warning about not using C++ runtime
      Factor Compute(File|String)MD5 into cmCryptoHash helper
      Add file(MD5) command to compute cryptographic hash
      Import sha2 implementation 1.0 from Aaron D. Gifford
      Import sha2 implementation 1.1 from Aaron D. Gifford
      sha2: Use KWIML fixed-size integer types and endian-ness
      sha2: Build as part of CMakeLib
      Add file(SHA*) commands to compute cryptographic hashes
      sha2: Use "static const" instead of "const static" declarations
      cmCryptoHash: Provide factory "New" method
      Add string(MD5) and string(SHA*) commands to compute hashes
      sha2: Use KWIML fixed-size integer constant macros
      sha2: Suppress Borland warnings in third-party code
      Disable file() and string() hash commands during bootstrap
      sha2: Wrap long lines in third-party declarations
      Fix CMake.File hash test for CRLF checkouts
      cmCryptoHash: Add virtual destructor
      sha2: Cast safe conversions to smaller integer types
      sha2: Suppress -Wcast-align warning from Clang
      sha2: Zero entire SHA_CTX structure during cleanup
      target_link_libraries: Add missing space in documentation
      target_link_libraries: Simplify argument processing state tests
      install(EXPORT): Improve target import failure message format
      Remove trailing whitespace from cmLocalGenerator
      bootstrap: Include cmNewLineStyle in build
      cmNewLineStyle: Remove trailing comma in enum
      cmNewLineStyle: Use cmStandardIncludes.h
      Provide std::ios_base typedef on GCC < 3
      FindZLIB: Search under ZLIB_ROOT if it is set
      Factor out target location undefined behavior helper macro
      export(): Document undefined behavior of location properties
      Recognize the Tiny C Compiler (#12605)
      TinyCC: Add compiler info for shared libs on Linux (#12605)
      Fortran: Detect pointer size in gfortran on MinGW
      Load platform files that need to know the ABI when possible
      Factor makefile generator link rule lookup into helper function
      Add CMAKE_GNUtoMS option to convert GNU .dll.a to MS .lib
      Test CMAKE_GNUtoMS option in ExportImport on MinGW and MSys
      cmTarget: Create helper method for versioned library names

Clinton Stimpson (2):
      Fix XML safety issue with adding preprocessor defines in CodeBlocks project.
      Qt4: Fix dependencies of QtDeclartive.

Dan Kegel (1):
      Modules: Add XRes to FindX11.cmake

David Cole (17):
      Begin post-2.8.6 development
      CTest: Fix crash when variables are not defined
      VS11: Fix comment generated at the top of *.sln files
      CTest: Add COVERAGE_EXTRA_FLAGS cache variable (#12490)
      CTest: Clear custom vectors before populating (#12383)
      Tests: Add the MFC test (#11213)
      Tests: Avoid MFC test automatically for VCExpress builds (#11213)
      Tests: Fix MFC test w/ Make-based generators (#11213)
      Tests: Fix MFC test for old vs6 dashboards (#11213)
      Tests: Avoid MFC test automatically for Watcom WMake builds (#11213)
      Tests: Fix MFC test to work with VS 10 and later (#11213)
      VS10: Use expected values for UseOfMfc (#11213)
      Tests: Add environment logging to the MFC test (#11213)
      VS11: Update InstallRequiredSystemLibraries.cmake for VS11 (#11213)
      Tests: Nudge MFC test to pass on VS 6 dashboards (#11213)
      VS: Use "call " keyword with .cmd and .bat file custom commands (#12445)
      CTest: Disallow problem chars in build and site names (#11792)

Eric NOULARD (3):
      CPackRPM support component specific variables for spec files
      Fix old reference to CMAKE_MAKE_PROGRAM inside CMAKE_BUILD_TOOL doc.
      CPackRPM fix #12556 and enhance documentation

James Bigler (6):
      Added support for CUDA_PATH which is present in the CUDA toolkit 3.2 onward.
      Reset dependency file list when a dependency disappeared.
      Add work around for CUDA in UNC paths.
      Fixes for handling quotes in args and other places (Fix Bug 11726 and 12099).
      Make CUDA working directory unique for each target.
      Miscellaneous fixes.

Jean-Christophe Fillion-Robin (1):
      CTest: Look for CTestConfig.cmake in build dir first, then source dir

Johan Bjork (1):
      Xcode: Avoid spewing the environment on every script run (#12522)

Mateusz Loskot (1):
      FindBoost: Use MSVC11 to find Boost on Windows (#12568)

Mathieu Malaterre (1):
      TinyCC: Add default compilation flags (#12605)

Mike McQuaid (6):
      Add QT_LIBRARIES_PLUGINS variable to UseQt4.
      Add DeployQt4 module.
      Match fixup_qt4_executable with documentation.
      Don't resolve directories; are never relative.
      Check plugin variables are defined before warning.
      Check QtCore without warning.

Nicolas Despres (17):
      Refactor TargetTypeNames.
      Add const versions of some getters.
      Constify many getters of cmGlobalGenerator.
      Remove trailing white-spaces.
      Fix typo.
      Doxygen: Improve code documentation.
      Doxygen: Generate call graph and relationships.
      Doxygen: Fix warnings.
      Doxygen: Remove dependency on VTK when building doxygen.
      Usage: Document -j|--parallel option in help message.
      Usage: Document all options printing usage information.
      Usage: Document all options printing the version number.
      Usage: Print help, version and copyright options in usage information.
      Usage: Add missing exepath argument in get_prerequisites documentation.
      ccmake: Align 'g' and 'q' key instructions.
      ccmake: Document '/' key.
      ccmake: Factor toggle key help instructions.

Niels Dekker (1):
      Fix CMAKE_VERBOSE_MAKEFILE for VS10 vcxproj files (#12504)

Ondrej Balaz (1):
      FindBISON: Fix bison++ version parsing to avoid "Offending entry"

Peter Collingbourne (4):
      Make cmLocalGenerator::ConvertToLinkReference virtual
      Introduce a cmLocalGenerator::ConvertToIncludeReference function
      Introduce a cmGlobalGenerator::ResolveLanguageCompiler function
      Fix configuration-dependent flag lookup in cmLocalGenerator::GetTargetFlags

Peter Kuemmel (1):
      Add NEWLINE_STYLE option to configure_file (#3957)

Philip Lowman (1):
      FindProtoBuf: Documented limitation of the public macro

Pierre-Francois Laquerre (1):
      Fix path quoting in Qt4 macros

Robert Dailey (1):
      VS: Add VS_SCC_AUXPATH target property (#12549)

Rolf Eike Beer (4):
      libarchive: fix typo in CheckFileOffsetBits.cmake
      Tell people that link_directories() is not what they are searching for
      FindBISON: Fix matching output of "bison --version"
      Tests: ExternalProject: Remove unnecessary 'svn --version' call

Stephen Kelly (13):
      Add features from KDE for arguments to qdbusxml2cpp.
      Remove unused define.
      Build each library only once instead of once for each test.
      Initialize LINK_INTERFACE_LIBRARIES target property with a variable
      Also run moc automatically with Qt5.
      Fix typo.
      Don't assume the existence of QT_MAJOR_VERSION.
      Update comments and method names to not be Qt4 specific.
      Fix style.
      target_link_libraries: Trim trailing whitespace
      target_link_libraries: Add LINK_(PUBLIC|PRIVATE) options
      moc is now part of the Qt5Core module
      Add a test case for the use of Q_PRIVATE_SLOT.

Changes in CMake 2.8.6 (since 2.8.6-rc4)
----------------------------------------
Alex Neundorf (5):
      Remove trailing whitespace
      Minor improvements to the UsePkgConfig.cmake docs
      Remove trailing whitespace
      Improve behaviour of --find-package mode with try_run/try_compile
      Use makefile->IssueMessage() for better error messages

Bill Hoffman (2):
      Use version 11.0 for 12.x and 9.10 for 10.x intel versions to fix 12.1 vsIDE.
      Also, check for 11.x as an intel fortran version.

Brad King (2):
      Add Visual Studio 11 generator for x86 and x64 tools
      Teach our tests about special cases for VS 11

David Cole (1):
      CTestCustom.cmake: Ignore clang's summary warning

Philip Lowman (1):
      FindBullet: Also search for _Debug postfixed library names

Raphael Kubo da Costa (1):
      Fix typo in set_target_properties' documentation.

Rolf Eike Beer (1):
      Fix typo in UsePkgConfig.cmake

Changes in CMake 2.8.6-rc4 (since 2.8.6-rc3)
--------------------------------------------
Alex Neundorf (3):
      FindFLEX.cmake: also search the include dir
      Fix typos in FeatureSummary.cmake (#12462)
      Don't warn when setting a property multiple times to the same value #12464

Bill Hoffman (2):
      For VS Intel Fortran IDE builds, add a check to find the Fortran library PATH.
      Enable Fortran tests for IDE builds.

Brad King (5):
      FortranCInterface: Compile separate Fortran lib in VerifyC[XX]
      Move IntelVSImplicitPath project to better location
      Simplify IntelVSImplicitPath detection project
      libarchive: Fix ssize_t detection with mingwrt 3.20
      Make file(DOWNLOAD) fail on http error

David Cole (8):
      Tests: Add a KWStyle test, equivalent to the make StyleCheck target
      KWStyle Test: Activate by default if KWStyle is found
      Xcode: Use EFFECTIVE_PLATFORM_NAME reference in ComputeOutputDir
      Xcode: Add test to demonstrate iOS project in Xcode
      CMake: Reference test targets only when BUILD_TESTING is ON
      Tests: Add the more modern Mac64 nightly build
      Release Scripts: Use Qt 4.7.4 on dashmacmini5 (#12460)
      Revert "FindThreads: Try pthreads with no special option first (#11333)"

Eric NOULARD (4):
      CPack fix #12449 doc mispelled
      CPack fix template too
      CPackDeb fix #10325 automagically use fakeroot for DEB if fakeroot is found
      CPackRPM authorize per-component pre/post-[un]install scripts (#0012063)

Marcus D. Hanwell (4):
      Just code style changes.
      Don't warn when nothing to do in visibility function.
      Made ADD_COMPILER_EXPORT_FLAGS into a macro.
      Make add_compiler_export_flags a function again.

Rolf Eike Beer (1):
      remove stray brace in CPackDeb documentation

Changes in CMake 2.8.6-rc3 (since 2.8.6-rc2)
--------------------------------------------
Alexey Ozeritsky (2):
      FindBLAS/LAPACK fixes
      FindBLAS/LAPACK fixes

Andreas Schneider (1):
      Modules: Add support for more java archives in add_jar().

Björn Ricks (4):
      Search for the installed python interpreter first
      Determine python version
      Update documentation of FindPythonInterp.cmake
      Use FIND_PACKAGE_HANDLE_STANDARD_ARGS second mode

Brad King (5):
      VS: Map per-source Fortran flags to IDE options
      VS: Map Fortran free- and fixed-format flags to IDE options
      Fortran: Add support for free- and fixed-form flags
      Xcode: Honor Fortran_FORMAT target and source file property
      Set CMAKE_<lang>_COMPILER_ID for VS generators

David Cole (8):
      KWSys: Remove always-true dir_only parameter
      KWSys: Add symlinks to directories as files (#12284)
      FindPackageMessage: Eliminate new lines in cache entries
      FindPackageMessage: Eliminate new lines using REGEX REPLACE
      CMake: Add SaveCache at the end of successful Generate calls
      Suppress Qt warning for dashmacmini5 builds
      Suppress Qt warning for dashmacmini5 builds
      Tests: Look for "Illegal" or "SegFault" in the output

Eric NOULARD (2):
      CPack  fix #12366 components RPM packages have the same package name
      CPackRPM fix #12305, include directories in RPM package

Johan Björk (5):
      Xcode: No spaces in makefile target names (#12370)
      CMake: Write symlinks to directories as files in archives (#12284)
      CPack: Do not recurse through directory symlinks (#12284)
      Xcode: Do not emit the ZERO_CHECK target more than once
      Xcode: Honor -g0 to disable debugging (#12377)

Johannes Stallkamp (1):
      CTest: Fixed valgrind output parsing (#12260)

Matt McCormick (1):
      CMake: Remove documentation for -E build (#12446)

Stephen Kelly (2):
      Add some more unit tests.
      Don't put what some compilers consider junk at the end of the line.

Thomas Jarosch (3):
      CTest: Fix memory leaks on error
      Fix file() command descriptor leak on error
      ccmake: Fix off-by-one memory access error

Changes in CMake 2.8.6-rc2 (since 2.8.6-rc1)
--------------------------------------------
Brad King (2):
      KWSys: Add hash function for std::string
      KWSys: Fix std::string hash function for Borland

Clinton Stimpson (1):
      qt4: also find QtUiTools when cross compiling with mingw.

David Cole (3):
      Xcode4: Requires more quoting of single quote char
      cmake.m4: Use modern signature of install(FILES ...)
      CMake Release Scripts: Changes for next release candidate...

David Faure (1):
      Don't use a variable name that might be used in other files.

Stephen Kelly (73):
      Create moc files in the current binary dir, not the top level.
      Make the formatting of feature_summary output a little better.
      Add the GenerateExportMacro with unit tests.
      Handle the case where the user changes the DEFINE_SYMBOL property.
      Add a newline at the end of the file.
      Add a newline at the end of the file.
      Add missing licence header.
      Remove the fatal_warnings option which is no longer used.
      Test for features, not specific compilers.
      Simplify. We already know we have hidden visibility at this point.
      Simplify the compiler feature check
      Add some debug output.
      Short-circuit the tests on unsupported compilers.
      Test expected no-op instead of aborting the build.
      Fix tests with clang.
      Fix typo and tests failing as a result.
      Only run the failure tests with gcc >= 4.2
      Set the CMAKE_RUNTIME_OUTPUT_DIRECTORY for windows builds.
      Only set the COMPILER_HAS_HIDDEN_VISIBILITY if GCC >= 4.2
      Disable all export macros on Borland.
      Another attempt to fix the tests on Borland.
      Use the correct project name compiletest not compilefail
      Fix off-by-not in test for Borland.
      Another attempt at fixing Borland.
      Add some debug output to narrow down deprecation test issues
      Export deprecated free methods too.
      Remember to surround the other deprecated test in the Borland check.
      Only set the deprecated attribute if hidden visibilty is enabled.
      Make sure the hidden visibility variables never get set on MINGW.
      Don't use hidden visibility on non-mingw windows either.
      Don't export methods on already exported classes.
      Split the deprecated available check from setting macro values.
      Test for compiler features, instead of for specific platforms.
      Exclude the XL compiler from the hidden-visibility test.
      Add the COMPILER_HAS_DEPRECATED only if it has a declspec variant
      Don't change the expected build result based on the platform.
      Expect the tests to pass if hidden visibilty is not enabled.
      Test -Werror instead of enabling it per compiler.
      Add some messaging output to make remaining issues findable.
      Perform the -Werror test only once.
      Test for deprecated attribute before declspec.
      Try to error on deprecated on Intel and SunCC.
      Borland can't do deprecated.
      Fixup forgotten part of aed84517c942a4c40f493fcf997cdf6a047349f8
      Disable testing of deprecated macros.
      Don't enable deprecated on HP.
      Don't enable deprecated on old GCC
      Exclude cygwin from the hidden visibility feature.
      Exclude PGI from exports and deprecated.
      Start testing expected values for compiler flags.
      Exclude win32 from hidden visibility checks.
      Comment the test assertion for now
      Test the correct cxx variable.
      Fix the version extraction regex for clang.
      Hopefully add version extraction for Intel.
      Add some settings for non-truncation of test output.
      Fix up the regex command for Intel.
      Test for too-old-intel compilers.
      Possibly fix test on HPUX.
      Possibly fix configuration test on AIX.
      Try to make the macros do almost nothing for Watcom.
      More consistency in the macro options.
      Add missing NO_EXPORT macro variant.
      Look for errors reported by PGI too.
      Quote paths in case there is a space in one of them.
      Disable the tests for Watcom.
      Fix Compiler id variable name.
      Add quotes in case cmake is installed in a prefix with a space.
      Fix the feature of using a specific prefix for macros.
      Add documentation about the prefix and no_deprecated options.
      Remove blank line at the start of the file.
      Don't start a line with a dash(-)
      Fix up verbatim code sections of the dox.

Todd Gamblin (3):
      FindBoost: Call find_package with NO_MODULE first
      Fix XL compilers on non-AIX machines.
      Fixed link bugs in BlueGeneP build.

Changes in CMake 2.8.6-rc1 (since 2.8.5)
--------------------------------------------
Aaron C. Meadows (1):
      FindSubversion: Invoke svn non-interactively (#12304)

Alex Neundorf (92):
      Add a switch to disable a find_package() call completely
      Add documentation for the CMAKE_DISABLE_FIND_PACKAGE_<Name> switch
      Add a basic test for CMAKE_DISABLE_FIND_PACKAGE_<package>
      Add macros cmake_push/pop_check_state() as discussed on the list.
      Fix copyright notice test
      Add CheckCXXSymbolExists.cmake, so this can be used also for C++
      Minor fix to try_compile() docs (#12333)
      Fix #12342: Add APPEND_STRING option to set_property()
      Extend FeatureSummary: add PURPOSE of package and TYPE
      FeatureSummary.cmake: remove "comment" field
      FeatureSummary.cmake: add INCLUDE_QUIET_PACKAGES keyword
      FeatureSummary.cmake: error out when a REQUIRED package is missing
      FeatureSummary.cmake: only higher TYPEs can override previous TYPEs
      FeatureSummary.cmake: cosmetics
      FeatureSummary.cmake: update documentation
      Remove debug output from CheckSymbolExists
      Don't put files from CMAKE_ROOT into CodeBlocks projects (#12110)
      More PATH_SUFFIXES for finding Postgresql and also search catalog/pg_type.h
      Use FPHSA(), remove unnecessary stuff and don't recommend link_directories()
      Mark the results from find() as advanced
      FindPostgreSQL: fix PATH_SUFFIXES, better output for FPHSA
      Strip trailing whitespace
      FindGIF/FindFreetype.cmake: remove standard search paths from find-calls
      FindGif: add giflib4 as one more name for the library under Windows
      Add basic version check for giflib
      Patch by Campbell Barton: puts definitions into C::B project file
      Remove useless line of code
      Also put builtin include dirs into CodeBlocks project file
      Remove trailing whitespace
      Also search for libxkbfile, XSync and SM include dir
      Provide macro write_basic_config_version_file()
      Add example to documentation
      Add some tests for write_basic_config_version_file()
      Fix copyright notice
      Really fix copyright notice
      Set UNSUITABLE instead of not COMPATIBLE
      Improve documentation for WriteBasicConfigVersionFile.cmake
      Add macros GETTEXT_PROCESS_POT() and GETTEXT_PROCESS_PO_FILES()
      Support REQUIRED in FindGettext.cmake (using FPHSA.cmake)
      Fix #12358: make optionally enabling ASM work again
      Start work on automoc: add empty cmQtAutomoc class
      Start implementing skeleton for automoc in cmake
      Add actual automoc code from automoc
      Remove the need to check for .h/.cxx during buildtime
      Add the cmake module required currently for automoc
      Add AUTOMOC to the add_library() command
      Fix line lengths
      Move code for parsing a cpp-file from the big loop to separate function
      Initialize verbose based onb the env.var.
      Color output when running moc
      Add the generated automoc.cpp file to the cleaned files
      Use cout instead of printf()
      Remove trailing whitespace
      Refactor SetupAutomocTarget() so it can be run after creating the target
      Remove trailing whitespace
      Move automoc processing from add_executable/library to cmGlobalGenerator
      Nicer progress message for the automoc target
      Add a test for automoc
      Add documentation for AUTOMOC, add initialization via CMAKE_AUTOMOC
      Fix logic which decides when to execute automoc test
      Automoc.cmake is not needed anymore
      Fix build: non-void function must return a value
      Fix warnings
      Fix bootstrap test with automoc
      Only enable the automoc test after checking that Qt4 works
      Fix build: use std::ios::out|ios::trunc instead of std::ios_base::out
      Silence warning in automoc: use long instead of int
      Fix automoc with VS builds: apply patch from Bill
      Make clLocalGenerator::GetTargetFlags() public
      Add find-package mode, which does nothing yet
      Implement find-package mode of cmake
      Replace cmake::GetScriptMode() with GetWorkingMode()
      Fix copyright notice in new CMakeFindPackageMode.cmake
      Better support for lib64 and Debian multiarch
      Use the file-utility to test for 64bit if there is no /usr/lib64
      Add a cmake.m4 for using cmake in autoconf projects instead of pkgconfig
      Improve documentation for --find-package mode
      Add a test for the new --find-package mode
      Only run the test if we are using a makefile generator under UNIX
      The makefile for the test was kindof wrong
      Fix test on OpenBSD with BSD make
      Rename helper macros print_compile_flags() to set_compile_flags_var()
      Dont check for -isysroot and -mmacosx-version on OSX in --find-package mode
      Disable any STATUS output in --find-package mode
      Much improved test, should now be executed on all UNIXes
      Make the --find-package test harder
      Make the test harder by always having a space in the include dirs
      Only enable the test when using GNU make
      Fix line length
      Use $(CXXFLAGS) and $(LDFLAGS) in the --find-package test Makefile
      Require the current cmake version in --find-package mode
      Fix --find-package mode on Cygwin, where enable_language(RC) is called

Alexey Ozeritsky (5):
      fixed: search of acml libraries
      gotoblas supported
      ACML-GPU supported
      ACML-GPU supportede
      fixed: search of ATLAS library for C/C++-only projects

Andreas Schneider (6):
      FindJava: Find missing java development executables.
      Modules: Added CMake Java support.
      Tests: Java tests should test UseJava.cmake
      Tests: Check for the new Java exeutable variables.
      Java: Use set_property/get_property for target variables.
      Java: Fix documentation format and indentation

Arnaud Gelas (1):
      Search for the ASPELL executable

Bill Hoffman (5):
      Only pay for unused variable checking if it is on.
      Initial support for Intel Fortran VS2010.
      Fix custom commands in VS2010 Fortran projects using CFG_INTDIR and test.
      Use MSBuild when devenv is not around, since VCExpress seems broken.
      Fix for bug #12413, nmake did not handle targets with + in the name.

Brad King (13):
      MinGW: Remove old workaround and use native echo (#12283)
      Document caveat of custom commands in multiple targets (#12311)
      cmSystemTools: Remove trailing whitespace
      RunSingleCommand: Fix indentation
      RunSingleCommand: Avoid assignment in condition
      Documentation: WIN32 not defined on Cygwin (#12334)
      KWSys: Simplify SystemTools::GetTime implementation (#12261)
      KWSys: Avoid conversion warning in SystemTools::GetTime
      KWSys: Fix using long long and __int64 with hash_(set|map)
      KWSys: __int64 and long long may be same type in specialization
      XL: Fix old VisualAge branding of Fortran compiler
      Do not crash when an imported target depends on a missing target
      Fix CHECK_(C|CXX)_COMPILER_FLAG for Clang (#12394)

Clinton Stimpson (5):
      Add -DQT_NO_DEBUG if no build type is specified so Qt plugins will work.
      Add qt4/QtCore to help find Qt headers when cross-compiling.
      Qt4: Fix reference of undefined variable when detecting frameworks on Mac OS X
      Remove C compiler requirement from FindQt4.cmake
      CPack/NSIS: Fix reinstall and multiple install issues when using components.

David Cole (26):
      Begin post-2.8.5 development
      Fix Architecture test to work with Xcode 4
      Fix BuildDepends test to work with Xcode 4
      Base architecture choice logic on Xcode version
      Use correct default multiple architecture values in test
      Add use of EFFECTIVE_PLATFORM_NAME to generated Xcode projects.
      Correct KWStyle line too long error
      Add fail regex to detect supported warning flags correctly.
      Add support for Visual Studio project-specific globals (#8707)
      Fix machine-specific UpdateGIT test failures
      Ensure libgmp-10.dll is in the PATH for CMakeTestAllGenerators
      Watcom: Add -c flag to wlib calls (#12245)
      Add Watcom support to InstallRequiredSystemLibraries (#11866)
      Watcom: Use correct args for execute_process call (#11866)
      CTest: print failed tests in index order (#11746)
      Fix line too long style violation
      Documentation: Fix comments in the source code (#10941)
      Add more find_path locations for DCMTK header files (#12323)
      VS9: Add include_directories to midl command lines
      KWSys: Remove translation path for "/tmp_mnt/" (#10595)
      VS10: Avoid unnecessary rebuilds for custom commands
      QtAutomoc test: Pass QT_QMAKE_EXECUTABLE
      QtAutomoc: Eliminate compiler warning
      CheckSymbolExists: Use IMMEDIATE flag for configure_file (#11333)
      Xcode: Suppress same-old warning again.
      Xcode: Save object id values in CMakeCache.txt (#11690)

Johan Björk (5):
      Xcode: Remove PREBINDING attribute for Xcode 4 and above
      RunSingleCommand: Replace verbose boolean with enum
      RunSingleCommand: Add a OUTPUT_NORMAL flag.
      Xcode: Quote ',' in Xcode string values (#12259)
      Xcode: Rearrange CMakeReRun to enable parallel builds

Matej Hribernik (2):
      VS: Factor Find64BitTools out of Win64 generator to parent
      Add VisualStudio 9 and 10 generators for Itanium platform

Modestas Vainius (1):
      multiarch: Treat lib/<arch> as implicit link dir (#12326)

Oliver Buchtala (3):
      Java: Create java_class_filelist only if it does't exist.
      Java: Added some dependency magic to avoid recompilations.
      Java: Create correct jar archive dependencies.

Rolf Eike Beer (2):
      remove extra output message from FindJava.cmake
      FindThreads: Try pthreads with no special option first (#11333)

Steven Velez (1):
      VS10: Add SCC support

Todd Gamblin (2):
      Try regular compiler when no MPI compiler.
      Fix issues with removing try_compile input file.

Will Dicharry (1):
      Added HDF5 high level Fortran bindings to available components.

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.
