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.
