Changes in CMake 2.8.10.1 (since 2.8.10)
----------------------------------------------
Brad King (5):
      Fix default PDB output directory (#13644)
      Fix PathScale compiler id for Clang-based upstream
      Update programmatically-reported copyright year (#13638)
      FindSDL: Restore accidentally dropped search paths (#13651)
      OS X: Fix default CMAKE_OSX_SYSROOT with deployment target

Rolf Eike Beer (2):
      FindOpenSSL: fix library selection on Windows (#13645)
      FindOpenSSL: also find the non-MD debug libraries for MSVC

Stephen Kelly (1):
      GenEx: Use case insensitive comparison for $<CONFIG:...>

Changes in CMake 2.8.10 (since 2.8.10-rc3)
----------------------------------------------
None

Changes in CMake 2.8.10-rc3 (since 2.8.10-rc2)
----------------------------------------------
Rolf Eike Beer (2):
      SelectLibraryConfigurations: add testcase
      SelectLibraryConfigurations: fix for release and debug libs being the same

Stephen Kelly (5):
      BasicConfigVersion: Make docs refer to the macro, not the module name
      Document LOCATION undefined behavior with use of LINKER_LANGUAGE.
      GenEx: Add an accessor for imported targets in a makefile.
      GenEx: Create cmGeneratorTargets for imported targets.
      GexEx: Validate Target names and property names differently.

Thomas Arcila (1):
      SelectLibraryConfigurations: Fix foreach(x IN LISTS ...) syntax

Changes in CMake 2.8.10-rc2 (since 2.8.10-rc1)
----------------------------------------------
Alex Neundorf (2):
      Document CMAKE_FIND_PACKAGE_NAME
      Automoc: fix #13572: issue with symbolic links

Brad King (4):
      cmCTestSVN: Fix compilation with Sun CC 5.1
      if: Document that plain 'NOTFOUND' is a false constant
      string: Clarify regex documentation of '-' behavior
      FortranCInterface: Pass all flags to VERIFY project (#13579)

David Cole (1):
      NSIS: Fix incorrect uninstall registry key name (#13578)

Eric NOULARD (3):
      CPACK_XX_ON_ABSOLUTE_INSTALL_DESTINATION is now properly checked for ON/OFF
      Document CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY and fix some typo.
      Make CPACK_SET_DESTDIR work with archive generator + component-based packaging

Jean-Christophe Fillion-Robin (1):
      CTest: Ensure CTEST_USE_LAUNCHERS behaves nicely in Superbuild setup

Pere Nubiola i Radigales (1):
      Find PostgreSQL headers on Debian

Peter Kümmel (4):
      Ninja: also set OBJECT_DIR when compiling
      Ninja: don't pollute current dir when using gui (#13495)
      Ninja: implicit dependency for custom command files
      Fix regression: write compile definitions if any

Philip Lowman (4):
      FindGTK2: Rollback lib64 changes which broke header file finding
      FindGTK2: #12049 fix detection of header files on multiarch systems
      FindGTK2: #12596 Missing paths for FindGTK2 on NetBSD
      FindGTK2: Update local changelog

Rolf Eike Beer (6):
      CTest: fix usage of memory checker with spaces in path
      CTest: fix pre and post test commands with spaces
      CTest: add tests that simulate memcheck runs
      CTest: improve memory checker type detection
      CTest: add a test for CTEST_CUSTOM_MEMCHECK_IGNORE
      CTest: add a check with a quoted memory checker

Stephen Kelly (18):
      GenEx: It is not an error to specify an empty parameter
      GenEx: Return after error reported.
      GenEx: Report actual target name not found, not "0" each time.
      GenEx: Parse comma after colon tokens specially
      GenEx: Validate target and property names.
      GenEx: Ensure that the empty CONFIGURATION can be used conditionally.
      GenEx: Add test for $<BOOL:> with empty parameter.
      GenEx: Add tests for "0" and "1" expressions with literal commas.
      GenEx: Don't use std::vector::at(int).
      Attempt to fix the compile of cmake on Sun CC.
      GenEx: Parse colon after arguments separator colon specially.
      GenEx: Test the use of generator expressions to generate lists.
      GenEx: Fix termination bugs in generator expression parser.
      GenEx: Break if there are no more commas in the container
      GenEx: Add some more asserts to verify code-sanity.
      GenEx: Replace some failing tests with Borland and NMake makefiles.
      GenEx: Fix reporting about not-found include directories and libraries.
      Fix config-specific INCLUDE_DIRECTORIES in multi-config generators

Changes in CMake 2.8.10-rc1 (since 2.8.9)
-----------------------------------------
Scripted Changes (3):
      Remove trailing whitespace from most CMake and C/C++ code
      Convert CMake-language commands to lower case
      Remove CMake-language block-end command arguments

Alex Neundorf (27):
      Eclipse: add support for the 4.2 Juno release (#13367)
      Eclipse: improve (fix ?) version detection on OSX
      Eclipse: fix #13358: don't create bad linked resources
      Eclipse: fix #13358: don't create bad linked resources
      remove non-working KDE4 test
      Eclipse on OSX: fix handling of framework include dirs (#13464)
      Eclipse on OSX: improve handling of framework include dirs (#13367)
      -fix line length
      fix #13474: also rescan dependencies if the depender does not exist
      -fix line length
      -fix Java dependency scanning, broken in previous commit
      error out if CTEST_USE_LAUNCHERS is TRUE but RULE_LAUNCH_* are not set
      fix #13494: rerun automoc also if include dirs or moc options change
      CMakeDetermineFortranCompiler: add support for cross-compiling (#13379)
      Automoc: fix #13493, use target properties for include dirs
      Automoc: do not use DEFINITIONS, but only COMPILE_DEFINITIONS
      Automoc: also the makefile-COMPILE_DEFINITIONS
      cmGlobalGenerator.h: some minor coding style fixes
      Modules/readme.txt: fix typo
      find_package: add support for a <package>_NOT_FOUND_MESSAGE variable
      exports: store pointers to all installations of each export set
      exports: accept a missing target if it is exported exactly once
      exports: first try at error handling if a target is missing
      exports: fix build with MSVC6
      exports: move the handling of missing targets into subclasses
      exports: define a CMAKE_FIND_PACKAGE_NAME var set by find_package()
      exports: add a test for exporting dependent targets

Andreas Mohr (1):
      FindCURL: Find older MSVC prebuilts

Andy Piper (1):
      Do not include directories which are part of the package install prefix.

Benjamin Eikel (21):
      Initial version of find module
      FindSDL: Add version support for FindSDL_net
      FindSDL: Version support for FindSDL_image
      FindSDL: Use prefix SDL_NET, because it matches the file name.
      FindSDL: Use SDL_IMAGE prefix for varibales
      FindSDL: Add "cmake_minimum_required" to "try_compile" project
      FindSDL: Format the documentation
      FindSDL: Version support for FindSDL_sound
      FindSDL: Use same capitalization for FPHSA as file name
      FindSDL: Pass SDL_SOUND_LIBRARY to FIND_PACKAGE_HANDLE_STANDARD_ARGS
      FindSDL: Use SDL_MIXER prefix for variables
      FindSDL: Add version support for FindSDL_mixer
      FindSDL: Update documentation
      FindSDL: Use SDL_TTF prefix for variables
      FindSDL: Add version support for FindSDL_ttf
      FindSDL: Update documentation
      FindSDL: Format documentation
      FindSDL: Add version support
      FindSDL: Add my copyright tag to all FindSDL_* modules
      FindSDL: Remove from find_... calls PATHS that are set by default
      FindSDL: Stay compatible with old input variables

Bill Hoffman (8):
      Use OUTPUT_NORMAL instead of OUTPUT_MERGE for cmake -E chdir.
      curl: Use find_package(OpenSSL)
      curl: Make OpenSSL DLLs available to CMake on Windows
      file(DOWNLOAD): Generalize EXPECTED_MD5 to EXPECTED_HASH
      file(DOWNLOAD): Add options for SSL
      Utilities/Release: Enable CMAKE_USE_OPENSSL in nightly binaries
      Add SSL_VERIFYPEER and CAINFO file options to ExternalProject_Add.
      Revert "Ninja: don't expand any rsp files"

Brad King (83):
      find_library: Add test covering lib->lib64 cases
      find_library: Refactor lib->lib64 conversion
      find_library: Simplify lib->lib<arch> expansion
      find_library: Fix mixed lib->lib64 (non-)conversion cases (#13419)
      CMakeDetermine(C|CXX)Compiler: Consider Clang compilers
      Factor common code out of CMakeDetermine(ASM|C|CXX|Fortran)Compiler
      Prefer generic system compilers by default for C, C++, and Fortran
      Xcode: Fix object library references in multi-project trees (#13452)
      Xcode: Run xcode-select to find Xcode version file (#13463)
      Watcom: Simplify compiler version detection (#11866)
      Remove trailing TAB from NSIS.template.in
      Fix WarnUnusedUnusedViaUnset test pass/fail regex
      CMakeVersion.bash: Update sed expression for lower-case 'set'
      GetPrerequisites: Mark file_cmd as advanced cache entry
      Add boolean generator expressions
      Add $<CONFIG:...> boolean query generator expression
      Recognize Clang ASM support (#13473)
      Xcode: Set ASM source language in project file (#13472)
      Tests/Assembler: Do not use assembler in universal binaries
      Add FindHg module to find Mercurial
      ExternalProject: Add Mercurial (hg) repository support
      Qt4Macros: Fix recently broken resource file parsing
      Tests/ObjectLibrary: Do not enable CXX in subdirectories
      VS11: Rename 'Immersive' to 'WindowsAppContainer' (#12930)
      VS: Disable precompiled headers unless enabled by project (#12930)
      VS11: Generate flag tables from MSBuild V110 tool files
      Detect Compaq compiler version with its id
      Detect PathScale compiler version with its id
      Detect TI compiler version with its id
      Detect Comeau compiler version with its id
      Detect SDCC compiler version with its id
      Detect Cray compiler version with its id
      Detect Analog VisualDSP++ compiler version with its id
      Re-order C/C++/Fortran compiler determination logic
      CMakeDetermineCompilerId: Prepare to detect IDE compiler id
      Xcode: Detect the compiler id and tool location
      VS10: Define CMAKE_VS_PLATFORM_TOOLSET variable
      VS: Detect the compiler id and tool location
      Cleanly enable a language in multiple subdirectories
      Test variables CMAKE_(C|CXX|Fortran)_COMPILER(|_ID|_VERSION)
      Document CMAKE_<LANG>_COMPILER_(ID|VERSION) values
      Make platform information files specific to the CMake version
      Move CMAKE_<LANG>_COMPILER_WORKS to compiler information files
      Store ABI detection results in compiler information files
      VS: Remove support for "free" version 2003 tools
      VS: Simplify MSVC version reporting
      Modernize MSVC compiler information files
      VS: Fix MSVC_IDE definition recently broken by refactoring
      add_library: Document POSITION_INDEPENDENT_CODE default (#13479)
      magrathea: Tell cmELF about DT_RUNPATH (#13497)
      Utilities/Release: Link AIX binary with large maxdata
      Utilities/xml: Add .gitattributes to disable whitespace checks
      Utilities/xml: Add docbook-4.5 DTD (#13508)
      docbook: Fix formatter naming convention to avoid shadow
      docbook: Fix Sun CC warning on ptr_fun(isalnum)
      curl: Honor OPENSSL_NO_SSL2
      if: Compare up to 8 components in VERSION tests
      ExternalProject: Generalize URL_MD5 option to URL_HASH
      Rename SSL terminology to TLS
      file(DOWNLOAD): Make TLS options behave as documented
      OS X: Add platform-specific Clang compiler info files (#13536)
      VS11: Detect VS 2012 Express for default generator (#13348)
      VS11: Add VS 2012 Express support (#13348)
      file(DOWNLOAD): Add HTTP User-Agent string
      ExternalProject: Add DOWNLOAD_NAME option
      file(DOWNLOAD): Change EXPECTED_HASH to take ALGO=value
      VS8: Remove '.NET' from generator description (#10158)
      Clang: Split Compiler/Clang* modules out from GNU (#13550)
      Clang: All versions know about -fPIE (#13550)
      Xcode: Remove unused code reading CMAKE_OSX_SYSROOT_DEFAULT
      OS X: Always generate -isysroot if any SDK is in use
      OS X: Improve default CMAKE_OSX_SYSROOT selection
      bootstrap: Suppress CMAKE_OSX_SYSROOT if CFLAGS have -isysroot
      Tests/Assembler: Use CMAKE_OSX_SYSROOT to generate .s file
      OS X: Allow CMAKE_OSX_SYSROOT to be a logical SDK name
      OS X: Simplify selection of CMAKE_OSX_ARCHITECTURES
      OS X: If CMAKE_OSX_SYSROOT is already set do not compute default
      OS X: Further improve default CMAKE_OSX_SYSROOT selection
      OS X: Teach deployment target sanity check about SDK names
      OS X: Ignore MACOSX_DEPLOYMENT_TARGET during Xcode compiler id
      Verify that PDB_(NAME|OUTPUT_DIRECTORY) are honored in test
      Document that PDB_(NAME|OUTPUT_DIRECTORY) are ignored for VS 6
      Run PDBDirectoryAndName test on MSVC and Intel

Clinton Stimpson (8):
      fphsa: clarify message about minimum required version found.
      DeployQt4:  Include DESTDIR for some cpack generators.
      Add -DNDEBUG to RelWithDebInfo flags where where Release flags had it.
      Fix regex for qt minor version.
      FindQt4: Give precedence to QTDIR environment variable, if set.
      FindQt4: Give precedence to QTDIR environment variable, if set.
      Fix errors detecting Qt4 on Windows 8.
      cmake-gui: Fix error status when interrupted.

Daniel Pfeifer (8):
      Simplify CMake.HTML documentation test command line
      docbook: Remove table of contents
      docbook: Factor out code to write valid DocBook IDs
      docbook: Fix the DocBook section output
      docbook: Cleanup formatter and generated DocBook
      docbook: Add support for <abstract> at section level 1
      docbook: Add CMake.DocBook test to validate xml (#13508)
      docbook: Remove redundant docs that cause invalid DocBook

David Cole (9):
      Begin post-2.8.9 development
      Release: Temporarily exclude ExternalProject test on cygwin
      Add ability to run as a ctest -S script also
      CMake: Clarify the documentation for if(f1 IS_NEWER_THAN f2)
      Convert the CPACK_CYGWIN_PATCH_NUMBER variable to a cache variable
      InstallRequiredSystemLibraries: Use correct file names (#13315)
      ProcessorCount: Mark find_program vars as advanced (#13236)
      FindQt4: Avoid "finding" non-existent library in a .framework
      FindMPI: Set correct variables for calls to FPHSA

Eric NOULARD (2):
      Enhance DESTDIR documentation. Fixes #0012374.
      Handles %attr(nnn,-,-) /path/to/file in CPACK_RPM_USER_FILELIST properly.

James Bigler (3):
      Replace -g3 with -g for CUDA 4.1 and 4.2 in addition to CUDA < 3.0.
      Added CUDA_SOURCE_PROPERTY_FORMAT. Allows setting per file format (OBJ or PTX)
      FindCUDA: Added CUDA_HOST_COMPILER variable.

Marcin Wojdyr (1):
      Remove CMake multiline block-end command arguments

Nils Gladitz (1):
      ctest_update: Tell svn not to prompt interactively (#13024)

Patrick Gansterer (4):
      VS: Cleanup AddPlatformDefinitions() of Visual Studio generators
      Add additional architectures to CMakePlatformId.h.in
      Add WindowsCE platform information files
      VS: Remove duplicated implementations of CreateLocalGenerator()

Peter Kuemmel (1):
      Ninja: don't expand any rsp files

Peter Kümmel (15):
      Ninja: cmcldeps needs a compiler
      Ninja: don't crash on returned 0 pointer
      Ninja: prepare msvc pdb cleanup
      Ninja:split out setting of msvc TARGET_PDB
      Ninja: remove GetTargetPDB because it is used only once
      Ninja: also detect /showInclude prefix for icl
      Find mingw's windres also when Unix Makefiles are used
      Ninja: don't suppress warning about compiler options
      Ninja: suppress cmcldeps only for source file signature try_compiles
      Ninja: filter target specific compile flags with language specific regex
      Ninja: OBJECT_DEPENDS should set an implicit dependency
      Ninja: don't confuse ninja's rsp files with nmake's
      Ninja: move -LIBPATH behind -link option
      Ninja: move <OBJECTS> in front of the first linker option
      Ninja: add option to enforce usage of response files

Philip Lowman (3):
      FindOpenSceneGraph: CMake variable OSG_DIR influences detection now too
      FindGTK2: Add GTK2_CAIROMMCONFIG_INCLUDE_DIR for cairommconfig.h
      CMakeDetermineVSServicePack: Visual Studio 2012 added

Rolf Eike Beer (25):
      remove lib64 Unix paths if the respective lib path is also given
      FindOpenSSL: find cross-compiled OpenSSL from MinGW (#13431)
      FindOpenSSL: use SelectLibraryConfigurations
      FindOpenSSL: let CMake handle environment variable HINTS
      FindOpenSSL: cleanup path hints
      FindOpenSSL: remove leftover comment
      SelectLibraryConfiguration: generate correct output when input vars are lists
      Fix typo direcotry -> directory (and similar) [#13444]
      FindSelfPackers: fix typo (#13456)
      CheckTypeSize: show in documentation how to get struct member size (#10579)
      CheckTypeSize: add a test for size of struct members
      FindX11: remove duplicates from X11 include path list (#13316)
      FindX11: avoid calling list(REMOVE_DUPLICATES) on an empty list
      list command: error on too many arguments
      CMake.List test: explicitely test with lists containing only an empty string
      use the find_* functions ENV parameter
      use PATH_SUFFIXES to simplify find_* calls
      do not escape spaces in regular expressions
      read less from version headers into variables
      FindFLEX: fix version extraction on Apple
      FindGettext: remove code duplicating FPHSA checks
      include FPHSA from current directory in all modules
      FindOpenSceneGraph: simplify by using more features of FPHSA
      FindSDL: add SDLMAIN_LIBRARY only once (#13262)
      add documentation for all MSVCxxx version variables (#12567)

Sergei Nikulov (1):
      fix for discovering ft2build.h using FREETYPE_DIR environment var (#13502)

Stephen Kelly (60):
      Add new qt4_use_modules function.
      Add missing whitespace to docs.
      Fix some typos in the docs.
      Remove incorrect doc string for link type enum
      Remove duplicate 'of' from docs.
      Fix unfortunate documentation error for PIC feature.
      Don't duplicate -D defines sent to the compiler.
      Fix CompileDefinitions test on Visual Studio.
      Fix the test setting COMPILE_DEFINITIONS target property
      Rename files from main.cpp to more meaningful names.
      Fix casing of 'Qt' in docs, comments and user-visible strings.
      Read entire Qt4 qrc file when parsing for depends info.
      Add a return-after-error if an old Qt is found.
      Use CMake platform variables instead of Qt ones.
      Move variable setting down to where it relates to.
      Remove an if which is always true.
      Use add_subdirectory instead of the obsolete subdirs.
      Replace two include_directories with a setting.
      Compile with both Qt4 and Qt5.
      Build with Qt5 if it is found.
      cmGeneratorExpression: Re-write for multi-stage evaluation
      cmGeneratorExpression: Port users to two-stage processing
      Fix the regular expression validator for target names.
      Handle colons as a special case in the generator expression parser.
      Enable deprecated API when using Qt 5.
      Add more forwarding API to cmGeneratorTarget.
      Store cmGeneratorTargets with the makefile.
      Move GenerateTargetManifest to cmGeneratorTarget.
      Move GetLinkInformation to cmGeneratorTarget
      Make cmLocalGenerator::AddArchitectureFlags take a cmGeneratorTarget.
      Move GetCreateRuleVariable to cmGeneratorTarget.
      Port cmLocalGenerator::GetTargetFlags to cmGeneratorTarget.
      Move GetIncludeDirectories to cmGeneratorTarget.
      Append the COMPILE_DEFINITIONS from the Makefile to all targets.
      Add a wrapper for accessing config-specific compile-definitions.
      Add convenience for getting a cmGeneratorTarget to use.
      Fix compiler warning with initialization order.
      Revert "Move GenerateTargetManifest to cmGeneratorTarget."
      Use the cmGeneratorTarget for the include directories API.
      Fix indentation in the code blocks generator.
      Port remaining code to GetCompileDefinitions().
      Add include guard for cmGeneratorExpression.
      Don't prepend a path before generator expressions in include_directories.
      Convert paths in INCLUDE_DIRECTORIES property to Unix slashes.
      Add an AppendDefines std::string overload.
      Return a std::string from GetCompileDefinitions.
      Refactor GetCompileDefinitions a bit.
      Extend the generator expression language with more logic.
      Add a generator expression for target properties.
      Add API to check that dependent target properties form a DAG.
      Add a self-reference check for target properties.
      Early return if there is no target.
      Process generator expressions in the INCLUDE_DIRECTORIES property.
      Process generator expressions in the COMPILE_DEFINITIONS target property.
      Fix the layout of the generator expression documentation.
      Fix punctuation in some variables documentation.
      Document that generator expressions can be used in target properties.
      Remove unused parameter marker and the unused parameter.
      Fix minor typos.
      Remove period at the end of the check message.

Tom Schutter (2):
      cmake-mode.el: Use more readable regex and case-fold-search
      cmake-mode.el: add local keybindings

Xavier Besseron (7):
      cmCTestSVN: Add the new SVNInfo structure
      cmCTestSVN: Extend Revision struct with SVN repo information
      cmCTestSVN: Add the Repositories list and the RootInfo pointer
      cmCTestSVN: Create the SVNInfo for the root repository
      cmCTestSVN: Use the SVNInfo structure
      cmCTestSVN: Add a LoadExternal() function and an ExternalParser class
      cmCTestSVN: Load and process information from externals

Yuchen Deng (1):
      Add PDB_OUTPUT_DIRECTORY and PDB_NAME target properties (#10830)

Yury G. Kudryashov (7):
      exports: Move cmTargetExport to a dedicated header file
      exports: Remove cmTargetExport constructor
      exports: Rename cmGlobalGenerator::AddTargetToExport{s,}
      exports: Create class cmExportSet
      exports: Add cmExportSetMap class
      exports: Hold an ExportSet pointer in cm*Export*Generator
      exports: cmGlobalGenerator::ExportSets destructor will clear it

Zack Galbreath (2):
      Clean up documentation formatting so that it is rendered properly in HTML.
      cmparseMSBuildXML: Include DisplayName in the output

Changes in CMake 2.8.9 (since 2.8.9-rc3)
----------------------------------------
None

Changes in CMake 2.8.9-rc3 (since 2.8.9-rc2)
--------------------------------------------
Alexey Ozeritsky (1):
      Fixed: FindLAPACK does not find MKL 10.3 when using gcc 4.x

Brad King (3):
      pre-commit: Reject C++ code with lines too long
      Tests/X11: Add missing include <stdlib.h> for 'rand'
      Tests/ObjC++: Use standard <iostream> header

David Cole (1):
      CPack: Use bin subdir when looking for dpkg and rpmbuild

Eric NOULARD (2):
      Do not run cpack at CMake time it is not available.
      Find dpkg and rpmbuild in usual Fink and MacPort paths

Nicolas Despres (17):
      Ninja: Cannot pass a reference to an anonymous object.
      Ninja: Add support for OS X app bundles.
      Ninja: Add support for OX X library framework.
      Ensure 3rd party libraries are writable.
      Remove trailing white-spaces.
      Re-factor OS X bundle and framework generation.
      Ninja: Copy resource files in the bundle.
      Ninja: Add support for CFBundle.
      Enable BundleTest with CLang too.
      Re-factor CFBundle generation.
      Ninja: Use same echo message as makefiles.
      Re-factor bundle content copying rules generation.
      Re-factor Mac OS X content directory computation.
      Re-factor framework directory computation.
      Re-factor OS X content generator start up.
      Fix memory leak in Makefile generator.
      Add missing this->.

Peter Kuemmel (1):
      Ninja: dep files and multiple -arch flags not possible on mac

Peter Kümmel (24):
      Ninja: windres is also used for cross-compiling
      Ninja: search for windres with prefix
      Ninja: there could be null pointers
      Ninja: more searching for windres
      Ninja: path is already declared
      Ninja: fix GCC 4.7 warning -Wconversion
      Ninja: fix sytle
      Ninja: also stop when .rc's .d file couldn't be generated
      Ninja: readd quotes to src file path before patching it
      Ninja: cmcldeps needs absolute paths for RCs
      Ninja: on Mac no multiple -arch because of -M
      Ninja: fix mis-matching endif() argument
      Ninja: also mingw needs TARGET_PDB
      Ninja: line length
      Ninja: make TARGET_PDB a real .gdb file name
      Ninja: make debug symbol suffix configurable by CMAKE_DEBUG_SYMBOL_SUFFIX
      Ninja: remove 'friend' in ninja code
      Ninja: remove warnings
      Ninja: remove 'this' from member initializer list
      Ninja: fixes for bcc
      Ninja: enable ninja on Mac so all Mac CDash-builds are tested, cleanup later
      Ninja: void function can't return a value
      Ninja: enable ninja support everywhere
      Ninja: also bootstrap ninja files

Changes in CMake 2.8.9-rc2 (since 2.8.9-rc1)
--------------------------------------------
Alex Neundorf (4):
      -remove trailing whitespace
      documentation: preparation for making the man section configurable
      man documentation: detect man section from the given filename
      Eclipse: fix #13313, always set LANG to C, also if unset

Bill Hoffman (1):
      Remove process execution code from cmcldeps and have it use cmake code.

Brad King (12):
      KWIML: Generalize interface to report broken integer literal macros
      KWIML: Teach ABI.h about 'long long' and 'char' on old HP
      KWIML: Teach INT.h that no HP platform implements SCN*8 formats
      KWIML: Teach INT about broken UINT32_C on old HP
      Fix project command documentation typo (#13384)
      CTestUpdateSVN: Do not create repo directory first (#13349)
      Tests/CustomCommand: Do not use 'main' in a library
      AIX-GNU: Link shared libs with -brtl,-bnoipath (#13352)
      include: Ignore empty string as file name (#13388)
      Add ASM platform information for GNU compiler on AIX (#13390)
      if: Document that macro arguments are not variables (#13393)
      install: Fix COMPONENT option

Clinton Stimpson (3):
      GetPrerequisites.cmake: detect executables built with the -pie linker flag.
      cmake-gui: Fix code to respect current locale.
      DeployQt4: workaround bug 13258 where ARGV1 is leaked into a sub function.

David Cole (7):
      STYLE: Fix line length, remove extra blank line
      CTest: Refactor error output into ErrorMessageUnknownDashDValue
      CTest: Rename local variable for clarity
      CTest: Extend -D command line arg handling for variable definitions
      CTest: Allow -Dvar=value with no space between the D and the var
      CTest: Add test to verify -D variable definitions work
      Ninja: Fix typo: tagets -> targets

Eric NOULARD (3):
      Enhance documentation of install command w.r.t. the "Undefined" component.
      CPack fix regression between 2.8.7 and 2.8.8 when running cpack with no arg.
      Do not provide defaul value for CPACK_PACKAGE_DIRECTORY if found in config.

Nicolas Despres (1):
      Ninja: Clean all symlink created for libraries.

Peter Kuemmel (6):
      Ninja: print error message when command failed
      Ninja: also consider variables when checking command line length
      Ninja: also consider rule command length for rsp file
      Ninja: remove int/size_t warning
      Ninja: add soname test case
      Ninja: don't shadow 'outputs' variable

Peter Kümmel (6):
      Ninja: also write link libraries to rsp file
      Ninja: remove some unused default arguments
      Ninja: error on missing rspfile_content
      Ninja: disable work around when linking with mingw
      Ninja: enable response file support on Mac (length 262144)
      Ninja: sysconf() is declared in unistd.h

Philip Lowman (2):
      FindBoost: Fix bug where Boost_FOUND could be false when version specified
      FindBoost: Future proof to 1.56

Rolf Eike Beer (2):
      FindJava: improve version matching (#12878)
      fix 2 space bugs in variable documentation

Stephen Kelly (3):
      Use full paths in compile_commands.json for out of source builds.
      Construct the full path before escaping it.
      Fix PositionIndependentTargets test with clang trunk.

Changes in CMake 2.8.9-rc1 (since 2.8.8)
----------------------------------------
Alex Neundorf (12):
      -fix #13081: support OBJECT libraries in CodeBlocks/QtCreator projects
      CodeBlocks: improve support for OBJECT libraries
      fix #13195: avoid multiple mentions of found packages
      FeatureSummary.cmake: nicer formatting
      -strip trailing whitespace
      make default install component name configurable
      -add docs for ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
      write_basic_package_version_file() now works with unset CMAKE_SIZEOF_VOID_P
      add test for #13241: empty SIZEOF_VOIDP in write_basic_package_version_file
      ASM compiler detection: remove debug output (#13270)
      Eclipse: parallel build also for "Build project" #13287
      automoc: better error handling (#13299)

Anthony J. Bentley (1):
      FindwxWidgets: Do not use -isystem on OpenBSD (#13219)

Ben Boeckel (2):
      Don't put legacy variables back into the cache
      Search for other ABIFLAGS builds of Python

Bill Hoffman (15):
      Add support to ctest for GTM mumps coverage.
      Fix warning about char* instead of const char*.
      Fix line length.
      Add test for mumps coverage. Also refactor code to prepare for cache coverage.
      Add virutal destructor to silence warning.
      Add support for Cache coverage.
      Fix some warnings and a bug where it went past the length of a vector.
      Use a script to run the test because WORKING_DIRECTORY is not in 2.8.2.
      Use <TARGET_FILE> expression to run ctest so it works with Xcode and VS IDE.
      Add ability to specify more than one package directory or coverage directory.
      Remove uncovered files from cache coverage data.
      Disable bullseye coverage for mumps coverage test.
      Update test data to match new coverage format.
      Do not try to run bullseye coverage if COVFILE env is empty.
      CDash now supports lots of files in coverage. So, show all files.

Brad King (59):
      Add LICENSE and NOTICE
      Add 'tips' script to suggest local configuration
      Add 'setup-user' script to configure authorship information
      Add 'setup-hooks' script to install local hooks
      Add 'setup-gerrit' script to configure Gerrit access
      Add 'setup-stage' script to configure topic stage remote
      Add 'setup-ssh' script to configure ssh push access
      Add README instructions and sample configuration
      Add and configure developer setup helper scripts
      Exclude from source archives files specific to Git work tree
      Exclude from CMake source archives files specific to Git work tree
      Refactor CMake version handling
      Document behavior of multiple target_link_libraries calls (#13113)
      ctest_coverage: Save/restore LC_ALL around gcov (#13136)
      Cleanup custom command .rule file internal handling
      Factor out custom command .rule file path generation
      VS10: Avoid creating .rule files next to outputs (#13141)
      find_package: Document <package>_FIND_* variables (#13142)
      find_package: Fix components signature documentation (#13142)
      Teach RunCMake tests to allow custom checks
      list: Handle errors on empty lists more gracefully (#13138)
      include_external_msproject: Test TYPE, GUID, PLATFORM options (#13120)
      VS: Fix line-too-long style errors
      libarchive: Avoid 'inline' keyword on XL C v6 (#13148)
      Intel: On Windows use /EHsc instead of deprecated /GX (#13163)
      KWSys: Remove DateStamp
      try_compile: Cleanup temporary directories (#13160)
      setup-stage: Optionally reconfigure topic stage
      CTest: Escape MemCheck test output for XML (#13124)
      Documentation: Fix HTML anchor ranges
      Require CMake 2.8.2 or higher to build CMake
      CTest: Simplify environment save/restore
      KWSys: Fix SystemTools environment memory handling (#13156)
      VS10: Refactor custom commands to use WriteSource
      VS10: Simplify vcxproj.filter file generation
      VS10: Convert paths normally unless forced to relative
      VS11: Do not use source path conversion workaround specific to VS 10
      VS10: Generate relative source paths when possible (#12570)
      Intel: On Windows use /RTC1 instead of deprecated /GZ (#13174)
      Test NO_SONAME property (#13155)
      KWSys: Remove dependencies on FundamentalType
      Documentation: Improve HTML section index format
      VS: Restore header files marked as OS X Framework content (#13196)
      VS11: Fix ARM architecture hint typo (#13077)
      Fortran: Follow <>-style includes (#13239)
      bootstrap: Port back to old shells (#13199)
      KWSys: Remove unused environ declaration from SystemTools
      FindBZip2: Search locations in GnuWin32 registry
      cmArchiveWrite: Clear fflags from archive entries
      Makefile: Support directory names containing '=' (#12934)
      libarchive: Avoid 'inline' on SunPro < 5.9 (#13277)
      Avoid direct use of std::(o|)stringstream (#13272)
      KWIML: Add interface to report broken integer format macros
      KWIML: Report broken integer format macros on AIX 4.3
      add_library: Allow OBJECT library without dynamic linking (#13289)
      install: Fix FILES_MATCHING on case-sensitive Mac filesystems (#13177)
      Make CTest.UpdateGIT robust to Git safecrlf on Windows
      Do not crash on SHARED library without language (#13324)
      CMakeDetermineCCompiler: Fix typo "_CXX_" -> "_C_" (#13330)

Brian Helba (1):
      Print any evaluated 'elseif'/'else' commands in trace mode (#13220)

Charlie Sharpsteen (1):
      Mac: Add guards to CMAKE_FIND_FRAMEWORK and CMAKE_FIND_APPBUNDLE defaults

Clinton Stimpson (1):
      cmake-gui: Wait for configure/generate thread to complete before exiting.

Daniel R. Gomez (6):
      KWSys: Fix hashtable prime list on g++ 2.9 (#13273)
      Tests/IncludeDirectories: Files must end in a newline (#13314)
      Tests/VSGNUFortran: Avoid C++ comment in C code (#13314)
      Tests/Assembler: Assemble and link with same flags (#13314)
      Fix FindPackageMode test Makefile (#13314)
      Avoid string.clear and string.push_back (#13319)

David Cole (12):
      Begin post-2.8.8 development
      CPack/NSIS: Add CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS (#13085)
      ExternalProject: Add missing COMMAND keyword
      ExternalProject: Avoid unnecessary git clones (#12564)
      ExternalProject: Refactor repeated code into function (#12564)
      ExternalProject: Avoid repeated git clone operations (#12564)
      CTest: Modify reg ex so it also works with gcov 4.7 output (#13121)
      BZip2: Remove unnecessary *.bz2 files from CMake source tree
      Ninja: Enable the ninja generator by default on Windows.
      Revert "Millenium update: 79 * (16/9)/(4/3) = 105"
      Ninja: Restructure code to work with the Borland compilers
      Remove unused ivars to eliminate compiler warnings

David Faure (1):
      Abort FindQt4.cmake if Qt 5 is found.

Eric NOULARD (12):
      Use fakeroot for control.tar.gz as well
      Enhancement of bash completion scripts given by Igor Murzov.
      Install editors helper files
      CPack - preserve timestamp for CPACK_INSTALLED_DIRECTORIES. fixes: #0013193
      CPack add easy possibility to warn about CPACK_SET_DESTDIR
      CPack add necessary check to detect/warns/error on ABSOLUTE DESTINATION
      Fix KWStyle warning
      Use CPACK_xxx and CMAKE_xxx in a consistent way.
      CPack allow RPM and DEB generator to be used on OSX.
      Calm down Borland compiler warning about "always true"
      CPackRPM: avoid leakage of RPM directive from one component to another.
      CPackDeb add missing documentation for some CPACK_DEBIAN_xx variables.

Fraser Hutchison (1):
      CPack: Fixed incorrect error log for CPACK_NSIS_MENU_LINKS.

Jan Schaffmeister (1):
      Xcode: Recognize storyboard source files (#13214)

Jim Hague (2):
      libarchive: Avoid trailing , in enum for XL v6 (#13148)
      Workaround IBM XL v6 streams seekg bug (#13149)

Jonathan Klein (1):
      FindBullet: Add missing math library name (#13309)

Joseph Snyder (1):
      Change GT.M Coverage Parser global

Konstantin Tokarev (1):
      [OSX] Fixed undefined symbol when linking CMakeLib into shared library

Kurtis Nusbaum (1):
      Added conditional for the phonon backend plugin.

Leonid Yurchenko (1):
      include_external_msproject: Add TYPE, GUID, PLATFORM options (#13120)

Mario Bensi (1):
      Add FindLibLZMA Module

Mariusz Plucinski (1):
      Do not crash on unknown source language (#13323)

Matt McCormick (1):
      ExternalProject: Fix 'make' builds with Ninja (#13159)

Minmin Gong (1):
      VS11: Add ARM architecture generator (#13077)

Modestas Vainius (3):
      Fix CPack RPM man page typo detected by lintian.
      Support building shared libraries or modules without soname (#13155)
      Fix a few typos in NO_SONAME property description.

Nicolas Despres (2):
      Ninja: Add a convenient 'clean' target.
      Ninja: Add a convenient 'help' target.

Patrick Gansterer (1):
      Added CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL

Peter Collingbourne (2):
      Ninja: apply CMAKE_<LANG>_FLAGS_<TYPE> to executable targets (#13069)
      Ninja: mark rules/build file streams failed if error occurred (#13067, #13105)

Peter Kuemmel (61):
      Ninja: ensure output directories exist
      Ninja: no 16:9 screens for the cmake team ;)
      Ninja: add option to enable ninja where it is not enabled by default
      Ninja: remove GCC -Wshadow warning
      Ninja: enable Ninja for CodeBlocks
      Ninja: no additional variable needed to enable ninja
      Ninja: CMAKE_USE_NINJA is the name of the macro
      VC Express doesn't support folders, ignore USE_FOLDER property
      Ninja: add response file support on Windows
      Ninja: 30000 is too long for windows cmd
      Ninja: check for valid pointer
      Ninja: also create rspfile rules
      Ninja: don't break because of empty commands
      Ninja: find mingw's resource compiler
      Ninja: add dependency tracking for msvc with cldeps
      Ninja: add wrapper for cl to extract dependencies
      Ninja: allow spaces in source path
      Ninja: assume cmcldeps in the same dir as cmake
      Ninja: add copyright and description
      Ninja: don't set cmcldeps vars to empty string when they are not defined
      Ninja: fix ModuleNoticies test
      Ninja: don't use cmcldeps for try_compile
      Ninja: allow spaces in cldeps's .d file
      Ninja: fix line length
      Ninja: don't pollute the rules file with useless comments
      Ninja: use slahes in .d files
      Line Length: <79
      Millenium update: 79 * (16/9)/(4/3) = 105
      Ninja: complete MinGW support
      Ninja: use slashes for include dirs, so also slahes are in the .d files
      Ninja: ninja can't read dep. pathes with parentheses
      Ninja: work with ninja/master, don't compile rc files with cl
      Ninja: extract dependencies for .rc files with msvc tools
      Ninja: remove unused CommentStream
      Ninja: onyl use pre processor for rc file parsing
      Ninja: suppress startup logos
      Ninja: cmcldeps
      Ninja: don't use shell when cmake is called directly
      Ninja: ninja now also could read parentheses in .d files
      Ninja: fix Linux build
      Ninja: sh needs something befor and after &&
      Ninja: build with old vc versions
      Ninja: remove nop line
      Ninja: undo all the NOSHELL patches
      Ninja: be more accurate when estimating the command line length
      Ninja: don't pollute build dir with preprocessed rc files
      Ninja: Eclipse and KDevelop fixes for ninja
      Ninja: no /nologo option in old rc.exe
      Ninja: but cl supports /nologo ...
      Ninja: try to make GetProcessId visible
      Ninja: build cmcldeps with mingw
      Ninja: don't remove space between command and parameters
      Ninja: some bytes of the rc files couldn't be piped correctly
      Ninja: build server fixes
      Ninja: build with old msvc versions
      Ninja: msvc6 for-scoping
      Ninja: maybe this fixes the bcc32 build
      remove warning about unused parameter
      Ninja: build server fixes
      Ninja: try work around for bcc32 bug
      Ninja: disable cldeps for bcc32, it's too old, and ninja would also not build

Rolf Eike Beer (12):
      FindPkgConfig.cmake: fix documented output variable not set (#13125,#13132)
      UseJava: fix typo in variable name (#13135)
      Check{C,CXX}CompilerFlag: catch more Intel warning types (#12576)
      FindPythonLibs: honor EXACT version specification (#13216)
      UseJava: fix find_jar() called with multiple files (#13281)
      fix some typos
      do not explicitely specify /usr and /usr/local as search paths
      replace open coded versions of file(TO_CMAKE_PATH)
      FindDevIL: clean up documentation formatting
      FindQt4: extend documentation
      Qt4Macros: improve basename extraction in QT4_ADD_DBUS_INTERFACES
      Qt4Macros: add some quotes to prevent damage from spaces in the paths

Sean McBride (1):
      Remove unused ivars to eliminate compiler warnings

Sebastian Leske (1):
      Improve documentation of set command (#13269)

Stephen Kelly (10):
      Fix the number variable comparison when Qt is not found.
      Update the docs of IMPORTED_LOCATION_CONFIG to match the code.
      Move the EscapeJSON method to a sharable location.
      Add newline to the output.
      Make the CMAKE_EXPORT_COMPILE_COMMANDS option work with Ninja.
      Escape the source file to be compiled if required.
      Exclude the CompileCommandOutput test on WIN32.
      Add platform variables for position independent code flags
      Add platform variable for flags specific to shared libraries
      Refactor generation of shared library flags

Tobias Bieniek (1):
      Qt4Macros: Added support for generated resource files

Zack Galbreath (1):
      FindPythonLibs: Document cache variables (#13240)

Zaheer Chothia (1):
      VS: Set Intel Fortran 13 project version

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.
