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.
