Changes in CMake 2.8.10.2 (since 2.8.10.1)
----------------------------------------------
Alex Neundorf (1):
      Automoc: fix regression #13667, broken build in phonon

Brad King (1):
      Initialize IMPORTED GLOBAL targets on reconfigure (#13702)

David Cole (1):
      CMake: Fix infinite loop untarring corrupt tar file

Rolf Eike Beer (1):
      FindGettext: fix overwriting result with empty variable (#13691)

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.
