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.
